]> source.dussan.org Git - poi.git/commitdiff
improved rendering of groupped shapes in xslf
authorYegor Kozlov <yegor@apache.org>
Sun, 4 Dec 2011 11:16:57 +0000 (11:16 +0000)
committerYegor Kozlov <yegor@apache.org>
Sun, 4 Dec 2011 11:16:57 +0000 (11:16 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1210089 13f79535-47bb-0310-9956-ffa450edef68

15 files changed:
src/ooxml/java/org/apache/poi/xslf/usermodel/RenderableShape.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFImageRendener.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRenderingHint.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextRun.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextBox.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java

index 67af3a179c4c3d87598ce2a0025d342a2c1b0472..b46ae8b2bce39cd86b8961046b96970e637366d7 100644 (file)
@@ -102,7 +102,6 @@ class RenderableShape {
      */\r
     public Paint selectPaint(Graphics2D graphics, XmlObject obj, CTSchemeColor phClr, PackagePart parentPart) {\r
         XSLFTheme theme = _shape.getSheet().getTheme();\r
-        Rectangle2D anchor = _shape.getAnchor();\r
 \r
         Paint paint = null;\r
         if (obj instanceof CTNoFillProperties) {\r
@@ -119,6 +118,7 @@ class RenderableShape {
             paint = createTexturePaint(blipFill, graphics, parentPart);\r
         }\r
         else if (obj instanceof CTGradientFillProperties) {\r
+            Rectangle2D anchor = getAnchor(graphics);\r
             CTGradientFillProperties gradFill = (CTGradientFillProperties) obj;\r
             if (gradFill.isSetLin()) {\r
                  paint = createLinearGradientPaint(graphics, gradFill, anchor, theme, phClr);\r
@@ -477,8 +477,6 @@ class RenderableShape {
 \r
         float lineWidth = (float) _shape.getLineWidth();\r
         if(lineWidth == 0.0f) lineWidth = 0.25f; // Both PowerPoint and OOo draw zero-length lines as 0.25pt\r
-        Number fontScale = (Number)graphics.getRenderingHint(XSLFRenderingHint.GROUP_SCALE);\r
-        if(fontScale != null) lineWidth *= fontScale.floatValue();\r
 \r
         LineDash lineDash = _shape.getLineDash();\r
         float[] dash = null;\r
@@ -512,7 +510,7 @@ class RenderableShape {
     }\r
 \r
     public void render(Graphics2D graphics){\r
-        Collection<Outline> elems = computeOutlines();\r
+        Collection<Outline> elems = computeOutlines(graphics);\r
 \r
         // shadow\r
         XSLFShadow shadow = _shape.getShadow();\r
@@ -549,7 +547,7 @@ class RenderableShape {
         }\r
     }\r
 \r
-    private Collection<Outline> computeOutlines() {\r
+    private Collection<Outline> computeOutlines(Graphics2D graphics) {\r
 \r
         Collection<Outline> lst = new ArrayList<Outline>();\r
         CustomGeometry geom = _shape.getGeometry();\r
@@ -557,7 +555,7 @@ class RenderableShape {
             return lst;\r
         }\r
 \r
-        Rectangle2D anchor = _shape.getAnchor();\r
+        Rectangle2D anchor = getAnchor(graphics);\r
         for (Path p : geom) {\r
 \r
             double w = p.getW() == -1 ? anchor.getWidth() * Units.EMU_PER_POINT : p.getW();\r
@@ -615,4 +613,16 @@ class RenderableShape {
         return lst;\r
     }\r
 \r
+    public Rectangle2D getAnchor(Graphics2D graphics) {\r
+        Rectangle2D anchor = _shape.getAnchor();\r
+        if(graphics == null)  {\r
+            return anchor;\r
+        }\r
+\r
+        AffineTransform tx = (AffineTransform)graphics.getRenderingHint(XSLFRenderingHint.GROUP_TRANSFORM);\r
+        if(tx != null) {\r
+            anchor = tx.createTransformedShape(anchor).getBounds2D();\r
+        }\r
+        return anchor;\r
+    }    \r
 }\r
index 7993f11dda6063457c4dc78d77300048960aa237..66cb5abb53fe321897ab52bfcc1d8498c770a2e4 100644 (file)
@@ -282,16 +282,15 @@ public class XSLFGroupShape extends XSLFShape {
         // anchor of this group relative to the parent shape\r
         Rectangle2D exterior = getAnchor();\r
 \r
-        graphics.translate(exterior.getX(), exterior.getY());\r
-        double scaleX = exterior.getWidth() / interior.getWidth();\r
-        double scaleY = exterior.getHeight() / interior.getHeight();\r
+        AffineTransform tx = (AffineTransform)graphics.getRenderingHint(XSLFRenderingHint.GROUP_TRANSFORM);\r
+        AffineTransform tx0 = new AffineTransform(tx);\r
 \r
-        // group transform scales shapes but not fonts\r
-        Number prevFontScale = (Number)graphics.getRenderingHint(XSLFRenderingHint.GROUP_SCALE);\r
-        graphics.setRenderingHint(XSLFRenderingHint.GROUP_SCALE, Math.abs(1/scaleY));\r
+        double scaleX = interior.getWidth() == 0. ? 1.0 : exterior.getWidth() / interior.getWidth();\r
+        double scaleY = interior.getHeight() == 0. ? 1.0 : exterior.getHeight() / interior.getHeight();\r
 \r
-        graphics.scale(scaleX, scaleY);\r
-        graphics.translate(-interior.getX(), -interior.getY());\r
+        tx.translate(exterior.getX(), exterior.getY());\r
+        tx.scale(scaleX, scaleY);\r
+        tx.translate(-interior.getX(), -interior.getY());\r
 \r
         for (XSLFShape shape : getShapes()) {\r
                // remember the initial transform and restore it after we are done with the drawing\r
@@ -306,7 +305,7 @@ public class XSLFGroupShape extends XSLFShape {
             graphics.setRenderingHint(XSLFRenderingHint.GRESTORE, true);\r
         }\r
 \r
-        graphics.setRenderingHint(XSLFRenderingHint.GROUP_SCALE, prevFontScale);\r
+        graphics.setRenderingHint(XSLFRenderingHint.GROUP_TRANSFORM, tx0);\r
         \r
     }\r
 \r
index 3c3d49bfca0321cb8c52beb8a96e62e34fd929ac..06ba1851356c3c1a62c3c57b4b5a7cc7bbe01521 100644 (file)
@@ -80,19 +80,14 @@ public class XSLFImageRendener {
                        Rectangle2D anchor) {\r
                try {\r
                        BufferedImage img = ImageIO.read(data.getPackagePart().getInputStream());\r
-            Number groupScale = (Number)graphics.getRenderingHint(XSLFRenderingHint.GROUP_SCALE);\r
-            if(groupScale != null) {\r
-                double sx = anchor.getWidth()/img.getWidth();\r
-                double sy = anchor.getHeight()/img.getHeight();\r
-                double tx = anchor.getX();\r
-                double ty = anchor.getY();\r
-                AffineTransform at = new AffineTransform(sx, 0, 0, sy, tx, ty) ;\r
-                graphics.drawRenderedImage(img, at);\r
-            } else {\r
-                graphics.drawImage(img,\r
-                        (int) anchor.getX(), (int) anchor.getY(),\r
-                        (int) anchor.getWidth(), (int) anchor.getHeight(), null);\r
-            }\r
+            double sx = anchor.getWidth()/img.getWidth();\r
+            double sy = anchor.getHeight()/img.getHeight();\r
+            double tx = anchor.getX();\r
+            double ty = anchor.getY();\r
+            AffineTransform at = new AffineTransform(sx, 0, 0, sy, tx, ty) ;\r
+\r
+            graphics.drawRenderedImage(img, at);\r
+\r
                        return true;\r
                } catch (Exception e) {\r
                        return false;\r
index ac4a4d2870093ddcff76dcb49f6cee1c524ca3c9..dd25953da655e8f33cc36fa3721d46a041502636 100644 (file)
@@ -16,6 +16,7 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.POIXMLDocumentPart;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.util.Beta;
@@ -77,7 +78,12 @@ public final class XSLFNotes extends XSLFSheet {
     }
 
     @Override
-    public XSLFSheet getMasterSheet() {
+    public XSLFNotesMaster getMasterSheet() {
+        for (POIXMLDocumentPart p : getRelations()) {
+           if (p instanceof XSLFNotesMaster){
+              return (XSLFNotesMaster)p;
+           }
+        }
         return null;
     }
 }
index 1b5bbea2e42981f49a99c490b2998efc10b93d88..75cc4d15d005512f5fcff64f4f31485da683934d 100644 (file)
@@ -129,7 +129,10 @@ public class XSLFPictureShape extends XSLFSimpleShape {
         XSLFImageRendener renderer = (XSLFImageRendener)graphics.getRenderingHint(XSLFRenderingHint.IMAGE_RENDERER);\r
         if(renderer == null) renderer = new XSLFImageRendener();\r
 \r
-        renderer.drawImage(graphics, data, getAnchor());\r
+        RenderableShape rShape = new RenderableShape(this);\r
+        Rectangle2D anchor = rShape.getAnchor(graphics);\r
+\r
+        renderer.drawImage(graphics, data, anchor);\r
     }\r
 \r
 \r
index 1b467ce82a02d053bdb4740e02990e66d3ed083a..715530c67c0b25599921b429d61e506d724dec4f 100644 (file)
@@ -75,7 +75,7 @@ public class XSLFRenderingHint extends RenderingHints.Key {
     public static final int TEXT_AS_SHAPES = 2;\r
 \r
     @Internal\r
-    static final XSLFRenderingHint GROUP_SCALE = new XSLFRenderingHint(5);\r
+    static final XSLFRenderingHint GROUP_TRANSFORM = new XSLFRenderingHint(5);\r
 \r
     /**\r
      * Use this object to resolve unknown / missing fonts when rendering slides\r
index 00191df6f0bc8dc641d35b3cd3ac6f5e9cd2a3ce..c22d0fdf70ad7a0adad929985fc1195180e4e85c 100644 (file)
@@ -24,6 +24,7 @@ import org.apache.poi.util.Internal;
 import org.apache.xmlbeans.XmlObject;\r
 \r
 import java.awt.Graphics2D;\r
+import java.awt.geom.AffineTransform;\r
 import java.awt.geom.Rectangle2D;\r
 \r
 /**\r
@@ -131,6 +132,10 @@ public abstract class XSLFShape {
      */\r
     protected void applyTransform(Graphics2D graphics) {\r
         Rectangle2D anchor = getAnchor();\r
+        AffineTransform tx = (AffineTransform)graphics.getRenderingHint(XSLFRenderingHint.GROUP_TRANSFORM);\r
+        if(tx != null) {\r
+            anchor = tx.createTransformedShape(anchor).getBounds2D();\r
+        }\r
 \r
         // rotation\r
         double rotation = getRotation();\r
index fb8da22e1783c50612ca0e7a914476c82a432223..ce568f0ff6a3925a4d67b04898d8af9d3fc385fc 100644 (file)
@@ -430,6 +430,7 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements Iterable<X
         XSLFSheet master = getMasterSheet();
         if(getFollowMasterGraphics() && master != null) master.draw(graphics);
 
+        graphics.setRenderingHint(XSLFRenderingHint.GROUP_TRANSFORM, new AffineTransform());
         for(XSLFShape shape : getShapeList()) {
             if(!canDraw(shape)) continue;
 
index 7b4af9d3c2af9d7f86a1def1566753500d7c26f4..19150d0839f53163006baa4845955bf8811daaed 100644 (file)
@@ -544,7 +544,7 @@ public abstract class XSLFSimpleShape extends XSLFShape {
         Color lineColor = getLineColor();\r
         if(lineColor != null) {\r
             graphics.setPaint(lineColor);\r
-            for(Outline o : getDecorationOutlines()){\r
+            for(Outline o : getDecorationOutlines(graphics)){\r
                 if(o.getPath().isFilled()){\r
                     graphics.fill(o.getOutline());\r
                 }\r
@@ -820,13 +820,13 @@ public abstract class XSLFSimpleShape extends XSLFShape {
         return len == null ? LineEndLength.MEDIUM : LineEndLength.values()[len.intValue() - 1];\r
     }\r
 \r
-    Outline getTailDecoration() {\r
+    Outline getTailDecoration(Graphics2D graphics) {\r
         LineEndLength tailLength = getLineTailLength();\r
         LineEndWidth tailWidth = getLineTailWidth();\r
 \r
         double lineWidth = Math.max(2.5, getLineWidth());\r
 \r
-        Rectangle2D anchor = getAnchor();\r
+        Rectangle2D anchor = new RenderableShape(this).getAnchor(graphics);\r
         double x2 = anchor.getX() + anchor.getWidth(),\r
                 y2 = anchor.getY() + anchor.getHeight();\r
 \r
@@ -879,12 +879,13 @@ public abstract class XSLFSimpleShape extends XSLFShape {
         return shape == null ? null : new Outline(shape, p);\r
     }\r
 \r
-    Outline getHeadDecoration() {\r
+    Outline getHeadDecoration(Graphics2D graphics) {\r
         LineEndLength headLength = getLineHeadLength();\r
         LineEndWidth headWidth = getLineHeadWidth();\r
 \r
         double lineWidth = Math.max(2.5, getLineWidth());\r
-        Rectangle2D anchor = getAnchor();\r
+\r
+        Rectangle2D anchor = new RenderableShape(this).getAnchor(graphics);\r
         double x1 = anchor.getX(),\r
                 y1 = anchor.getY();\r
 \r
@@ -938,13 +939,13 @@ public abstract class XSLFSimpleShape extends XSLFShape {
         return shape == null ? null : new Outline(shape, p);\r
     }\r
 \r
-    private List<Outline> getDecorationOutlines(){\r
+    private List<Outline> getDecorationOutlines(Graphics2D graphics){\r
         List<Outline> lst = new ArrayList<Outline>();\r
 \r
-        Outline head = getHeadDecoration();\r
+        Outline head = getHeadDecoration(graphics);\r
         if(head != null) lst.add(head);\r
 \r
-        Outline tail = getTailDecoration();\r
+        Outline tail = getTailDecoration(graphics);\r
         if(tail != null) lst.add(tail);\r
         return lst;\r
     }\r
index 833e6deb93ffa146067f73a59d9913472f89e46d..5f9713e7ee35fbd212345396457f9815f38feded 100644 (file)
 \r
 package org.apache.poi.xslf.usermodel;\r
 \r
+import org.apache.poi.POIXMLException;\r
 import org.apache.poi.util.Internal;\r
 import org.apache.poi.util.Units;\r
 import org.apache.xmlbeans.XmlCursor;\r
+import org.apache.xmlbeans.XmlException;\r
 import org.apache.xmlbeans.XmlObject;\r
+import org.apache.xmlbeans.impl.values.XmlAnyTypeImpl;\r
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTDTable;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTable;\r
@@ -50,13 +54,23 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow
     /*package*/ XSLFTable(CTGraphicalObjectFrame shape, XSLFSheet sheet){\r
         super(shape, sheet);\r
 \r
-        for(XmlObject obj : shape.getGraphic().getGraphicData().selectPath("*")){\r
-            if(obj instanceof CTTable){\r
-                _table = (CTTable)obj;\r
+        XmlObject[] rs = shape.getGraphic().getGraphicData()\r
+                .selectPath("declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' ./a:tbl");\r
+        if (rs.length == 0) {\r
+            throw new IllegalStateException("a:tbl element was not found in\n " + shape.getGraphic().getGraphicData());\r
+        }\r
+\r
+        // Pesky XmlBeans bug - see Bugzilla #49934\r
+        // it never happens when using the full ooxml-schemas jar but may happen with the abridged poi-ooxml-schemas\r
+        if(rs[0] instanceof XmlAnyTypeImpl){\r
+            try {\r
+                rs[0] = CTTable.Factory.parse(rs[0].toString());\r
+            }catch (XmlException e){\r
+                throw new POIXMLException(e);\r
             }\r
         }\r
-        if(_table == null) throw new IllegalStateException("CTTable element was not found");\r
 \r
+        _table = (CTTable) rs[0];\r
         _rows = new ArrayList<XSLFTableRow>(_table.sizeOfTrArray());\r
         for(CTTableRow row : _table.getTrList()) _rows.add(new XSLFTableRow(row, this));\r
     }\r
index 67a5013c8311e5bb6365ee8a328650f9d93746f9..b7901c4f124656d766c6e3f974bb60ed2e359107 100644 (file)
@@ -633,12 +633,13 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
      *\r
      * @return  wrapping width in points\r
      */\r
-    double getWrappingWidth(boolean firstLine){\r
+    double getWrappingWidth(boolean firstLine, Graphics2D graphics){\r
         // internal margins for the text box\r
         double leftInset = _shape.getLeftInset();\r
         double rightInset = _shape.getRightInset();\r
 \r
-        Rectangle2D anchor = _shape.getAnchor();\r
+        RenderableShape rShape = new RenderableShape(_shape);\r
+        Rectangle2D anchor = rShape.getAnchor(graphics);\r
 \r
         double leftMargin = getLeftMargin();\r
         double indent = getIndent();\r
@@ -667,7 +668,8 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
     public double draw(Graphics2D graphics, double x, double y){\r
         double leftInset = _shape.getLeftInset();\r
         double rightInset = _shape.getRightInset();\r
-        Rectangle2D anchor = _shape.getAnchor();\r
+        RenderableShape rShape = new RenderableShape(_shape);\r
+        Rectangle2D anchor = rShape.getAnchor(graphics);\r
         double penY = y;\r
 \r
         double leftMargin = getLeftMargin();\r
@@ -758,10 +760,8 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
             string.addAttribute(TextAttribute.FAMILY, fontFamily, startIndex, endIndex);\r
 \r
             float fontSz = (float)run.getFontSize();\r
-            Number fontScale = (Number)graphics.getRenderingHint(XSLFRenderingHint.GROUP_SCALE);\r
-            if(fontScale != null) fontSz *= fontScale.floatValue();\r
-\r
             string.addAttribute(TextAttribute.SIZE, fontSz , startIndex, endIndex);\r
+\r
             if(run.isBold()) {\r
                 string.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, startIndex, endIndex);\r
             }\r
@@ -827,7 +827,7 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
         for (;;) {\r
             int startIndex = measurer.getPosition();\r
 \r
-            double wrappingWidth = getWrappingWidth(_lines.size() == 0) + 1; // add a pixel to compensate rounding errors\r
+            double wrappingWidth = getWrappingWidth(_lines.size() == 0, graphics) + 1; // add a pixel to compensate rounding errors\r
             // shape width can be smaller that the sum of insets (this was proved by a test file)\r
             if(wrappingWidth < 0) wrappingWidth = 1;\r
 \r
@@ -901,21 +901,23 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
     CTTextParagraphProperties getDefaultMasterStyle(){\r
         CTPlaceholder ph = _shape.getCTPlaceholder();\r
         String defaultStyleSelector;\r
-        switch(ph.getType().intValue()){\r
-            case STPlaceholderType.INT_TITLE:\r
-            case STPlaceholderType.INT_CTR_TITLE:\r
-                defaultStyleSelector = "titleStyle";\r
-                break;\r
-            case STPlaceholderType.INT_FTR:\r
-            case STPlaceholderType.INT_SLD_NUM:\r
-            case STPlaceholderType.INT_DT:\r
-                defaultStyleSelector = "otherStyle";\r
-                break;\r
-            default:\r
-                defaultStyleSelector = "bodyStyle";\r
-                break;\r
+        if(ph == null) defaultStyleSelector = "otherStyle";   // no placeholder means plain text box\r
+        else {\r
+            switch(ph.getType().intValue()){\r
+                case STPlaceholderType.INT_TITLE:\r
+                case STPlaceholderType.INT_CTR_TITLE:\r
+                    defaultStyleSelector = "titleStyle";\r
+                    break;\r
+                case STPlaceholderType.INT_FTR:\r
+                case STPlaceholderType.INT_SLD_NUM:\r
+                case STPlaceholderType.INT_DT:\r
+                    defaultStyleSelector = "otherStyle";\r
+                    break;\r
+                default:\r
+                    defaultStyleSelector = "bodyStyle";\r
+                    break;\r
+            }\r
         }\r
-\r
         int level = getLevel();\r
 \r
         // wind up and find the root master sheet which must be slide master\r
@@ -951,7 +953,9 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
                     XMLSlideShow ppt = getParentShape().getSheet().getSlideShow();\r
                     CTTextParagraphProperties themeProps = ppt.getDefaultParagraphStyle(getLevel());\r
                     if(themeProps != null) ok = visitor.fetch(themeProps);\r
-                } else {\r
+                }\r
+\r
+                if(!ok){\r
                     // defaults for placeholders are defined in the slide master\r
                     CTTextParagraphProperties defaultProps = getDefaultMasterStyle();\r
                     if(defaultProps != null) ok = visitor.fetch(defaultProps);\r
index cb7e5fc12fc7f67fbd64c238e14f33b6a05fb796..cd94cdd0b3dada22574c6b130bd483228b3d24d4 100644 (file)
@@ -478,8 +478,8 @@ public class XSLFTextRun {
                         fetcher.isFetchingFromMaster = true;\r
                         ok = fetcher.fetch(themeProps);\r
                     }\r
-                } else {\r
-                    // defaults for placeholders are defined in the slide master\r
+                }\r
+                if (!ok) {\r
                     CTTextParagraphProperties defaultProps =  _p.getDefaultMasterStyle();\r
                     if(defaultProps != null) {\r
                         fetcher.isFetchingFromMaster = true;\r
index c54d74e1f4c325f294686b5d8ed2763a5722916e..5cdbcef18f6d2e5033db58ef1cb1273ce9fa6a41 100644 (file)
@@ -469,7 +469,8 @@ public abstract class XSLFTextShape extends XSLFSimpleShape implements Iterable<
     public void drawContent(Graphics2D graphics) {
         breakText(graphics);
 
-        Rectangle2D anchor = getAnchor();
+        RenderableShape rShape = new RenderableShape(this);
+        Rectangle2D anchor = rShape.getAnchor(graphics);
         double x = anchor.getX() + getLeftInset();
         double y = anchor.getY();
 
index 4f921ac05aca8bc4bc73c1279ae9b30ef2ff3979..2176a1b2ea45b4dcc503a8dd2abc91ac2e415582 100644 (file)
@@ -62,5 +62,18 @@ public class TestXSLFTextBox extends TestCase {
         pPr.getLatin().setTypeface("Arial");\r
         assertEquals(9.0, r.getFontSize());\r
         assertEquals("Arial", r.getFontFamily());\r
+\r
+        // unset font size in presentation.xml. The value should be taken from master slide\r
+        // from /p:sldMaster/p:txStyles/p:otherStyle/a:lvl1pPr/a:defRPr\r
+        ppt.getCTPresentation().getDefaultTextStyle().getLvl1PPr().getDefRPr().unsetSz();\r
+        pPr = slide.getSlideMaster().getXmlObject().getTxStyles().getOtherStyle().getLvl1PPr().getDefRPr();\r
+        assertEquals(1800, pPr.getSz());\r
+        assertEquals(18.0, r.getFontSize());\r
+        pPr.setSz(2000);\r
+        assertEquals(20.0, r.getFontSize());\r
+\r
+        pPr.unsetSz();  // Should never be\r
+        assertEquals(-1.0, r.getFontSize());\r
+\r
     }\r
 }
\ No newline at end of file
index 62d3c52397a246e5be9623e05e2033e9c5bebad2..d2d8823b12fe85b24c8f81c3455db6862a586c5e 100755 (executable)
@@ -51,16 +51,16 @@ public class TestXSLFTextParagraph extends TestCase {
         // Case 1: bullet=false, leftMargin=0, indent=0.\r
         expectedWidth = anchor.getWidth() - leftInset - rightInset - leftMargin;\r
         assertEquals(285.6, expectedWidth); // 300 - 7.2 - 7.2 - 0\r
-        assertEquals(expectedWidth, p.getWrappingWidth(true));\r
-        assertEquals(expectedWidth, p.getWrappingWidth(false));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(true, null));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(false, null));\r
 \r
         p.setLeftMargin(36); // 0.5"\r
         leftMargin = p.getLeftMargin();\r
         assertEquals(36.0, leftMargin);\r
         expectedWidth = anchor.getWidth() - leftInset - rightInset - leftMargin;\r
         assertEquals(249.6, expectedWidth, 1E-5); // 300 - 7.2 - 7.2 - 36\r
-        assertEquals(expectedWidth, p.getWrappingWidth(true));\r
-        assertEquals(expectedWidth, p.getWrappingWidth(false));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(true, null));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(false, null));\r
 \r
         // increase insets, the wrapping width should get smaller\r
         sh.setLeftInset(10);\r
@@ -71,8 +71,8 @@ public class TestXSLFTextParagraph extends TestCase {
         assertEquals(10.0, rightInset);\r
         expectedWidth = anchor.getWidth() - leftInset - rightInset - leftMargin;\r
         assertEquals(244.0, expectedWidth); // 300 - 10 - 10 - 36\r
-        assertEquals(expectedWidth, p.getWrappingWidth(true));\r
-        assertEquals(expectedWidth, p.getWrappingWidth(false));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(true, null));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(false, null));\r
 \r
         // set a positive indent of a 0.5 inch. This means "First Line" indentation:\r
         // |<---  indent -->|Here goes first line of the text\r
@@ -83,11 +83,11 @@ public class TestXSLFTextParagraph extends TestCase {
         assertEquals(36.0, indent);\r
         expectedWidth = anchor.getWidth() - leftInset - rightInset - leftMargin - indent;\r
         assertEquals(208.0, expectedWidth); // 300 - 10 - 10 - 36 - 6.4\r
-        assertEquals(expectedWidth, p.getWrappingWidth(true)); // first line is indented\r
+        assertEquals(expectedWidth, p.getWrappingWidth(true, null)); // first line is indented\r
         // other lines are not indented\r
         expectedWidth = anchor.getWidth() - leftInset - rightInset - leftMargin;\r
         assertEquals(244.0, expectedWidth); // 300 - 10 - 10 - 36\r
-        assertEquals(expectedWidth, p.getWrappingWidth(false));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(false, null));\r
 \r
         // set a negative indent of a 1 inch. This means "Hanging" indentation:\r
         // Here goes first line of the text\r
@@ -97,11 +97,11 @@ public class TestXSLFTextParagraph extends TestCase {
         assertEquals(-72.0, indent);\r
         expectedWidth = anchor.getWidth() - leftInset - rightInset;\r
         assertEquals(280.0, expectedWidth); // 300 - 10 - 10 \r
-        assertEquals(expectedWidth, p.getWrappingWidth(true)); // first line is NOT indented\r
+        assertEquals(expectedWidth, p.getWrappingWidth(true, null)); // first line is NOT indented\r
         // other lines are indented by leftMargin (the value of indent is not used)\r
         expectedWidth = anchor.getWidth() - leftInset - rightInset - leftMargin;\r
         assertEquals(244.0, expectedWidth); // 300 - 10 - 10 - 36 \r
-        assertEquals(expectedWidth, p.getWrappingWidth(false));\r
+        assertEquals(expectedWidth, p.getWrappingWidth(false, null));\r
      }\r
 \r
     /**\r