Kaydet (Commit) 1a4bc964 authored tarafından Justin Luth's avatar Justin Luth Kaydeden (comit) Miklos Vajna

tdf#116436 rtf 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 RTF
format.  (I did add it to DOCX since it was so easy to find.)

Change-Id: I7fe7723fb1603bc60608762aea79ff3b8122e073
Reviewed-on: https://gerrit.libreoffice.org/59282
Tested-by: Jenkins
Reviewed-by: 's avatarJustin Luth <justin_luth@sil.org>
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst cc2f7944
...@@ -60,6 +60,22 @@ DECLARE_RTFEXPORT_TEST(testTdf108949_footnote, "tdf108949_footnote.rtf") ...@@ -60,6 +60,22 @@ DECLARE_RTFEXPORT_TEST(testTdf108949_footnote, "tdf108949_footnote.rtf")
getProperty<sal_Int32>(xFootnote->getAnchor(), "CharColor")); getProperty<sal_Int32>(xFootnote->getAnchor(), "CharColor"));
} }
DECLARE_RTFEXPORT_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");
if (mbExported)
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"));
if (mbExported)
CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFFFBCC), getProperty<sal_Int32>(xCell, "BackColor"));
}
DECLARE_RTFEXPORT_TEST(testTdf104035, "tdf104035.rtf") DECLARE_RTFEXPORT_TEST(testTdf104035, "tdf104035.rtf")
{ {
auto aTabStops = getProperty<uno::Sequence<style::TabStop>>(getParagraph(1), "ParaTabStops"); auto aTabStops = getProperty<uno::Sequence<style::TabStop>>(getParagraph(1), "ParaTabStops");
......
...@@ -726,6 +726,21 @@ void RtfAttributeOutput::TableDefaultBorders( ...@@ -726,6 +726,21 @@ void RtfAttributeOutput::TableDefaultBorders(
void RtfAttributeOutput::TableBackgrounds( void RtfAttributeOutput::TableBackgrounds(
ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)
{ {
const SwTable* pTable = pTableTextNodeInfoInner->getTable();
const SwTableBox* pTableBox = pTableTextNodeInfoInner->getTableBox();
const SwTableLine* pTableLine = pTableBox->GetUpper();
Color aColor = COL_AUTO;
const SvxBrushItem* pTableColorProp
= pTable->GetFrameFormat()->GetAttrSet().GetItem<SvxBrushItem>(RES_BACKGROUND);
if (pTableColorProp)
aColor = pTableColorProp->GetColor();
const SvxBrushItem* pRowColorProp
= pTableLine->GetFrameFormat()->GetAttrSet().GetItem<SvxBrushItem>(RES_BACKGROUND);
if (pRowColorProp && pRowColorProp->GetColor() != COL_AUTO)
aColor = pRowColorProp->GetColor();
const SwWriteTableRows& aRows = m_pTableWrt->GetRows(); const SwWriteTableRows& aRows = m_pTableWrt->GetRows();
SwWriteTableRow* pRow = aRows[pTableTextNodeInfoInner->getRow()]; SwWriteTableRow* pRow = aRows[pTableTextNodeInfoInner->getRow()];
const SwWriteTableCell* const pCell const SwWriteTableCell* const pCell
...@@ -735,11 +750,14 @@ void RtfAttributeOutput::TableBackgrounds( ...@@ -735,11 +750,14 @@ void RtfAttributeOutput::TableBackgrounds(
if (pCellFormat->GetAttrSet().HasItem(RES_BACKGROUND, &pItem)) if (pCellFormat->GetAttrSet().HasItem(RES_BACKGROUND, &pItem))
{ {
auto& rBack = static_cast<const SvxBrushItem&>(*pItem); auto& rBack = static_cast<const SvxBrushItem&>(*pItem);
if (!rBack.GetColor().GetTransparency()) if (rBack.GetColor() != COL_AUTO)
{ aColor = rBack.GetColor();
m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLCBPAT); }
m_aRowDefs.append(static_cast<sal_Int32>(m_rExport.GetColor(rBack.GetColor())));
} if (!aColor.GetTransparency())
{
m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLCBPAT);
m_aRowDefs.append(static_cast<sal_Int32>(m_rExport.GetColor(aColor)));
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment