From f966767e1ccfa432da33e1a0fd6de69e17a36bc3 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 10 Apr 2018 17:46:55 +0200 Subject: tdf#116925 sw: consider fill styles of shape for in-textbox auto color Automatic color is determined in SwDrawTextInfo::ApplyAutoColor(), but it uses this function to determine the background color. Be consistent and consider the same background in both the shape-with-editeng-text and shape-with-sw-text cases. Change-Id: I52249a908193765bc128789d96187af334c1017c Reviewed-on: https://gerrit.libreoffice.org/52687 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/qa/extras/layout/data/tdf116925.docx | Bin 0 -> 13476 bytes sw/qa/extras/layout/layout.cxx | 22 ++++++++++++++++++++++ sw/source/core/layout/paintfrm.cxx | 26 +++++++++++++++++++++++++- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 sw/qa/extras/layout/data/tdf116925.docx (limited to 'sw') diff --git a/sw/qa/extras/layout/data/tdf116925.docx b/sw/qa/extras/layout/data/tdf116925.docx new file mode 100644 index 000000000000..1c99752e9eba Binary files /dev/null and b/sw/qa/extras/layout/data/tdf116925.docx differ diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index 16efa14c5875..3709e306f53d 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -17,9 +17,11 @@ class SwLayoutWriter : public SwModelTestBase { public: void testTdf116830(); + void testTdf116925(); CPPUNIT_TEST_SUITE(SwLayoutWriter); CPPUNIT_TEST(testTdf116830); + CPPUNIT_TEST(testTdf116925); CPPUNIT_TEST_SUITE_END(); private: @@ -62,6 +64,26 @@ void SwLayoutWriter::testTdf116830() assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/rect", 1); } +void SwLayoutWriter::testTdf116925() +{ + SwDoc* pDoc = createDoc("tdf116925.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocPtr pXmlDoc = dumper.dumpAndParse(*xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent(pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[3]/textarray/text", + "hello"); + // This failed, text color was #000000. + assertXPath( + pXmlDoc, + "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[3]/textcolor[@color='#ffffff']", 1); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwLayoutWriter); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx index 35ce1d5148af..bd7b911dee71 100644 --- a/sw/source/core/layout/paintfrm.cxx +++ b/sw/source/core/layout/paintfrm.cxx @@ -102,6 +102,7 @@ #include #include #include +#include #include #include @@ -7129,7 +7130,30 @@ bool SwFrame::GetBackgroundBrush( return false; if (pFrame->supportsFullDrawingLayerFillAttributeSet()) - rFillAttributes = pFrame->getSdrAllFillAttributesHelper(); + { + bool bTextBox = false; + if (pFrame->IsFlyFrame()) + { + const SwFlyFrame* pFlyFrame = static_cast(pFrame); + SwFrameFormat* pShape + = SwTextBoxHelper::getOtherTextBoxFormat(pFlyFrame->GetFormat(), RES_FLYFRMFMT); + if (pShape) + { + SdrObject* pObject = pShape->FindRealSdrObject(); + if (pObject) + { + // Work with the fill attributes of the shape of the fly frame. + rFillAttributes.reset( + new drawinglayer::attribute::SdrAllFillAttributesHelper( + pObject->GetMergedItemSet())); + bTextBox = true; + } + } + } + + if (!bTextBox) + rFillAttributes = pFrame->getSdrAllFillAttributesHelper(); + } const SvxBrushItem &rBack = pFrame->GetAttrSet()->GetBackground(); if( pFrame->IsSctFrame() ) -- cgit