X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Fsvg%2FSVGUtils.java;h=f7d7916cacb1647215eb3130044bf182ae389a02;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=2da60240e79c6beaf0d03d1df6989742d84af627;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/svg/SVGUtils.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/svg/SVGUtils.java index 2da60240e..f7d7916ca 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/svg/SVGUtils.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/svg/SVGUtils.java @@ -1,151 +1,151 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.g2d.svg; - -import java.util.Locale; - -//import org.apache.batik.bridge.BridgeContext; -//import org.apache.batik.bridge.GVTBuilder; -//import org.apache.batik.bridge.UserAgentAdapter; -//import org.apache.batik.dom.svg.SAXSVGDocumentFactory; -//import org.apache.batik.dom.svg12.SVG12DOMImplementation; -//import org.apache.batik.dom.util.DOMUtilities; -//import org.apache.batik.gvt.GraphicsNode; -//import org.apache.batik.util.XMLResourceDescriptor; -//import org.w3c.dom.svg.SVGDocument; -//import org.w3c.dom.svg.SVGSVGElement; - - -/** - * Utility methods for DOM and SVG document handling. - * - * Currently disabled. - * - * @author Tuukka Lehtonen - */ -final class SVGUtils { - - public static final Locale formatLocale = Locale.US; - -// private static final NumberFormat nf = NumberFormat.getNumberInstance(formatLocale); - - /** - * Attempts to parse an SVG document form the specified input stream. - * - * @param inp - * @return - * @throws IOException - */ -// public static SVGDocument parseSVGStream(InputStream inp) throws IOException { -// ClassLoader ldr = Thread.currentThread().getContextClassLoader(); -// Thread.currentThread().setContextClassLoader(SVGUtils.class.getClassLoader()); -// try { -// String parser = XMLResourceDescriptor.getXMLParserClassName(); -// SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); -// SVGDocument doc = f.createSVGDocument(null, inp); -// return doc; -// } finally { -// Thread.currentThread().setContextClassLoader(ldr); -// } -// } - - /** - * Attempts to parse a String as svg/xml and return the resulting - * SVGDocument. - * - * @param svgData the svg/xml data - * @return the resulting SVGDocument instance - * @throws IOException when parsing as svg fails - */ -// public static SVGDocument parseSVGString(String svgData) throws IOException { -// ClassLoader ldr = Thread.currentThread().getContextClassLoader(); -// Thread.currentThread().setContextClassLoader(SVGUtils.class.getClassLoader()); -// try { -// String parser = XMLResourceDescriptor.getXMLParserClassName(); -// SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); -// StringReader reader = new StringReader(svgData); -// SVGDocument doc = f.createSVGDocument(null, reader); -// return doc; -// } finally { -// Thread.currentThread().setContextClassLoader(ldr); -// } -// } - - /** - * Attempts to parse a String as svg/xml and return the root SVGSVGElement - * of the resulting SVGDocument. - * - * @param svgData the svg/xml data - * @return the resulting SVGDocument instance - * @throws IOException when parsing as svg fails - */ -// public static SVGSVGElement parseSVGStringToRoot(String svgData) throws IOException { -// SVGDocument doc = parseSVGString(svgData); -// return doc.getRootElement(); -// } - - /** - * Transcodes an SVGDocument instance into String form. - * - * @param doc the SVGDocument to transcode - * @return the resulting string - * @throws IOException if the document contains invalid data - */ -// public static String svgToString(SVGDocument doc) throws IOException { -// StringWriter writer = new StringWriter(); -// DOMUtilities.writeDocument(doc, writer); -// writer.close(); -// return writer.toString(); -// } - - /** - * Retrieves SVG document bounding box by constructing the corresponding GVT - * tree and getting the bounding information from there. - * - *

- * This allows us to get the bounding box of the actual rendered output, not - * just the bounding box of the primitives. - *

- * - *

- * BEWARE: using the specified document with a JSVGCanvas after invoking - * this method seems to break the functionality of the DOM/GVT binding in - * the canvas. If you need to do that, - * - * @param doc - * @param defaultValue the rectangle to return if the document has no - * bounding box - * @return null if the document has no graphical elements, - * i.e. no real bounding box and the given defaultValue was - * null - */ -// public static Rectangle2D getDocumentBoundingBox(SVGDocument doc, Rectangle2D defaultValue, boolean cloneDocument) { -// if (cloneDocument) -// doc = (SVGDocument) DOMUtilities.deepCloneDocument(doc, SVG12DOMImplementation.getDOMImplementation()); -// -// GVTBuilder builder = new GVTBuilder(); -// BridgeContext ctx = new BridgeContext(new UserAgentAdapter()); -// GraphicsNode gvtRoot = builder.build(ctx, doc); -// -// Rectangle2D bounds = gvtRoot.getSensitiveBounds(); -// if (bounds == null) -// return defaultValue; -// -// if (bounds.isEmpty()) -// return defaultValue; -// -// Rectangle2D bbox = new Rectangle2D.Float(); -// bbox.setFrame(bounds); -// return bbox; -// } - -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.g2d.svg; + +import java.util.Locale; + +//import org.apache.batik.bridge.BridgeContext; +//import org.apache.batik.bridge.GVTBuilder; +//import org.apache.batik.bridge.UserAgentAdapter; +//import org.apache.batik.dom.svg.SAXSVGDocumentFactory; +//import org.apache.batik.dom.svg12.SVG12DOMImplementation; +//import org.apache.batik.dom.util.DOMUtilities; +//import org.apache.batik.gvt.GraphicsNode; +//import org.apache.batik.util.XMLResourceDescriptor; +//import org.w3c.dom.svg.SVGDocument; +//import org.w3c.dom.svg.SVGSVGElement; + + +/** + * Utility methods for DOM and SVG document handling. + * + * Currently disabled. + * + * @author Tuukka Lehtonen + */ +final class SVGUtils { + + public static final Locale formatLocale = Locale.US; + +// private static final NumberFormat nf = NumberFormat.getNumberInstance(formatLocale); + + /** + * Attempts to parse an SVG document form the specified input stream. + * + * @param inp + * @return + * @throws IOException + */ +// public static SVGDocument parseSVGStream(InputStream inp) throws IOException { +// ClassLoader ldr = Thread.currentThread().getContextClassLoader(); +// Thread.currentThread().setContextClassLoader(SVGUtils.class.getClassLoader()); +// try { +// String parser = XMLResourceDescriptor.getXMLParserClassName(); +// SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); +// SVGDocument doc = f.createSVGDocument(null, inp); +// return doc; +// } finally { +// Thread.currentThread().setContextClassLoader(ldr); +// } +// } + + /** + * Attempts to parse a String as svg/xml and return the resulting + * SVGDocument. + * + * @param svgData the svg/xml data + * @return the resulting SVGDocument instance + * @throws IOException when parsing as svg fails + */ +// public static SVGDocument parseSVGString(String svgData) throws IOException { +// ClassLoader ldr = Thread.currentThread().getContextClassLoader(); +// Thread.currentThread().setContextClassLoader(SVGUtils.class.getClassLoader()); +// try { +// String parser = XMLResourceDescriptor.getXMLParserClassName(); +// SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); +// StringReader reader = new StringReader(svgData); +// SVGDocument doc = f.createSVGDocument(null, reader); +// return doc; +// } finally { +// Thread.currentThread().setContextClassLoader(ldr); +// } +// } + + /** + * Attempts to parse a String as svg/xml and return the root SVGSVGElement + * of the resulting SVGDocument. + * + * @param svgData the svg/xml data + * @return the resulting SVGDocument instance + * @throws IOException when parsing as svg fails + */ +// public static SVGSVGElement parseSVGStringToRoot(String svgData) throws IOException { +// SVGDocument doc = parseSVGString(svgData); +// return doc.getRootElement(); +// } + + /** + * Transcodes an SVGDocument instance into String form. + * + * @param doc the SVGDocument to transcode + * @return the resulting string + * @throws IOException if the document contains invalid data + */ +// public static String svgToString(SVGDocument doc) throws IOException { +// StringWriter writer = new StringWriter(); +// DOMUtilities.writeDocument(doc, writer); +// writer.close(); +// return writer.toString(); +// } + + /** + * Retrieves SVG document bounding box by constructing the corresponding GVT + * tree and getting the bounding information from there. + * + *

+ * This allows us to get the bounding box of the actual rendered output, not + * just the bounding box of the primitives. + *

+ * + *

+ * BEWARE: using the specified document with a JSVGCanvas after invoking + * this method seems to break the functionality of the DOM/GVT binding in + * the canvas. If you need to do that, + * + * @param doc + * @param defaultValue the rectangle to return if the document has no + * bounding box + * @return null if the document has no graphical elements, + * i.e. no real bounding box and the given defaultValue was + * null + */ +// public static Rectangle2D getDocumentBoundingBox(SVGDocument doc, Rectangle2D defaultValue, boolean cloneDocument) { +// if (cloneDocument) +// doc = (SVGDocument) DOMUtilities.deepCloneDocument(doc, SVG12DOMImplementation.getDOMImplementation()); +// +// GVTBuilder builder = new GVTBuilder(); +// BridgeContext ctx = new BridgeContext(new UserAgentAdapter()); +// GraphicsNode gvtRoot = builder.build(ctx, doc); +// +// Rectangle2D bounds = gvtRoot.getSensitiveBounds(); +// if (bounds == null) +// return defaultValue; +// +// if (bounds.isEmpty()) +// return defaultValue; +// +// Rectangle2D bbox = new Rectangle2D.Float(); +// bbox.setFrame(bounds); +// return bbox; +// } + +}