Hi All,

 

As I can't give you the whole application, I created a sample of what I want to 
do.

 

I simply create a pattern and use it in the fill attribute of a <rect>...

 

The application consists in changing the pattern color when pressing space.

 

The SVG is also displayed in the console for information...

 

Do someone on the mailing list have this application working correctly ?

 

Nota : I have a color modification when zooming with the CTRL key and the mouse 
after having pressed space.

 

 

 

//////////////////////////////////////////////////////////

 

Here is the source code, same as the attached file

 

/////////////////////////////////////////////////////////

 

package com.test;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.StringReader;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
import org.apache.batik.swing.gvt.GVTTreeRendererListener;
import org.apache.batik.util.RunnableQueue;
import org.apache.batik.util.SVGConstants;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.svg.SVGDocument;
import org.w3c.dom.svg.SVGSVGElement;

 

 

 

public class TestPattern extends JFrame {
 
 private static final long serialVersionUID = 5778700446793083700L;
 
 Canvas canvas;
 SVGDocument document;
 RunnableQueue runQ = null;
 
 String svg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
 +"<svg viewbox=\"0 0 50 50\" xmlns=\"http://www.w3.org/2000/svg\"; 
xmlns:xlink=\"http://www.w3.org/1999/xlink\"; 
contentScriptType=\"text/ecmascript\" width=\"50\" zoomAndPan=\"magnify\" 
contentStyleType=\"text/css\" height=\"50\" preserveAspectRatio=\"xMidYMid 
meet\" version=\"1.1\">"
 +"<pattern width=\"25\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"; 
patternUnits=\"userSpaceOnUse\" xlink:type=\"simple\" xlink:actuate=\"none\" 
height=\"25\"  id=\"myPattern\" preserveAspectRatio=\"xMidYMid meet\" 
xlink:show=\"other\" overflow=\"hidden\">"
 +" <path fill=\"red\" d=\"M 1 1 L 24 1 L 24 24 L 1 24z\" stroke-width=\"1\" 
stroke=\"green\"/>"
 +"</pattern>"
 +"<rect overflow=\"visible\" fill=\"url(#myPattern)\" width=\"50.0000\" 
height=\"50\"/>"
 +"</svg>";
 
 private boolean invert = false;
 
 
 
 public TestPattern() {
  super("");
  canvas = new Canvas();
  setContentPane(canvas);

  WindowAdapter windowAdapter = new WindowAdapter() {
   public void windowOpened(WindowEvent we) {
    SVGDocument doc = null;
    try {
     String parser = XMLResourceDescriptor
       .getXMLParserClassName();
     SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
     StringReader reader = new StringReader(svg);
     doc = f.createSVGDocument(null, reader);
    } catch (Exception ex) {
    }
    canvas.setSVGDocument(doc);
    try {
     Source source = new DOMSource(doc);
     Result result = new StreamResult(System.out);
     Transformer xformer = TransformerFactory.newInstance()
       .newTransformer();
     xformer.setOutputProperty(OutputKeys.INDENT, "yes");
     xformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
     xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
       "no");
     xformer.transform(source, result);
    } catch (Exception ex) {
     ex.printStackTrace();
    }
   }
  };
  addWindowListener(windowAdapter);

  setDefaultCloseOperation(EXIT_ON_CLOSE);
  setSize(100, 100);
  setVisible(true);
 }

 public class Canvas extends JSVGCanvas implements GVTTreeRendererListener {

  private static final long serialVersionUID = 1L;

  public Canvas() {
   canvas = this;
   setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
   addGVTTreeRendererListener(this);

   KeyAdapter keyAdapter = new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
     
     if(e.getKeyCode() != KeyEvent.VK_SPACE )
      return;
     
     
     if (runQ == null)
      return;
     runQ.invokeLater(new Runnable() {
      public void run() {
       changeColor();
       try {
        Source source = new DOMSource(document);
        Result result = new StreamResult(System.out);
        Transformer xformer = TransformerFactory
          .newInstance().newTransformer();
        xformer.setOutputProperty(OutputKeys.INDENT,
          "yes");
        xformer.setOutputProperty(OutputKeys.ENCODING,
          "UTF-8");
        xformer.setOutputProperty(
          OutputKeys.OMIT_XML_DECLARATION, "no");
        xformer.transform(source, result);
       } catch (Exception ex) {
        ex.printStackTrace();
       }
      }
     });
    }
   };
   addKeyListener(keyAdapter);
  }

  public void gvtRenderingPrepare(GVTTreeRendererEvent e) {
  }

  public void gvtRenderingStarted(GVTTreeRendererEvent e) {
  }

  public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
   document = canvas.getSVGDocument();
   runQ = canvas.getUpdateManager().getUpdateRunnableQueue();
  }

  public void gvtRenderingCancelled(GVTTreeRendererEvent e) {
  }

  public void gvtRenderingFailed(GVTTreeRendererEvent e) {
  }
 }

 private void changeColor() {
  SVGSVGElement root = document.getRootElement();

  NodeList liste = document.getElementsByTagName(SVGConstants.SVG_PATH_TAG);
  Element path = (Element)liste.item(0);
  if(invert == false){
   path.setAttributeNS(null, SVGConstants.SVG_FILL_ATTRIBUTE, "blue");
   path.setAttributeNS(null, SVGConstants.SVG_STROKE_ATTRIBUTE, "yellow");
  }else{
   path.setAttributeNS(null, SVGConstants.SVG_FILL_ATTRIBUTE, "red");
   path.setAttributeNS(null, SVGConstants.SVG_STROKE_ATTRIBUTE, "green");   
  }
  invert = !invert;
 }

 

 public static void main(String[] args) {
  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    new TestPattern();
   }
  });
 }

}

                                          
_________________________________________________________________
Allumez et éteignez votre PC en un instant avec Windows 7 !
http://clk.atdmt.com/FRM/go/238030931/direct/01/
package com.edf.rd.gel.test;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.StringReader;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
import org.apache.batik.swing.gvt.GVTTreeRendererListener;
import org.apache.batik.util.RunnableQueue;
import org.apache.batik.util.SVGConstants;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.svg.SVGDocument;
import org.w3c.dom.svg.SVGSVGElement;

public class TestPattern extends JFrame {
        
        private static final long serialVersionUID = 5778700446793083700L;
        
        Canvas canvas;
        SVGDocument document;
        RunnableQueue runQ = null;
        
        String svg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
        +"<svg viewbox=\"0 0 50 50\" xmlns=\"http://www.w3.org/2000/svg\"; 
xmlns:xlink=\"http://www.w3.org/1999/xlink\"; 
contentScriptType=\"text/ecmascript\" width=\"50\" zoomAndPan=\"magnify\" 
contentStyleType=\"text/css\" height=\"50\" preserveAspectRatio=\"xMidYMid 
meet\" version=\"1.1\">"
        +"<pattern width=\"25\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"; 
patternUnits=\"userSpaceOnUse\" xlink:type=\"simple\" xlink:actuate=\"none\" 
height=\"25\"  id=\"myPattern\" preserveAspectRatio=\"xMidYMid meet\" 
xlink:show=\"other\" overflow=\"hidden\">"
        +"      <path fill=\"red\" d=\"M 1 1 L 24 1 L 24 24 L 1 24z\" 
stroke-width=\"1\" stroke=\"green\"/>"
        +"</pattern>"
        +"<rect overflow=\"visible\" fill=\"url(#myPattern)\" width=\"50.0000\" 
height=\"50\"/>"
        +"</svg>";
        
        private boolean invert = false;
        
        
        
        public TestPattern() {
                super("");
                canvas = new Canvas();
                setContentPane(canvas);

                WindowAdapter windowAdapter = new WindowAdapter() {
                        public void windowOpened(WindowEvent we) {
                                SVGDocument doc = null;
                                try {
                                        String parser = XMLResourceDescriptor
                                                        
.getXMLParserClassName();
                                        SAXSVGDocumentFactory f = new 
SAXSVGDocumentFactory(parser);
                                        StringReader reader = new 
StringReader(svg);
                                        doc = f.createSVGDocument(null, reader);
                                } catch (Exception ex) {
                                }
                                canvas.setSVGDocument(doc);
                                try {
                                        Source source = new DOMSource(doc);
                                        Result result = new 
StreamResult(System.out);
                                        Transformer xformer = 
TransformerFactory.newInstance()
                                                        .newTransformer();
                                        
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
                                        
xformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                                        
xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
                                                        "no");
                                        xformer.transform(source, result);
                                } catch (Exception ex) {
                                        ex.printStackTrace();
                                }
                        }
                };
                addWindowListener(windowAdapter);

                setDefaultCloseOperation(EXIT_ON_CLOSE);
                setSize(100, 100);
                setVisible(true);
        }

        public class Canvas extends JSVGCanvas implements 
GVTTreeRendererListener {

                private static final long serialVersionUID = 1L;

                public Canvas() {
                        canvas = this;
                        setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
                        addGVTTreeRendererListener(this);

                        KeyAdapter keyAdapter = new KeyAdapter() {
                                public void keyPressed(KeyEvent e) {
                                        
                                        if(e.getKeyCode() != KeyEvent.VK_SPACE )
                                                return;
                                        
                                        
                                        if (runQ == null)
                                                return;
                                        runQ.invokeLater(new Runnable() {
                                                public void run() {
                                                        changeColor();
                                                        try {
                                                                Source source = 
new DOMSource(document);
                                                                Result result = 
new StreamResult(System.out);
                                                                Transformer 
xformer = TransformerFactory
                                                                                
.newInstance().newTransformer();
                                                                
xformer.setOutputProperty(OutputKeys.INDENT,
                                                                                
"yes");
                                                                
xformer.setOutputProperty(OutputKeys.ENCODING,
                                                                                
"UTF-8");
                                                                
xformer.setOutputProperty(
                                                                                
OutputKeys.OMIT_XML_DECLARATION, "no");
                                                                
xformer.transform(source, result);
                                                        } catch (Exception ex) {
                                                                
ex.printStackTrace();
                                                        }
                                                }
                                        });
                                }
                        };
                        addKeyListener(keyAdapter);
                }

                public void gvtRenderingPrepare(GVTTreeRendererEvent e) {
                }

                public void gvtRenderingStarted(GVTTreeRendererEvent e) {
                }

                public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
                        document = canvas.getSVGDocument();
                        runQ = 
canvas.getUpdateManager().getUpdateRunnableQueue();
                }

                public void gvtRenderingCancelled(GVTTreeRendererEvent e) {
                }

                public void gvtRenderingFailed(GVTTreeRendererEvent e) {
                }
        }

        private void changeColor() {
                SVGSVGElement root = document.getRootElement();

                NodeList liste = 
document.getElementsByTagName(SVGConstants.SVG_PATH_TAG);
                Element path = (Element)liste.item(0);
                if(invert == false){
                        path.setAttributeNS(null, 
SVGConstants.SVG_FILL_ATTRIBUTE, "blue");
                        path.setAttributeNS(null, 
SVGConstants.SVG_STROKE_ATTRIBUTE, "yellow");
                }else{
                        path.setAttributeNS(null, 
SVGConstants.SVG_FILL_ATTRIBUTE, "red");
                        path.setAttributeNS(null, 
SVGConstants.SVG_STROKE_ATTRIBUTE, "green");                  
                }
                invert = !invert;
        }



        public static void main(String[] args) {
                SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                                new TestPattern();
                        }
                });
        }

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

Reply via email to