hi, is anybody experience this: when I update the reference element eg:gradient element it doesn't update the referencing element. for example I have rect element with fill attr point to gradientElement, if I update the gradient element property/child the update doesn't reflected by GVT.
is this gvt or brigde bug? or this is not bug. if this is bug, I will fill proper bugzilla :) I attached sample file. work around: when update the reference element, update also the referencing element by setting/update any attribute Regards Tonny Kohar http://www.kiyut.com
/*
* GVTReferenceBug.java
*
* Created on September 25, 2003, 3:51 PM
*/
package kiyut.bug;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import org.apache.batik.dom.svg.*;
import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.swing.gvt.GVTTreeRendererAdapter;
import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter;
import org.apache.batik.swing.svg.SVGDocumentLoaderEvent;
import org.apache.batik.swing.svg.GVTTreeBuilderAdapter;
import org.apache.batik.swing.svg.GVTTreeBuilderEvent;
import org.apache.batik.util.*;
import org.w3c.dom.*;
import org.w3c.dom.css.*;
import org.w3c.dom.svg.*;
/**
*
* @author tonny
*/
public class GVTReferenceBug {
File file = null;
SVGDocument doc;
JSVGCanvas canvas;
public static void main(String[] args) {
GVTReferenceBug bug = new GVTReferenceBug(args);
bug.run();
}
public GVTReferenceBug(String[] args) {
if (args[0] == null) {
System.out.println("Please enter the svg filename as argument");
System.exit(1);
}
System.out.println(args[0]); //just checking args
file = new File(args[0]);
}
public void run() {
doc = loadSVGDocument(file);
JFrame frame = createFrame();
frame.pack();
frame.setVisible(true);
}
public SVGDocument loadSVGDocument(File file) {
try {
String url = file.toURL().toString();
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
SVGDocument svgDocument = f.createSVGDocument(url);
return svgDocument;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private JFrame createFrame() {
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) { buttonActionPerformed(e); }
};
JButton gradButton = new JButton("update gradient");
gradButton.setActionCommand("grad_button");
gradButton.addActionListener(actionListener);
JButton rectButton = new JButton("update rect");
rectButton.setActionCommand("rect_button");
rectButton.addActionListener(actionListener);
JPanel buttonPane = new JPanel();
buttonPane.add(gradButton);
buttonPane.add(rectButton);
canvas = new JSVGCanvas();
canvas.setPreferredSize(new Dimension(400,200));
canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
canvas.setDoubleBufferedRendering(true);
canvas.setSVGDocument(doc);
// Set the JSVGCanvas listeners.
canvas.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {
public void gvtBuildStarted(GVTTreeBuilderEvent e) {
System.out.println("Build Started...");
}
public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
System.out.println("Build Done.");
}
});
canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
public void gvtRenderingPrepare(GVTTreeRendererEvent e) {
System.out.println("Rendering Started...");
}
public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
System.out.println("Rendering Done.");
}
});
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(canvas,BorderLayout.CENTER);
contentPane.add(buttonPane,BorderLayout.SOUTH);
JFrame frame = new JFrame();
frame.setContentPane(contentPane);
return frame;
}
private void buttonActionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equalsIgnoreCase("grad_button")) {
// add new gradient stop element with offset 80%, blue color, and opacity 1
SVGStopElement stopElement = (SVGStopElement)doc.createElementNS(SVGConstants.SVG_NAMESPACE_URI,SVGConstants.SVG_STOP_TAG);
stopElement.setAttribute(SVGConstants.SVG_OFFSET_ATTRIBUTE, "80%");
stopElement.setAttribute(SVGConstants.SVG_STOP_COLOR_ATTRIBUTE, "blue");
stopElement.setAttribute(SVGConstants.SVG_STOP_OPACITY_ATTRIBUTE, "1");
// here is the bug it is not updating canvas, is it gvt or bridge problem?
Element element = (Element)doc.getElementById("grad1");
element.appendChild(stopElement);
canvas.repaint();
canvas.resetRenderingTransform();
} else if (command.equalsIgnoreCase("rect_button")) {
// bug on batik, update on defs element doesn't reflected on the reference element
// unless reference element is also updated
SVGRectElement element = (SVGRectElement)doc.getElementById("rect1");
SVGStylable svgStylable = (SVGStylable)element;
CSSStyleDeclaration cssStyle = svgStylable.getStyle();
//make sure it is updated, by setting different value first & set back the value
cssStyle.setProperty(SVGConstants.SVG_FILL_ATTRIBUTE, "black","");
cssStyle.setProperty(SVGConstants.SVG_FILL_ATTRIBUTE, "url(#grad1)","");
canvas.repaint();
canvas.resetRenderingTransform();
}
}
}
<<attachment: bug_gvt_reference.svg>>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
