You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2020/09/15 22:53:09 UTC

svn commit: r1881750 - /poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfGraphics.java

Author: kiwiwings
Date: Tue Sep 15 22:53:09 2020
New Revision: 1881750

URL: http://svn.apache.org/viewvc?rev=1881750&view=rev
Log:
#64716 - wmf display error - WmfExtTextOut - move current location to the end of the string after its written to the GraphicsCtx

Modified:
    poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfGraphics.java

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfGraphics.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfGraphics.java?rev=1881750&r1=1881749&r2=1881750&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfGraphics.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfGraphics.java Tue Sep 15 22:53:09 2020
@@ -31,6 +31,7 @@ import java.awt.Shape;
 import java.awt.TexturePaint;
 import java.awt.font.FontRenderContext;
 import java.awt.font.GlyphVector;
+import java.awt.font.LineBreakMeasurer;
 import java.awt.font.TextAttribute;
 import java.awt.font.TextLayout;
 import java.awt.geom.AffineTransform;
@@ -475,6 +476,9 @@ public class HwmfGraphics implements Hwm
 
         calculateDx(textString, dx, font, fontInfo, frc, as);
 
+        LineBreakMeasurer lbm = new LineBreakMeasurer(as.getIterator(), frc);
+        TextLayout textLayout = lbm.nextLayout(Integer.MAX_VALUE);
+
         final double angle = Math.toRadians(-font.getEscapement()/10.);
 
         final Point2D dst = getRotatedOffset(angle, frc, as);
@@ -494,6 +498,19 @@ public class HwmfGraphics implements Hwm
             graphicsCtx.translate(dst.getX(), dst.getY());
             graphicsCtx.setColor(prop.getTextColor().getColor());
             graphicsCtx.drawString(as.getIterator(), 0, 0);
+
+            // move current location to the end of string
+            AffineTransform atRev = new AffineTransform();
+            atRev.translate(-dst.getX(), -dst.getY());
+            if (scale != null) {
+                atRev.scale(scale.getWidth() < 0 ? 1 : -1, scale.getHeight() < 0 ? 1 : -1);
+            }
+            atRev.rotate(-angle);
+
+            Point2D deltaX = new Point2D.Double(textLayout.getBounds().getWidth(), 0);
+            Point2D oldLoc = prop.getLocation();
+            prop.setLocation(oldLoc.getX() + deltaX.getX(), oldLoc.getY() + deltaX.getY());
+
         } finally {
             graphicsCtx.setTransform(at);
             graphicsCtx.setClip(clipShape);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org