[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - oox/source sd/qa

Zolnai Tamás tamas.zolnai at collabora.com
Thu Jun 12 06:17:57 PDT 2014


 oox/source/drawingml/textbodyproperties.cxx |    6 +--
 oox/source/drawingml/transform2dcontext.cxx |   56 +++++++++++++++-------------
 sd/qa/unit/data/pptx/bnc862510_5.pptx       |binary
 sd/qa/unit/import-tests.cxx                 |   23 +++++++++++
 4 files changed, 57 insertions(+), 28 deletions(-)

New commits:
commit b56c4afb219c3ad2507af9d4eadf0c765c3bc0e0
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Tue Jun 10 18:19:30 2014 +0200

    Related bnc#862510: extend handling of txXfrm
    
    We don't actually need to check mbAnchorCtr to change
    text spacing. This txXfrm workaround works only with rectangles,
    because other shapes' text area can be smaller then the shape
    size. So add some condition to avoid using it for
    other shapes.
    
    Plus fix typos cause regression introduced in:
    53c376d35b7223d53e8c9403390afe53d1f69089
    
    (cherry picked from commit 98dd0f2bb5801f974374ef341037e094e4275cbb)
    
    Conflicts:
    	sd/qa/unit/import-tests.cxx
    
    Change-Id: I87917b8e0b2bb97ae1bba773e7dda7f81682736f
    Reviewed-on: https://gerrit.libreoffice.org/9728
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/oox/source/drawingml/textbodyproperties.cxx b/oox/source/drawingml/textbodyproperties.cxx
index 3861ebe..93a2f5f 100644
--- a/oox/source/drawingml/textbodyproperties.cxx
+++ b/oox/source/drawingml/textbodyproperties.cxx
@@ -80,9 +80,9 @@ void TextBodyProperties::pushRotationAdjustments( sal_Int32 nRotation )
         // Hack for n#760986
         // TODO: Preferred method would be to have a textbox on top
         // of the shape and the place it according to the (off,ext)
-        if( nOff == 0 && moTextOffLeft && mbAnchorCtr ) nVal = *moTextOffLeft;
-        if( nOff == 1 && moTextOffUpper ) nVal = *moTextOffLeft;
-        if( nOff == 2 && moTextOffRight && mbAnchorCtr ) nVal = *moTextOffRight;
+        if( nOff == 0 && moTextOffLeft  ) nVal = *moTextOffLeft;
+        if( nOff == 1 && moTextOffUpper ) nVal = *moTextOffUpper;
+        if( nOff == 2 && moTextOffRight ) nVal = *moTextOffRight;
         if( nOff == 3 && moTextOffLower ) nVal = *moTextOffLower;
         if( nVal < 0 ) nVal = 0;
 
diff --git a/oox/source/drawingml/transform2dcontext.cxx b/oox/source/drawingml/transform2dcontext.cxx
index 92166c4..0064780 100644
--- a/oox/source/drawingml/transform2dcontext.cxx
+++ b/oox/source/drawingml/transform2dcontext.cxx
@@ -55,37 +55,43 @@ ContextHandlerRef Transform2DContext::onCreateContext( sal_Int32 aElementToken,
 {
     if( mbtxXfrm )
     {
-        switch( aElementToken )
+        // Workaround: only for rectangles
+        const sal_Int32 nType = mrShape.getCustomShapeProperties()->getShapePresetType();
+        if( nType == XML_rect || nType == XML_roundRect )
         {
-            case A_TOKEN( off ):
-                {
-                    OUString sXValue = rAttribs.getString( XML_x ).get();
-                    OUString sYValue = rAttribs.getString( XML_y ).get();
-                    if( !sXValue.isEmpty() )
-                        mrShape.getTextBody()->getTextProperties().moTextOffUpper = GetCoordinate( sXValue.toInt32() - mrShape.getPosition().X );
-                    if( !sYValue.isEmpty() )
-                        mrShape.getTextBody()->getTextProperties().moTextOffLeft = GetCoordinate( sYValue.toInt32() - mrShape.getPosition().Y );
-                }
-                break;
-            case A_TOKEN( ext ):
-                {
-                    const OUString sXValue = rAttribs.getString( XML_cx ).get();
-                    const OUString sYValue = rAttribs.getString( XML_cy ).get();
-                    if( !sXValue.isEmpty() )
+            switch( aElementToken )
+            {
+                case A_TOKEN( off ):
                     {
-                        mrShape.getTextBody()->getTextProperties().moTextOffRight = GetCoordinate(mrShape.getSize().Width - sXValue.toInt32());
-                        if( mrShape.getTextBody()->getTextProperties().moTextOffLeft )
-                           *mrShape.getTextBody()->getTextProperties().moTextOffRight -=  *mrShape.getTextBody()->getTextProperties().moTextOffLeft;
+                        const OUString sXValue = rAttribs.getString( XML_x ).get();
+                        const OUString sYValue = rAttribs.getString( XML_y ).get();
+                        if( !sXValue.isEmpty() && nType == XML_rect )
+                            mrShape.getTextBody()->getTextProperties().moTextOffLeft = GetCoordinate( sXValue.toInt32() - mrShape.getPosition().X );
+                        if( !sYValue.isEmpty() )
+                            mrShape.getTextBody()->getTextProperties().moTextOffUpper = GetCoordinate( sYValue.toInt32() - mrShape.getPosition().Y );
                     }
-                    if( !sYValue.isEmpty() )
+                    break;
+                case A_TOKEN( ext ):
                     {
-                        mrShape.getTextBody()->getTextProperties().moTextOffLower = GetCoordinate(mrShape.getSize().Height - sYValue.toInt32());
-                        if( mrShape.getTextBody()->getTextProperties().moTextOffUpper )
-                           *mrShape.getTextBody()->getTextProperties().moTextOffLower -=  *mrShape.getTextBody()->getTextProperties().moTextOffUpper;
+                        const OUString sXValue = rAttribs.getString( XML_cx ).get();
+                        const OUString sYValue = rAttribs.getString( XML_cy ).get();
 
+                        if( !sXValue.isEmpty() && nType == XML_rect )
+                        {
+                            mrShape.getTextBody()->getTextProperties().moTextOffRight = GetCoordinate(mrShape.getSize().Width - sXValue.toInt32());
+                            if( mrShape.getTextBody()->getTextProperties().moTextOffLeft )
+                               *mrShape.getTextBody()->getTextProperties().moTextOffRight -=  *mrShape.getTextBody()->getTextProperties().moTextOffLeft;
+                        }
+                        if( !sYValue.isEmpty() )
+                        {
+                            mrShape.getTextBody()->getTextProperties().moTextOffLower = GetCoordinate(mrShape.getSize().Height - sYValue.toInt32());
+                            if( mrShape.getTextBody()->getTextProperties().moTextOffUpper )
+                               *mrShape.getTextBody()->getTextProperties().moTextOffLower -=  *mrShape.getTextBody()->getTextProperties().moTextOffUpper;
+
+                        }
                     }
-                }
-                break;
+                    break;
+            }
         }
         return 0;
     }
diff --git a/sd/qa/unit/data/pptx/bnc862510_5.pptx b/sd/qa/unit/data/pptx/bnc862510_5.pptx
new file mode 100644
index 0000000..ed145e4
Binary files /dev/null and b/sd/qa/unit/data/pptx/bnc862510_5.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 32431b1..f4f4f08 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -62,6 +62,7 @@ public:
     void testBnc870233_1();
     void testBnc870233_2();
     void testBnc880763();
+    void testBnc862510_5();
 
     CPPUNIT_TEST_SUITE(SdFiltersTest);
     CPPUNIT_TEST(testDocumentLayout);
@@ -77,6 +78,7 @@ public:
     CPPUNIT_TEST(testBnc870233_1);
     CPPUNIT_TEST(testBnc870233_2);
     CPPUNIT_TEST(testBnc880763);
+    CPPUNIT_TEST(testBnc862510_5);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -592,6 +594,27 @@ void SdFiltersTest::testBnc880763()
     xDocShRef->DoClose();
 }
 
+void SdFiltersTest::testBnc862510_5()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/bnc862510_5.pptx"));
+    xDocShRef = saveAndReload( xDocShRef, 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 );
+
+    // Same as testBnc870237, but here we check the horizontal spacing
+    const SdrObject* pObj = dynamic_cast<SdrObject*>( pPage->GetObj( 1 ) );
+    CPPUNIT_ASSERT_MESSAGE( "no object", pObj != NULL);
+    CPPUNIT_ASSERT_EQUAL( sal_Int32(0), (static_cast< const SdrTextUpperDistItem& >(pObj->GetMergedItem(SDRATTR_TEXT_UPPERDIST))).GetValue());
+    CPPUNIT_ASSERT_EQUAL( sal_Int32(0), (static_cast< const SdrTextLowerDistItem& >(pObj->GetMergedItem(SDRATTR_TEXT_LOWERDIST))).GetValue());
+    CPPUNIT_ASSERT_EQUAL( sal_Int32(7510), (static_cast< const SdrTextRightDistItem& >(pObj->GetMergedItem(SDRATTR_TEXT_RIGHTDIST))).GetValue());
+    CPPUNIT_ASSERT_EQUAL( sal_Int32(0), (static_cast< const SdrTextLeftDistItem& >(pObj->GetMergedItem(SDRATTR_TEXT_LEFTDIST))).GetValue());
+
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdFiltersTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list