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

Regina Henschel (via logerrit) logerrit at kemper.freedesktop.org
Wed Jun 16 07:30:03 UTC 2021


 oox/source/export/drawingml.cxx                            |    4 +++-
 sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt |binary
 sw/qa/extras/ooxmlexport/ooxmlexport16.cxx                 |   13 +++++++++++++
 3 files changed, 16 insertions(+), 1 deletion(-)

New commits:
commit 1c0c11defaf6a83870725902825b1931f8ef50e5
Author:     Regina Henschel <rb.henschel at t-online.de>
AuthorDate: Tue Jun 15 01:47:44 2021 +0200
Commit:     Xisco Fauli <xiscofauli at libreoffice.org>
CommitDate: Wed Jun 16 09:29:30 2021 +0200

    tdf#142361 export: prevent shadow to rotate with shape
    
    OOXML has the feature to rotate a shadow together with the shape. The
    associated attribute rotWithShape has the default value 'true'. So
    if this attribute is missing, MS Office shows the shadow rotated. As
    LibreOffice never rotates a shadow, we need to write this attribute
    always. Because LibreOffice cannot rotate shadows, the error is only
    visible in MS Office.
    
    Here the attribute is added for the case of documents, which have no
    InteropGrabBag or no effects in it.
    
    When a shadow is generated in MS Office, MSO adds the attribute with
    value 'false' (0) to the file. MS Office has no UI to set this
    attribute. Problem is with cases, where the document comes from
    MS Office, has effects in InteropGrabBag, but the shadow was set in
    LibreOffice. To add the attribute in such cases too, bug tdf#142858
    has to be fixed.
    
    Change-Id: I5f1df416bca8ea15a305242afb140d852cfd84c0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117206
    Tested-by: Jenkins
    Reviewed-by: Regina Henschel <rb.henschel at t-online.de>
    (cherry picked from commit 58eeec036c3780188feccb0e1a752cfdee90a49b)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117225
    Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 385af08d590b..5f42dc18cd75 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -4241,7 +4241,7 @@ void DrawingML::WriteShapeEffects( const Reference< XPropertySet >& rXPropSet )
             if( bHasShadow )
             {
                 Sequence< PropertyValue > aShadowGrabBag( 3 );
-                Sequence< PropertyValue > aShadowAttribsGrabBag( 3 );
+                Sequence< PropertyValue > aShadowAttribsGrabBag( 4 );
 
                 double dX = +0.0, dY = +0.0;
                 sal_Int32 nBlur =0;
@@ -4255,6 +4255,8 @@ void DrawingML::WriteShapeEffects( const Reference< XPropertySet >& rXPropSet )
                 aShadowAttribsGrabBag[1].Value <<= lcl_CalculateDir(dX, dY);
                 aShadowAttribsGrabBag[2].Name = "blurRad";
                 aShadowAttribsGrabBag[2].Value <<=  oox::drawingml::convertHmmToEmu(nBlur);
+                aShadowAttribsGrabBag[3].Name = "rotWithShape";
+                aShadowAttribsGrabBag[3].Value <<= false; //ooxml default is 'true', so must write it
 
                 aShadowGrabBag[0].Name = "Attribs";
                 aShadowGrabBag[0].Value <<= aShadowAttribsGrabBag;
diff --git a/sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt b/sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt
new file mode 100644
index 000000000000..78372e603542
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf142361ShadowDirection.odt differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
index a2217f3ab845..5899bd703ccc 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
@@ -492,6 +492,19 @@ DECLARE_OOXMLEXPORT_TEST(testCommentDoneModel, "CommentDone.docx")
     }
 }
 
+DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(Test_ShadowDirection, "tdf142361ShadowDirection.odt")
+{
+    // The attribute 'rotWithShape' has the default value 'true' in OOXML, so Words interprets a
+    // missing attribute as 'true'. That means that Word rotates the shadow if the shape is
+    // rotated. Because in LibreOffice a shadow is never rotated, we must not omit this
+    // attribute.
+    xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml");
+    assertXPath(pXmlDoc,
+                "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Choice/w:drawing/"
+                "wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:effectLst/a:outerShdw",
+                "rotWithShape", "0");
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list