xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bishop, Michael W. CONTR J9C880" <Michael.Bis...@je.jfcom.mil>
Subject RE: Another Color Question
Date Mon, 09 Apr 2007 17:14:53 GMT
Have you waited for the GVT tree to render?  I don't *think* the CSS and
DOM are available until the GVT tree has rendered.  You might want to
attach a listener:

public class GVTListener extends GVTTreeRendererAdapter {
   public void gvtRenderingCompleted(GVTTreeRendererEvent gvttrE) {
      // Everything should be ready now!
   }
}

Just to see if that's the problem, you could call Thread.sleep(...)for a
few seconds before trying to retrieve the color.  If that works, then
it's most likely that you need to wait for the GVT tree to render.

Michael Bishop
  
-----Original Message-----
From: Tom McCallum [mailto:tom.mccallum@gulfstream-software.com] 
Sent: Monday, April 09, 2007 12:05 PM
To: batik-users@xmlgraphics.apache.org
Subject: Re: Another Color Question

Thanks for your reply, I had actually missed the existence of the Wiki
so  
thank you for the pointer.  I am using a JSVGCanvas though, which is why
I  
had also assumed a CSS view would have been initialised.

Currently I do the following (am just playing at the moment!) to create
my  
rectangle:
         DOMImplementation domImpl  
=SVGDOMImplementation.getDOMImplementation();

         // Create an instance of org.w3c.dom.Document.
         String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
         SVGDocument doc = (SVGDocument) domImpl.createDocument(svgNS,  
"svg", null);
	  svgCanvas.setSVGDocument(doc); // set the document for the
JSVGCanvas  
object

         // Get the root element (the 'svg' element).
         Element svgRoot = doc.getDocumentElement();

         // Set the width and height attributes on the root 'svg'
element.
         svgRoot.setAttributeNS(null, "width", "1000");
         svgRoot.setAttributeNS(null, "height", "500");

         // Create the rectangle.
         Element rectangle = doc.createElementNS(svgNS,  
SVGConstants.SVG_RECT_TAG );
         rectangle.setAttributeNS(null, "x", "10");
         rectangle.setAttributeNS(null, "y", "20");
         rectangle.setAttributeNS(null,
SVGConstants.SVG_WIDTH_ATTRIBUTE,  
"100");
         rectangle.setAttributeNS(null,
SVGConstants.SVG_HEIGHT_ATTRIBUTE,  
"50");
         rectangle.setAttributeNS(null, "fill", "red");

    	  svgRoot.appendChild(rectangle);


I then (sometime later) retrieve the color via:
	String color = domElement.getAttributeNS(null,  
SVGConstants.SVG_FILL_ATTRIBUTE);

which gives me back a string ("#FF0000").

Now I could assume that this would always be the hex representation as I

am building the tree in the first place, but I would rather know how to
do  
this more cleanly taking into account the four color representations:
	  // fill="cornflowerblue"
         // fill="rgb(100, 149, 237)"
         // fill="#6495ED"
         // fill="aliceblue"

Any ideas?

Tom


On Mon, 09 Apr 2007 16:52:13 +0100, Bishop, Michael W. CONTR J9C880  
<Michael.Bishop@je.jfcom.mil> wrote:

> Are you using a JSVGCanvas?  You might want to check the wiki on the
> Batik site about booting CSS and DOM.  JSVGCanvas does this for you.
If
> you don't use one, you have to do it manually.  Even though you're not
> setting CSS values for color, a CSS is "computed" through the magic of
> Batik (I'm sure someone can explain this much better) and you need
these
> pieces loaded to use that functionality:
>
> http://wiki.apache.org/xmlgraphics-batik/BootSvgAndCssDom
>
> Michael Bishop
>
>
>
> -----Original Message-----
> From: Tom McCallum [mailto:tom.mccallum@gulfstream-software.com]
> Sent: Monday, April 09, 2007 10:12 AM
> To: batik-users@xmlgraphics.apache.org
> Subject: Another Color Question
>
>  From a previous post I found I have a function to get the colour of
an
>
> element as follows:
>
>     public static Color getColor(Element element, String attribute) {
>          Color returnColor = null;
>          final Document document = element.getOwnerDocument();
>          if ( document != null ) {
>              //System.out.println("doc.getDocumentElement:
> "+document.getDocumentElement().getClass().toString());
>              final ViewCSS viewCSS = (ViewCSS)
> document.getDocumentElement();
>              if ( viewCSS != null ) {
>                  final CSSStyleDeclaration computedStyle =
>                          viewCSS.getComputedStyle(element, null);
>                  if ( computedStyle != null ) {
>                      System.out.println("CSS Text:
> "+computedStyle.getCssText());
>                      final SVGPaint svgPaint =
>                              (SVGPaint)
> computedStyle.getPropertyCSSValue(attribute);
>                      if ( svgPaint != null ) {
>                          if (svgPaint.getPaintType() ==
> SVGPaint.SVG_PAINTTYPE_RGBCOLOR) {
>                              final RGBColor rgb =
> svgPaint.getRGBColor();
>                              final float red =
> rgb.getRed().getFloatValue(CSSValue.CSS_PRIMITIVE_VALUE);
>                              final float green =
> rgb.getGreen().getFloatValue(CSSValue.CSS_PRIMITIVE_VALUE);
>                              final float blue =
> rgb.getBlue().getFloatValue(CSSValue.CSS_PRIMITIVE_VALUE);
>                              returnColor = new Color(red / 255, green
/
>
> 255, blue / 255);
>                          }
>                      }
>                  }
>              }
>          }
>          return returnColor;
>      }
>
> I have a simple SVG which creates a coloured rectangle:
>
> <?xml version="1.0" encoding="UTF-8"?><svg
> xmlns:xlink="http://www.w3.org/1999/xlink"
> xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript"
> width="1000" zoomAndPan="magnify" contentStyleType="text/css"
> height="500"
> preserveAspectRatio="xMidYMid meet" version="1.0"><rect fill="#ff0000"
> x="100" width="100" y="100" height="50"/></svg>
>
> Unfortunately I cannot get the colour of the rectangle back to a
> java.awt.Color object, as I get the following exception:
>
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
>          at
> org.apache.batik.css.dom.CSSOMComputedStyle.getCssText(Unknown
> Source)
>          at ataglancedemo.SVGUtils.getColor(SVGUtils.java:56)
>          at ataglancedemo.GlanceRect.getBackground(GlanceRect.java:93)
>          at ataglancedemo.MainFrame.test4(MainFrame.java:84)
>          at ataglancedemo.MainFrame.<init>(MainFrame.java:213)
>          at ataglancedemo.Main$1.run(Main.java:29)
>          at
> java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
>          at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
>          at
>
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThrea
> d.java:242)
>          at
>
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.
> java:163)
>          at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
>          at
> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
>          at
> java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
>
> Can anyone tell me how to get the background color in all
circumstances,
>
> i.e. when it is just an attribute or if as a CSS?
>
> Many thanks
>
> Tom
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
> For additional commands, e-mail:
batik-users-help@xmlgraphics.apache.org



-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org


Mime
View raw message