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 <[email protected]> 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();
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
