You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by de...@apache.org on 2003/08/20 13:31:45 UTC
cvs commit: xml-batik/sources/org/apache/batik/dom/svg SVGOMPoint.java SVGTextContentSupport.java
deweese 2003/08/20 04:31:45
Modified: samples/tests/spec/scripting/textcontent numberOfChars.svg
sources/org/apache/batik/bridge SVGTextElementBridge.java
sources/org/apache/batik/dom/svg SVGOMPoint.java
SVGTextContentSupport.java
Log:
1) Fixed a bug with getExtentOfChar(). It used to return the bounds in
the coodinate system of the SVG element (I don't know why...)
2) The SVGPoint returned by getStart/EndPositionOfChar now supports
'matrixTransform'.
Revision Changes Path
1.3 +46 -16 xml-batik/samples/tests/spec/scripting/textcontent/numberOfChars.svg
Index: numberOfChars.svg
===================================================================
RCS file: /home/cvs/xml-batik/samples/tests/spec/scripting/textcontent/numberOfChars.svg,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- numberOfChars.svg 8 Aug 2003 11:39:35 -0000 1.2
+++ numberOfChars.svg 20 Aug 2003 11:31:45 -0000 1.3
@@ -172,22 +172,42 @@
function showCharactersBBox(elt, index)
{
- var doc = elt.getOwnerDocument();
-
- var group = doc.getElementById('bboxGroup');
-
- var r = doc.createElementNS("http://www.w3.org/2000/svg","rect");
+ var doc = elt.getOwnerDocument();
- var box = elt.getExtentOfChar(index);
+ var group = doc.getElementById('bboxGroup');
- r.setAttribute("x",box.getX());
- r.setAttribute("y",box.getY());
- r.setAttribute("width",box.getWidth());
- r.setAttribute("height",box.getHeight());
- r.setAttributeNS(null,"stroke","red");
-
- group.appendChild(r);
-
+ var box = elt.getExtentOfChar(index);
+ var mat = elt.getTransformToElement(group);
+ var root = doc.getRootElement();
+ var pt0 = root.createSVGPoint();
+ pt0.x = box.getX();
+ pt0.y = box.getY();
+ pt0 = pt0.matrixTransform(mat);
+
+ var pt1 = root.createSVGPoint();
+ pt1.x = box.getX()+box.getWidth();
+ pt1.y = box.getY();
+ pt1 = pt1.matrixTransform(mat);
+
+ var pt2 = root.createSVGPoint();
+ pt2.x = box.getX()+box.getWidth();
+ pt2.y = box.getY()+box.getHeight();
+ pt2 = pt2.matrixTransform(mat);
+
+ var pt3 = root.createSVGPoint();
+ pt3.x = box.getX();
+ pt3.y = box.getY()+box.getHeight();
+ pt3 = pt3.matrixTransform(mat);
+
+ var p = doc.createElementNS
+ ("http://www.w3.org/2000/svg","path");
+ p.setAttribute("d","M" + pt0.x + "," + pt0.y +
+ "L" + pt1.x + "," + pt1.y +
+ "L" + pt2.x + "," + pt2.y +
+ "L" + pt3.x + "," + pt3.y + "z");
+ p.setAttributeNS(null,"stroke","red");
+ group.appendChild(p);
+
}
function showCharactersStartPosition(elt, index)
@@ -195,6 +215,7 @@
var doc = elt.getOwnerDocument();
var group = doc.getElementById('bboxGroup');
+ var root = doc.getRootElement();
//while (group.hasChildNodes() ){
// group.removeChild(group.getFirstChild());
@@ -203,7 +224,8 @@
var u = doc.createElementNS("http://www.w3.org/2000/svg","use");
var point = elt.getStartPositionOfChar(index);
-
+ var mat = elt.getTransformToElement(group);
+ point = point.matrixTransform(mat);
u.setAttributeNS(null,"transform","translate("+point.getX()+","+point.getY()+")");
u.setAttributeNS("http://www.w3.org/1999/xlink","href","#arrow");
u.setAttributeNS(null,"stroke","green");
@@ -226,9 +248,13 @@
var group = doc.getElementById('bboxGroup');
var u = doc.createElementNS("http://www.w3.org/2000/svg","use");
+ var mat = elt.getTransformToElement(group);
+ var root = doc.getRootElement();
var point1 = elt.getStartPositionOfChar(index);
+ point1 = point1.matrixTransform(mat);
var point2 = elt.getEndPositionOfChar(index);
+ point2 = point2.matrixTransform(mat);
x = ( point1.getX() + point2.getX() )/2;
y = ( point1.getY() + point2.getY() )/2;
@@ -253,6 +279,8 @@
var u = doc.createElementNS("http://www.w3.org/2000/svg","use");
var point = elt.getEndPositionOfChar(index);
+ var mat = elt.getTransformToElement(group);
+ point = point.matrixTransform(mat);
u.setAttributeNS(null,"transform","translate("+point.getX()+","+point.getY()+")");
u.setAttributeNS("http://www.w3.org/1999/xlink","href","#arrow");
@@ -272,6 +300,8 @@
}
var point = elt.getStartPositionOfChar(0);
+ var mat = elt.getTransformToElement(group);
+ point = point.matrixTransform(mat);
var length = elt.getSubStringLength(0,index+1);
var text = doc.getElementById("extraInfo");
1.86 +28 -39 xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java
Index: SVGTextElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -r1.85 -r1.86
--- SVGTextElementBridge.java 9 Aug 2003 16:58:37 -0000 1.85
+++ SVGTextElementBridge.java 20 Aug 2003 11:31:45 -0000 1.86
@@ -2334,9 +2334,8 @@
}
//get the transform for the node
- AffineTransform at = getCTM();
-
- b = at.createTransformedShape(b);
+ // AffineTransform at = getCTM();
+ // b = at.createTransformedShape(b);
//return the bounding box of the outline
return b.getBounds2D();
@@ -2381,33 +2380,28 @@
Point2D b = it.getGlyphPosition(info.glyphIndexStart);
- Point2D result = new Point2D.Float();
+ Point2D.Float result = new Point2D.Float();
- AffineTransform glyphTransform = it.getGlyphTransform(info.glyphIndexStart);
+ AffineTransform glyphTransform;
+ glyphTransform = it.getGlyphTransform(info.glyphIndexStart);
- double x = 0,y = 0;
+ float x = 0,y = 0;
//glyph are defined starting at position (0,0)
if ( glyphTransform != null ){
//apply the glyph transformation to the start point
glyphTransform.transform(new Point2D.Double(x,y),result);
- x = result.getX();
- y = result.getY();
-
+ x = result.x;
+ y = result.y;
}
-
- //apply the glyph translation to the start point
- AffineTransform af = AffineTransform.getTranslateInstance(b.getX(), b.getY());
- af.transform(new Point2D.Double(x,y),result);
-
- //apply the node transformation to the start point
- AffineTransform at = new AffineTransform(getCTM());
- Point2D startPoint = new Point2D.Float();
- at.transform(result,startPoint);
+ x += b.getX();
+ y += b.getY();
- return startPoint;
+ result.x = x;
+ result.y = y;
+ return result;
}
/**
@@ -2443,35 +2437,30 @@
Point2D b = it.getGlyphPosition(info.glyphIndexEnd);
- Point2D result = new Point2D.Float();
+ Point2D.Float result = new Point2D.Float();
- AffineTransform glyphTransform = it.getGlyphTransform(info.glyphIndexEnd);
+ AffineTransform glyphTransform;
+ glyphTransform = it.getGlyphTransform(info.glyphIndexEnd);
GVTGlyphMetrics metrics = it.getGlyphMetrics(info.glyphIndexEnd);
- double x = 0,y = 0;
+ float x = 0,y = 0;
x = metrics.getHorizontalAdvance();
if ( glyphTransform != null ){
- glyphTransform.transform(new Point2D.Double(x,y),result);
- x = result.getX();
- y = result.getY();
-
- }
-
- AffineTransform af = AffineTransform.getTranslateInstance(b.getX(), b.getY());
-
- af.transform(new Point2D.Double(x,y),result);
-
- AffineTransform at = new AffineTransform(getCTM());
- Point2D endPoint = new Point2D.Float();
- at.transform(result,endPoint);
-
- return endPoint;
-
+ glyphTransform.transform(new Point2D.Float(x,y),result);
+ x = result.x;
+ y = result.y;
+ }
+ x += b.getX();
+ y += b.getY();
+ result.x = x;
+ result.y = y;
+ return result;
}
+
/**
* Implementation of {@link
* org.w3c.dom.svg.SVGTextContentElement#getRotationOfChar(int charnum)}.
1.4 +3 -3 xml-batik/sources/org/apache/batik/dom/svg/SVGOMPoint.java
Index: SVGOMPoint.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGOMPoint.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SVGOMPoint.java 8 Aug 2003 11:39:00 -0000 1.3
+++ SVGOMPoint.java 20 Aug 2003 11:31:45 -0000 1.4
@@ -75,8 +75,8 @@
public void setY( float y ) throws DOMException { this.y = y; }
public SVGPoint matrixTransform ( SVGMatrix matrix ) {
- float newX = matrix.getA()*x + matrix.getC()*y + matrix.getE();
- float newY = matrix.getB()*x + matrix.getD()*y + matrix.getF();
+ float newX = matrix.getA()*getX() + matrix.getC()*getY() + matrix.getE();
+ float newY = matrix.getB()*getX() + matrix.getD()*getY() + matrix.getF();
return new SVGOMPoint(newX, newY);
}
}
1.4 +21 -31 xml-batik/sources/org/apache/batik/dom/svg/SVGTextContentSupport.java
Index: SVGTextContentSupport.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGTextContentSupport.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SVGTextContentSupport.java 8 Aug 2003 11:39:00 -0000 1.3
+++ SVGTextContentSupport.java 20 Aug 2003 11:31:45 -0000 1.4
@@ -147,27 +147,13 @@
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
- return new SVGPoint(){
+ return new SVGTextPoint(svgelt){
public float getX(){
return (float)context.getStartPositionOfChar(charnum).getX();
}
public float getY(){
return (float)context.getStartPositionOfChar(charnum).getY();
}
- public void setX(float x) throws DOMException {
- throw svgelt.createDOMException
- (DOMException.NO_MODIFICATION_ALLOWED_ERR,
- "readonly.point", null);
- }
- public void setY(float y) throws DOMException {
- throw svgelt.createDOMException
- (DOMException.NO_MODIFICATION_ALLOWED_ERR,
- "readonly.point", null);
- }
- public SVGPoint matrixTransform(SVGMatrix matrix) {
- throw new RuntimeException("!!! TODO: matrixTransform()");
- }
-
};
}
@@ -189,27 +175,13 @@
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
- return new SVGPoint(){
+ return new SVGTextPoint(svgelt){
public float getX(){
return (float)context.getEndPositionOfChar(charnum).getX();
}
public float getY(){
return (float)context.getEndPositionOfChar(charnum).getY();
}
- public void setX(float x) throws DOMException {
- throw svgelt.createDOMException
- (DOMException.NO_MODIFICATION_ALLOWED_ERR,
- "readonly.point", null);
- }
- public void setY(float y) throws DOMException {
- throw svgelt.createDOMException
- (DOMException.NO_MODIFICATION_ALLOWED_ERR,
- "readonly.point", null);
- }
- public SVGPoint matrixTransform(SVGMatrix matrix) {
- throw new RuntimeException("!!! TODO: matrixTransform()");
- }
-
};
}
@@ -298,4 +270,22 @@
return context.getCharNumAtPosition(x,y);
}
+
+ public static class SVGTextPoint extends SVGOMPoint {
+ SVGOMElement svgelt;
+ SVGTextPoint(SVGOMElement elem) {
+ svgelt = elem;
+ }
+ public void setX(float x) throws DOMException {
+ throw svgelt.createDOMException
+ (DOMException.NO_MODIFICATION_ALLOWED_ERR,
+ "readonly.point", null);
+ }
+ public void setY(float y) throws DOMException {
+ throw svgelt.createDOMException
+ (DOMException.NO_MODIFICATION_ALLOWED_ERR,
+ "readonly.point", null);
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org