sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt |binary
 sw/qa/extras/ww8export/ww8export2.cxx                     |   13 +++++
 sw/source/filter/ww8/wrtww8.cxx                           |   36 +++++++-------
 3 files changed, 31 insertions(+), 18 deletions(-)

New commits:
commit b576ab5073a8cdf5ca2db04838d255e142f5a896
Author:     Justin Luth <justin_l...@sil.org>
AuthorDate: Fri Aug 17 18:38:57 2018 +0300
Commit:     Justin Luth <justin_l...@sil.org>
CommitDate: Sat Aug 18 13:09:07 2018 +0200

    tdf#116436 doc export: add missing table background fill
    
    MS formats only have support for Table and Cell fill.
    
    Interestingly, MS Word doesn't let the cells inherit from
    the Table fill setting,
    so that value also needs to be written out into every cell.
    
    Since Word apparently ignores the table color, I didn't
    bother trying to search out how to export that in DOC
    format.  (I did add it to DOCX since it was so easy to find.)
    
    Change-Id: I8946f07b45f72fed5959369182882a7bf013b1d0
    Reviewed-on: https://gerrit.libreoffice.org/59281
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <justin_l...@sil.org>

diff --git a/sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt 
b/sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt
new file mode 100644
index 000000000000..1ae65f788d4b
Binary files /dev/null and 
b/sw/qa/extras/ww8export/data/tdf116436_tableBackground.odt differ
diff --git a/sw/qa/extras/ww8export/ww8export2.cxx 
b/sw/qa/extras/ww8export/ww8export2.cxx
index bea2891126df..91d1cdae23a3 100644
--- a/sw/qa/extras/ww8export/ww8export2.cxx
+++ b/sw/qa/extras/ww8export/ww8export2.cxx
@@ -67,6 +67,19 @@ DECLARE_WW8EXPORT_TEST(testTdf55528_relativeTableWidth, 
"tdf55528_relativeTableW
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Table relative width percent", 
sal_Int16(98), getProperty<sal_Int16>(xTable, "RelativeWidth"));
  }
 
+DECLARE_WW8EXPORT_TEST(testTdf116436_tableBackground, 
"tdf116436_tableBackground.odt")
+{
+    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(sal_Int32(0xF8DF7C), getProperty<sal_Int32>(xCell, 
"BackColor"));
+    xCell.set(xTable->getCellByName("A6"));
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(0x81D41A), getProperty<sal_Int32>(xCell, 
"BackColor"));
+    xCell.set(xTable->getCellByName("B6"));
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFFFBCC), getProperty<sal_Int32>(xCell, 
"BackColor"));
+}
+
 DECLARE_WW8EXPORT_TEST(testTdf37153, "tdf37153_considerWrapOnObjPos.doc")
 {
     CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_THROUGH, 
getProperty<text::WrapTextMode>(getShape(1), "Surround"));
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index 6274a3acfca9..81fdf13a4abf 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -2582,6 +2582,7 @@ void WW8AttributeOutput::TableCellBorders(
 
 void WW8AttributeOutput::TableBackgrounds( 
ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
 {
+    const SwTable * pTab = pTableTextNodeInfoInner->getTable();
     const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
     const SwTableLine * pTabLine = pTabBox->GetUpper();
     const SwTableBoxes & rTabBoxes = pTabLine->GetTabBoxes();
@@ -2590,19 +2591,24 @@ void WW8AttributeOutput::TableBackgrounds( 
ww8::WW8TableNodeInfoInner::Pointer_t
     m_rWW8Export.InsUInt16( NS_sprm::sprmTDefTableShd80 );
     m_rWW8Export.pO->push_back( static_cast<sal_uInt8>(nBoxes * 2) );  // Len
 
+    Color aRowColor = COL_AUTO;
+    const SvxBrushItem *pTableColorProp = 
pTab->GetFrameFormat()->GetAttrSet().GetItem<SvxBrushItem>(RES_BACKGROUND);
+    if ( pTableColorProp )
+        aRowColor = pTableColorProp->GetColor();
+
+    const SvxBrushItem *pRowColorProp = 
pTabLine->GetFrameFormat()->GetAttrSet().GetItem<SvxBrushItem>(RES_BACKGROUND);
+    if ( pRowColorProp && pRowColorProp->GetColor() != COL_AUTO )
+        aRowColor = pRowColorProp->GetColor();
+
     for ( sal_uInt8 n = 0; n < nBoxes; n++ )
     {
         const SwTableBox * pBox1 = rTabBoxes[n];
         const SwFrameFormat * pFrameFormat = pBox1->GetFrameFormat();
-        const SfxPoolItem * pI = nullptr;
-        Color aColor;
+        Color aColor = aRowColor;
 
-        if ( SfxItemState::SET == pFrameFormat->GetAttrSet().GetItemState( 
RES_BACKGROUND, false, &pI ) )
-        {
-            aColor = dynamic_cast<const SvxBrushItem *>(pI)->GetColor();
-        }
-        else
-            aColor = COL_AUTO;
+        const SvxBrushItem *pCellColorProp = 
pFrameFormat->GetAttrSet().GetItem<SvxBrushItem>(RES_BACKGROUND);
+        if ( pCellColorProp && pCellColorProp->GetColor() != COL_AUTO )
+            aColor = pCellColorProp->GetColor();
 
         WW8_SHD aShd;
         WW8Export::TransBrush( aColor, aShd );
@@ -2624,17 +2630,11 @@ void WW8AttributeOutput::TableBackgrounds( 
ww8::WW8TableNodeInfoInner::Pointer_t
         {
             const SwTableBox * pBox1 = rTabBoxes[n];
             const SwFrameFormat * pFrameFormat = pBox1->GetFrameFormat();
-            const SfxPoolItem * pI = nullptr;
-            Color aColor;
+            Color aColor = aRowColor;
 
-                if ( SfxItemState::SET ==
-                         pFrameFormat->GetAttrSet().
-                         GetItemState( RES_BACKGROUND, false, &pI ) )
-            {
-                aColor = dynamic_cast<const SvxBrushItem *>(pI)->GetColor();
-            }
-            else
-                aColor = COL_AUTO;
+            const SvxBrushItem *pCellColorProp = 
pFrameFormat->GetAttrSet().GetItem<SvxBrushItem>(RES_BACKGROUND);
+            if ( pCellColorProp && pCellColorProp->GetColor() != COL_AUTO )
+                aColor = pCellColorProp->GetColor();
 
             WW8SHDLong aSHD;
             aSHD.setCvFore( 0xFF000000 );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to