]> source.dussan.org Git - poi.git/commitdiff
#57786 - XSLFFreeformShape ignores quadratic bezier curves
authorAndreas Beeker <kiwiwings@apache.org>
Wed, 5 Aug 2015 23:24:13 +0000 (23:24 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Wed, 5 Aug 2015 23:24:13 +0000 (23:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1694373 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java

index 07a84caa52a09eb12954ae52e2c072209d8f999b..8acc12b442bb3b0732dc2471b130c941945e4f0b 100644 (file)
@@ -37,6 +37,7 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DClose;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DCubicBezierTo;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DLineTo;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DMoveTo;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.CTPath2DQuadBezierTo;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;\r
 import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;\r
 import org.openxmlformats.schemas.presentationml.x2006.main.CTShapeNonVisual;\r
@@ -81,6 +82,16 @@ public class XSLFFreeformShape extends XSLFAutoShape implements FreeformShape<XS
                     ln.setY(Units.toEMU(vals[1]) - y0);\r
                     numPoints++;\r
                     break;\r
+                case PathIterator.SEG_QUADTO:\r
+                    CTPath2DQuadBezierTo qbez = ctPath.addNewQuadBezTo();\r
+                    CTAdjPoint2D qp1 = qbez.addNewPt();\r
+                    qp1.setX(Units.toEMU(vals[0]) - x0);\r
+                    qp1.setY(Units.toEMU(vals[1]) - y0);\r
+                    CTAdjPoint2D qp2 = qbez.addNewPt();\r
+                    qp2.setX(Units.toEMU(vals[2]) - x0);\r
+                    qp2.setY(Units.toEMU(vals[3]) - y0);\r
+                    numPoints += 2;\r
+                    break;\r
                 case PathIterator.SEG_CUBICTO:\r
                     CTPath2DCubicBezierTo bez = ctPath.addNewCubicBezTo();\r
                     CTAdjPoint2D p1 = bez.addNewPt();\r
@@ -126,6 +137,15 @@ public class XSLFFreeformShape extends XSLFAutoShape implements FreeformShape<XS
                     CTAdjPoint2D pt = ((CTPath2DLineTo)ch).getPt();\r
                     path.lineTo((float)Units.toPoints((Long)pt.getX()),\r
                                 (float)Units.toPoints((Long)pt.getY()));\r
+                } else if (ch instanceof CTPath2DQuadBezierTo){\r
+                    CTPath2DQuadBezierTo bez = ((CTPath2DQuadBezierTo)ch);\r
+                    CTAdjPoint2D pt1 = bez.getPtArray(0);\r
+                    CTAdjPoint2D pt2 = bez.getPtArray(1);\r
+                    path.quadTo(\r
+                            (float) (Units.toPoints((Long) pt1.getX()) * scaleW),\r
+                            (float) (Units.toPoints((Long) pt1.getY()) * scaleH),\r
+                            (float) (Units.toPoints((Long) pt2.getX()) * scaleW),\r
+                            (float) (Units.toPoints((Long) pt2.getY()) * scaleH));\r
                 } else if (ch instanceof CTPath2DCubicBezierTo){\r
                     CTPath2DCubicBezierTo bez = ((CTPath2DCubicBezierTo)ch);\r
                     CTAdjPoint2D pt1 = bez.getPtArray(0);\r
@@ -137,8 +157,7 @@ public class XSLFFreeformShape extends XSLFAutoShape implements FreeformShape<XS
                             (float) (Units.toPoints((Long) pt2.getX()) * scaleW),\r
                             (float) (Units.toPoints((Long) pt2.getY()) * scaleH),\r
                             (float) (Units.toPoints((Long) pt3.getX()) * scaleW),\r
-                            (float) (Units.toPoints((Long) pt3.getY()) * scaleH)                    );\r
-\r
+                            (float) (Units.toPoints((Long) pt3.getY()) * scaleH));\r
                 } else if (ch instanceof CTPath2DClose){\r
                     path.closePath();\r
                 }\r