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

Szymon Kłos szymon.klos at collabora.com
Thu Aug 24 16:21:33 UTC 2017


 sw/qa/extras/ooxmlexport/data/watermark-layer.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport9.cxx          |   14 ++++++++++++++
 sw/source/core/edit/edfcol.cxx                     |   15 ++++++++++-----
 writerfilter/source/dmapper/DomainMapper_Impl.cxx  |   10 +++++++++-
 4 files changed, 33 insertions(+), 6 deletions(-)

New commits:
commit 39c08074a286855dd014ce1c30b8f7ef95b10242
Author: Szymon Kłos <szymon.klos at collabora.com>
Date:   Fri Aug 18 15:13:52 2017 +0200

    Watermark: not visible if page background was set
    
    Watermark was drawn under the page background.
    It has to be placed on the upper layer to be visible.
    
    Change-Id: I132a313eed6fb712aafdca14a38fe559aa4231c8
    Reviewed-on: https://gerrit.libreoffice.org/41289
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>

diff --git a/sw/qa/extras/ooxmlexport/data/watermark-layer.docx b/sw/qa/extras/ooxmlexport/data/watermark-layer.docx
new file mode 100755
index 000000000000..9428686c1bad
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/watermark-layer.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
index 4e961079b829..515f40e4803b 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport9.cxx
@@ -30,8 +30,10 @@
 #include <com/sun/star/drawing/XControlShape.hpp>
 
 #include <ftninfo.hxx>
+#include <drawdoc.hxx>
 #include <sfx2/docfile.hxx>
 #include <sfx2/docfilt.hxx>
+#include <svx/svdpage.hxx>
 
 class Test : public SwModelTestBase
 {
@@ -993,6 +995,18 @@ DECLARE_OOXMLEXPORT_TEST(testActiveXControlAtRunEnd, "activex_control_at_run_end
     CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER,getProperty<text::TextContentAnchorType>(xPropertySet2,"AnchorType"));
 }
 
+DECLARE_OOXMLEXPORT_TEST(testWatermarkLayer, "watermark-layer.docx")
+{
+    // Watermark was not visible if page background was set.
+
+    SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+    SdrPage* pPage = pTextDoc->GetDocShell()->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+    SdrObject* pObject = pPage->GetObj(0);
+
+    CPPUNIT_ASSERT(pObject);
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt8>(1), pObject->GetLayer().get());
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index 4e309a33761f..456d06b65b96 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -62,6 +62,7 @@
 #include <pagefrm.hxx>
 #include <rdfhelper.hxx>
 #include <sfx2/watermarkitem.hxx>
+#include <DocumentDrawModelManager.hxx>
 
 #include <cppuhelper/bootstrap.hxx>
 
@@ -352,7 +353,8 @@ SfxWatermarkItem SwEditShell::GetWatermark()
 void lcl_placeWatermarkInHeader(const SfxWatermarkItem& rWatermark,
                             const uno::Reference<frame::XModel>& xModel,
                             const uno::Reference<beans::XPropertySet>& xPageStyle,
-                            const uno::Reference<text::XText>& xHeaderText)
+                            const uno::Reference<text::XText>& xHeaderText,
+                            sal_Int16 nLayer)
 {
     uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(xModel, uno::UNO_QUERY);
     OUString aShapeServiceName = "com.sun.star.drawing.CustomShape";
@@ -474,6 +476,7 @@ void lcl_placeWatermarkInHeader(const SfxWatermarkItem& rWatermark,
         xPropertySet->setPropertyValue("Transformation", uno::makeAny(aMatrix));
         xPropertySet->setPropertyValue(UNO_NAME_HORI_ORIENT, uno::makeAny(static_cast<sal_Int16>(text::HoriOrientation::CENTER)));
         xPropertySet->setPropertyValue(UNO_NAME_VERT_ORIENT, uno::makeAny(static_cast<sal_Int16>(text::VertOrientation::CENTER)));
+        xPropertySet->setPropertyValue(UNO_NAME_MISC_OBJ_LAYERID, uno::makeAny(nLayer));
 
         uno::Reference<text::XTextRange> xTextRange(xShape, uno::UNO_QUERY);
         xTextRange->setString(rWatermark.GetText());
@@ -519,6 +522,8 @@ void SwEditShell::SetWatermark(const SfxWatermarkItem& rWatermark)
     uno::Reference<container::XNameAccess> xStyleFamilies(xStyleFamiliesSupplier->getStyleFamilies(), uno::UNO_QUERY);
     uno::Reference<container::XNameAccess> xStyleFamily(xStyleFamilies->getByName("PageStyles"), uno::UNO_QUERY);
 
+    sal_Int16 nHeavenId = GetDoc()->getIDocumentDrawModelAccess().GetHeavenId().get();
+
     std::set<OUString> aUsedPageStyles = lcl_getUsedPageStyles(this);
     for (const OUString& rPageStyleName : aUsedPageStyles)
     {
@@ -544,16 +549,16 @@ void SwEditShell::SetWatermark(const SfxWatermarkItem& rWatermark)
         uno::Reference<text::XText> xHeaderTextRight;
 
         xPageStyle->getPropertyValue(UNO_NAME_HEADER_TEXT) >>= xHeaderText;
-        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderText);
+        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderText, nHeavenId);
 
         xPageStyle->getPropertyValue(UNO_NAME_HEADER_TEXT_FIRST) >>= xHeaderTextFirst;
-        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderTextFirst);
+        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderTextFirst, nHeavenId);
 
         xPageStyle->getPropertyValue(UNO_NAME_HEADER_TEXT_LEFT) >>= xHeaderTextLeft;
-        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderTextLeft);
+        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderTextLeft, nHeavenId);
 
         xPageStyle->getPropertyValue(UNO_NAME_HEADER_TEXT_RIGHT) >>= xHeaderTextRight;
-        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderTextRight);
+        lcl_placeWatermarkInHeader(rWatermark, xModel, xPageStyle, xHeaderTextRight, nHeavenId);
 
         // tdf#108494 the header height was switched to height of a watermark
         // and shape was moved to the lower part of a page
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 2cd7f7fff6c2..229bfa71be2d 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -88,7 +88,7 @@
 #include <comphelper/propertyvalue.hxx>
 #include <comphelper/propertysequence.hxx>
 #include <unotools/mediadescriptor.hxx>
-
+#include <editeng/unoprnms.hxx>
 
 
 
@@ -2185,6 +2185,14 @@ void DomainMapper_Impl::PopShapeContext()
             {
             }
         }
+        // Move Watermark upper to be visible if page background is set
+        uno::Reference<drawing::XShape> xShape( xObj, uno::UNO_QUERY_THROW );
+        uno::Reference<container::XNamed> xNamed( xShape, uno::UNO_QUERY );
+        if ( xNamed.is() && xNamed->getName().match( "PowerPlusWaterMarkObject" ) )
+        {
+            uno::Reference<beans::XPropertySet> xShapePropertySet( xShape, uno::UNO_QUERY );
+            xShapePropertySet->setPropertyValue( UNO_NAME_MISC_OBJ_LAYERID, uno::makeAny( sal_Int16(1) ) );
+        }
         m_aAnchoredStack.pop();
     }
     m_bFrameBtLr = false;


More information about the Libreoffice-commits mailing list