[Libreoffice-commits] core.git: Branch 'feature/perfwork5' - svx/source sw/CppunitTest_sw_odfexport.mk sw/qa sw/source

Zolnai Tamás tamas.zolnai at collabora.com
Tue Nov 18 03:39:40 PST 2014


 svx/source/svdraw/svdograf.cxx                                            |    2 
 sw/CppunitTest_sw_odfexport.mk                                            |    4 
 sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt |binary
 sw/qa/extras/odfexport/odfexport.cxx                                      |   50 ++++++++++
 sw/source/core/graphic/ndgrf.cxx                                          |    4 
 5 files changed, 59 insertions(+), 1 deletion(-)

New commits:
commit 6cba38d1dbf264e15ba8de0127c055b281f7fe28
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Sun Nov 16 15:12:54 2014 +0100

    Related fdo#82953: Forget package URL of image after it is loaded
    
    It causes problems if we handle those imported images differently which
    are identified by a package URL, so after the first load remove
    this URL and handle images on the same way as inserted images.
    
    Some related bugs:
    * #i44367#
    * #i124946#
    * #i114361#
    * fdo#73270
    
    The image in the test document has a special ID which is different
    from that one which is generated by LO internally so after ODF export
    the new generated image URL is different from the imported one.
    
    Change-Id: I4e7d3490674c5f86bec5c7c6e1c975dcafd7c265
    (cherry picked from commit 286e2f5c6ec829bc0987b1be7016699f7ef03e5e)

diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index ca73543..d5eb41f 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -1364,7 +1364,7 @@ IMPL_LINK( SdrGrafObj, ImpSwapHdl, GraphicObject*, pO )
                         const OUString aNewUserData( pGraphic->GetUserData() );
 
                         pGraphic->SetGraphic( aGraphic );
-                        pGraphic->SetUserData( aNewUserData );
+                        pGraphic->SetUserData();
 
                         // Graphic successfully swapped in.
                         pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
diff --git a/sw/CppunitTest_sw_odfexport.mk b/sw/CppunitTest_sw_odfexport.mk
index 080a840..97398af 100644
--- a/sw/CppunitTest_sw_odfexport.mk
+++ b/sw/CppunitTest_sw_odfexport.mk
@@ -80,6 +80,10 @@ $(eval $(call gb_CppunitTest_use_components,sw_odfexport,\
     xmloff/util/xo \
 ))
 
+$(eval $(call gb_CppunitTest_use_custom_headers,sw_odfexport,\
+    officecfg/registry \
+))
+
 $(eval $(call gb_CppunitTest_use_configuration,sw_odfexport))
 
 $(eval $(call gb_CppunitTest_use_unittest_configuration,sw_odfexport))
diff --git a/sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt b/sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt
new file mode 100644
index 0000000..867c075
Binary files /dev/null and b/sw/qa/extras/odfexport/data/document_with_two_images_with_special_IDs.odt differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index c140540..d7360ba 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -17,6 +17,9 @@
 #include <com/sun/star/text/RelOrientation.hpp>
 #include <com/sun/star/text/XDocumentIndex.hpp>
 #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
+#include <com/sun/star/awt/XBitmap.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <officecfg/Office/Common.hxx>
 
 class Test : public SwModelTestBase
 {
@@ -401,6 +404,53 @@ DECLARE_ODFEXPORT_TEST(testTextboxRoundedCorners, "textbox-rounded-corners.odt")
     CPPUNIT_ASSERT_EQUAL(OUString("a"), xCell->getString());
 }
 
+DECLARE_ODFEXPORT_TEST(testImageWithSpecialID, "document_with_two_images_with_special_IDs.odt")
+{
+    // Here the problem was that LO did not handle well those image URLs in the ODT file which are
+    // not match with that one which is generated by LO internaly (based on the image's size, type and so on)
+
+    // Trigger swap out mechanism to test swapped state factor too.
+    boost::shared_ptr< comphelper::ConfigurationChanges > batch(comphelper::ConfigurationChanges::create());
+    officecfg::Office::Common::Cache::GraphicManager::TotalCacheSize::set(sal_Int32(1), batch);
+    batch->commit();
+
+    uno::Reference<drawing::XShape> xImage = getShape(1);
+    uno::Reference< beans::XPropertySet > XPropSet( xImage, uno::UNO_QUERY_THROW );
+    // Check URL
+    {
+        OUString sURL;
+        XPropSet->getPropertyValue("GraphicURL") >>= sURL;
+        CPPUNIT_ASSERT(sURL != OUString("vnd.sun.star.GraphicObject:00000000000000000000000000000000"));
+    }
+    // Check size
+    {
+        uno::Reference<graphic::XGraphic> xGraphic;
+        XPropSet->getPropertyValue("Graphic") >>= xGraphic;
+        uno::Reference<awt::XBitmap> xBitmap(xGraphic, uno::UNO_QUERY);
+        CPPUNIT_ASSERT(xBitmap.is());
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(610), xBitmap->getSize().Width );
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(381), xBitmap->getSize().Height );
+    }
+    // Second Image
+    xImage = getShape(2);
+    XPropSet.set( xImage, uno::UNO_QUERY_THROW );
+    // Check URL
+    {
+        OUString sURL;
+        XPropSet->getPropertyValue("GraphicURL") >>= sURL;
+        CPPUNIT_ASSERT(sURL != OUString("vnd.sun.star.GraphicObject:00000000000000000000000000000000"));
+    }
+    // Check size
+    {
+        uno::Reference<graphic::XGraphic> xGraphic;
+        XPropSet->getPropertyValue("Graphic") >>= xGraphic;
+        uno::Reference<awt::XBitmap> xBitmap(xGraphic, uno::UNO_QUERY);
+        CPPUNIT_ASSERT(xBitmap.is());
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(900), xBitmap->getSize().Width );
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(600), xBitmap->getSize().Height );
+    }
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx
index 280c6d4..96b18dc 100644
--- a/sw/source/core/graphic/ndgrf.cxx
+++ b/sw/source/core/graphic/ndgrf.cxx
@@ -577,6 +577,10 @@ bool SwGrfNode::SwapIn( bool bWaitForData )
                 {
                     bRet = ImportGraphic( *pStrm );
                     delete pStrm;
+                    if( bRet )
+                    {
+                        maGrfObj.SetUserData();
+                    }
                 }
             }
             catch (const uno::Exception&)


More information about the Libreoffice-commits mailing list