[Libreoffice-commits] core.git: sw/qa sw/source

Pallavi Jadhav pallavi.jadhav at synerzip.com
Fri Nov 15 08:15:51 PST 2013


 sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx              |   18 ++++++++++++++++++
 sw/source/filter/ww8/docxattributeoutput.cxx          |   10 ++++++++--
 3 files changed, 26 insertions(+), 2 deletions(-)

New commits:
commit 09d381adbfba893331a07918c9ec9b3c58939dfb
Author: Pallavi Jadhav <pallavi.jadhav at synerzip.com>
Date:   Fri Nov 15 13:10:30 2013 +0530

    Save Image-Crop information for GIF in docx
    
    Issue:-
        1] When MS Office docx file containing cropped image is
           round tripped with LibreOffice 4.2, image looses
           its cropping effect.
    Implementation:-
        1] Converted MAP unit, MAP_PIXEL to MAP_100TH_MM using
           PixelToLogic function.
           As for calculating EMU values for XML, we need
           Original Height and Width of an image in
           100thMM(HMM) format.
        2] Written Export Unit Test (GIF) to verify cropping parameters.
    
    Conflicts:
    	sw/qa/extras/ooxmlexport/ooxmlexport.cxx
    Reviewed on:
    	https://gerrit.libreoffice.org/6595
    
    Change-Id: I54d7b08c96608a0cfca3c2f8833684c09848351c

diff --git a/sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx b/sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx
new file mode 100644
index 0000000..8fe7ff2
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test_GIF_ImageCrop.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 23fe7cd..b7bdaef 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -94,6 +94,7 @@ protected:
             "math-escape.docx",
             "math-mso2k7.docx",
             "ImageCrop.docx",
+            "test_GIF_ImageCrop.docx"
         };
         std::vector<const char*> vBlacklist(aBlacklist, aBlacklist + SAL_N_ELEMENTS(aBlacklist));
 
@@ -1839,6 +1840,23 @@ DECLARE_OOXML_TEST(testParaAutoSpacing, "para-auto-spacing.docx")
     CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:spacing", "beforeAutospacing").match("1"));
     CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:pPr/w:spacing", "afterAutospacing").match("1"));
 }
+
+DECLARE_OOXML_TEST(testGIFImageCrop, "test_GIF_ImageCrop.docx")
+{
+    uno::Reference<drawing::XShape> image = getShape(1);
+    uno::Reference<beans::XPropertySet> imageProperties(image, uno::UNO_QUERY);
+    ::com::sun::star::text::GraphicCrop aGraphicCropStruct;
+
+    imageProperties->getPropertyValue( "GraphicCrop" ) >>= aGraphicCropStruct;
+
+    // FIXME import test is disabled (we only check after import-export-import)
+    // The reason is that after import this is 1171 -- why?
+    CPPUNIT_ASSERT_EQUAL( sal_Int32( 1265 ), aGraphicCropStruct.Left );
+    CPPUNIT_ASSERT_EQUAL( sal_Int32( 4256 ), aGraphicCropStruct.Right );
+    CPPUNIT_ASSERT_EQUAL( sal_Int32( 1109 ), aGraphicCropStruct.Top );
+    CPPUNIT_ASSERT_EQUAL( sal_Int32( 1448 ), aGraphicCropStruct.Bottom );
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 70361fa..80c17e3 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -2689,8 +2689,7 @@ OString lcl_ConvertTransparency(const Color& rColor)
 }
 
 /* Writes <a:srcRect> tag back to document.xml if a file conatins a cropped image.
-   NOTE : It works only for images of type JPEG,EMF/WMF and BMP.
-          It does not work for images of type PNG and GIF.
+*  NOTE : Tested on images of type JPEG,EMF/WMF,BMP, PNG and GIF.
 */
 void DocxAttributeOutput::WriteSrcRect(const SdrObject* pSdrObj )
 {
@@ -2704,6 +2703,13 @@ void DocxAttributeOutput::WriteSrcRect(const SdrObject* pSdrObj )
     ::com::sun::star::text::GraphicCrop aGraphicCropStruct;
     xPropSet->getPropertyValue( "GraphicCrop" ) >>= aGraphicCropStruct;
 
+    const MapMode aMap100mm( MAP_100TH_MM );
+    const MapMode& mapMode = GraphicObject::CreateGraphicObjectFromURL( sUrl ).GetPrefMapMode();
+    if( mapMode.GetMapUnit() == MAP_PIXEL )
+    {
+        aOriginalSize = Application::GetDefaultDevice()->PixelToLogic(aOriginalSize, aMap100mm );
+    }
+
     if ( (0 != aGraphicCropStruct.Left) || (0 != aGraphicCropStruct.Top) || (0 != aGraphicCropStruct.Right) || (0 != aGraphicCropStruct.Bottom) )
     {
         double  widthMultiplier  = 100000.0/aOriginalSize.Width();


More information about the Libreoffice-commits mailing list