Package org.newdawn.slick.svg.inkscape

Source Code of org.newdawn.slick.svg.inkscape.UseProcessor

package org.newdawn.slick.svg.inkscape;

import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.geom.Transform;
import org.newdawn.slick.svg.Diagram;
import org.newdawn.slick.svg.Figure;
import org.newdawn.slick.svg.Loader;
import org.newdawn.slick.svg.NonGeometricData;
import org.newdawn.slick.svg.ParsingException;
import org.w3c.dom.Element;

/**
* Processor for the "use", a tag that allows references to other elements
* and cloning.
*
* @author kevin
*/
public class UseProcessor implements ElementProcessor {

  /**
   * @see org.newdawn.slick.svg.inkscape.ElementProcessor#handles(org.w3c.dom.Element)
   */
  public boolean handles(Element element) {
    return element.getNodeName().equals("use");
  }

  /**
   * @see org.newdawn.slick.svg.inkscape.ElementProcessor#process(org.newdawn.slick.svg.Loader, org.w3c.dom.Element, org.newdawn.slick.svg.Diagram, org.newdawn.slick.geom.Transform)
   */
  public void process(Loader loader, Element element, Diagram diagram,
      Transform transform) throws ParsingException {

    String ref = element.getAttributeNS("http://www.w3.org/1999/xlink", "href");
    String href = Util.getAsReference(ref);
   
    Figure referenced = diagram.getFigureByID(href);
    if (referenced == null) {
      throw new ParsingException(element, "Unable to locate referenced element: "+href);
    }
   
    Transform local = Util.getTransform(element);
    Transform trans = local.concatenate(referenced.getTransform());
   
    NonGeometricData data = Util.getNonGeometricData(element);
    Shape shape = referenced.getShape().transform(trans);
    data.addAttribute(NonGeometricData.FILL, referenced.getData().getAttribute(NonGeometricData.FILL));
    data.addAttribute(NonGeometricData.STROKE, referenced.getData().getAttribute(NonGeometricData.STROKE));
    data.addAttribute(NonGeometricData.OPACITY, referenced.getData().getAttribute(NonGeometricData.OPACITY));
    data.addAttribute(NonGeometricData.STROKE_WIDTH, referenced.getData().getAttribute(NonGeometricData.STROKE_WIDTH));
   
    Figure figure = new Figure(referenced.getType(), shape, data, trans);
    diagram.addFigure(figure);
  }

}
TOP

Related Classes of org.newdawn.slick.svg.inkscape.UseProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.