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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Sep 5 08:17:56 UTC 2018


 sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx  |binary
 sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport11.cxx           |   32 +++++++++++++++++++
 writerfilter/source/dmapper/CellColorHandler.cxx     |   12 +++++--
 writerfilter/source/dmapper/CellColorHandler.hxx     |    1 
 5 files changed, 42 insertions(+), 3 deletions(-)

New commits:
commit 7d9e9ecd5bb5d5abec338c2ceb61ad623d2ac5cb
Author:     Justin Luth <justin.luth at collabora.com>
AuthorDate: Wed Aug 22 09:25:37 2018 +0300
Commit:     Miklos Vajna <vmiklos at collabora.co.uk>
CommitDate: Wed Sep 5 10:17:32 2018 +0200

    tdf#90906 writerfilter: Allow COL_AUTO to override non-auto
    
    If the inherited properties define a non-auto color, then
    a specified COL_AUTO needs to be returned in order to
    override the inherited color.
    
    This affects three areas. Character fill, Paragraph fill,
    and table cell fill. The unit tests cover all three areas.
    
    This patch depends on the commits for tdf#91292
    
    Change-Id: I1a043d2224b164c6c411ce2e46d899212f2b7f3d
    Reviewed-on: https://gerrit.libreoffice.org/59313
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <justin_luth at sil.org>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx b/sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx
new file mode 100644
index 000000000000..3df6b65c8af1
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90906_colAuto.docx differ
diff --git a/sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx b/sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx
new file mode 100644
index 000000000000..84825201b048
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90906_colAutoB.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
index 33650378b229..2ffaa7008ff3 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
@@ -53,6 +53,38 @@ DECLARE_OOXMLEXPORT_TEST(testTdf57589_hashColor, "tdf57589_hashColor.docx")
     CPPUNIT_ASSERT_EQUAL(COL_AUTO, Color(getProperty<sal_uInt32>(getParagraph(2), "ParaBackColor")));
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf90906_colAuto, "tdf90906_colAuto.docx")
+{
+    uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+    uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> xCell(xTable->getCellByName("A1"), uno::UNO_QUERY);
+    uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xCell->getText(), uno::UNO_QUERY);
+    uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+    uno::Reference<text::XTextRange> xPara(xParaEnum->nextElement(), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(COL_AUTO, Color(getProperty<sal_uInt32>(getRun(xPara, 1, "Nazwa"), "CharBackColor")));
+}
+
+DECLARE_OOXMLEXPORT_TEST(testTdf90906_colAutoB, "tdf90906_colAutoB.docx")
+{
+    uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+    uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+
+    uno::Reference<table::XCell> xCell = xTable->getCellByName("A1");
+    CPPUNIT_ASSERT_EQUAL(COL_LIGHTGREEN, Color(getProperty<sal_uInt32>(xCell, "BackColor")));
+    xCell.set(xTable->getCellByName("A2"));
+    CPPUNIT_ASSERT_EQUAL(COL_AUTO, Color(getProperty<sal_uInt32>(xCell, "BackColor")));
+    xCell.set(xTable->getCellByName("B1"));
+    CPPUNIT_ASSERT_EQUAL(COL_AUTO, Color(getProperty<sal_uInt32>(xCell, "BackColor")));
+    xCell.set(xTable->getCellByName("B2"));
+    CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(getProperty<sal_uInt32>(xCell, "BackColor")));
+
+    uno::Reference<text::XTextRange> xText(getParagraph(2, "Paragraphs too"));
+    CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty<drawing::FillStyle>(xText, "FillStyle"));
+    CPPUNIT_ASSERT_EQUAL(COL_AUTO, Color(getProperty<sal_uInt32>(xText, "ParaBackColor")));
+}
+
 DECLARE_OOXMLEXPORT_TEST(testTdf92524_autoColor, "tdf92524_autoColor.doc")
 {
     CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, getProperty<drawing::FillStyle>(getParagraph(1), "FillStyle"));
diff --git a/writerfilter/source/dmapper/CellColorHandler.cxx b/writerfilter/source/dmapper/CellColorHandler.cxx
index 968c1b1f553f..a19a984d6e7e 100644
--- a/writerfilter/source/dmapper/CellColorHandler.cxx
+++ b/writerfilter/source/dmapper/CellColorHandler.cxx
@@ -39,6 +39,7 @@ m_nShadingPattern( drawing::ShadingPattern::CLEAR ),
 m_nColor( 0xffffffff ),
 m_nFillColor( 0xffffffff ),
 m_bAutoFillColor( true ),
+m_bFillSpecified( false ),
     m_OutputFormat( Form )
 {
 }
@@ -116,6 +117,7 @@ void CellColorHandler::lcl_attribute(Id rName, Value & rVal)
                 m_bAutoFillColor = false;
 
             m_nFillColor = nIntValue;
+            m_bFillSpecified = true;
         break;
         case NS_ooxml::LN_CT_Shd_color:
             createGrabBag("color", uno::makeAny(OUString::fromUtf8(msfilter::util::ConvertColor(nIntValue))));
@@ -205,7 +207,10 @@ TablePropertyMapPtr  CellColorHandler::getProperties()
     if( !nWW8BrushStyle )
     {
         // Clear-Brush
-        nApplyColor = m_nFillColor;
+        if ( m_bFillSpecified && m_bAutoFillColor )
+            nApplyColor = sal_Int32(COL_AUTO);
+        else
+            nApplyColor = m_nFillColor;
     }
     else
     {
@@ -273,13 +278,14 @@ TablePropertyMapPtr  CellColorHandler::getProperties()
 
     if (m_OutputFormat == Paragraph)
     {
-        // If brush style = clear and FillColor = COLOR_AUTO, then don't enable the fill style - just pre-select the default color
         if (nWW8BrushStyle || !m_bAutoFillColor)
             pPropertyMap->Insert(PROP_FILL_STYLE, uno::makeAny(drawing::FillStyle_SOLID));
+        else if ( m_bFillSpecified && m_bAutoFillColor )
+            pPropertyMap->Insert(PROP_FILL_STYLE, uno::makeAny(drawing::FillStyle_NONE));
 
         pPropertyMap->Insert(PROP_FILL_COLOR, uno::makeAny(nApplyColor));
     }
-    else if (nWW8BrushStyle || !m_bAutoFillColor)
+    else if ( nWW8BrushStyle || !m_bAutoFillColor || m_bFillSpecified )
         pPropertyMap->Insert( m_OutputFormat == Form ? PROP_BACK_COLOR
                             : PROP_CHAR_BACK_COLOR, uno::makeAny( nApplyColor ));
 
diff --git a/writerfilter/source/dmapper/CellColorHandler.hxx b/writerfilter/source/dmapper/CellColorHandler.hxx
index 7a1d0e1cd643..fb72be4262bb 100644
--- a/writerfilter/source/dmapper/CellColorHandler.hxx
+++ b/writerfilter/source/dmapper/CellColorHandler.hxx
@@ -38,6 +38,7 @@ private:
     sal_Int32 m_nColor;
     sal_Int32 m_nFillColor;
     bool      m_bAutoFillColor;
+    bool      m_bFillSpecified;
     OutputFormat m_OutputFormat;
 
     OUString m_aInteropGrabBagName;


More information about the Libreoffice-commits mailing list