[Libreoffice-commits] core.git: include/oox oox/source sd/qa

Zolnai Tamás tamas.zolnai at collabora.com
Sun Nov 30 05:32:09 PST 2014


 include/oox/drawingml/shape.hxx               |    1 
 oox/source/drawingml/shape.cxx                |    5 +
 sd/qa/unit/data/pptx/ShapeLineProperties.pptx |binary
 sd/qa/unit/import-tests.cxx                   |   73 ++++++++++++++++++++++++++
 4 files changed, 78 insertions(+), 1 deletion(-)

New commits:
commit 664a56b3c81503bdf199edf1806676f0a35b956f
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Sun Nov 30 14:31:39 2014 +0100

    PPTX import: fix import of shape line properties defined by theme
    
    See also:
    81cd386facedfbb15be6dffc10351262abf733f3
    
    Change-Id: Ibb21d3e5b52a4d4996202acd4a989910fa223632

diff --git a/include/oox/drawingml/shape.hxx b/include/oox/drawingml/shape.hxx
index 81ae8ab..0087214 100644
--- a/include/oox/drawingml/shape.hxx
+++ b/include/oox/drawingml/shape.hxx
@@ -246,6 +246,7 @@ protected:
 
     TextBodyPtr                 mpTextBody;
     LinePropertiesPtr           mpLinePropertiesPtr;
+    LinePropertiesPtr           mpShapeRefLinePropPtr;
     FillPropertiesPtr           mpFillPropertiesPtr;
     FillPropertiesPtr           mpShapeRefFillPropPtr;
     GraphicPropertiesPtr        mpGraphicPropertiesPtr;
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 819c560..ee6b268 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -95,6 +95,7 @@ namespace oox { namespace drawingml {
 Shape::Shape( const sal_Char* pServiceName, bool bDefaultHeight )
 : mbIsChild( false )
 , mpLinePropertiesPtr( new LineProperties )
+, mpShapeRefLinePropPtr( new LineProperties )
 , mpFillPropertiesPtr( new FillProperties )
 , mpShapeRefFillPropPtr( new FillProperties )
 , mpGraphicPropertiesPtr( new GraphicProperties )
@@ -125,6 +126,7 @@ Shape::Shape( const ShapePtr& pSourceShape )
 , mbIsChild( pSourceShape->mbIsChild )
 , mpTextBody(pSourceShape->mpTextBody)
 , mpLinePropertiesPtr( pSourceShape->mpLinePropertiesPtr )
+, mpShapeRefLinePropPtr( pSourceShape->mpShapeRefLinePropPtr )
 , mpFillPropertiesPtr( pSourceShape->mpFillPropertiesPtr )
 , mpShapeRefFillPropPtr( pSourceShape->mpShapeRefFillPropPtr )
 , mpGraphicPropertiesPtr( pSourceShape->mpGraphicPropertiesPtr )
@@ -293,7 +295,7 @@ void Shape::applyShapeReference( const Shape& rReferencedShape, bool bUseText )
     else
         mpTextBody.reset();
     maShapeProperties = rReferencedShape.maShapeProperties;
-    mpLinePropertiesPtr = LinePropertiesPtr( new LineProperties( *rReferencedShape.mpLinePropertiesPtr.get() ) );
+    mpShapeRefLinePropPtr = LinePropertiesPtr( new LineProperties( *rReferencedShape.mpLinePropertiesPtr.get() ) );
     mpShapeRefFillPropPtr = FillPropertiesPtr( new FillProperties( *rReferencedShape.mpFillPropertiesPtr.get() ) );
     mpCustomShapePropertiesPtr = CustomShapePropertiesPtr( new CustomShapeProperties( *rReferencedShape.mpCustomShapePropertiesPtr.get() ) );
     mpTablePropertiesPtr = table::TablePropertiesPtr( rReferencedShape.mpTablePropertiesPtr.get() ? new table::TableProperties( *rReferencedShape.mpTablePropertiesPtr.get() ) : NULL );
@@ -579,6 +581,7 @@ Reference< XShape > Shape::createAndInsert(
 
         // First apply reference shape's properties (shape on the master slide)
         aFillProperties.assignUsed( *mpShapeRefFillPropPtr );
+        aLineProperties.assignUsed( *mpShapeRefLinePropPtr );
 
         if( pTheme )
         {
diff --git a/sd/qa/unit/data/pptx/ShapeLineProperties.pptx b/sd/qa/unit/data/pptx/ShapeLineProperties.pptx
new file mode 100644
index 0000000..36ece8c
Binary files /dev/null and b/sd/qa/unit/data/pptx/ShapeLineProperties.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 70063c4..16d542f 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -31,6 +31,9 @@
 #include <svx/svdoole2.hxx>
 #include <svx/svdotable.hxx>
 #include <svx/xflclit.hxx>
+#include <svx/xlineit0.hxx>
+#include <svx/xlnclit.hxx>
+#include <svx/xlnwtit.hxx>
 #include <animations/animationnodehelper.hxx>
 #include <sax/tools/converter.hxx>
 
@@ -85,6 +88,7 @@ public:
     void testBnc584721_3();
     void testBnc584721_4();
     void testBnc904423();
+    void testShapeLineStyle();
 
     CPPUNIT_TEST_SUITE(SdImportTest);
     CPPUNIT_TEST(testDocumentLayout);
@@ -113,6 +117,7 @@ public:
     CPPUNIT_TEST(testBnc584721_3);
     CPPUNIT_TEST(testBnc584721_4);
     CPPUNIT_TEST(testBnc904423);
+    CPPUNIT_TEST(testShapeLineStyle);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -920,6 +925,74 @@ void SdImportTest::testBnc904423()
     xDocShRef->DoClose();
 }
 
+void SdImportTest::testShapeLineStyle()
+{
+    // Here the problem was that different line properties were applied in wrong order on the shape
+    // Right order: 1) master slide line style, 2) theme, 3) direct formatting
+    ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("sd/qa/unit/data/pptx/ShapeLineProperties.pptx"), PPTX);
+
+    SdDrawDocument *pDoc = xDocShRef->GetDoc();
+    CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
+    const SdrPage *pPage = pDoc->GetPage(1);
+    CPPUNIT_ASSERT_MESSAGE( "no page", pPage != NULL );
+
+    // First shape's line style is defined on master slide
+    {
+        SdrObject *const pObj = pPage->GetObj(0);
+        CPPUNIT_ASSERT(pObj);
+
+        const XLineStyleItem& rStyleItem = dynamic_cast<const XLineStyleItem&>(
+                pObj->GetMergedItem(XATTR_LINESTYLE));
+        CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, rStyleItem.GetValue());
+
+        const XLineColorItem& rColorItem = dynamic_cast<const XLineColorItem&>(
+                pObj->GetMergedItem(XATTR_LINECOLOR));
+        CPPUNIT_ASSERT_EQUAL(ColorData(0xFF0000), rColorItem.GetColorValue().GetColor());
+
+        const XLineWidthItem& rWidthItem = dynamic_cast<const XLineWidthItem&>(
+                pObj->GetMergedItem(XATTR_LINEWIDTH));
+        CPPUNIT_ASSERT_EQUAL(sal_Int32(132), rWidthItem.GetValue());
+    }
+
+    // Second shape's line style is defined by theme
+    {
+        SdrObject *const pObj = pPage->GetObj(1);
+        CPPUNIT_ASSERT(pObj);
+
+        const XLineStyleItem& rStyleItem = dynamic_cast<const XLineStyleItem&>(
+                pObj->GetMergedItem(XATTR_LINESTYLE));
+        CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, rStyleItem.GetValue());
+
+        const XLineColorItem& rColorItem = dynamic_cast<const XLineColorItem&>(
+                pObj->GetMergedItem(XATTR_LINECOLOR));
+        CPPUNIT_ASSERT_EQUAL(ColorData(0x3333CC), rColorItem.GetColorValue().GetColor());
+
+        const XLineWidthItem& rWidthItem = dynamic_cast<const XLineWidthItem&>(
+                pObj->GetMergedItem(XATTR_LINEWIDTH));
+        CPPUNIT_ASSERT_EQUAL(sal_Int32(35), rWidthItem.GetValue());
+    }
+
+    // Third shape's line style is defined by direct formatting
+    {
+        SdrObject *const pObj = pPage->GetObj(2);
+        CPPUNIT_ASSERT(pObj);
+
+        const XLineStyleItem& rStyleItem = dynamic_cast<const XLineStyleItem&>(
+                pObj->GetMergedItem(XATTR_LINESTYLE));
+        CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, rStyleItem.GetValue());
+
+        const XLineColorItem& rColorItem = dynamic_cast<const XLineColorItem&>(
+                pObj->GetMergedItem(XATTR_LINECOLOR));
+        CPPUNIT_ASSERT_EQUAL(ColorData(0x7030A0), rColorItem.GetColorValue().GetColor());
+
+        const XLineWidthItem& rWidthItem = dynamic_cast<const XLineWidthItem&>(
+                pObj->GetMergedItem(XATTR_LINEWIDTH));
+        CPPUNIT_ASSERT_EQUAL(sal_Int32(176), rWidthItem.GetValue());
+    }
+
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list