deweese 2002/08/13 14:33:17
Modified: samples mathMetal.svg
sources/org/apache/batik/bridge SVGImageElementBridge.java
sources/org/apache/batik/extension/svg
BatikMultiImageElementBridge.java
sources/org/apache/batik/gvt ImageNode.java
RasterImageNode.java
sources/org/apache/batik/gvt/font Glyph.java
sources/org/apache/batik/gvt/renderer
StrokingTextPainter.java
sources/org/apache/batik/gvt/text GlyphLayout.java
Log:
1) Image nodes now update bounds properly when changed via script.
2) Text advances and scale factors are now properly calculated.
(solves text-length bug just reported). This of course sightly
changes the rendering of all centered text.
Revision Changes Path
1.4 +3 -2 xml-batik/samples/mathMetal.svg
Index: mathMetal.svg
===================================================================
RCS file: /home/cvs/xml-batik/samples/mathMetal.svg,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- mathMetal.svg 7 Feb 2002 12:44:52 -0000 1.3
+++ mathMetal.svg 13 Aug 2002 21:33:16 -0000 1.4
@@ -398,7 +398,8 @@
<image width="100%" height="100%"
xlink:href="tests/resources/images/brushedMetal.jpg" filter="url(#tint)"/>
<use xlink:href="#graphics" fill="gray" filter="url(#shadow)"/>
- <text text-anchor="middle" font-size="80" font-family="embedZeroHour" x="50%"
y="120" fill="black" filter="url(#recessed)">MATH</text>
+ <text text-anchor="middle" font-size="80" font-family="embedZeroHour"
+ x="50%" y="120" fill="black" filter="url(#recessed)">MATH</text>
<use xlink:href="#formula" transform="translate(225 360) scale(.7)"
fill="black" color="black" filter="url(#carved)"/>
</svg>
1.50 +1 -2
xml-batik/sources/org/apache/batik/bridge/SVGImageElementBridge.java
Index: SVGImageElementBridge.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGImageElementBridge.java,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- SVGImageElementBridge.java 9 Jul 2002 20:11:41 -0000 1.49
+++ SVGImageElementBridge.java 13 Aug 2002 21:33:16 -0000 1.50
@@ -289,7 +289,6 @@
}
node.setImage(img);
Rectangle2D imgBounds = img.getBounds2D();
- node.setImageBounds(imgBounds);
Rectangle2D bounds = getImageBounds(ctx, e);
// create the implicit viewBox for the raster image. The viewBox for a
1.5 +1 -2
xml-batik/sources/org/apache/batik/extension/svg/BatikMultiImageElementBridge.java
Index: BatikMultiImageElementBridge.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/extension/svg/BatikMultiImageElementBridge.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BatikMultiImageElementBridge.java 22 May 2002 11:59:10 -0000 1.4
+++ BatikMultiImageElementBridge.java 13 Aug 2002 21:33:16 -0000 1.5
@@ -161,7 +161,6 @@
b = getImageBounds(ctx, e);
node.setImage(f);
- node.setImageBounds(imgB);
float []vb = new float[4];
vb[0] = 0;
1.11 +2 -1 xml-batik/sources/org/apache/batik/gvt/ImageNode.java
Index: ImageNode.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/ImageNode.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- ImageNode.java 11 Jul 2002 12:35:29 -0000 1.10
+++ ImageNode.java 13 Aug 2002 21:33:16 -0000 1.11
@@ -87,6 +87,7 @@
invalidateGeometryCache();
if (count == 0) ensureCapacity(1);
children[0] = newImage;
+ ((AbstractGraphicsNode)newImage).setParent(this);
count=1;
fireGraphicsNodeChangeCompleted();
}
1.12 +6 -76 xml-batik/sources/org/apache/batik/gvt/RasterImageNode.java
Index: RasterImageNode.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/RasterImageNode.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- RasterImageNode.java 23 Jan 2002 14:14:08 -0000 1.11
+++ RasterImageNode.java 13 Aug 2002 21:33:16 -0000 1.12
@@ -32,27 +32,6 @@
protected Filter image;
/**
- * The Bounds of this image node.
- */
- protected Rectangle2D imageBounds;
-
- /**
- * The transform that go from the image to the user coordinate system.
- */
- protected AffineTransform img2usr;
-
- /**
- * The transform that go from the user to the image coordinate system.
- */
- protected AffineTransform usr2img;
-
- /**
- * This flag indicates whether or not the affine transforms have been
- * computed.
- */
- protected boolean calcAffine = true;
-
- /**
* Constructs a new empty <tt>RasterImageNode</tt>.
*/
public RasterImageNode() {}
@@ -70,7 +49,6 @@
fireGraphicsNodeChangeStarted();
invalidateGeometryCache();
this.image = newImage;
- calcAffine = true;
fireGraphicsNodeChangeCompleted();
}
@@ -84,25 +62,12 @@
}
/**
- * Sets the bounds of this raster image node.
- *
- * @param newBounds the new bounds of this raster image node
- */
- public void setImageBounds(Rectangle2D newImageBounds) {
- fireGraphicsNodeChangeStarted();
- invalidateGeometryCache();
- this.imageBounds = newImageBounds;
- calcAffine = true;
- fireGraphicsNodeChangeCompleted();
- }
-
- /**
* Returns the bounds of this raster image node.
*
* @return the bounds of this raster image node
*/
public Rectangle2D getImageBounds() {
- return (Rectangle2D) imageBounds.clone();
+ return (Rectangle2D) image.getBounds2D().clone();
}
/**
@@ -114,33 +79,6 @@
return image;
}
- /**
- * Updates bith the user->image and image->user transform.
- */
- protected void updateAffine() {
-
- float tx0 = image.getMinX();
- float ty0 = image.getMinY();
-
- float sx = (float)(imageBounds.getWidth() /image.getWidth());
- float sy = (float)(imageBounds.getHeight()/image.getHeight());
-
- float tx1 = (float)imageBounds.getX();
- float ty1 = (float)imageBounds.getY();
-
- // Make the affine go from our src Img's coord system to
- // the device coord system, including scaling to our bounds.
- img2usr = AffineTransform.getTranslateInstance ( tx1, ty1);
- img2usr.concatenate(AffineTransform.getScaleInstance ( sx , sy ));
- img2usr.concatenate(AffineTransform.getTranslateInstance(-tx0, -ty0));
-
- usr2img = AffineTransform.getTranslateInstance ( tx0, ty0);
- usr2img.concatenate(AffineTransform.getScaleInstance (1/sx, 1/sy));
- usr2img.concatenate(AffineTransform.getTranslateInstance(-tx1, -ty1));
-
- calcAffine = false;
- }
-
//
// Drawing methods
//
@@ -151,15 +89,7 @@
* @param g2d the Graphics2D to use
*/
public void primitivePaint(Graphics2D g2d) {
- if ((image == null) ||
- (imageBounds.getWidth() == 0) ||
- (imageBounds.getHeight() == 0)) {
- return;
- }
-
- if (calcAffine) {
- updateAffine();
- }
+ if (image == null) return;
GraphicsUtil.drawImage(g2d, image);
}
@@ -172,7 +102,7 @@
* Returns the bounds of the area covered by this node's primitive paint.
*/
public Rectangle2D getPrimitiveBounds() {
- return (Rectangle2D) imageBounds.clone();
+ return image.getBounds2D();
}
/**
@@ -181,13 +111,13 @@
* masking, filtering or stroking, for example.
*/
public Rectangle2D getGeometryBounds() {
- return (Rectangle2D) imageBounds.clone();
+ return image.getBounds2D();
}
/**
* Returns the outline of this node.
*/
public Shape getOutline() {
- return (Rectangle2D) imageBounds.clone();
+ return image.getBounds2D();
}
}
1.10 +9 -5 xml-batik/sources/org/apache/batik/gvt/font/Glyph.java
Index: Glyph.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/font/Glyph.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Glyph.java 12 Aug 2002 20:34:34 -0000 1.9
+++ Glyph.java 13 Aug 2002 21:33:16 -0000 1.10
@@ -250,10 +250,14 @@
*/
public GVTGlyphMetrics getGlyphMetrics() {
if (metrics == null) {
- metrics = new GVTGlyphMetrics(getHorizAdvX(),
- getVertAdvY(),
- getGeometryBounds(),
- GlyphMetrics.COMPONENT);
+ Rectangle2D gb = getGeometryBounds();
+
+ metrics = new GVTGlyphMetrics
+ (getHorizAdvX(), getVertAdvY(),
+ new Rectangle2D.Double(gb.getX()-position.getX(),
+ gb.getY()-position.getY(),
+ gb.getWidth(),gb.getHeight()),
+ GlyphMetrics.COMPONENT);
}
return metrics;
}
1.38 +9 -9
xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java
Index: StrokingTextPainter.java
===================================================================
RCS file:
/home/cvs/xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- StrokingTextPainter.java 12 Aug 2002 20:34:35 -0000 1.37
+++ StrokingTextPainter.java 13 Aug 2002 21:33:16 -0000 1.38
@@ -680,7 +680,8 @@
GVTGlyphMetrics lastMetrics =
layout.getGlyphMetrics(layout.getGlyphCount()-1);
Rectangle2D lastBounds = lastMetrics.getBounds2D();
-
+ float lastW = (float)(lastBounds.getWidth()+lastBounds.getX());
+ float lastH = (float)(lastBounds.getHeight()+lastBounds.getY());
Point2D visualAdvance;
if (!doAdjust) {
@@ -688,9 +689,9 @@
// System.out.println("LastBounds: " + lastBounds);
// System.out.println("LastMetrics.hadv: " +
lastMetrics.getHorizontalAdvance());
visualAdvance = new Point2D.Float
- ((float)(chunk.advance.getX() + lastBounds.getWidth() -
+ ((float)(chunk.advance.getX() + lastW -
lastMetrics.getHorizontalAdvance()),
- (float)(chunk.advance.getY() + lastBounds.getHeight() -
+ (float)(chunk.advance.getY() + lastH -
lastMetrics.getVerticalAdvance()));
} else {
Point2D advance = chunk.advance;
@@ -702,22 +703,21 @@
if (layout.isVertical()) {
if (lengthAdj == ADJUST_SPACING) {
yScale = (float)
- ((length.floatValue()-lastBounds.getHeight())/
+ ((length.floatValue()-lastH)/
(advance.getY()-lastMetrics.getVerticalAdvance()));
} else {
double adv = (advance.getY()-
- lastMetrics.getVerticalAdvance() +
- lastBounds.getHeight());
+ lastMetrics.getVerticalAdvance() + lastH);
yScale = (float)(length.floatValue()/adv);
}
visualAdvance = new Point2D.Float(0, length.floatValue());
} else {
if (lengthAdj == ADJUST_SPACING) {
xScale = (float)
- ((length.floatValue()-lastBounds.getWidth())/
+ ((length.floatValue()-lastW)/
(advance.getX()-lastMetrics.getHorizontalAdvance()));
} else {
- double adv = (advance.getX() + lastBounds.getWidth() -
+ double adv = (advance.getX() + lastW -
lastMetrics.getHorizontalAdvance());
xScale = (float)(length.floatValue()/adv);
}
1.45 +4 -4 xml-batik/sources/org/apache/batik/gvt/text/GlyphLayout.java
Index: GlyphLayout.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/text/GlyphLayout.java,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- GlyphLayout.java 12 Aug 2002 20:34:35 -0000 1.44
+++ GlyphLayout.java 13 Aug 2002 21:33:16 -0000 1.45
@@ -1456,14 +1456,14 @@
if ((xScale == 1) && (yScale==1))
return;
- Rectangle2D bounds = gv.getGeometricBounds();
AffineTransform scaleAT =
AffineTransform.getScaleInstance(xScale, yScale);
- float initX = (float) bounds.getX();
- float initY = (float) bounds.getY();
int numGlyphs = gv.getNumGlyphs();
float [] gp = gv.getGlyphPositions(0, numGlyphs+1, null);
+
+ float initX = (float) gp[0];
+ float initY = (float) gp[1];
float dx = 0f;
float dy = 0f;
for (int i = 0; i <= numGlyphs; i++) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]