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