You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ke...@apache.org on 2001/07/11 12:04:09 UTC
cvs commit: xml-fop/src/org/apache/fop/svg SVGUtilities.java
keiron 01/07/11 03:04:08
Added: src/org/apache/fop/svg SVGUtilities.java
Log:
a utility file for creating some svg things
Revision Changes Path
1.1 xml-fop/src/org/apache/fop/svg/SVGUtilities.java
Index: SVGUtilities.java
===================================================================
/* $Id: SVGUtilities.java,v 1.1 2001/07/11 10:04:07 keiron Exp $
* Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
* For details on use and redistribution please refer to the
* LICENSE file included with these sources.
*/
package org.apache.fop.svg;
import java.util.*;
import java.text.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.font.FontRenderContext;
import org.apache.fop.fo.*;
import org.apache.fop.fo.properties.*;
import org.apache.fop.layout.*;
import org.apache.fop.apps.*;
import org.apache.fop.datatypes.*;
import org.apache.fop.layout.inline.*;
import org.apache.fop.svg.*;
import org.w3c.dom.*;
import org.w3c.dom.svg.*;
import org.w3c.dom.css.*;
import org.apache.batik.dom.svg.SVGDOMImplementation;
/**
* Some utilities for creating svg DOM documents and elements.
*/
public class SVGUtilities {
final static String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
public static final Document createSVGDocument(float width,
float height) {
DOMImplementation impl =
SVGDOMImplementation.getDOMImplementation();
Document doc = impl.createDocument(svgNS, "svg", null);
Element svgRoot = doc.getDocumentElement();
svgRoot.setAttributeNS(null, "width", "" + width);
svgRoot.setAttributeNS(null, "height", "" + height);
return doc;
}
/**
* Get the string width for a particular string given the font.
*/
public static final float getStringWidth(String str,
java.awt.Font font) {
Rectangle2D rect = font.getStringBounds(str, 0, str.length(),
new FontRenderContext(new AffineTransform(), true, true));
return (float) rect.getWidth();
}
/**
* Get the string height for a particular string given the font.
*/
public static final float getStringHeight(String str,
java.awt.Font font) {
Rectangle2D rect = font.getStringBounds(str, 0, str.length(),
new FontRenderContext(new AffineTransform(), true, true));
return (float) rect.getHeight();
}
/**
* Get the string bounds for a particular string given the font.
*/
public static final Rectangle2D getStringBounds(String str,
java.awt.Font font) {
return font.getStringBounds(str, 0, str.length(),
new FontRenderContext(new AffineTransform(), true, true));
}
/**
* Create an SVG Line
*/
public static final Element createLine(Document doc, float x,
float y, float x2, float y2) {
Element ellipse = doc.createElementNS(svgNS, "line");
ellipse.setAttributeNS(null, "x1", "" + x);
ellipse.setAttributeNS(null, "x2", "" + x2);
ellipse.setAttributeNS(null, "y1", "" + y);
ellipse.setAttributeNS(null, "y2", "" + y2);
return ellipse;
}
/**
* Create an SVG Ellipse
*/
public static final Element createEllipse(Document doc, float cx,
float cy, float rx, float ry) {
Element ellipse = doc.createElementNS(svgNS, "ellipse");
ellipse.setAttributeNS(null, "cx", "" + cx);
ellipse.setAttributeNS(null, "rx", "" + rx);
ellipse.setAttributeNS(null, "cy", "" + cy);
ellipse.setAttributeNS(null, "ry", "" + ry);
return ellipse;
}
/**
* Create an SVG Path.
*/
public static final Element createPath(Document doc, String str) {
Element path = doc.createElementNS(svgNS, "path");
path.setAttributeNS(null, "d", str);
return path;
}
/**
* Create an SVG Text object.
*/
public static final Element createText(Document doc, float x,
float y, String str) {
Element textGraph = doc.createElementNS(svgNS, "text");
textGraph.setAttributeNS(null, "x", "" + x);
textGraph.setAttributeNS(null, "y", "" + y);
org.w3c.dom.Text text = doc.createTextNode(str);
textGraph.appendChild(text);
return textGraph;
}
/**
* Create an SVG Rectangle.
*/
public static final Element createRect(Document doc, float x,
float y, float width, float height) {
Element border = doc.createElementNS(svgNS, "rect");
border.setAttributeNS(null, "x", "" + x);
border.setAttributeNS(null, "y", "" + y);
border.setAttributeNS(null, "width", "" + width);
border.setAttributeNS(null, "height", "" + height);
return border;
}
/**
* Create an SVG G.
*/
public static final Element createG(Document doc) {
Element border = doc.createElementNS(svgNS, "g");
return border;
}
/**
* Create an SVG Clip.
*/
public static final Element createClip(Document doc, Element els,
String id) {
Element border = doc.createElementNS(svgNS, "clipPath");
border.setAttributeNS(null, "id", id);
border.appendChild(els);
return border;
}
public static final Element createImage(Document doc, String ref,
float width, float height) {
Element border = doc.createElementNS(svgNS, "image");
border.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href",
ref);
border.setAttributeNS(null, "width", "" + width);
border.setAttributeNS(null, "height", "" + height);
return border;
}
/**
* Create some SVG text that is wrapped into a specified width..
*/
public static final Element wrapText(Document doc, String str,
java.awt.Font font, float width) {
Element g = createG(doc);
Element text;
StringTokenizer st = new StringTokenizer(str, " \t\r\n");
float totalWidth = 0;
String totalStr = "";
int line = 0;
float height = getStringHeight(str, font);
while (st.hasMoreTokens()) {
String token = st.nextToken();
float strwidth = getStringWidth(token, font);
totalWidth += strwidth;
if (totalWidth > width) {
if (totalStr.equals("")) {
totalStr = token;
token = "";
strwidth = 0;
}
text = createText(doc, 0, line * (height + 5), totalStr);
g.appendChild(text);
totalStr = token;
totalWidth = strwidth;
line++;
} else {
totalStr = totalStr + " " + token;
}
}
return g;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org