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 029951e6d3636d99b370568313b8b5c2da8b452d Author: Justin Luth <justin_l...@sil.org> AuthorDate: Fri Aug 17 18:38:57 2018 +0300 Commit: Miklos Vajna <vmik...@collabora.co.uk> CommitDate: Tue Aug 28 18:28:23 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> (cherry picked from commit b576ab5073a8cdf5ca2db04838d255e142f5a896) Reviewed-on: https://gerrit.libreoffice.org/59287 Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> 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 6cb358bf81ab..3ae7826db2cf 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 745907044b52..833de9c7b452 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