Parcourir la source

In preparation for table rendering, added table row heights and column widths to common sl.

To have better results in rendering switch anchor from java.awt.Rectangle to Rectangle2D.

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1715540 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_14_BETA1
Andreas Beeker il y a 8 ans
Parent
révision
74d58c8bde
41 fichiers modifiés avec 459 ajouts et 287 suppressions
  1. 3
    2
      src/examples/src/org/apache/poi/hslf/examples/ApacheconEU08.java
  2. 2
    1
      src/examples/src/org/apache/poi/hslf/examples/TableDemo.java
  3. 3
    4
      src/java/org/apache/poi/sl/draw/DrawBackground.java
  4. 9
    10
      src/java/org/apache/poi/sl/draw/DrawPictureShape.java
  5. 2
    3
      src/java/org/apache/poi/sl/draw/DrawTextParagraph.java
  6. 3
    3
      src/java/org/apache/poi/sl/usermodel/GroupShape.java
  7. 3
    3
      src/java/org/apache/poi/sl/usermodel/PlaceableShape.java
  8. 2
    2
      src/java/org/apache/poi/sl/usermodel/Shape.java
  9. 16
    0
      src/java/org/apache/poi/sl/usermodel/TableShape.java
  10. 3
    3
      src/java/org/apache/poi/util/Units.java
  11. 3
    3
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java
  12. 10
    10
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java
  13. 1
    2
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java
  14. 11
    9
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java
  15. 17
    15
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java
  16. 3
    3
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java
  17. 8
    8
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
  18. 6
    0
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
  19. 3
    3
      src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
  20. 64
    0
      src/ooxml/testcases/org/apache/poi/sl/TestTable.java
  21. 23
    8
      src/ooxml/testcases/org/apache/poi/sl/draw/TestDrawPictureShape.java
  22. 11
    6
      src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFConnectorShape.java
  23. 3
    3
      src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFFreeformShape.java
  24. 3
    3
      src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFGroupShape.java
  25. 6
    6
      src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java
  26. 1
    2
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFreeformShape.java
  27. 37
    37
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java
  28. 4
    2
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFPictureShape.java
  29. 10
    10
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFShape.java
  30. 7
    7
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSheet.java
  31. 60
    31
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java
  32. 21
    21
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTableCell.java
  33. 7
    4
      src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextShape.java
  34. 2
    2
      src/scratchpad/testcases/org/apache/poi/hslf/model/TestMovieShape.java
  35. 29
    13
      src/scratchpad/testcases/org/apache/poi/hslf/model/TestOleEmbedding.java
  36. 34
    22
      src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java
  37. 23
    20
      src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java
  38. 4
    4
      src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTable.java
  39. 2
    2
      src/testcases/org/apache/poi/sl/draw/geom/TestPresetGeometries.java
  40. BIN
      test-data/slideshow/table_test.ppt
  41. BIN
      test-data/slideshow/table_test.pptx

+ 3
- 2
src/examples/src/org/apache/poi/hslf/examples/ApacheconEU08.java Voir le fichier

@@ -22,6 +22,7 @@ import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
@@ -183,8 +184,8 @@ public final class ApacheconEU08 {
table1.setRowHeight(1, 80);

Dimension dim = ppt.getPageSize();
Rectangle oldAnchor = table1.getAnchor();
table1.setAnchor(new Rectangle((dim.width-450)/2, 100, oldAnchor.width, oldAnchor.height));
Rectangle2D oldAnchor = table1.getAnchor();
table1.setAnchor(new Rectangle2D.Double((dim.width-450)/2, 100, oldAnchor.getWidth(), oldAnchor.getHeight()));

TextBox<?,?> box1 = slide.createTextBox();
box1.setHorizontalCentered(true);

+ 2
- 1
src/examples/src/org/apache/poi/hslf/examples/TableDemo.java Voir le fichier

@@ -78,7 +78,7 @@ public final class TableDemo {
table1.setColumnWidth(1, 150);

int pgWidth = ppt.getPageSize().width;
table1.moveTo((pgWidth - table1.getAnchor().width)/2, 100);
table1.moveTo((pgWidth - table1.getAnchor().getWidth())/2., 100.);

//test data for the second taable
String[][] txt2 = {
@@ -125,5 +125,6 @@ public final class TableDemo {
ppt.write(out);
out.close();

ppt.close();
}
}

+ 3
- 4
src/java/org/apache/poi/sl/draw/DrawBackground.java Voir le fichier

@@ -20,7 +20,6 @@ package org.apache.poi.sl.draw;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import org.apache.poi.sl.usermodel.Background;
@@ -36,12 +35,12 @@ public class DrawBackground extends DrawShape {
@SuppressWarnings("rawtypes")
public void draw(Graphics2D graphics) {
Dimension pg = shape.getSheet().getSlideShow().getPageSize();
final Rectangle anchor = new Rectangle(0, 0, (int)pg.getWidth(), (int)pg.getHeight());
final Rectangle2D anchor = new Rectangle2D.Double(0, 0, pg.getWidth(), pg.getHeight());
PlaceableShape<?,?> ps = new PlaceableShape(){
public ShapeContainer<?,?> getParent() { return null; }
public Rectangle getAnchor() { return anchor; }
public void setAnchor(Rectangle newAnchor) {}
public Rectangle2D getAnchor() { return anchor; }
public void setAnchor(Rectangle2D newAnchor) {}
public double getRotation() { return 0; }
public void setRotation(double theta) {}
public void setFlipHorizontal(boolean flip) {}

+ 9
- 10
src/java/org/apache/poi/sl/draw/DrawPictureShape.java Voir le fichier

@@ -20,7 +20,6 @@ package org.apache.poi.sl.draw;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
@@ -70,12 +69,12 @@ public class DrawPictureShape extends DrawSimpleShape {
PictureShape<?,?> ps = getShape();
Dimension dim = ps.getPictureData().getImageDimension();
Rectangle origRect = ps.getAnchor();
int x = (int)origRect.getX();
int y = (int)origRect.getY();
int w = (int)dim.getWidth();
int h = (int)dim.getHeight();
ps.setAnchor(new Rectangle(x, y, w, h));
Rectangle2D origRect = ps.getAnchor();
double x = origRect.getX();
double y = origRect.getY();
double w = dim.getWidth();
double h = dim.getHeight();
ps.setAnchor(new Rectangle2D.Double(x, y, w, h));
}
@@ -85,7 +84,7 @@ public class DrawPictureShape extends DrawSimpleShape {
*
* @param target The target rectangle
*/
public void resize(Rectangle target) {
public void resize(Rectangle2D target) {
resize(target, RectAlign.CENTER);
}
@@ -100,7 +99,7 @@ public class DrawPictureShape extends DrawSimpleShape {
* The alignment within the target rectangle when resizing.
* A null value corresponds to RectAlign.CENTER
*/
public void resize(Rectangle target, RectAlign align) {
public void resize(Rectangle2D target, RectAlign align) {
PictureShape<?,?> ps = getShape();
Dimension dim = ps.getPictureData().getImageDimension();
if (dim.width <= 0 || dim.height <= 0) {
@@ -170,6 +169,6 @@ public class DrawPictureShape extends DrawSimpleShape {
break;
}
ps.setAnchor(new Rectangle((int)x, (int)y, (int)w, (int)h));
ps.setAnchor(new Rectangle2D.Double(x, y, w, h));
}
}

+ 2
- 3
src/java/org/apache/poi/sl/draw/DrawTextParagraph.java Voir le fichier

@@ -19,7 +19,6 @@ package org.apache.poi.sl.draw;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.font.FontRenderContext;
import java.awt.font.LineBreakMeasurer;
import java.awt.font.TextAttribute;
@@ -427,8 +426,8 @@ public class DrawTextParagraph implements Drawable {
private PlaceableShape<?,?> getParagraphShape() {
PlaceableShape<?,?> ps = new PlaceableShape(){
public ShapeContainer<?,?> getParent() { return null; }
public Rectangle getAnchor() { return paragraph.getParentShape().getAnchor(); }
public void setAnchor(Rectangle anchor) {}
public Rectangle2D getAnchor() { return paragraph.getParentShape().getAnchor(); }
public void setAnchor(Rectangle2D anchor) {}
public double getRotation() { return 0; }
public void setRotation(double theta) {}
public void setFlipHorizontal(boolean flip) {}

+ 3
- 3
src/java/org/apache/poi/sl/usermodel/GroupShape.java Voir le fichier

@@ -17,7 +17,7 @@

package org.apache.poi.sl.usermodel;

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;

public interface GroupShape<
S extends Shape<S,P>,
@@ -30,7 +30,7 @@ public interface GroupShape<
*
* @return the coordinate space of this group
*/
Rectangle getInteriorAnchor();
Rectangle2D getInteriorAnchor();
/**
* Sets the coordinate space of this group. All children are constrained
@@ -38,5 +38,5 @@ public interface GroupShape<
*
* @param anchor the coordinate space of this group
*/
void setInteriorAnchor(Rectangle anchor);
void setInteriorAnchor(Rectangle2D anchor);
}

+ 3
- 3
src/java/org/apache/poi/sl/usermodel/PlaceableShape.java Voir le fichier

@@ -17,7 +17,7 @@
package org.apache.poi.sl.usermodel;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
public interface PlaceableShape<
S extends Shape<S,P>,
@@ -29,13 +29,13 @@ public interface PlaceableShape<
* @return the position of this shape within the drawing canvas.
* The coordinates are expressed in points
*/
Rectangle getAnchor();
Rectangle2D getAnchor();
/**
* @param anchor the position of this shape within the drawing canvas.
* The coordinates are expressed in points
*/
void setAnchor(Rectangle anchor);
void setAnchor(Rectangle2D anchor);
/**
* Rotation angle in degrees

+ 2
- 2
src/java/org/apache/poi/sl/usermodel/Shape.java Voir le fichier

@@ -17,7 +17,7 @@

package org.apache.poi.sl.usermodel;

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;

public interface Shape<
S extends Shape<S,P>,
@@ -37,5 +37,5 @@ public interface Shape<
*
* @return the anchor of this shape
*/
Rectangle getAnchor();
Rectangle2D getAnchor();
}

+ 16
- 0
src/java/org/apache/poi/sl/usermodel/TableShape.java Voir le fichier

@@ -27,6 +27,14 @@ public interface TableShape<
TableCell<S,P> getCell(int row, int col);
/**
* Gets the width (in points) of the n-th column
*
* @param idx the column index (0-based)
* @return the width (in points)
*/
double getColumnWidth(int idx);
/**
* Sets the width (in points) of the n-th column
*
@@ -35,6 +43,14 @@ public interface TableShape<
*/
void setColumnWidth(int idx, double width);
/**
* Gets the row height
*
* @param row the row index (0-based)
* @return the height (in points)
*/
double getRowHeight(int row);
/**
* Sets the row height.
*

+ 3
- 3
src/java/org/apache/poi/util/Units.java Voir le fichier

@@ -51,7 +51,7 @@ public class Units {
* @return emus
*/
public static int toEMU(double points){
return (int)Math.round(EMU_PER_POINT*points);
return (int)Math.rint(EMU_PER_POINT*points);
}
/**
@@ -103,13 +103,13 @@ public class Units {
public static int pointsToMaster(double points) {
points *= MASTER_DPI;
points /= POINT_DPI;
return (int)points;
return (int)Math.rint(points);
}
public static int pointsToPixel(double points) {
points *= PIXEL_DPI;
points /= POINT_DPI;
return (int)points;
return (int)Math.rint(points);
}
public static double pixelToPoints(int pixel) {

+ 3
- 3
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java Voir le fichier

@@ -19,7 +19,7 @@ package org.apache.poi.xslf.usermodel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import org.apache.poi.sl.draw.DrawPaint;
import org.apache.poi.sl.usermodel.Background;
@@ -43,9 +43,9 @@ public class XSLFBackground extends XSLFSimpleShape
}
@Override
public Rectangle getAnchor(){
public Rectangle2D getAnchor(){
Dimension pg = getSheet().getSlideShow().getPageSize();
return new Rectangle(0, 0, (int)pg.getWidth(), (int)pg.getHeight());
return new Rectangle2D.Double(0, 0, pg.getWidth(), pg.getHeight());
}
@Override

+ 10
- 10
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java Voir le fichier

@@ -16,6 +16,9 @@
==================================================================== */
package org.apache.poi.xslf.usermodel;
import java.awt.Color;
import java.awt.geom.Rectangle2D;
import org.apache.poi.util.Beta;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
@@ -25,9 +28,6 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import java.awt.Color;
import java.awt.Rectangle;
/**
* @author Yegor Kozlov
@@ -57,7 +57,7 @@ public class XSLFDrawing {
CTShape sp = _spTree.addNewSp();
sp.set(XSLFAutoShape.prototype(_shapeId++));
XSLFAutoShape shape = new XSLFAutoShape(sp, _sheet);
shape.setAnchor(new Rectangle());
shape.setAnchor(new Rectangle2D.Double());
return shape;
}
@@ -65,7 +65,7 @@ public class XSLFDrawing {
CTShape sp = _spTree.addNewSp();
sp.set(XSLFFreeformShape.prototype(_shapeId++));
XSLFFreeformShape shape = new XSLFFreeformShape(sp, _sheet);
shape.setAnchor(new Rectangle());
shape.setAnchor(new Rectangle2D.Double());
return shape;
}
@@ -73,7 +73,7 @@ public class XSLFDrawing {
CTShape sp = _spTree.addNewSp();
sp.set(XSLFTextBox.prototype(_shapeId++));
XSLFTextBox shape = new XSLFTextBox(sp, _sheet);
shape.setAnchor(new Rectangle());
shape.setAnchor(new Rectangle2D.Double());
return shape;
}
@@ -81,7 +81,7 @@ public class XSLFDrawing {
CTConnector sp = _spTree.addNewCxnSp();
sp.set(XSLFConnectorShape.prototype(_shapeId++));
XSLFConnectorShape shape = new XSLFConnectorShape(sp, _sheet);
shape.setAnchor(new Rectangle());
shape.setAnchor(new Rectangle2D.Double());
shape.setLineColor(Color.black);
shape.setLineWidth(0.75);
return shape;
@@ -91,7 +91,7 @@ public class XSLFDrawing {
CTGroupShape obj = _spTree.addNewGrpSp();
obj.set(XSLFGroupShape.prototype(_shapeId++));
XSLFGroupShape shape = new XSLFGroupShape(obj, _sheet);
shape.setAnchor(new Rectangle());
shape.setAnchor(new Rectangle2D.Double());
return shape;
}
@@ -99,7 +99,7 @@ public class XSLFDrawing {
CTPicture obj = _spTree.addNewPic();
obj.set(XSLFPictureShape.prototype(_shapeId++, rel));
XSLFPictureShape shape = new XSLFPictureShape(obj, _sheet);
shape.setAnchor(new Rectangle());
shape.setAnchor(new Rectangle2D.Double());
return shape;
}
@@ -107,7 +107,7 @@ public class XSLFDrawing {
CTGraphicalObjectFrame obj = _spTree.addNewGraphicFrame();
obj.set(XSLFTable.prototype(_shapeId++));
XSLFTable shape = new XSLFTable(obj, _sheet);
shape.setAnchor(new Rectangle());
shape.setAnchor(new Rectangle2D.Double());
return shape;
}
}

+ 1
- 2
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java Voir le fichier

@@ -19,7 +19,6 @@
package org.apache.poi.xslf.usermodel;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.PathIterator;
@@ -61,7 +60,7 @@ public class XSLFFreeformShape extends XSLFAutoShape
public int setPath(GeneralPath path) {
CTPath2D ctPath = CTPath2D.Factory.newInstance();
Rectangle bounds = path.getBounds();
Rectangle2D bounds = path.getBounds2D();
int x0 = Units.toEMU(bounds.getX());
int y0 = Units.toEMU(bounds.getY());
PathIterator it = path.getPathIterator(new AffineTransform());

+ 11
- 9
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java Voir le fichier

@@ -19,7 +19,7 @@
package org.apache.poi.xslf.usermodel;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import javax.xml.namespace.QName;
@@ -28,6 +28,7 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.sl.draw.DrawNotImplemented;
import org.apache.poi.sl.usermodel.PlaceableShape;
import org.apache.poi.sl.usermodel.ShapeType;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
@@ -44,7 +45,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFra
*/
@Beta
@DrawNotImplemented
public class XSLFGraphicFrame extends XSLFShape {
public class XSLFGraphicFrame extends XSLFShape implements PlaceableShape<XSLFShape, XSLFTextParagraph> {
/*package*/ XSLFGraphicFrame(CTGraphicalObjectFrame shape, XSLFSheet sheet){
super(shape,sheet);
}
@@ -54,18 +55,19 @@ public class XSLFGraphicFrame extends XSLFShape {
}
@Override
public Rectangle getAnchor(){
public Rectangle2D getAnchor(){
CTTransform2D xfrm = ((CTGraphicalObjectFrame)getXmlObject()).getXfrm();
CTPoint2D off = xfrm.getOff();
int x = (int)Units.toPoints(off.getX());
int y = (int)Units.toPoints(off.getY());
double x = Units.toPoints(off.getX());
double y = Units.toPoints(off.getY());
CTPositiveSize2D ext = xfrm.getExt();
int cx = (int)Units.toPoints(ext.getCx());
int cy = (int)Units.toPoints(ext.getCy());
return new Rectangle(x, y, cx, cy);
double cx = Units.toPoints(ext.getCx());
double cy = Units.toPoints(ext.getCy());
return new Rectangle2D.Double(x, y, cx, cy);
}
public void setAnchor(Rectangle anchor){
@Override
public void setAnchor(Rectangle2D anchor){
CTTransform2D xfrm = ((CTGraphicalObjectFrame)getXmlObject()).getXfrm();
CTPoint2D off = xfrm.isSetOff() ? xfrm.getOff() : xfrm.addNewOff();
long x = Units.toEMU(anchor.getX());

+ 17
- 15
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java Voir le fichier

@@ -19,7 +19,7 @@
package org.apache.poi.xslf.usermodel;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -79,19 +79,19 @@ implements XSLFShapeContainer, GroupShape<XSLFShape,XSLFTextParagraph> {
}
@Override
public Rectangle getAnchor(){
public Rectangle2D getAnchor(){
CTGroupTransform2D xfrm = getXfrm();
CTPoint2D off = xfrm.getOff();
int x = (int)Units.toPoints(off.getX());
int y = (int)Units.toPoints(off.getY());
double x = Units.toPoints(off.getX());
double y = Units.toPoints(off.getY());
CTPositiveSize2D ext = xfrm.getExt();
int cx = (int)Units.toPoints(ext.getCx());
int cy = (int)Units.toPoints(ext.getCy());
return new Rectangle(x,y,cx,cy);
double cx = Units.toPoints(ext.getCx());
double cy = Units.toPoints(ext.getCy());
return new Rectangle2D.Double(x,y,cx,cy);
}
@Override
public void setAnchor(Rectangle anchor){
public void setAnchor(Rectangle2D anchor){
CTGroupTransform2D xfrm = getSafeXfrm();
CTPoint2D off = xfrm.isSetOff() ? xfrm.getOff() : xfrm.addNewOff();
long x = Units.toEMU(anchor.getX());
@@ -111,15 +111,16 @@ implements XSLFShapeContainer, GroupShape<XSLFShape,XSLFTextParagraph> {
* used for calculations of grouping, scaling, and rotation
* behavior of shapes placed within a group.
*/
public Rectangle getInteriorAnchor(){
@Override
public Rectangle2D getInteriorAnchor(){
CTGroupTransform2D xfrm = getXfrm();
CTPoint2D off = xfrm.getChOff();
int x = (int)Units.toPoints(off.getX());
int y = (int)Units.toPoints(off.getY());
double x = Units.toPoints(off.getX());
double y = Units.toPoints(off.getY());
CTPositiveSize2D ext = xfrm.getChExt();
int cx = (int)Units.toPoints(ext.getCx());
int cy = (int)Units.toPoints(ext.getCy());
return new Rectangle(x, y, cx, cy);
double cx = Units.toPoints(ext.getCx());
double cy = Units.toPoints(ext.getCy());
return new Rectangle2D.Double(x, y, cx, cy);
}
/**
@@ -128,7 +129,8 @@ implements XSLFShapeContainer, GroupShape<XSLFShape,XSLFTextParagraph> {
* used for calculations of grouping, scaling, and rotation
* behavior of shapes placed within a group.
*/
public void setInteriorAnchor(Rectangle anchor) {
@Override
public void setInteriorAnchor(Rectangle2D anchor) {
CTGroupTransform2D xfrm = getSafeXfrm();
CTPoint2D off = xfrm.isSetChOff() ? xfrm.getChOff() : xfrm.addNewChOff();
long x = Units.toEMU(anchor.getX());

+ 3
- 3
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java Voir le fichier

@@ -18,7 +18,7 @@
package org.apache.poi.xslf.usermodel;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import org.apache.poi.sl.draw.DrawPaint;
import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;
@@ -48,11 +48,11 @@ public class XSLFShadow extends XSLFShape implements Shadow<XSLFShape,XSLFTextPa
}
@Override
public Rectangle getAnchor(){
public Rectangle2D getAnchor(){
return _parent.getAnchor();
}
public void setAnchor(Rectangle anchor){
public void setAnchor(Rectangle2D anchor){
throw new IllegalStateException("You can't set anchor of a shadow");
}

+ 8
- 8
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java Voir le fichier

@@ -20,7 +20,7 @@
package org.apache.poi.xslf.usermodel;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
@@ -121,21 +121,21 @@ public abstract class XSLFSimpleShape extends XSLFShape
}
@Override
public Rectangle getAnchor() {
public Rectangle2D getAnchor() {
CTTransform2D xfrm = getXfrm();
CTPoint2D off = xfrm.getOff();
int x = (int)Units.toPoints(off.getX());
int y = (int)Units.toPoints(off.getY());
double x = Units.toPoints(off.getX());
double y = Units.toPoints(off.getY());
CTPositiveSize2D ext = xfrm.getExt();
int cx = (int)Units.toPoints(ext.getCx());
int cy = (int)Units.toPoints(ext.getCy());
return new Rectangle(x, y, cx, cy);
double cx = Units.toPoints(ext.getCx());
double cy = Units.toPoints(ext.getCy());
return new Rectangle2D.Double(x, y, cx, cy);
}
@Override
public void setAnchor(Rectangle anchor) {
public void setAnchor(Rectangle2D anchor) {
CTTransform2D xfrm = getSafeXfrm();
CTPoint2D off = xfrm.isSetOff() ? xfrm.getOff() : xfrm.addNewOff();
long x = Units.toEMU(anchor.getX());

+ 6
- 0
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java Voir le fichier

@@ -100,6 +100,7 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow
return _table.sizeOfTrArray();
}
@Override
public double getColumnWidth(int idx){
return Units.toPoints(
_table.getTblGrid().getGridColArray(idx).getW());
@@ -110,6 +111,11 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow
_table.getTblGrid().getGridColArray(idx).setW(Units.toEMU(width));
}
@Override
public double getRowHeight(int row) {
return Units.toPoints(_table.getTrArray(row).getH());
}
@Override
public void setRowHeight(int row, double height) {
_table.getTrArray(row).setH(Units.toEMU(height));

+ 3
- 3
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java Voir le fichier

@@ -19,7 +19,7 @@

package org.apache.poi.xslf.usermodel;

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -518,8 +518,8 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
*
* @return a <code>Rectangle2D</code> that is the bounds of this shape.
*/
public Rectangle resizeToFitText(){
Rectangle anchor = getAnchor();
public Rectangle2D resizeToFitText(){
Rectangle2D anchor = getAnchor();
if(anchor.getWidth() == 0.) throw new POIXMLException(
"Anchor of the shape was not set.");
double height = getTextHeight();

+ 64
- 0
src/ooxml/testcases/org/apache/poi/sl/TestTable.java Voir le fichier

@@ -0,0 +1,64 @@
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ====================================================================
*/
package org.apache.poi.sl;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import org.apache.poi.POIDataSamples;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory;
import org.apache.poi.sl.usermodel.TableShape;
import org.junit.Test;
public class TestTable {
private static POIDataSamples _slTests = POIDataSamples.getSlideShowInstance();
@Test
public void testColWidthRowHeight() throws IOException {
// Test of table dimensions of same slideshow saved as ppt/x
// to check if both return similar (points) value
SlideShow<?,?> ppt = SlideShowFactory.create(_slTests.getFile("table_test.ppt"));
TableShape<?,?> ts = (TableShape<?,?>)ppt.getSlides().get(0).getShapes().get(0);
int cols = ts.getNumberOfColumns();
int rows = ts.getNumberOfRows();
SlideShow<?,?> pptx = SlideShowFactory.create(_slTests.getFile("table_test.pptx"));
TableShape<?,?> tsx = (TableShape<?,?>)pptx.getSlides().get(0).getShapes().get(0);
int colsx = tsx.getNumberOfColumns();
int rowsx = tsx.getNumberOfRows();
assertEquals(cols, colsx);
assertEquals(rows, rowsx);
for (int i=0; i<cols; i++) {
assertEquals(ts.getColumnWidth(i), tsx.getColumnWidth(i), 0.2);
}
for (int i=0; i<rows; i++) {
assertEquals(ts.getRowHeight(i), tsx.getRowHeight(i), 0.3);
}
pptx.close();
ppt.close();
}
}

+ 23
- 8
src/ooxml/testcases/org/apache/poi/sl/draw/TestDrawPictureShape.java Voir le fichier

@@ -22,7 +22,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;

import org.apache.poi.POIDataSamples;
import org.apache.poi.sl.usermodel.PictureData;
@@ -32,6 +32,7 @@ import org.apache.poi.sl.usermodel.Shape;
import org.apache.poi.sl.usermodel.Slide;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory;
import org.apache.poi.util.Units;
import org.junit.Test;

public class TestDrawPictureShape {
@@ -54,18 +55,32 @@ public class TestDrawPictureShape {
PictureData pd = picShape.getPictureData();
Dimension dimPd = pd.getImageDimension();
new DrawPictureShape(picShape).resize();
Dimension dimShape = picShape.getAnchor().getSize();
Dimension dimShape = new Dimension(
(int)picShape.getAnchor().getWidth(),
(int)picShape.getAnchor().getHeight()
);
assertEquals(dimPd, dimShape);
int newWidth = (int)(dimPd.getWidth()*(100d/dimPd.getHeight()));
double newWidth = (dimPd.getWidth()*(100d/dimPd.getHeight()));
// ... -1 is a rounding error
Rectangle expRect = new Rectangle(50+300-newWidth-1, 50, newWidth, 100);
Rectangle target = new Rectangle(50,50,300,100);
Rectangle2D expRect = new Rectangle2D.Double(rbf(50+300-newWidth, picShape), 50, rbf(newWidth, picShape), 100);
Rectangle2D target = new Rectangle2D.Double(50,50,300,100);
new DrawPictureShape(picShape).resize(target, RectAlign.BOTTOM_RIGHT);
Rectangle actRect = picShape.getAnchor();
assertEquals(expRect, actRect);
Rectangle2D actRect = picShape.getAnchor();
assertEquals(expRect.getX(), actRect.getX(), .0001);
assertEquals(expRect.getY(), actRect.getY(), .0001);
assertEquals(expRect.getWidth(), actRect.getWidth(), .0001);
assertEquals(expRect.getHeight(), actRect.getHeight(), .0001);
ss.close();
}
}
// round back and forth - points -> master -> points
static double rbf(double val, PictureShape<?,?> picShape) {
if (picShape.getClass().getName().contains("HSLF")) {
return Units.masterToPoints(Units.pointsToMaster(val));
} else {
return val;
}
}
}

+ 11
- 6
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFConnectorShape.java Voir le fichier

@@ -20,13 +20,18 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import org.apache.poi.sl.usermodel.LineDecoration.DecorationShape;
import org.apache.poi.sl.usermodel.LineDecoration.DecorationSize;
import org.apache.poi.sl.usermodel.*;
import org.apache.poi.sl.usermodel.ShapeType;
import org.junit.Test;
import org.openxmlformats.schemas.drawingml.x2006.main.*;
import org.openxmlformats.schemas.drawingml.x2006.main.CTConnection;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualConnectorProperties;
import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndLength;
import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndType;
import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndWidth;
import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType;
import org.openxmlformats.schemas.presentationml.x2006.main.CTConnector;
/**
@@ -122,17 +127,17 @@ public class TestXSLFConnectorShape {
XSLFAutoShape rect1 = slide.createAutoShape();
rect1.setShapeType(ShapeType.RECT);
rect1.setAnchor(new Rectangle(100, 100, 100, 100));
rect1.setAnchor(new Rectangle2D.Double(100, 100, 100, 100));
rect1.setFillColor(Color.blue);
XSLFAutoShape rect2 = slide.createAutoShape();
rect2.setShapeType(ShapeType.RECT);
rect2.setAnchor(new Rectangle(300, 300, 100, 100));
rect2.setAnchor(new Rectangle2D.Double(300, 300, 100, 100));
rect2.setFillColor(Color.red);
XSLFConnectorShape connector1 = slide.createConnector();
connector1.setAnchor(new Rectangle(200, 150, 100, 200));
connector1.setAnchor(new Rectangle2D.Double(200, 150, 100, 200));
CTConnector ctConnector = (CTConnector)connector1.getXmlObject();
ctConnector.getSpPr().getPrstGeom().setPrst(STShapeType.BENT_CONNECTOR_3);

+ 3
- 3
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFFreeformShape.java Voir le fichier

@@ -16,11 +16,11 @@
==================================================================== */
package org.apache.poi.xslf.usermodel;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import org.junit.Test;
@@ -35,7 +35,7 @@ public class TestXSLFFreeformShape {
XSLFSlide slide = ppt.createSlide();
XSLFFreeformShape shape1 = slide.createFreeform();
// comples path consisting of a rectangle and an ellipse inside it
GeneralPath path1 = new GeneralPath(new Rectangle(150, 150, 300, 300));
GeneralPath path1 = new GeneralPath(new Rectangle2D.Double(150, 150, 300, 300));
path1.append(new Ellipse2D.Double(200, 200, 100, 50), false);
shape1.setPath(path1);

+ 3
- 3
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFGroupShape.java Voir le fichier

@@ -21,7 +21,7 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import org.junit.Test;
@@ -40,11 +40,11 @@ public class TestXSLFGroupShape {
XSLFGroupShape group = slide.createGroup();
assertEquals(1, slide.getShapes().size());
Rectangle interior = new Rectangle(-10, -10, 20, 20);
Rectangle2D interior = new Rectangle2D.Double(-10, -10, 20, 20);
group.setInteriorAnchor(interior);
assertEquals(interior, group.getInteriorAnchor());
Rectangle anchor = new Rectangle(0, 0, 792, 612);
Rectangle2D anchor = new Rectangle2D.Double(0, 0, 792, 612);
group.setAnchor(anchor);
assertEquals(anchor, group.getAnchor());

+ 6
- 6
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java Voir le fichier

@@ -24,7 +24,7 @@ import static org.junit.Assert.assertTrue;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.List;
@@ -74,7 +74,7 @@ public class TestXSLFTextParagraph {
"of text within a shape. Properties here apply to all text " +
"residing within the corresponding paragraph.");
Rectangle anchor = new Rectangle(50, 50, 300, 200);
Rectangle2D anchor = new Rectangle2D.Double(50, 50, 300, 200);
sh.setAnchor(anchor);
DrawTextParagraphProxy dtp = new DrawTextParagraphProxy(p);
@@ -172,7 +172,7 @@ public class TestXSLFTextParagraph {
"of text within a shape. Properties here apply to all text " +
"residing within the corresponding paragraph.");
sh.setAnchor(new Rectangle(50, 50, 300, 200));
sh.setAnchor(new Rectangle2D.Double(50, 50, 300, 200));
DrawTextParagraphProxy dtp = new DrawTextParagraphProxy(p);
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
@@ -184,13 +184,13 @@ public class TestXSLFTextParagraph {
assertEquals(4, lines.size());
// decrease the shape width from 300 pt to 100 pt
sh.setAnchor(new Rectangle(50, 50, 100, 200));
sh.setAnchor(new Rectangle2D.Double(50, 50, 100, 200));
dtp.breakText(graphics);
lines = dtp.getLines();
assertEquals(12, lines.size());
// decrease the shape width from 300 pt to 100 pt
sh.setAnchor(new Rectangle(50, 50, 600, 200));
sh.setAnchor(new Rectangle2D.Double(50, 50, 600, 200));
dtp.breakText(graphics);
lines = dtp.getLines();
assertEquals(2, lines.size());
@@ -224,7 +224,7 @@ public class TestXSLFTextParagraph {
assertEquals("POI", lines.get(1).getString());
XSLFAutoShape sh2 = slide.createAutoShape();
sh2.setAnchor(new Rectangle(50, 50, 300, 200));
sh2.setAnchor(new Rectangle2D.Double(50, 50, 300, 200));
XSLFTextParagraph p2 = sh2.addNewTextParagraph();
XSLFTextRun r2 = p2.addNewTextRun();
r2.setFontFamily("serif"); // this should always be available

+ 1
- 2
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFreeformShape.java Voir le fichier

@@ -17,7 +17,6 @@

package org.apache.poi.hslf.usermodel;

import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.PathIterator;
@@ -90,7 +89,7 @@ public final class HSLFFreeformShape extends HSLFAutoShape implements FreeformSh

@Override
public int setPath(GeneralPath path) {
Rectangle bounds = path.getBounds();
Rectangle2D bounds = path.getBounds2D();
PathIterator it = path.getPathIterator(new AffineTransform());

List<byte[]> segInfo = new ArrayList<byte[]>();

+ 37
- 37
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFGroupShape.java Voir le fichier

@@ -17,7 +17,7 @@

package org.apache.poi.hslf.usermodel;

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -73,7 +73,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
}

@Override
public void setAnchor(Rectangle anchor) {
public void setAnchor(Rectangle2D anchor) {
EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID);
boolean isInitialized = !(clientAnchor.getDx1() == 0 && clientAnchor.getRow1() == 0);
@@ -85,7 +85,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
}

@Override
public void setInteriorAnchor(Rectangle anchor){
public void setInteriorAnchor(Rectangle2D anchor){
EscherSpgrRecord spgr = getEscherChild(EscherSpgrRecord.RECORD_ID);

int x1 = Units.pointsToMaster(anchor.getX());
@@ -100,16 +100,16 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
}

@Override
public Rectangle getInteriorAnchor(){
public Rectangle2D getInteriorAnchor(){
EscherSpgrRecord rec = getEscherChild(EscherSpgrRecord.RECORD_ID);
int x1 = (int)Units.masterToPoints(rec.getRectX1());
int y1 = (int)Units.masterToPoints(rec.getRectY1());
int x2 = (int)Units.masterToPoints(rec.getRectX2());
int y2 = (int)Units.masterToPoints(rec.getRectY2());
return new Rectangle(x1,y1,x2-x1,y2-y1);
double x1 = Units.masterToPoints(rec.getRectX1());
double y1 = Units.masterToPoints(rec.getRectY1());
double x2 = Units.masterToPoints(rec.getRectX2());
double y2 = Units.masterToPoints(rec.getRectY2());
return new Rectangle2D.Double(x1,y1,x2-x1,y2-y1);
}

protected void setExteriorAnchor(Rectangle anchor) {
protected void setExteriorAnchor(Rectangle2D anchor) {
EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID);
//hack. internal variable EscherClientAnchorRecord.shortRecord can be
@@ -121,10 +121,10 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
clientAnchor.fillFields(header, 0, null);

// All coordinates need to be converted to Master units (576 dpi)
clientAnchor.setFlag((short)Units.pointsToMaster(anchor.y));
clientAnchor.setCol1((short)Units.pointsToMaster(anchor.x));
clientAnchor.setDx1((short)Units.pointsToMaster(anchor.width + anchor.x));
clientAnchor.setRow1((short)Units.pointsToMaster(anchor.height + anchor.y));
clientAnchor.setFlag((short)Units.pointsToMaster(anchor.getY()));
clientAnchor.setCol1((short)Units.pointsToMaster(anchor.getX()));
clientAnchor.setDx1((short)Units.pointsToMaster(anchor.getWidth() + anchor.getX()));
clientAnchor.setRow1((short)Units.pointsToMaster(anchor.getHeight() + anchor.getY()));

// TODO: does this make sense?
setInteriorAnchor(anchor);
@@ -177,20 +177,20 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
/**
* Moves and scales this <code>ShapeGroup</code> to the specified anchor.
*/
protected void moveAndScale(Rectangle anchorDest){
Rectangle anchorSrc = getAnchor();
double scaleX = (anchorSrc.width == 0) ? 0 : anchorDest.width / (double)anchorSrc.width;
double scaleY = (anchorSrc.height == 0) ? 0 : anchorDest.height / (double)anchorSrc.height;
protected void moveAndScale(Rectangle2D anchorDest){
Rectangle2D anchorSrc = getAnchor();
double scaleX = (anchorSrc.getWidth() == 0) ? 0 : anchorDest.getWidth() / anchorSrc.getWidth();
double scaleY = (anchorSrc.getHeight() == 0) ? 0 : anchorDest.getHeight() / anchorSrc.getHeight();

setExteriorAnchor(anchorDest);
for (HSLFShape shape : getShapes()) {
Rectangle chanchor = shape.getAnchor();
int x = (int)Math.rint(anchorDest.x+(chanchor.x-anchorSrc.x)*scaleX);
int y = (int)Math.rint(anchorDest.y+(chanchor.y-anchorSrc.y)*scaleY);
int width = (int)Math.rint(chanchor.width*scaleX);
int height = (int)Math.rint(chanchor.height*scaleY);
shape.setAnchor(new Rectangle(x, y, width, height));
Rectangle2D chanchor = shape.getAnchor();
double x = anchorDest.getX()+(chanchor.getX()-anchorSrc.getX())*scaleX;
double y = anchorDest.getY()+(chanchor.getY()-anchorSrc.getY())*scaleY;
double width = chanchor.getWidth()*scaleX;
double height = chanchor.getHeight()*scaleY;
shape.setAnchor(new Rectangle2D.Double(x, y, width, height));
}
}

@@ -200,7 +200,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
*
* @return the anchor of this shape group
*/
public Rectangle getAnchor(){
public Rectangle2D getAnchor(){
EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID);
int x1,y1,x2,y2;
if(clientAnchor == null){
@@ -216,11 +216,11 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
x2 = clientAnchor.getDx1();
y2 = clientAnchor.getRow1();
}
Rectangle anchor= new Rectangle(
(int)(x1 == -1 ? -1 : Units.masterToPoints(x1)),
(int)(y1 == -1 ? -1 : Units.masterToPoints(y1)),
(int)(x2 == -1 ? -1 : Units.masterToPoints(x2-x1)),
(int)(y2 == -1 ? -1 : Units.masterToPoints(y2-y1))
Rectangle2D anchor= new Rectangle2D.Double(
(x1 == -1 ? -1 : Units.masterToPoints(x1)),
(y1 == -1 ? -1 : Units.masterToPoints(y1)),
(x2 == -1 ? -1 : Units.masterToPoints(x2-x1)),
(y2 == -1 ? -1 : Units.masterToPoints(y2-y1))
);

return anchor;
@@ -295,7 +295,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
public HSLFTextBox createTextBox() {
HSLFTextBox s = new HSLFTextBox(this);
s.setHorizontalCentered(true);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -304,7 +304,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
public HSLFAutoShape createAutoShape() {
HSLFAutoShape s = new HSLFAutoShape(ShapeType.RECT, this);
s.setHorizontalCentered(true);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -313,7 +313,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
public HSLFFreeformShape createFreeform() {
HSLFFreeformShape s = new HSLFFreeformShape(this);
s.setHorizontalCentered(true);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -321,7 +321,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
@Override
public HSLFConnectorShape createConnector() {
HSLFConnectorShape s = new HSLFConnectorShape(this);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -329,7 +329,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
@Override
public HSLFGroupShape createGroup() {
HSLFGroupShape s = new HSLFGroupShape(this);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -340,7 +340,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
throw new IllegalArgumentException("pictureData needs to be of type HSLFPictureData");
}
HSLFPictureShape s = new HSLFPictureShape((HSLFPictureData)pictureData, this);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -351,7 +351,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> {
throw new IllegalArgumentException("numRows and numCols must be greater than 0");
}
HSLFTable s = new HSLFTable(numRows,numCols,this);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}

+ 4
- 2
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFPictureShape.java Voir le fichier

@@ -18,7 +18,7 @@
package org.apache.poi.hslf.usermodel;

import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.List;

import org.apache.poi.ddf.AbstractEscherOptRecord;
@@ -113,6 +113,7 @@ public class HSLFPictureShape extends HSLFSimpleShape implements PictureShape<HS
return _escherContainer;
}

@SuppressWarnings("resource")
@Override
public HSLFPictureData getPictureData(){
HSLFSlideShow ppt = getSheet().getSlideShow();
@@ -132,6 +133,7 @@ public class HSLFPictureShape extends HSLFSimpleShape implements PictureShape<HS
return null;
}

@SuppressWarnings("resource")
protected EscherBSERecord getEscherBSERecord(){
HSLFSlideShow ppt = getSheet().getSlideShow();
Document doc = ppt.getDocumentRecord();
@@ -184,7 +186,7 @@ public class HSLFPictureShape extends HSLFSimpleShape implements PictureShape<HS
EscherBSERecord bse = getEscherBSERecord();
bse.setRef(bse.getRef() + 1);

Rectangle anchor = getAnchor();
Rectangle2D anchor = getAnchor();
if (anchor.isEmpty()){
new DrawPictureShape(this).resize();
}

+ 10
- 10
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFShape.java Voir le fichier

@@ -19,7 +19,7 @@ package org.apache.poi.hslf.usermodel;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.Iterator;

import org.apache.poi.ddf.AbstractEscherOptRecord;
@@ -133,7 +133,7 @@ public abstract class HSLFShape implements Shape<HSLFShape,HSLFTextParagraph> {
*
* @return the anchor of this shape
*/
public Rectangle getAnchor() {
public Rectangle2D getAnchor() {
EscherSpRecord spRecord = getEscherChild(EscherSpRecord.RECORD_ID);
int flags = spRecord.getFlags();
int x1,y1,x2,y2;
@@ -156,11 +156,11 @@ public abstract class HSLFShape implements Shape<HSLFShape,HSLFTextParagraph> {
}

// TODO: find out where this -1 value comes from at #57820 (link to ms docs?)
Rectangle anchor = new Rectangle(
(int)(x1 == -1 ? -1 : Units.masterToPoints(x1)),
(int)(y1 == -1 ? -1 : Units.masterToPoints(y1)),
(int)(x2 == -1 ? -1 : Units.masterToPoints(x2-x1)),
(int)(y2 == -1 ? -1 : Units.masterToPoints(y2-y1))
Rectangle2D anchor = new Rectangle2D.Double(
(x1 == -1 ? -1 : Units.masterToPoints(x1)),
(y1 == -1 ? -1 : Units.masterToPoints(y1)),
(x2 == -1 ? -1 : Units.masterToPoints(x2-x1)),
(y2 == -1 ? -1 : Units.masterToPoints(y2-y1))
);
return anchor;
@@ -172,7 +172,7 @@ public abstract class HSLFShape implements Shape<HSLFShape,HSLFTextParagraph> {
*
* @param anchor new anchor
*/
public void setAnchor(Rectangle anchor){
public void setAnchor(Rectangle2D anchor){
int x = Units.pointsToMaster(anchor.getX());
int y = Units.pointsToMaster(anchor.getY());
int w = Units.pointsToMaster(anchor.getWidth() + anchor.getX());
@@ -201,10 +201,10 @@ public abstract class HSLFShape implements Shape<HSLFShape,HSLFTextParagraph> {
* @param x the x coordinate of the top left corner of the shape
* @param y the y coordinate of the top left corner of the shape
*/
public final void moveTo(float x, float y) {
public final void moveTo(double x, double y) {
// This convenience method should be implemented via setAnchor in subclasses
// see HSLFGroupShape.setAnchor() for a reference
Rectangle anchor = getAnchor();
Rectangle2D anchor = getAnchor();
anchor.setRect(x, y, anchor.getWidth(), anchor.getHeight());
setAnchor(anchor);
}

+ 7
- 7
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSheet.java Voir le fichier

@@ -18,7 +18,7 @@
package org.apache.poi.hslf.usermodel;

import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -402,7 +402,7 @@ public abstract class HSLFSheet implements HSLFShapeContainer, Sheet<HSLFShape,H
public HSLFTextBox createTextBox() {
HSLFTextBox s = new HSLFTextBox();
s.setHorizontalCentered(true);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -411,7 +411,7 @@ public abstract class HSLFSheet implements HSLFShapeContainer, Sheet<HSLFShape,H
public HSLFAutoShape createAutoShape() {
HSLFAutoShape s = new HSLFAutoShape(ShapeType.RECT);
s.setHorizontalCentered(true);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -420,7 +420,7 @@ public abstract class HSLFSheet implements HSLFShapeContainer, Sheet<HSLFShape,H
public HSLFFreeformShape createFreeform() {
HSLFFreeformShape s = new HSLFFreeformShape();
s.setHorizontalCentered(true);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -428,7 +428,7 @@ public abstract class HSLFSheet implements HSLFShapeContainer, Sheet<HSLFShape,H
@Override
public HSLFConnectorShape createConnector() {
HSLFConnectorShape s = new HSLFConnectorShape();
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -436,7 +436,7 @@ public abstract class HSLFSheet implements HSLFShapeContainer, Sheet<HSLFShape,H
@Override
public HSLFGroupShape createGroup() {
HSLFGroupShape s = new HSLFGroupShape();
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}
@@ -447,7 +447,7 @@ public abstract class HSLFSheet implements HSLFShapeContainer, Sheet<HSLFShape,H
throw new IllegalArgumentException("pictureData needs to be of type HSLFPictureData");
}
HSLFPictureShape s = new HSLFPictureShape((HSLFPictureData)pictureData);
s.setAnchor(new Rectangle(0, 0, 100, 100));
s.setAnchor(new Rectangle2D.Double(0, 0, 100, 100));
addShape(s);
return s;
}

+ 60
- 31
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTable.java Voir le fichier

@@ -17,7 +17,7 @@

package org.apache.poi.hslf.usermodel;

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -76,13 +76,13 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
if(numRows < 1) throw new IllegalArgumentException("The number of rows must be greater than 1");
if(numCols < 1) throw new IllegalArgumentException("The number of columns must be greater than 1");

int x=0, y=0, tblWidth=0, tblHeight=0;
double x=0, y=0, tblWidth=0, tblHeight=0;
cells = new HSLFTableCell[numRows][numCols];
for (int i = 0; i < cells.length; i++) {
x = 0;
for (int j = 0; j < cells[i].length; j++) {
cells[i][j] = new HSLFTableCell(this);
Rectangle anchor = new Rectangle(x, y, HSLFTableCell.DEFAULT_WIDTH, HSLFTableCell.DEFAULT_HEIGHT);
Rectangle2D anchor = new Rectangle2D.Double(x, y, HSLFTableCell.DEFAULT_WIDTH, HSLFTableCell.DEFAULT_HEIGHT);
cells[i][j].setAnchor(anchor);
x += HSLFTableCell.DEFAULT_WIDTH;
}
@@ -90,7 +90,7 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
}
tblWidth = x;
tblHeight = y;
setExteriorAnchor(new Rectangle(0, 0, tblWidth, tblHeight));
setExteriorAnchor(new Rectangle2D.Double(0, 0, tblWidth, tblHeight));

EscherContainerRecord spCont = (EscherContainerRecord) getSpContainer().getChild(0);
AbstractEscherOptRecord opt = new EscherOptRecord();
@@ -159,13 +159,18 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {

private static class TableCellComparator implements Comparator<HSLFShape> {
public int compare( HSLFShape o1, HSLFShape o2 ) {
Rectangle anchor1 = o1.getAnchor();
Rectangle anchor2 = o2.getAnchor();
int delta = anchor1.y - anchor2.y;
if (delta == 0) delta = anchor1.x - anchor2.x;
Rectangle2D anchor1 = o1.getAnchor();
Rectangle2D anchor2 = o2.getAnchor();
double delta = anchor1.getY() - anchor2.getY();
if (delta == 0) {
delta = anchor1.getX() - anchor2.getX();
}
// descending size
if (delta == 0) delta = (anchor2.width*anchor2.height)-(anchor1.width*anchor1.height);
return delta;
if (delta == 0) {
delta = (anchor2.getWidth()*anchor2.getHeight())-(anchor1.getWidth()*anchor1.getHeight());
}
return (int)Math.signum(delta);
}
}

@@ -176,7 +181,7 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
htc.add((HSLFTableCell)h);
}
}
if (htc.isEmpty()) {
throw new IllegalStateException("HSLFTable without HSLFTableCells");
}
@@ -186,12 +191,12 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
List<HSLFTableCell[]> lst = new ArrayList<HSLFTableCell[]>();
List<HSLFTableCell> row = new ArrayList<HSLFTableCell>();

int y0 = htc.get(0).getAnchor().y;
double y0 = htc.get(0).getAnchor().getY();
for (HSLFTableCell sh : htc) {
Rectangle anchor = sh.getAnchor();
boolean isNextRow = (anchor.y > y0);
Rectangle2D anchor = sh.getAnchor();
boolean isNextRow = (anchor.getY() > y0);
if (isNextRow) {
y0 = anchor.y;
y0 = anchor.getY();
lst.add(row.toArray(new HSLFTableCell[row.size()]));
row.clear();
}
@@ -207,7 +212,7 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
final double lx1, lx2, ly1, ly2;
LineRect(HSLFLine l) {
this.l = l;
Rectangle r = l.getAnchor();
Rectangle2D r = l.getAnchor();
lx1 = r.getMinX();
lx2 = r.getMaxX();
ly1 = r.getMinY();
@@ -240,7 +245,7 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
// TODO: this only works for non-rotated tables
for (HSLFTableCell[] tca : cells) {
for (HSLFTableCell tc : tca) {
final Rectangle cellAnchor = tc.getAnchor();
final Rectangle2D cellAnchor = tc.getAnchor();

/**
* x1/y1 --------+
@@ -321,29 +326,53 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
}
}

@Override
public double getRowHeight(int row) {
if (row < 0 || row >= cells.length) {
throw new IllegalArgumentException("Row index '"+row+"' is not within range [0-"+(cells.length-1)+"]");
}
return cells[row][0].getAnchor().getHeight();
}
@Override
public void setRowHeight(int row, double height) {
if (row < 0 || row >= cells.length) {
throw new IllegalArgumentException("Row index '"+row+"' is not within range [0-"+(cells.length-1)+"]");
}

int pxHeight = Units.pointsToPixel(height);
int currentHeight = cells[row][0].getAnchor().height;
int dy = pxHeight - currentHeight;
double currentHeight = cells[row][0].getAnchor().getHeight();
double dy = pxHeight - currentHeight;

for (int i = row; i < cells.length; i++) {
for (int j = 0; j < cells[i].length; j++) {
Rectangle anchor = cells[i][j].getAnchor();
Rectangle2D anchor = cells[i][j].getAnchor();
if(i == row) {
anchor.height = pxHeight;
anchor.setRect(anchor.getX(), anchor.getY(), anchor.getWidth(), pxHeight);
} else {
anchor.y += dy;
anchor.setRect(anchor.getX(), anchor.getY()+dy, anchor.getWidth(), pxHeight);
}
cells[i][j].setAnchor(anchor);
}
}
Rectangle tblanchor = getAnchor();
tblanchor.height += dy;
Rectangle2D tblanchor = getAnchor();
tblanchor.setRect(tblanchor.getX(), tblanchor.getY(), tblanchor.getWidth(), tblanchor.getHeight() + dy);
setExteriorAnchor(tblanchor);

}

@Override
public double getColumnWidth(int col) {
if (col < 0 || col >= cells[0].length) {
throw new IllegalArgumentException("Column index '"+col+"' is not within range [0-"+(cells[0].length-1)+"]");
}
// TODO: check for merged cols
double width = cells[0][col].getAnchor().getWidth();
return width;
}

@Override
public void setColumnWidth(int col, final double width){
if (col < 0 || col >= cells[0].length) {
@@ -352,20 +381,20 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
double currentWidth = cells[0][col].getAnchor().getWidth();
double dx = width - currentWidth;
for (HSLFTableCell cols[] : cells) {
Rectangle anchor = cols[col].getAnchor();
anchor.width = (int)Math.rint(width);
Rectangle2D anchor = cols[col].getAnchor();
anchor.setRect(anchor.getX(), anchor.getY(), width, anchor.getHeight());
cols[col].setAnchor(anchor);

if (col < cols.length - 1) {
for (int j = col+1; j < cols.length; j++) {
anchor = cols[j].getAnchor();
anchor.x += dx;
anchor.setRect(anchor.getX()+dx, anchor.getY(), anchor.getWidth(), anchor.getHeight());
cols[j].setAnchor(anchor);
}
}
}
Rectangle tblanchor = getAnchor();
tblanchor.width += dx;
Rectangle2D tblanchor = getAnchor();
tblanchor.setRect(tblanchor.getX(), tblanchor.getY(), tblanchor.getWidth() + dx, tblanchor.getHeight());
setExteriorAnchor(tblanchor);
}

@@ -393,7 +422,7 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
}

@Override
protected void moveAndScale(Rectangle anchorDest){
protected void moveAndScale(Rectangle2D anchorDest){
super.moveAndScale(anchorDest);
updateRowHeightsProperty();
}
@@ -403,7 +432,7 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
EscherArrayProperty p = opt.lookup(EscherProperties.GROUPSHAPE__TABLEROWPROPERTIES);
byte[] val = new byte[4];
for (int rowIdx = 0; rowIdx < cells.length; rowIdx++) {
int rowHeight = Units.pointsToMaster(cells[rowIdx][0].getAnchor().height);
int rowHeight = Units.pointsToMaster(cells[rowIdx][0].getAnchor().getHeight());
LittleEndian.putInt(val, 0, rowHeight);
p.setElement(rowIdx, val);
}

+ 21
- 21
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTableCell.java Voir le fichier

@@ -18,7 +18,7 @@
package org.apache.poi.hslf.usermodel;

import java.awt.Color;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;

import org.apache.poi.ddf.AbstractEscherOptRecord;
import org.apache.poi.ddf.EscherContainerRecord;
@@ -85,40 +85,40 @@ public final class HSLFTableCell extends HSLFTextBox implements TableCell<HSLFSh
if (line == null) {
return;
}
Rectangle cellAnchor = getAnchor();
Rectangle lineAnchor = new Rectangle();
Rectangle2D cellAnchor = getAnchor();
double x,y,w,h;
switch(edge){
case top:
lineAnchor.x = cellAnchor.x;
lineAnchor.y = cellAnchor.y;
lineAnchor.width = cellAnchor.width;
lineAnchor.height = 0;
x = cellAnchor.getX();
y = cellAnchor.getY();
w = cellAnchor.getWidth();
h = 0;
break;
case right:
lineAnchor.x = cellAnchor.x + cellAnchor.width;
lineAnchor.y = cellAnchor.y;
lineAnchor.width = 0;
lineAnchor.height = cellAnchor.height;
x = cellAnchor.getX() + cellAnchor.getWidth();
y = cellAnchor.getY();
w = 0;
h = cellAnchor.getHeight();
break;
case bottom:
lineAnchor.x = cellAnchor.x;
lineAnchor.y = cellAnchor.y + cellAnchor.height;
lineAnchor.width = cellAnchor.width;
lineAnchor.height = 0;
x = cellAnchor.getX();
y = cellAnchor.getY() + cellAnchor.getHeight();
w = cellAnchor.getWidth();
h = 0;
break;
case left:
lineAnchor.x = cellAnchor.x;
lineAnchor.y = cellAnchor.y;
lineAnchor.width = 0;
lineAnchor.height = cellAnchor.height;
x = cellAnchor.getX();
y = cellAnchor.getY();
w = 0;
h = cellAnchor.getHeight();
break;
default:
throw new IllegalArgumentException();
}
line.setAnchor(lineAnchor);
line.setAnchor(new Rectangle2D.Double(x,y,w,h));
}

public void setAnchor(Rectangle anchor){
public void setAnchor(Rectangle2D anchor){
super.setAnchor(anchor);

anchorBorder(BorderEdge.top, borderTop);

+ 7
- 4
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextShape.java Voir le fichier

@@ -20,7 +20,6 @@ package org.apache.poi.hslf.usermodel;
import static org.apache.poi.hslf.record.RecordTypes.OEPlaceholderAtom;
import static org.apache.poi.hslf.record.RecordTypes.RoundTripHFPlaceholder12;

import java.awt.Rectangle;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
@@ -209,7 +208,11 @@ implements TextShape<HSLFShape,HSLFTextParagraph> {
} catch (IOException e){
throw new HSLFException(e);
}
if(getAnchor().equals(new Rectangle()) && !"".equals(getText())) resizeToFitText();
boolean isInitialAnchor = getAnchor().equals(new Rectangle2D.Double());
boolean isFilledTxt = !"".equals(getText());
if (isInitialAnchor && isFilledTxt) {
resizeToFitText();
}
}
for (HSLFTextParagraph htp : _paragraphs) {
htp.setShapeId(getShapeId());
@@ -250,10 +253,10 @@ implements TextShape<HSLFShape,HSLFTextParagraph> {
* @return a <code>Rectangle2D</code> that is the bounds of this shape.
*/
public Rectangle2D resizeToFitText(){
Rectangle anchor = getAnchor();
Rectangle2D anchor = getAnchor();
if(anchor.getWidth() == 0.) {
logger.log(POILogger.WARN, "Width of shape wasn't set. Defaulting to 200px");
anchor.setSize(200, (int)anchor.getHeight());
anchor.setRect(anchor.getX(), anchor.getY(), 200., anchor.getHeight());
setAnchor(anchor);
}
double height = getTextHeight();

+ 2
- 2
src/scratchpad/testcases/org/apache/poi/hslf/model/TestMovieShape.java Voir le fichier

@@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

@@ -50,7 +50,7 @@ public final class TestMovieShape {
HSLFPictureData thumbnailData = ppt.addPicture(_slTests.readFile("tomcat.png"), PictureType.PNG);

MovieShape shape = new MovieShape(movieIdx, thumbnailData);
shape.setAnchor(new Rectangle(300,225,120,90));
shape.setAnchor(new Rectangle2D.Double(300,225,120,90));
slide.addShape(shape);

assertEquals(path, shape.getPath());

+ 29
- 13
src/scratchpad/testcases/org/apache/poi/hslf/model/TestOleEmbedding.java Voir le fichier

@@ -20,10 +20,11 @@ package org.apache.poi.hslf.model;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

@@ -50,23 +51,36 @@ public final class TestOleEmbedding {
* @throws Exception if an error occurs.
*/
@Test
public void testOleEmbedding2003() throws Exception {
public void testOleEmbedding2003() throws IOException {
HSLFSlideShowImpl slideShow = new HSLFSlideShowImpl(_slTests.openResourceAsStream("ole2-embedding-2003.ppt"));
// Placeholder EMFs for clients that don't support the OLE components.
List<HSLFPictureData> pictures = slideShow.getPictureData();
assertEquals("Should be two pictures", 2, pictures.size());
//assertDigestEquals("Wrong data for picture 1", "8d1fbadf4814f321bb1ccdd056e3c788", pictures[0].getData());
//assertDigestEquals("Wrong data for picture 2", "987a698e83559cf3d38a0deeba1cc63b", pictures[1].getData());
long checkSums[] = { 0xD37A4204l, 0x26A62F68l, 0x82853169l, 0xE0E45D2Bl };
int checkId = 0;
// check for checksum to be uptodate
for (HSLFPictureData pd : pictures) {
long checkEMF = IOUtils.calculateChecksum(pd.getData());
assertEquals(checkSums[checkId++], checkEMF);
}

// Actual embedded objects.
HSLFObjectData[] objects = slideShow.getEmbeddedObjects();
assertEquals("Should be two objects", 2, objects.length);
//assertDigestEquals("Wrong data for objecs 1", "0d1fcc61a83de5c4894dc0c88e9a019d", objects[0].getData());
//assertDigestEquals("Wrong data for object 2", "b323604b2003a7299c77c2693b641495", objects[1].getData());
for (HSLFObjectData od : objects) {
long checkEMF = IOUtils.calculateChecksum(od.getData());
assertEquals(checkSums[checkId++], checkEMF);
}
slideShow.close();
}

@Test
public void testOLEShape() throws Exception {
public void testOLEShape() throws IOException {
HSLFSlideShow ppt = new HSLFSlideShow(_slTests.openResourceAsStream("ole2-embedding-2003.ppt"));

HSLFSlide slide = ppt.getSlides().get(0);
@@ -97,12 +111,12 @@ public final class TestOleEmbedding {

}
assertEquals("Expected 2 OLE shapes", 2, cnt);
ppt.close();
}
@Test
public void testEmbedding() throws Exception {
HSLFSlideShowImpl _hslfSlideShow = HSLFSlideShowImpl.create();
HSLFSlideShow ppt = new HSLFSlideShow(_hslfSlideShow);
public void testEmbedding() throws IOException {
HSLFSlideShow ppt = new HSLFSlideShow();
File pict = POIDataSamples.getSlideShowInstance().getFile("clock.jpg");
HSLFPictureData pictData = ppt.addPicture(pict, PictureType.JPEG);
@@ -117,7 +131,7 @@ public final class TestOleEmbedding {
OLEShape oleShape1 = new OLEShape(pictData);
oleShape1.setObjectID(oleObjectId1);
slide1.addShape(oleShape1);
oleShape1.setAnchor(new Rectangle(100,100,100,100));
oleShape1.setAnchor(new Rectangle2D.Double(100,100,100,100));
// add second slide with different order in object creation
HSLFSlide slide2 = ppt.createSlide();
@@ -131,7 +145,7 @@ public final class TestOleEmbedding {

oleShape2.setObjectID(oleObjectId2);
slide2.addShape(oleShape2);
oleShape2.setAnchor(new Rectangle(100,100,100,100));
oleShape2.setAnchor(new Rectangle2D.Double(100,100,100,100));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ppt.write(bos);
@@ -148,6 +162,8 @@ public final class TestOleEmbedding {
poiData1.close();
poiData2.close();
ppt.close();
}

}

+ 34
- 22
src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java Voir le fichier

@@ -26,7 +26,7 @@ import static org.junit.Assert.assertTrue;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -49,7 +49,6 @@ import org.apache.poi.hslf.usermodel.HSLFShape;
import org.apache.poi.hslf.usermodel.HSLFSimpleShape;
import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl;
import org.apache.poi.hslf.usermodel.HSLFTextBox;
import org.apache.poi.hslf.usermodel.HSLFTextParagraph;
import org.apache.poi.hslf.usermodel.HSLFTextRun;
@@ -84,7 +83,7 @@ public final class TestShapes {
}

@Test
public void graphics() throws Exception {
public void graphics() throws IOException {
HSLFSlide slide = ppt.createSlide();

HSLFLine line = new HSLFLine();
@@ -96,7 +95,7 @@ public final class TestShapes {
slide.addShape(line);

HSLFAutoShape ellipse = new HSLFAutoShape(ShapeType.ELLIPSE);
java.awt.Rectangle ellipseAnchor = new Rectangle(320, 154, 55, 111);
Rectangle2D ellipseAnchor = new Rectangle2D.Double(320, 154, 55, 111);
ellipse.setAnchor(ellipseAnchor);
ellipse.setLineWidth(2);
ellipse.setLineDash(LineDash.SOLID);
@@ -110,10 +109,10 @@ public final class TestShapes {

//read ppt from byte array

ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
assertEquals(1, ppt.getSlides().size());
HSLFSlideShow ppt2 = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()));
assertEquals(1, ppt2.getSlides().size());

slide = ppt.getSlides().get(0);
slide = ppt2.getSlides().get(0);
List<HSLFShape> shape = slide.getShapes();
assertEquals(2, shape.size());

@@ -122,6 +121,8 @@ public final class TestShapes {

assertTrue(shape.get(1) instanceof HSLFAutoShape); //group shape
assertEquals(ellipseAnchor, shape.get(1).getAnchor()); //group shape
ppt2.close();
}

/**
@@ -129,7 +130,7 @@ public final class TestShapes {
* @throws Exception
*/
@Test
public void textBoxRead() throws Exception {
public void textBoxRead() throws IOException {
ppt = new HSLFSlideShow(_slTests.openResourceAsStream("with_textbox.ppt"));
HSLFSlide sl = ppt.getSlides().get(0);
for (HSLFShape sh : sl.getShapes()) {
@@ -161,7 +162,7 @@ public final class TestShapes {

@SuppressWarnings("unused")
@Test
public void testParagraphs() throws Exception {
public void testParagraphs() throws IOException {
HSLFSlideShow ss = new HSLFSlideShow();
HSLFSlide slide = ss.createSlide();
HSLFTextBox shape = new HSLFTextBox();
@@ -175,7 +176,7 @@ public final class TestShapes {
p2r2.setStrikethrough(true);
// run 3 has same text properties as run 2 and will be merged when saving
HSLFTextRun p2r3 = shape.appendText("para 2 run 3.", false);
shape.setAnchor(new Rectangle(100,100,100,10));
shape.setAnchor(new Rectangle2D.Double(100,100,100,10));
slide.addShape(shape);
shape.resizeToFitText();
@@ -207,7 +208,7 @@ public final class TestShapes {
* and set some of the style attributes
*/
@Test
public void textBoxWriteBytes() throws Exception {
public void textBoxWriteBytes() throws IOException {
ppt = new HSLFSlideShow();
HSLFSlide sl = ppt.createSlide();
HSLFTextRun rt;
@@ -241,8 +242,8 @@ public final class TestShapes {
ppt.write(out);
out.close();

ppt = new HSLFSlideShow(new HSLFSlideShowImpl(new ByteArrayInputStream(out.toByteArray())));
sl = ppt.getSlides().get(0);
HSLFSlideShow ppt2 = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()));
sl = ppt2.getSlides().get(0);

txtbox = (HSLFTextBox)sl.getShapes().get(0);
rt = txtbox.getTextParagraphs().get(0).getTextRuns().get(0);
@@ -255,6 +256,8 @@ public final class TestShapes {
assertFalse(rt.isUnderlined());
assertEquals("Arial", rt.getFontFamily());
assertTrue(sameColor(Color.red, rt.getFontColor()));
ppt2.close();
}

/**
@@ -276,7 +279,7 @@ public final class TestShapes {
* it must be the same as returned by Slide.getTextRuns().
*/
@Test
public void textBoxSet() throws Exception {
public void textBoxSet() throws IOException {
textBoxSet("with_textbox.ppt");
textBoxSet("basic_test_ppt_file.ppt");
textBoxSet("next_test_ppt_file.ppt");
@@ -285,7 +288,7 @@ public final class TestShapes {
textBoxSet("incorrect_slide_order.ppt");
}

private void textBoxSet(String filename) throws Exception {
private void textBoxSet(String filename) throws IOException {
HSLFSlideShow ss = new HSLFSlideShow(_slTests.openResourceAsStream(filename));
for (HSLFSlide sld : ss.getSlides()) {
ArrayList<String> lst1 = new ArrayList<String>();
@@ -311,13 +314,14 @@ public final class TestShapes {
assertTrue(lst1.containsAll(lst2));
assertTrue(lst2.containsAll(lst1));
}
ss.close();
}

/**
* Test adding shapes to <code>ShapeGroup</code>
*/
@Test
public void shapeGroup() throws Exception {
public void shapeGroup() throws IOException {
HSLFSlideShow ss = new HSLFSlideShow();

HSLFSlide slide = ss.createSlide();
@@ -325,22 +329,23 @@ public final class TestShapes {

HSLFGroupShape group = new HSLFGroupShape();

group.setAnchor(new Rectangle(0, 0, (int)pgsize.getWidth(), (int)pgsize.getHeight()));
group.setAnchor(new Rectangle2D.Double(0, 0, pgsize.getWidth(), pgsize.getHeight()));
slide.addShape(group);

HSLFPictureData data = ss.addPicture(_slTests.readFile("clock.jpg"), PictureType.JPEG);
HSLFPictureShape pict = new HSLFPictureShape(data, group);
pict.setAnchor(new Rectangle(0, 0, 200, 200));
pict.setAnchor(new Rectangle2D.Double(0, 0, 200, 200));
group.addShape(pict);

HSLFLine line = new HSLFLine(group);
line.setAnchor(new Rectangle(300, 300, 500, 0));
line.setAnchor(new Rectangle2D.Double(300, 300, 500, 0));
group.addShape(line);

//serialize and read again.
ByteArrayOutputStream out = new ByteArrayOutputStream();
ss.write(out);
out.close();
ss.close();

ByteArrayInputStream is = new ByteArrayInputStream(out.toByteArray());
ss = new HSLFSlideShow(is);
@@ -359,10 +364,12 @@ public final class TestShapes {
assertTrue(grshape.get(1) instanceof HSLFLine);

pict = (HSLFPictureShape)grshape.get(0);
assertEquals(new Rectangle(0, 0, 200, 200), pict.getAnchor());
assertEquals(new Rectangle2D.Double(0, 0, 200, 200), pict.getAnchor());

line = (HSLFLine)grshape.get(1);
assertEquals(new Rectangle(300, 300, 500, 0), line.getAnchor());
assertEquals(new Rectangle2D.Double(300, 300, 500, 0), line.getAnchor());
ss.close();
}

/**
@@ -387,10 +394,12 @@ public final class TestShapes {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ss.write(out);
out.close();
ss.close();

ss = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()));
sl = ss.getSlides().get(0);
assertEquals("expected 0 shaped in " + file, 0, sl.getShapes().size());
ss.close();
}

@Test
@@ -409,7 +418,7 @@ public final class TestShapes {
}

@Test
public void shapeId() {
public void shapeId() throws IOException {
HSLFSlideShow ss = new HSLFSlideShow();
HSLFSlide slide = ss.createSlide();
HSLFShape shape = null;
@@ -456,6 +465,7 @@ public final class TestShapes {
slide.addShape(shape);
}
assertEquals(numClusters + 1, dgg.getNumIdClusters());
ss.close();
}

@Test
@@ -482,5 +492,7 @@ public final class TestShapes {
assertEquals("Border width is 5 pt", sh4.getText());
assertEquals(Color.black, sh4.getLineColor());
assertEquals(5.0, sh4.getLineWidth(), 0);
ss.close();
}
}

+ 23
- 20
src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java Voir le fichier

@@ -25,6 +25,7 @@ import static org.junit.Assert.fail;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;

import org.apache.poi.POIDataSamples;
@@ -42,8 +43,6 @@ import org.junit.Test;

/**
* Test <code>Table</code> object.
*
* @author Yegor Kozlov
*/
public final class TestTable {
private static POIDataSamples _slTests = POIDataSamples.getSlideShowInstance();
@@ -52,7 +51,7 @@ public final class TestTable {
* Test that ShapeFactory works properly and returns <code>Table</code>
*/
@Test
public void testShapeFactory() throws Exception {
public void testShapeFactory() throws IOException {
HSLFSlideShow ppt = new HSLFSlideShow();

HSLFSlide slide = ppt.createSlide();
@@ -72,20 +71,22 @@ public final class TestTable {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ppt.write(out);
out.close();

ppt.close();
ppt = new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()));
slide = ppt.getSlides().get(0);
assertTrue(slide.getShapes().get(0) instanceof HSLFTable);
HSLFTable tbl3 = (HSLFTable)slide.getShapes().get(0);
assertEquals(tbl.getNumberOfColumns(), tbl3.getNumberOfColumns());
assertEquals(tbl.getNumberOfRows(), tbl3.getNumberOfRows());
ppt.close();
}

/**
* Error constructing Table when rownum=1
*/
@Test
public void test45889(){
public void test45889() throws IOException {
HSLFSlideShow ppt = new HSLFSlideShow();
HSLFSlide slide = ppt.createSlide();
List<HSLFShape> shapes;
@@ -101,24 +102,25 @@ public final class TestTable {

assertEquals(tbl1.getNumberOfColumns(), tbl2.getNumberOfColumns());
assertEquals(tbl1.getNumberOfRows(), tbl2.getNumberOfRows());
ppt.close();
}

@Test
public void testIllegalCOnstruction(){
@Test(expected=IllegalArgumentException.class)
public void testIllegalRowCnstruction() throws IOException {
HSLFSlideShow ppt = new HSLFSlideShow();
HSLFSlide slide = ppt.createSlide();
try {
slide.createTable(0, 5);
fail("Table(rownum, colnum) must throw IllegalArgumentException if any of tghe arguments is less than 1");
} catch (IllegalArgumentException e){

}
try {
slide.createTable(5, 0);
fail("Table(rownum, colnum) must throw IllegalArgumentException if any of tghe arguments is less than 1");
} catch (IllegalArgumentException e){
slide.createTable(0, 5);
fail("Table(rownum, colnum) must throw IllegalArgumentException if any of tghe arguments is less than 1");
ppt.close();
}

}
@Test(expected=IllegalArgumentException.class)
public void testIllegalColConstruction() throws IOException {
HSLFSlideShow ppt = new HSLFSlideShow();
HSLFSlide slide = ppt.createSlide();
slide.createTable(5, 0);
fail("Table(rownum, colnum) must throw IllegalArgumentException if any of tghe arguments is less than 1");
ppt.close();
}
/**
@@ -126,7 +128,7 @@ public final class TestTable {
* when the table is positioned with its top at -1
*/
@Test
public void test57820() throws Exception {
public void test57820() throws IOException {
SlideShow<?,?> ppt = new HSLFSlideShow(_slTests.openResourceAsStream("bug57820-initTableNullRefrenceException.ppt"));

List<? extends Slide<?,?>> slides = ppt.getSlides();
@@ -143,7 +145,8 @@ public final class TestTable {
}

assertNotNull(tbl);

assertEquals(-1, tbl.getAnchor().getY(), 0);
ppt.close();
}
}

+ 4
- 4
src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTable.java Voir le fichier

@@ -25,7 +25,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.awt.Color;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -58,10 +58,10 @@ public class TestTable {

new DrawTableShape(table).setAllBorders(1.0, Color.black, StrokeStyle.LineDash.DASH_DOT);

table.setAnchor(new Rectangle(100, 100, 400, 400));
table.setAnchor(new Rectangle2D.Double(100, 100, 400, 400));

Rectangle rectExp = new Rectangle(420,367,80,133);
Rectangle rectAct = table.getCell(rows-1, cols-1).getAnchor();
Rectangle2D rectExp = new Rectangle2D.Double(420,366.625,80,133.375);
Rectangle2D rectAct = table.getCell(rows-1, cols-1).getAnchor();
assertEquals(rectExp, rectAct);
ppt.close();
}

+ 2
- 2
src/testcases/org/apache/poi/sl/draw/geom/TestPresetGeometries.java Voir le fichier

@@ -22,8 +22,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.awt.Rectangle;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.net.URL;
import java.util.Enumeration;
import java.util.Map;
@@ -38,7 +38,7 @@ public class TestPresetGeometries {

for(String name : shapes.keySet()) {
CustomGeometry geom = shapes.get(name);
Context ctx = new Context(geom, new Rectangle(0, 0, 100, 100), new IAdjustableShape() {
Context ctx = new Context(geom, new Rectangle2D.Double(0, 0, 100, 100), new IAdjustableShape() {
public Guide getAdjustValue(String presetName) {
return null;
}

BIN
test-data/slideshow/table_test.ppt Voir le fichier


BIN
test-data/slideshow/table_test.pptx Voir le fichier


Chargement…
Annuler
Enregistrer