Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java Sun Aug  9 
22:44:13 2015
@@ -19,19 +19,22 @@
 
 package org.apache.poi.xslf.util;
 
-import org.apache.poi.openxml4j.opc.OPCPackage;
-import org.apache.poi.xslf.usermodel.XMLSlideShow;
-import org.apache.poi.xslf.usermodel.XSLFSlide;
-
-import javax.imageio.ImageIO;
-
-import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.image.BufferedImage;
-import java.io.FileOutputStream;
+import java.io.File;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
+import javax.imageio.ImageIO;
+
+import org.apache.poi.sl.SlideShowFactory;
+import org.apache.poi.sl.draw.Drawable;
+import org.apache.poi.sl.usermodel.Slide;
+import org.apache.poi.sl.usermodel.SlideShow;
+import org.apache.poi.util.JvmBugs;
 
 /**
  * An utulity to convert slides of a .pptx slide show to a PNG image
@@ -40,22 +43,33 @@ import java.util.List;
  */
 public class PPTX2PNG {
 
-    static void usage(){
-        System.out.println("Usage: PPTX2PNG [options] <pptx file>");
-        System.out.println("Options:");
-        System.out.println("    -scale <float>   scale factor");
-        System.out.println("    -slide <integer> 1-based index of a slide to 
render");
+    static void usage(String error){
+        String msg =
+            "Usage: PPTX2PNG [options] <ppt or pptx file>\n" +
+            (error == null ? "" : ("Error: "+error+"\n")) +
+            "Options:\n" +
+            "    -scale <float>   scale factor\n" +
+            "    -slide <integer> 1-based index of a slide to render\n" +
+            "    -format <type>   png,gif,jpg (,null for testing)" +
+            "    -outdir <dir>    output directory, defaults to origin of the 
ppt/pptx file" +
+            "    -quite           do not write to console (for normal 
processing)";
+
+        System.out.println(msg);
+        // no System.exit here, as we also run in junit tests!
     }
 
     public static void main(String[] args) throws Exception {
         if (args.length == 0) {
-            usage();
+            usage(null);
             return;
         }
 
         int slidenum = -1;
         float scale = 1;
-        String file = null;
+        File file = null;
+        String format = "png";
+        File outdir = null;
+        boolean quite = false;
 
         for (int i = 0; i < args.length; i++) {
             if (args[i].startsWith("-")) {
@@ -63,55 +77,104 @@ public class PPTX2PNG {
                     scale = Float.parseFloat(args[++i]);
                 } else if ("-slide".equals(args[i])) {
                     slidenum = Integer.parseInt(args[++i]);
+                } else if ("-format".equals(args[i])) {
+                    format = args[++i];
+                } else if ("-outdir".equals(args[i])) {
+                    outdir = new File(args[++i]);
+                } else if ("-quite".equals(args[i])) {
+                    quite = true;
                 }
             } else {
-                file = args[i];
+                file = new File(args[i]);
             }
         }
 
-        if(file == null){
-            usage();
+        if (file == null || !file.exists()) {
+            usage("File not specified or it doesn't exist");
+            return;
+        }
+
+        if (outdir == null) {
+            outdir = file.getParentFile();
+        }
+        
+        if (outdir == null || !outdir.exists() || !outdir.isDirectory()) {
+            usage("Output directory doesn't exist");
             return;
         }
 
-        System.out.println("Processing " + file);
-        XMLSlideShow ppt = new XMLSlideShow(OPCPackage.open(file));
+        if (scale < 0) {
+            usage("Invalid scale given");
+            return;
+        }
+        
+        if (format == null || !format.matches("^(png|gif|jpg|null)$")) {
+            usage("Invalid format given");
+            return;
+        }
+    
+        if (!quite) {
+            System.out.println("Processing " + file);
+        }
+        SlideShow ss = SlideShowFactory.create(file, null, true);
+        List<? extends Slide<?,?,?>> slides = ss.getSlides();
 
-        Dimension pgsize = ppt.getPageSize();
+        
+        if (slidenum < -1 || slidenum == 0 || slidenum > slides.size()) {
+            usage("slidenum must be either -1 (for all) or within range: 
[1.."+slides.size()+"] for "+file);
+            return;
+        }
+        
+        Dimension pgsize = ss.getPageSize();
         int width = (int) (pgsize.width * scale);
         int height = (int) (pgsize.height * scale);
 
-        List<XSLFSlide> slide = ppt.getSlides();
-        for (int i = 0; i < slide.size(); i++) {
-            if (slidenum != -1 && slidenum != (i + 1)) continue;
-
-            String title = slide.get(i).getTitle();
-            System.out.println("Rendering slide " + (i + 1) + (title == null ? 
"" : ": " + title));
-
-            BufferedImage img = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_RGB);
-            Graphics2D graphics = img.createGraphics();
-
-            // default rendering options
-            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON);
-            graphics.setRenderingHint(RenderingHints.KEY_RENDERING, 
RenderingHints.VALUE_RENDER_QUALITY);
-            graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
-            graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
-
-            graphics.setColor(Color.white);
-            graphics.clearRect(0, 0, width, height);
-
-            graphics.scale(scale, scale);
-
-            // draw stuff
-            slide.get(i).draw(graphics);
-
-            // save the result
-            int sep = file.lastIndexOf(".");
-            String fname = file.substring(0, sep == -1 ? file.length() : sep) 
+ "-" + (i + 1) +".png";
-            FileOutputStream out = new FileOutputStream(fname);
-            ImageIO.write(img, "png", out);
-            out.close();
+        int slideNo=1;
+        for(Slide<?,?,?> slide : slides) {
+            if (slidenum == -1 || slideNo == slidenum) {
+                String title = slide.getTitle();
+                if (!quite) {
+                    System.out.println("Rendering slide " + slideNo + (title 
== null ? "" : ": " + title));
+                }
+
+                BufferedImage img = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_ARGB);
+                Graphics2D graphics = img.createGraphics();
+                fixFonts(graphics);
+            
+                // default rendering options
+                graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON);
+                graphics.setRenderingHint(RenderingHints.KEY_RENDERING, 
RenderingHints.VALUE_RENDER_QUALITY);
+                graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+                
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
+
+                graphics.scale(scale, scale);
+
+                // draw stuff
+                slide.draw(graphics);
+
+                // save the result
+                if (!"null".equals(format)) {
+                    String outname = file.getName().replaceFirst(".pptx?", "");
+                    outname = String.format("%1$s-%2$04d.%3$s", outname, 
slideNo, format);
+                    File outfile = new File(outdir, outname);
+                    ImageIO.write(img, format, outfile);
+                }
+            }                
+            slideNo++;
         }
-        System.out.println("Done");
+        
+        if (!quite) {
+            System.out.println("Done");
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private static void fixFonts(Graphics2D graphics) {
+        if (!JvmBugs.hasLineBreakMeasurerBug()) return;
+        Map<String,String> fontMap = 
(Map<String,String>)graphics.getRenderingHint(Drawable.FONT_MAP);
+        if (fontMap == null) fontMap = new HashMap<String,String>();
+        fontMap.put("Calibri", "Lucida Sans");
+        fontMap.put("Cambria", "Lucida Bright");
+        graphics.setRenderingHint(Drawable.FONT_MAP, fontMap);        
     }
 }

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java 
(original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java 
Sun Aug  9 22:44:13 2015
@@ -19,16 +19,11 @@
 
 package org.apache.poi.xslf.usermodel;
 
-import java.awt.Dimension;
-import java.awt.Graphics2D;
-import java.awt.image.BufferedImage;
+import java.io.File;
 import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.Map;
 
-import org.apache.poi.sl.draw.Drawable;
-import org.apache.poi.util.JvmBugs;
-import org.apache.poi.xslf.XSLFTestDataSamples;
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.xslf.util.PPTX2PNG;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -44,7 +39,6 @@ public class TestPPTX2PNG {
     @BeforeClass
     public static void activateJaxpDebug() {
         jaxpDebugEnable = setDebugFld(true);
-//        setXmlInputFactory();
     }
 
     @AfterClass
@@ -66,48 +60,26 @@ public class TestPPTX2PNG {
             return false;
         }
     }
-
-//    private static void setXmlInputFactory() {
-//        String propName = "javax.xml.stream.XMLInputFactory";
-//        String propVal = "com.sun.xml.internal.stream.XMLInputFactoryImpl";
-//        try {
-//            Class.forName(propVal);
-//            System.setProperty(propName, propVal);
-//        } catch (Exception e){
-//            // ignore
-//        }
-//    }
-    
     
     @Test
     public void render() throws Exception {
-        String[] testFiles = {"backgrounds.pptx","layouts.pptx", 
"sample.pptx", "shapes.pptx", "themes.pptx",};
+        POIDataSamples samples = POIDataSamples.getSlideShowInstance();
+
+        String[] testFiles = 
{"alterman_security.ppt","alterman_security.pptx","KEY02.pptx","themes.pptx","backgrounds.pptx","layouts.pptx",
 "sample.pptx", "shapes.pptx",};
+        String[] args = {
+            "-format", "null", // png,gif,jpg or null for test
+            "-slide", "-1", // -1 for all
+            "-outdir", new File("build/tmp/").getCanonicalPath(),
+            "-quite",
+            "dummyfile"
+        };
         for(String sampleFile : testFiles){
+            args[args.length-1] = 
samples.getFile(sampleFile).getCanonicalPath();
             try {
-                XMLSlideShow pptx = 
XSLFTestDataSamples.openSampleDocument(sampleFile);
-                Dimension pg = pptx.getPageSize();
-                //int slideNo=1;
-                for(XSLFSlide slide : pptx.getSlides()){
-                    BufferedImage img = new BufferedImage(pg.width, pg.height, 
BufferedImage.TYPE_INT_ARGB);
-                    Graphics2D graphics = img.createGraphics();
-                    fixFonts(graphics);
-                    slide.draw(graphics);
-                    // ImageIO.write(img, "PNG", new 
File("build/tmp/"+sampleFile.replaceFirst(".pptx?", "-")+slideNo+".png"));
-                    //slideNo++;
-                }
+                PPTX2PNG.main(args);
             } catch (IllegalStateException e) {
                 throw new IllegalStateException("While reading file " + 
sampleFile, e);
             }
         }
     }
-    
-    @SuppressWarnings("unchecked")
-    private void fixFonts(Graphics2D graphics) {
-        if (!JvmBugs.hasLineBreakMeasurerBug()) return;
-        Map<String,String> fontMap = 
(Map<String,String>)graphics.getRenderingHint(Drawable.FONT_MAP);
-        if (fontMap == null) fontMap = new HashMap<String,String>();
-        fontMap.put("Calibri", "Lucida Sans");
-        fontMap.put("Cambria", "Lucida Bright");
-        graphics.setRenderingHint(Drawable.FONT_MAP, fontMap);        
-    }
 }

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java
 Sun Aug  9 22:44:13 2015
@@ -16,7 +16,12 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.awt.Color;
 import java.io.IOException;

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java 
(original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java 
Sun Aug  9 22:44:13 2015
@@ -16,9 +16,15 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
-import static org.junit.Assert.*;
+import static org.apache.poi.sl.TestCommonSL.sameColor;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.awt.Color;
+import java.io.IOException;
 import java.util.List;
 
 import org.apache.poi.xslf.XSLFTestDataSamples;
@@ -98,7 +104,7 @@ public class TestXSLFSlide {
     }
 
     @Test
-    public void testCreateSlide(){
+    public void testCreateSlide() throws IOException {
         XMLSlideShow  ppt = new XMLSlideShow();
         assertEquals(0, ppt.getSlides().size());
 
@@ -108,10 +114,12 @@ public class TestXSLFSlide {
         assertFalse(slide.getFollowMasterGraphics());
         slide.setFollowMasterGraphics(true);
         assertTrue(slide.getFollowMasterGraphics());
+        
+        ppt.close();
     }
 
     @Test
-    public void testImportContent(){
+    public void testImportContent() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
 
         XMLSlideShow  src = 
XSLFTestDataSamples.openSampleDocument("themes.pptx");
@@ -128,7 +136,7 @@ public class TestXSLFSlide {
         assertEquals(40.0, r1.getFontSize(), 0);
         assertTrue(r1.isBold());
         assertTrue(r1.isItalic());
-        assertEquals(new Color(148, 198, 0), r1.getFontColor());
+        assertTrue(sameColor(new Color(148, 198, 0), r1.getFontColor()));
         assertNull(sh1.getFillColor());
         assertNull(sh1.getLineColor());
 
@@ -141,7 +149,7 @@ public class TestXSLFSlide {
         assertEquals(18.0, r2.getFontSize(), 0);
         assertFalse(r2.isBold());
         assertFalse(r2.isItalic());
-        assertEquals(Color.white, r2.getFontColor());
+        assertTrue(sameColor(Color.white, r2.getFontColor()));
         assertEquals(new Color(148, 198, 0), sh2.getFillColor());
         assertEquals(new Color(148, 198, 0), sh2.getLineColor()); // slightly 
different from PowerPoint!
 
@@ -157,17 +165,19 @@ public class TestXSLFSlide {
         //assertEquals(32.4.0, r3.getFontSize());
         assertTrue(r3.isBold());
         assertTrue(r3.isItalic());
-        assertEquals(new Color(148, 198, 0), r3.getFontColor());
+        assertTrue(sameColor(new Color(148, 198, 0), r3.getFontColor()));
         assertNull(sh3.getFillColor());
         assertNull(sh3.getLineColor());
 
         XSLFPictureShape sh4 = (XSLFPictureShape)shapes2.get(1);
         XSLFPictureShape srcPic = 
(XSLFPictureShape)src.getSlides().get(4).getShapes().get(1);
         assertArrayEquals(sh4.getPictureData().getData(), 
srcPic.getPictureData().getData());
+        
+        ppt.close();
     }
 
     @Test
-    public void testMergeSlides(){
+    public void testMergeSlides() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
         String[] pptx = {"shapes.pptx", "themes.pptx", "layouts.pptx", 
"backgrounds.pptx"};
 
@@ -179,5 +189,7 @@ public class TestXSLFSlide {
             }
         }
         assertEquals(30, ppt.getSlides().size());
+        
+        ppt.close();
     }    
 }
\ 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=1694925&r1=1694924&r2=1694925&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 Aug  9 22:44:13 2015
@@ -16,19 +16,24 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
-import static org.junit.Assert.*;
-
-import java.awt.*;
+import static org.apache.poi.sl.TestCommonSL.sameColor;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+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;
 
 import org.apache.poi.sl.draw.DrawTextFragment;
 import org.apache.poi.sl.draw.DrawTextParagraph;
 import org.apache.poi.sl.usermodel.AutoNumberingScheme;
 import org.apache.poi.sl.usermodel.TextParagraph.TextAlign;
-import org.apache.poi.util.POILogFactory;
-import org.apache.poi.util.POILogger;
 import org.apache.poi.xslf.XSLFTestDataSamples;
 import org.junit.Assume;
 import org.junit.Test;
@@ -37,7 +42,7 @@ import org.junit.Test;
  * @author Yegor Kozlov
  */
 public class TestXSLFTextParagraph {
-    private static POILogger _logger = 
POILogFactory.getLogger(XSLFTextParagraph.class);
+    // private static POILogger _logger = 
POILogFactory.getLogger(XSLFTextParagraph.class);
 
     static class DrawTextParagraphProxy extends DrawTextParagraph<XSLFTextRun> 
{
         DrawTextParagraphProxy(XSLFTextParagraph p) {
@@ -58,7 +63,7 @@ public class TestXSLFTextParagraph {
     }
     
     @Test
-    public void testWrappingWidth() throws Exception {
+    public void testWrappingWidth() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
         XSLFSlide slide = ppt.createSlide();
         XSLFTextShape sh = slide.createAutoShape();
@@ -142,6 +147,8 @@ public class TestXSLFTextParagraph {
         expectedWidth = anchor.getWidth() - leftInset - rightInset - 
leftMargin;
         assertEquals(244.0, expectedWidth, 0); // 300 - 10 - 10 - 36 
         assertEquals(expectedWidth, dtp.getWrappingWidth(false, null), 0);
+        
+        ppt.close();
      }
 
     /**
@@ -149,7 +156,7 @@ public class TestXSLFTextParagraph {
      * This test requires that the Arial font is available and will run only 
on windows
      */
     @Test
-    public void testBreakLines(){
+    public void testBreakLines() throws IOException {
         String os = System.getProperty("os.name");
         Assume.assumeTrue("Skipping testBreakLines(), it is executed only on 
Windows machines", (os != null && os.contains("Windows")));
 
@@ -237,10 +244,11 @@ public class TestXSLFTextParagraph {
         // the first line is at least two times higher than the second
         assertTrue(lines.get(0).getHeight() > lines.get(1).getHeight()*2);
 
+        ppt.close();
     }
 
     @Test
-    public void testThemeInheritance(){
+    public void testThemeInheritance() throws IOException {
         XMLSlideShow ppt = 
XSLFTestDataSamples.openSampleDocument("prProps.pptx");
         List<XSLFShape> shapes = ppt.getSlides().get(0).getShapes();
         XSLFTextShape sh1 = (XSLFTextShape)shapes.get(0);
@@ -252,10 +260,11 @@ public class TestXSLFTextParagraph {
         XSLFTextShape sh3 = (XSLFTextShape)shapes.get(2);
         assertEquals("Foundation", sh3.getText());
         assertEquals(TextAlign.CENTER, 
sh3.getTextParagraphs().get(0).getTextAlign());
+        ppt.close();
     }
 
     @Test
-    public void testParagraphProperties(){
+    public void testParagraphProperties() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
         XSLFSlide slide = ppt.createSlide();
         XSLFTextShape sh = slide.createAutoShape();
@@ -275,7 +284,7 @@ public class TestXSLFTextParagraph {
 
         assertEquals(null, p.getBulletFontColor());
         p.setBulletFontColor(Color.red);
-        assertEquals(Color.red, p.getBulletFontColor());
+        assertTrue(sameColor(Color.red, p.getBulletFontColor()));
 
         assertNull(p.getBulletFontSize());
         p.setBulletFontSize(200.);
@@ -342,34 +351,35 @@ public class TestXSLFTextParagraph {
 
         assertEquals(72.0, p.getDefaultTabSize(), 0);
 
+        ppt.close();
     }
 
-    @Test
-    public void testLineBreak(){
+    @Test(expected = IllegalStateException.class)
+    public void testLineBreak() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
-        XSLFSlide slide = ppt.createSlide();
-        XSLFTextShape sh = slide.createAutoShape();
-
-        XSLFTextParagraph p = sh.addNewTextParagraph();
-        XSLFTextRun r1 = p.addNewTextRun();
-        r1.setText("Hello,");
-        XSLFTextRun r2 = p.addLineBreak();
-        assertEquals("\n", r2.getRawText());
-        r2.setFontSize(10.0);
-        assertEquals(10.0, r2.getFontSize(), 0);
-        XSLFTextRun r3 = p.addNewTextRun();
-        r3.setText("World!");
-        r3.setFontSize(20.0);
-        XSLFTextRun r4 = p.addLineBreak();
-        assertEquals(20.0, r4.getFontSize(), 0);
-
-        assertEquals("Hello,\nWorld!\n",sh.getText());
-
         try {
+            XSLFSlide slide = ppt.createSlide();
+            XSLFTextShape sh = slide.createAutoShape();
+    
+            XSLFTextParagraph p = sh.addNewTextParagraph();
+            XSLFTextRun r1 = p.addNewTextRun();
+            r1.setText("Hello,");
+            XSLFTextRun r2 = p.addLineBreak();
+            assertEquals("\n", r2.getRawText());
+            r2.setFontSize(10.0);
+            assertEquals(10.0, r2.getFontSize(), 0);
+            XSLFTextRun r3 = p.addNewTextRun();
+            r3.setText("World!");
+            r3.setFontSize(20.0);
+            XSLFTextRun r4 = p.addLineBreak();
+            assertEquals(20.0, r4.getFontSize(), 0);
+    
+            assertEquals("Hello,\nWorld!\n",sh.getText());
+
+            // "You cannot change text of a line break, it is always '\\n'"
             r2.setText("aaa");
-            fail("Expected IllegalStateException");
-        } catch (IllegalStateException e){
-            assertEquals("You cannot change text of a line break, it is always 
'\\n'", e.getMessage());
+        } finally {
+            ppt.close();
         }
     }
 }

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java
 Sun Aug  9 22:44:13 2015
@@ -18,16 +18,23 @@
  */
 package org.apache.poi.xslf.usermodel;
 
-import junit.framework.TestCase;
+import static org.apache.poi.sl.TestCommonSL.sameColor;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
-import java.awt.*;
+import java.awt.Color;
+import java.io.IOException;
+
+import org.junit.Test;
 
 /**
  * @author Yegor Kozlov
  */
-public class TestXSLFTextRun extends TestCase {
+public class TestXSLFTextRun {
 
-    public void testRunProperties(){
+    @Test
+    public void testRunProperties() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
         XSLFSlide slide = ppt.createSlide();
         XSLFTextShape sh = slide.createAutoShape();
@@ -35,26 +42,26 @@ public class TestXSLFTextRun extends Tes
         XSLFTextRun r = sh.addNewTextParagraph().addNewTextRun();
         assertEquals("en-US", r.getRPr().getLang());
 
-        assertEquals(0., r.getCharacterSpacing());
+        assertEquals(0., r.getCharacterSpacing(), 0);
         r.setCharacterSpacing(3);
-        assertEquals(3., r.getCharacterSpacing());
+        assertEquals(3., r.getCharacterSpacing(), 0);
         r.setCharacterSpacing(-3);
-        assertEquals(-3., r.getCharacterSpacing());
+        assertEquals(-3., r.getCharacterSpacing(), 0);
         r.setCharacterSpacing(0);
-        assertEquals(0., r.getCharacterSpacing());
+        assertEquals(0., r.getCharacterSpacing(), 0);
         assertFalse(r.getRPr().isSetSpc());
 
-        assertEquals(Color.black, r.getFontColor());
+        assertTrue(sameColor(Color.black, r.getFontColor()));
         r.setFontColor(Color.red);
-        assertEquals(Color.red, r.getFontColor());
+        assertTrue(sameColor(Color.red, r.getFontColor()));
 
         assertEquals("Calibri", r.getFontFamily());
         r.setFontFamily("Arial");
         assertEquals("Arial", r.getFontFamily());
 
-        assertEquals(18.0, r.getFontSize());
+        assertEquals(18.0, r.getFontSize(), 0);
         r.setFontSize(13.0);
-        assertEquals(13.0, r.getFontSize());
+        assertEquals(13.0, r.getFontSize(), 0);
 
         assertEquals(false, r.isSuperscript());
         r.setSuperscript(true);
@@ -67,5 +74,7 @@ public class TestXSLFTextRun extends Tes
         assertEquals(true, r.isSubscript());
         r.setSubscript(false);
         assertEquals(false, r.isSubscript());
+        
+        ppt.close();
     }
 }

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java
 Sun Aug  9 22:44:13 2015
@@ -16,16 +16,26 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
-import static org.junit.Assert.*;
+import static org.apache.poi.sl.TestCommonSL.sameColor;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 
 import java.awt.Color;
+import java.io.IOException;
 import java.util.List;
 
 import org.apache.poi.sl.usermodel.TextParagraph.TextAlign;
 import org.apache.poi.sl.usermodel.VerticalAlignment;
 import org.apache.poi.xslf.XSLFTestDataSamples;
 import org.junit.Test;
-import org.openxmlformats.schemas.drawingml.x2006.main.*;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties;
+import 
org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties;
+import 
org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties;
+import org.openxmlformats.schemas.drawingml.x2006.main.STTextAlignType;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder;
 import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType;
 
@@ -82,7 +92,7 @@ public class TestXSLFTextShape {
         XSLFTextRun r1 = 
shape1.getTextParagraphs().get(0).getTextRuns().get(0);
         assertEquals("Calibri", r1.getFontFamily());
         assertEquals(44.0, r1.getFontSize(), 0);
-        assertEquals(Color.black, r1.getFontColor());
+        assertTrue(sameColor(Color.black, r1.getFontColor()));
 
         XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1);
         CTPlaceholder ph2 = shape2.getCTPlaceholder();
@@ -151,7 +161,7 @@ public class TestXSLFTextShape {
         XSLFTextRun r1 = 
shape1.getTextParagraphs().get(0).getTextRuns().get(0);
         assertEquals("Calibri", r1.getFontFamily());
         assertEquals(44.0, r1.getFontSize(), 0);
-        assertEquals(Color.black, r1.getFontColor());
+        assertTrue(sameColor(Color.black, r1.getFontColor()));
 
         XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1);
         CTPlaceholder ph2 = shape2.getCTPlaceholder();
@@ -262,7 +272,7 @@ public class TestXSLFTextShape {
         assertEquals(TextAlign.LEFT, r1.getParentParagraph().getTextAlign());
         assertEquals("Calibri", r1.getFontFamily());
         assertEquals(40.0, r1.getFontSize(), 0);
-        assertEquals(Color.black, r1.getFontColor());
+        assertTrue(sameColor(Color.black, r1.getFontColor()));
         assertTrue(r1.isBold());
         assertFalse(r1.isItalic());
         assertFalse(r1.isUnderlined());
@@ -336,7 +346,7 @@ public class TestXSLFTextShape {
         assertEquals(TextAlign.CENTER, r1.getParentParagraph().getTextAlign());
         assertEquals("Calibri", r1.getFontFamily());
         assertEquals(44.0, r1.getFontSize(), 0);
-        assertEquals(Color.black, r1.getFontColor());
+        assertTrue(sameColor(Color.black, r1.getFontColor()));
 
         XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1);
         CTPlaceholder ph2 = shape2.getCTPlaceholder();
@@ -404,7 +414,7 @@ public class TestXSLFTextShape {
         assertEquals(0, pr5.getParentParagraph().getIndentLevel());
         assertEquals("Right", pr5.getRawText());
         assertEquals("Calibri", pr5.getFontFamily());
-        assertEquals(Color.black, pr5.getFontColor());
+        assertTrue(sameColor(Color.black, pr5.getFontColor()));
     }
 
     @SuppressWarnings("unused")
@@ -444,7 +454,7 @@ public class TestXSLFTextShape {
         assertEquals(TextAlign.CENTER, r1.getParentParagraph().getTextAlign());
         assertEquals("Calibri", r1.getFontFamily());
         assertEquals(44.0, r1.getFontSize(), 0);
-        assertEquals(Color.black, r1.getFontColor());
+        assertTrue(sameColor(Color.black, r1.getFontColor()));
         assertFalse(r1.isBold());
 
         XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1);
@@ -517,7 +527,7 @@ public class TestXSLFTextShape {
         assertEquals(TextAlign.LEFT, r1.getParentParagraph().getTextAlign());
         assertEquals("Calibri", r1.getFontFamily());
         assertEquals(20.0, r1.getFontSize(), 0);
-        assertEquals(Color.black, r1.getFontColor());
+        assertTrue(sameColor(Color.black, r1.getFontColor()));
         assertTrue(r1.isBold());
 
         XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1);
@@ -605,7 +615,7 @@ public class TestXSLFTextShape {
         assertEquals("Calibri", r1.getFontFamily());
         assertEquals(12.0, r1.getFontSize(), 0);
         // TODO calculation of tint is incorrect
-        assertEquals(new Color(64,64,64), r1.getFontColor());
+        assertTrue(sameColor(new Color(64,64,64), r1.getFontColor()));
 
         XSLFTextShape dt = 
(XSLFTextShape)slide.getPlaceholderByType(STPlaceholderType.INT_DT);
         assertEquals("Friday, October 21, 2011", dt.getText());
@@ -615,7 +625,7 @@ public class TestXSLFTextShape {
     }
 
     @Test
-    public void testTitleStyles(){
+    public void testTitleStyles() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
 
         XSLFSlideMaster master = ppt.getSlideMasters().get(0);
@@ -693,10 +703,12 @@ public class TestXSLFTextShape {
         assertEquals("Calibri", textRun.getFontFamily());
         lv5PPr.setAlgn(STTextAlignType.CTR);
         assertEquals(TextAlign.CENTER, paragraph.getTextAlign());
+        
+        ppt.close();
     }
 
     @Test
-    public void testBodyStyles(){
+    public void testBodyStyles() throws IOException {
         XMLSlideShow ppt = new XMLSlideShow();
 
         XSLFSlideMaster master = ppt.getSlideMasters().get(0);
@@ -895,7 +907,7 @@ public class TestXSLFTextShape {
         assertEquals("Calibri", r3.getFontFamily());
         lv3PPr.setAlgn(STTextAlignType.CTR);
         assertEquals(TextAlign.CENTER, p3.getTextAlign());
-
+        
+        ppt.close();
     }
-
 }
\ No newline at end of file

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java 
(original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java 
Sun Aug  9 22:44:13 2015
@@ -16,6 +16,7 @@
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
+import static org.apache.poi.sl.TestCommonSL.sameColor;
 import static org.junit.Assert.*;
 
 import java.awt.Color;
@@ -66,7 +67,7 @@ public class TestXSLFTheme {
 
         XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Rectangle 3");
         XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(Color.white, run1.getFontColor());
+        assertTrue(sameColor(Color.white, run1.getFontColor()));
         assertEquals(new Color(79, 129, 189), sh1.getFillColor());
         assertTrue(sh1.getFillStyle().getPaint() instanceof SolidPaint) ;   // 
solid fill
 
@@ -89,13 +90,13 @@ public class TestXSLFTheme {
 
         XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Rectangle 4");
         XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(Color.white, run1.getFontColor());
+        assertTrue(sameColor(Color.white, run1.getFontColor()));
         assertEquals(new Color(148, 198, 0), sh1.getFillColor());
         assertTrue(sh1.getFillStyle().getPaint() instanceof SolidPaint) ;   // 
solid fill
 
         XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 3");
         XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(new Color(148, 198, 0), run2.getFontColor());
+        assertTrue(sameColor(new Color(148, 198, 0), run2.getFontColor()));
         assertNull(sh2.getFillColor());  // no fill
 
         assertTrue(slide.getSlideLayout().getFollowMasterGraphics());
@@ -107,7 +108,7 @@ public class TestXSLFTheme {
 
         XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 1");
         XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(new Color(148, 198, 0), run2.getFontColor());
+        assertTrue(sameColor(new Color(148, 198, 0), run2.getFontColor()));
         assertNull(sh2.getFillColor());  // no fill
         // font size is 40pt and scale factor is 90%
         assertEquals(36.0, run2.getFontSize(), 0);
@@ -119,12 +120,12 @@ public class TestXSLFTheme {
 
         XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Subtitle 3");
         XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(new Color(66, 66, 66), run1.getFontColor());
+        assertTrue(sameColor(new Color(66, 66, 66), run1.getFontColor()));
         assertNull(sh1.getFillColor());  // no fill
 
         XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 2");
         XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(new Color(148, 198, 0), run2.getFontColor());
+        assertTrue(sameColor(new Color(148, 198, 0), run2.getFontColor()));
         assertNull(sh2.getFillColor());  // no fill
 
         assertFalse(slide.getSlideLayout().getFollowMasterGraphics());
@@ -154,12 +155,12 @@ public class TestXSLFTheme {
 
         XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Title 3");
         XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(Color.white, run1.getFontColor());
+        assertTrue(sameColor(Color.white, run1.getFontColor()));
         assertNull(sh1.getFillColor());  // no fill
 
         XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Subtitle 4");
         XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0);
-        assertEquals(Color.white, run2.getFontColor());
+        assertTrue(sameColor(Color.white, run2.getFontColor()));
         assertNull(sh2.getFillColor());  // no fill
     }
 }

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java Sun Aug  9 
22:44:13 2015
@@ -17,8 +17,14 @@
 
 package org.apache.poi.hslf.model;
 
-import org.apache.poi.ddf.*;
-import org.apache.poi.hslf.usermodel.*;
+import org.apache.poi.ddf.EscherContainerRecord;
+import org.apache.poi.ddf.EscherOptRecord;
+import org.apache.poi.ddf.EscherProperties;
+import org.apache.poi.ddf.EscherSpRecord;
+import org.apache.poi.hslf.usermodel.HSLFGroupShape;
+import org.apache.poi.hslf.usermodel.HSLFShape;
+import org.apache.poi.hslf.usermodel.HSLFTextParagraph;
+import org.apache.poi.hslf.usermodel.HSLFTextShape;
 import org.apache.poi.sl.usermodel.ShapeContainer;
 import org.apache.poi.sl.usermodel.ShapeType;
 
@@ -27,7 +33,7 @@ import org.apache.poi.sl.usermodel.Shape
  *
  *  @author Yegor Kozlov
  */
-public final class Line extends HSLFSimpleShape {
+public final class Line extends HSLFTextShape implements 
org.apache.poi.sl.usermodel.Line<HSLFTextParagraph> {
     public Line(EscherContainerRecord escherRecord, ShapeContainer<HSLFShape> 
parent){
         super(escherRecord, parent);
     }
@@ -64,23 +70,23 @@ public final class Line extends HSLFSimp
         return _escherContainer;
     }
     
-    /**
-     * Sets the orientation of the line, if inverse is false, then line goes
-     * from top-left to bottom-right, otherwise use inverse equals true 
-     *
-     * @param inverse the orientation of the line
-     */
-    public void setInverse(boolean inverse) {
-        setShapeType(inverse ? ShapeType.LINE_INV : ShapeType.LINE);
-    }
-    
-    /**
-     * Gets the orientation of the line, if inverse is false, then line goes
-     * from top-left to bottom-right, otherwise inverse equals true 
-     *
-     * @return inverse the orientation of the line
-     */
-    public boolean isInverse() {
-        return (getShapeType() == ShapeType.LINE_INV);
-    }
+//    /**
+//     * Sets the orientation of the line, if inverse is false, then line goes
+//     * from top-left to bottom-right, otherwise use inverse equals true 
+//     *
+//     * @param inverse the orientation of the line
+//     */
+//    public void setInverse(boolean inverse) {
+//        setShapeType(inverse ? ShapeType.LINE_INV : ShapeType.LINE);
+//    }
+//    
+//    /**
+//     * Gets the orientation of the line, if inverse is false, then line goes
+//     * from top-left to bottom-right, otherwise inverse equals true 
+//     *
+//     * @return inverse the orientation of the line
+//     */
+//    public boolean isInverse() {
+//        return (getShapeType() == ShapeType.LINE_INV);
+//    }
 }

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java 
Sun Aug  9 22:44:13 2015
@@ -18,19 +18,49 @@
 package org.apache.poi.hslf.model;
 
 
-import java.awt.*;
-import java.awt.font.*;
-import java.awt.geom.*;
-import java.awt.image.*;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Composite;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsEnvironment;
+import java.awt.Image;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.Stroke;
+import java.awt.Toolkit;
+import java.awt.font.FontRenderContext;
+import java.awt.font.GlyphVector;
+import java.awt.font.TextLayout;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Arc2D;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Line2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.geom.RoundRectangle2D;
+import java.awt.image.BufferedImage;
+import java.awt.image.BufferedImageOp;
+import java.awt.image.ImageObserver;
+import java.awt.image.RenderedImage;
 import java.awt.image.renderable.RenderableImage;
 import java.text.AttributedCharacterIterator;
 import java.util.Map;
 
 import org.apache.poi.hslf.exceptions.HSLFException;
-import org.apache.poi.hslf.usermodel.*;
+import org.apache.poi.hslf.usermodel.HSLFFreeformShape;
+import org.apache.poi.hslf.usermodel.HSLFGroupShape;
+import org.apache.poi.hslf.usermodel.HSLFSimpleShape;
+import org.apache.poi.hslf.usermodel.HSLFTextBox;
+import org.apache.poi.hslf.usermodel.HSLFTextRun;
+import org.apache.poi.sl.draw.DrawPaint;
 import org.apache.poi.sl.usermodel.StrokeStyle;
 import org.apache.poi.sl.usermodel.VerticalAlignment;
-import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 
@@ -259,7 +289,7 @@ public final class PPGraphics2D extends
         rt.setFontSize((double)_font.getSize());
         rt.setFontFamily(_font.getFamily());
 
-        if (getColor() != null) rt.setFontColor(getColor());
+        if (getColor() != null) 
rt.setFontColor(DrawPaint.createSolidPaint(getColor()));
         if (_font.isBold()) rt.setBold(true);
         if (_font.isItalic()) rt.setItalic(true);
 

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java 
Sun Aug  9 22:44:13 2015
@@ -22,10 +22,16 @@ import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.List;
 
-import org.apache.poi.ddf.*;
+import org.apache.poi.ddf.EscherBSERecord;
+import org.apache.poi.ddf.EscherContainerRecord;
+import org.apache.poi.ddf.EscherOptRecord;
+import org.apache.poi.ddf.EscherProperties;
+import org.apache.poi.ddf.EscherRecord;
+import org.apache.poi.ddf.EscherSimpleProperty;
 import org.apache.poi.hslf.record.Document;
-import org.apache.poi.sl.usermodel.*;
-import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;
+import org.apache.poi.sl.draw.DrawPaint;
+import org.apache.poi.sl.usermodel.FillStyle;
+import org.apache.poi.sl.usermodel.PaintStyle;
 import org.apache.poi.sl.usermodel.PaintStyle.TexturePaint;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
@@ -113,20 +119,8 @@ public final class HSLFFill {
         return new FillStyle() {
             public PaintStyle getPaint() {
                 switch (getFillType()) {
-                    case FILL_SOLID: {
-                        return new SolidPaint() {
-                            public ColorStyle getSolidColor() {
-                                return new ColorStyle() {
-                                    public Color getColor() { return 
getForegroundColor(); }
-                                    public int getAlpha() { return -1; }
-                                    public int getLumOff() { return -1; }
-                                    public int getLumMod() { return -1; }
-                                    public int getShade()  { return -1; }
-                                    public int getTint()  { return -1; }
-                                };
-                            }
-                        };
-                    }
+                    case FILL_SOLID:
+                        return 
DrawPaint.createSolidPaint(getForegroundColor());
                     case FILL_PICTURE: {
                         final HSLFPictureData pd = getPictureData();
                         if (pd == null) break;
@@ -149,7 +143,7 @@ public final class HSLFFill {
                         logger.log(POILogger.WARN, "unsuported fill type: " + 
getFillType());
                         break;
                 }
-                return PaintStyle.TRANSPARENT_PAINT;
+                return null;
             }
         };
     }

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java 
Sun Aug  9 22:44:13 2015
@@ -188,16 +188,14 @@ public final class HSLFSlide extends HSL
        // Complex Accesser methods follow
 
        /**
-        * Return title of this slide or <code>null</code> if the slide does 
not have title.
         * <p>
         * The title is a run of text of type 
<code>TextHeaderAtom.CENTER_TITLE_TYPE</code> or
         * <code>TextHeaderAtom.TITLE_TYPE</code>
         * </p>
         *
         * @see TextHeaderAtom
-        *
-        * @return title of this slide
         */
+       @Override
        public String getTitle(){
                for (List<HSLFTextParagraph> tp : getTextParagraphs()) {
                    if (tp.isEmpty()) continue;

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java 
(original)
+++ 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java 
Sun Aug  9 22:44:13 2015
@@ -132,6 +132,20 @@ public final class HSLFSlideShow impleme
                this(new HSLFSlideShowImpl(inputStream));
        }
 
+    /**
+     * Constructs a Powerpoint document from an POIFSFileSystem.
+     */
+    public HSLFSlideShow(POIFSFileSystem inputStream) throws IOException {
+        this(new HSLFSlideShowImpl(inputStream));
+    }
+
+    /**
+     * Constructs a Powerpoint document from an DirectoryNode.
+     */
+    public HSLFSlideShow(DirectoryNode root) throws IOException {
+        this(new HSLFSlideShowImpl(root));
+    }
+
        /**
         * Use the PersistPtrHolder entries to figure out what is the "most 
recent"
         * version of all the core records (Document, Notes, Slide etc), and 
save a

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
 (original)
+++ 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
 Sun Aug  9 22:44:13 2015
@@ -27,7 +27,10 @@ import org.apache.poi.hslf.model.PPFont;
 import org.apache.poi.hslf.model.textproperties.*;
 import 
org.apache.poi.hslf.model.textproperties.TextPropCollection.TextPropType;
 import org.apache.poi.hslf.record.*;
+import org.apache.poi.sl.draw.DrawPaint;
 import org.apache.poi.sl.usermodel.AutoNumberingScheme;
+import org.apache.poi.sl.usermodel.PaintStyle;
+import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;
 import org.apache.poi.sl.usermodel.TextParagraph;
 import org.apache.poi.util.*;
 
@@ -403,8 +406,24 @@ public final class HSLFTextParagraph imp
             }
 
             @Override
-            public Color getBulletFontColor() {
-                return HSLFTextParagraph.this.getBulletColor();
+            public void setBulletFontColor(Color color) {
+                setBulletFontColor(DrawPaint.createSolidPaint(color));
+            }
+            
+            @Override
+            public void setBulletFontColor(PaintStyle color) {
+                if (!(color instanceof SolidPaint)) {
+                    throw new IllegalArgumentException("HSLF only supports 
SolidPaint");
+                }
+                SolidPaint sp = (SolidPaint)color;
+                Color col = DrawPaint.applyColorTransform(sp.getSolidColor());
+                HSLFTextParagraph.this.setBulletColor(col);
+            }
+            
+            @Override
+            public PaintStyle getBulletFontColor() {
+                Color col = HSLFTextParagraph.this.getBulletColor();
+                return DrawPaint.createSolidPaint(col);
             }
 
             @Override
@@ -497,7 +516,9 @@ public final class HSLFTextParagraph imp
         TextProp tp = getPropVal(_paragraphStyle, "bullet.color", this);
         if (tp == null) {
             // if bullet color is undefined, return color of first run
-            return (_runs.isEmpty()) ? null : _runs.get(0).getFontColor();
+            if (_runs.isEmpty()) return null;
+            SolidPaint sp = _runs.get(0).getFontColor();
+            return DrawPaint.applyColorTransform(sp.getSolidColor());
         }
 
         return getColorFromColorIndexStruct(tp.getValue(), _sheet);

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java 
Sun Aug  9 22:44:13 2015
@@ -21,8 +21,14 @@ import static org.apache.poi.hslf.usermo
 
 import java.awt.Color;
 
-import org.apache.poi.hslf.model.textproperties.*;
+import org.apache.poi.hslf.model.textproperties.BitMaskTextProp;
+import org.apache.poi.hslf.model.textproperties.CharFlagsTextProp;
+import org.apache.poi.hslf.model.textproperties.TextProp;
+import org.apache.poi.hslf.model.textproperties.TextPropCollection;
 import 
org.apache.poi.hslf.model.textproperties.TextPropCollection.TextPropType;
+import org.apache.poi.sl.draw.DrawPaint;
+import org.apache.poi.sl.usermodel.PaintStyle;
+import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;
 import org.apache.poi.sl.usermodel.TextRun;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
@@ -315,13 +321,15 @@ public final class HSLFTextRun implement
        }
 
        /**
-        * @return font color as RGB value
-        * @see java.awt.Color
+        * @return font color as PaintStyle
         */
-       public Color getFontColor() {
+       @Override
+       public SolidPaint getFontColor() {
                TextProp tp = getPropVal(characterStyle, "font.color", 
parentParagraph);
-               return (tp == null) ? null
-               : HSLFTextParagraph.getColorFromColorIndexStruct(tp.getValue(), 
parentParagraph.getSheet());
+               if (tp == null) return null;
+               Color color = 
HSLFTextParagraph.getColorFromColorIndexStruct(tp.getValue(), 
parentParagraph.getSheet());
+               SolidPaint ps = DrawPaint.createSolidPaint(color);
+               return ps;
        }
 
        /**
@@ -334,12 +342,21 @@ public final class HSLFTextRun implement
                setCharTextPropVal("font.color", bgr);
        }
 
-       /**
-        * Sets color of the text, as a java.awt.Color
-        */
-       public void setFontColor(Color color) {
+
+    @Override
+    public void setFontColor(Color color) {
+        setFontColor(DrawPaint.createSolidPaint(color));
+    }
+       
+       @Override
+       public void setFontColor(PaintStyle color) {
+           if (!(color instanceof SolidPaint)) {
+               throw new IllegalArgumentException("HSLF only supports solid 
paint");
+           }
                // In PowerPont RGB bytes are swapped, as BGR
-               int rgb = new Color(color.getBlue(), color.getGreen(), 
color.getRed(), 254).getRGB();
+           SolidPaint sp = (SolidPaint)color;
+           Color c = DrawPaint.applyColorTransform(sp.getSolidColor());
+               int rgb = new Color(c.getBlue(), c.getGreen(), c.getRed(), 
254).getRGB();
                setFontColor(rgb);
        }
 

Modified: 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java 
(original)
+++ 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java 
Sun Aug  9 22:44:13 2015
@@ -17,6 +17,7 @@
 
 package org.apache.poi.hslf.model;
 
+import static org.apache.poi.sl.TestCommonSL.sameColor;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -53,9 +54,9 @@ import org.apache.poi.hslf.usermodel.HSL
 import org.apache.poi.hslf.usermodel.HSLFTextParagraph;
 import org.apache.poi.hslf.usermodel.HSLFTextRun;
 import org.apache.poi.hslf.usermodel.HSLFTextShape;
+import org.apache.poi.sl.usermodel.PictureData.PictureType;
 import org.apache.poi.sl.usermodel.ShapeType;
 import org.apache.poi.sl.usermodel.StrokeStyle.LineDash;
-import org.apache.poi.sl.usermodel.PictureData.PictureType;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -189,16 +190,16 @@ public final class TestShapes {
         List<HSLFTextParagraph> para = tb.getTextParagraphs();
         HSLFTextRun tr = para.get(0).getTextRuns().get(0);
         assertEquals("para 1 run 1. ", tr.getRawText());
-        assertEquals(Color.black, tr.getFontColor());
+        assertTrue(sameColor(Color.black, tr.getFontColor()));
         tr = para.get(0).getTextRuns().get(1);
         assertEquals("para 1 run 2.\r",  tr.getRawText());
-        assertEquals(Color.red, tr.getFontColor());
+        assertTrue(sameColor(Color.red, tr.getFontColor()));
         tr = para.get(1).getTextRuns().get(0);
         assertEquals("para 2 run 1. ", tr.getRawText());
-        assertEquals(Color.yellow, tr.getFontColor());
+        assertTrue(sameColor(Color.yellow, tr.getFontColor()));
         tr = para.get(1).getTextRuns().get(1);
         assertEquals("para 2 run 2. para 2 run 3.", tr.getRawText());
-        assertEquals(Color.black, tr.getFontColor());
+        assertTrue(sameColor(Color.black, tr.getFontColor()));
         assertTrue(tr.isStrikethrough());
     }
         
@@ -235,7 +236,7 @@ public final class TestShapes {
         assertTrue(rt.isItalic());
         assertFalse(rt.isUnderlined());
         assertEquals("Arial", rt.getFontFamily());
-        assertEquals(Color.red, rt.getFontColor());
+        assertTrue(sameColor(Color.red, rt.getFontColor()));
 
         // Serialize and read again
         ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -255,7 +256,7 @@ public final class TestShapes {
         assertTrue(rt.isItalic());
         assertFalse(rt.isUnderlined());
         assertEquals("Arial", rt.getFontFamily());
-        assertEquals(Color.red, rt.getFontColor());
+        assertTrue(sameColor(Color.red, rt.getFontColor()));
     }
 
     /**

Modified: 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java?rev=1694925&r1=1694924&r2=1694925&view=diff
==============================================================================
--- 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java
 (original)
+++ 
poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java
 Sun Aug  9 22:44:13 2015
@@ -17,15 +17,26 @@
 
 package org.apache.poi.hslf.usermodel;
 
-import static org.junit.Assert.*;
+import static org.apache.poi.sl.TestCommonSL.sameColor;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 
 import java.awt.Color;
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.util.List;
 
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hslf.model.textproperties.TextPropCollection;
-import org.apache.poi.hslf.record.*;
+import org.apache.poi.hslf.record.Record;
+import org.apache.poi.hslf.record.TextBytesAtom;
+import org.apache.poi.hslf.record.TextCharsAtom;
+import org.apache.poi.hslf.record.TextHeaderAtom;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -539,7 +550,7 @@ public final class TestTextRun {
                     List<HSLFTextParagraph> run = tx.getTextParagraphs();
                     HSLFTextRun rt = run.get(0).getTextRuns().get(0);
                     assertTrue(rt.isBold());
-                    assertEquals(rt.getFontColor(), Color.RED);
+                    assertTrue(sameColor(Color.RED, rt.getFontColor()));
                 }
             }
         }

Added: poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java?rev=1694925&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java Sun Aug  9 
22:44:13 2015
@@ -0,0 +1,38 @@
+/* ====================================================================
+   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 java.awt.Color;
+
+import org.apache.poi.sl.draw.DrawPaint;
+import org.apache.poi.sl.usermodel.PaintStyle;
+import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;
+import org.junit.Ignore;
+
+/**
+ * Currently only contains helper methods
+ */
+@Ignore
+public class TestCommonSL {
+
+    public static boolean sameColor(Color colorExpected, PaintStyle 
paintActual) {
+        if (!(paintActual instanceof SolidPaint)) return false;
+        Color thisC = 
DrawPaint.applyColorTransform(((SolidPaint)paintActual).getSolidColor());
+        return thisC.equals(colorExpected);
+    }
+
+}

Added: poi/trunk/test-data/slideshow/KEY02.pptx
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/KEY02.pptx?rev=1694925&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/slideshow/KEY02.pptx
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Copied: poi/trunk/test-data/slideshow/alterman_security.pptx (from r1692593, 
poi/trunk/test-data/slideshow/alterman_security2.pptx)
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/alterman_security.pptx?p2=poi/trunk/test-data/slideshow/alterman_security.pptx&p1=poi/trunk/test-data/slideshow/alterman_security2.pptx&r1=1692593&r2=1694925&rev=1694925&view=diff
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to