summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorJustin Luth <justin_luth@sil.org>2019-01-14 22:18:46 +0300
committerMiklos Vajna <vmiklos@collabora.com>2019-04-30 15:13:42 +0200
commitcc899c6967238877f0094bcf00627145e484ffec (patch)
treedbe42d9f42c1fdd8af6524aaf0ba7c42e1d5e6d2 /sw
parentb593634d3cfbb2fc8522d99ce1c3f2a11445ea59 (diff)
tdf#101826 ww8import: Fly - don't convert XATTR back and forth
In this case we are explicitly interested in textboxes, but any fly that accepts XATTR will now use that and skip the old RES_BACKGROUND. In the case of textbox import, the properties were being converted into RES_BACKGROUND and then back to XATTR again. Just copy the XATTR properties to the new FlySet instead. The ability to import XATTRs into a textbox was added to LO6.3 with commit 15819181772d95963d16c1c2eaa9e51af81f7f68 Change-Id: Ib65b3d9097d0a56dbe205b419d052af53d0132c8 Reviewed-on: https://gerrit.libreoffice.org/66331 Tested-by: Jenkins Reviewed-by: Justin Luth <justin_luth@sil.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'sw')
-rwxr-xr-xsw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.docbin0 -> 55296 bytes
-rw-r--r--sw/qa/extras/ww8export/ww8export3.cxx10
-rw-r--r--sw/source/filter/ww8/ww8graf.cxx27
3 files changed, 35 insertions, 2 deletions
diff --git a/sw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.doc b/sw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.doc
new file mode 100755
index 000000000000..206f4830958a
--- /dev/null
+++ b/sw/qa/extras/ww8export/data/tdf101826_xattrTextBoxFill.doc
Binary files differ
diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx
index 239ce2bcbf2e..339ebd17e440 100644
--- a/sw/qa/extras/ww8export/ww8export3.cxx
+++ b/sw/qa/extras/ww8export/ww8export3.cxx
@@ -179,6 +179,16 @@ DECLARE_WW8EXPORT_TEST(testTdf121111_fillStyleNone, "tdf121111_fillStyleNone.doc
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, getProperty<drawing::FillStyle>(xText, "FillStyle"));
}
+DECLARE_WW8EXPORT_TEST(testTdf101826_xattrTextBoxFill, "tdf101826_xattrTextBoxFill.doc")
+{
+ //Basic 1 Color Fill: gradient from yellow(FFFF00) to brown(767600) currently saves as mid-color
+ CPPUNIT_ASSERT_MESSAGE("background color", Color(0xFF, 0xFF, 0x00) != getProperty<Color>(getShape(1), "BackColor"));
+ //Basic 2 Color Fill: gradient from yellow(FFFF00) to green(00B050) currently saves as mid-color
+ CPPUNIT_ASSERT_MESSAGE("background color", Color(0xFF, 0xFF, 0x00) != getProperty<Color>(getShape(4), "BackColor"));
+ //Basic Picture Fill: Tux image
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("background image", drawing::FillStyle_BITMAP, getProperty<drawing::FillStyle>(getShape(5), "FillStyle"));
+}
+
DECLARE_WW8EXPORT_TEST(testTdf123433_fillStyleStop, "tdf123433_fillStyleStop.doc")
{
uno::Reference<text::XTextRange> xText(getParagraph(12));
diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx
index 49440291710a..551376439e05 100644
--- a/sw/source/filter/ww8/ww8graf.cxx
+++ b/sw/source/filter/ww8/ww8graf.cxx
@@ -1691,6 +1691,29 @@ void SwWW8ImplReader::MatchSdrItemsIntoFlySet( SdrObject const * pSdrObj,
rFlySet.Put( *pPoolItem );
}
+ // take new XATTR items directly. Skip old RES_BACKGROUND if new FILLSTYLE taken.
+ bool bSkipResBackground = false;
+ SfxItemPool* pPool = rFlySet.GetPool();
+ if ( pPool )
+ {
+ for ( sal_uInt16 i = XATTR_START; i < XATTR_END; ++i )
+ {
+ // Not all Fly types support XATTRs - skip unsupported attributes
+ SfxItemPool* pAttrPool = pPool->GetMasterPool();
+ while ( pAttrPool && !pAttrPool->IsInRange(i) )
+ pAttrPool = pAttrPool->GetSecondaryPool();
+ if ( !pAttrPool )
+ continue;
+
+ if ( SfxItemState::SET == rOldSet.GetItemState(i, false, &pPoolItem) )
+ {
+ rFlySet.Put( *pPoolItem );
+ if ( i == XATTR_FILLSTYLE )
+ bSkipResBackground = true;
+ }
+ }
+ }
+
// now calculate the borders and build the box: The unit is needed for the
// frame SIZE!
SvxBoxItem aBox(sw::util::ItemGet<SvxBoxItem>(rFlySet, RES_BOX));
@@ -1817,7 +1840,7 @@ void SwWW8ImplReader::MatchSdrItemsIntoFlySet( SdrObject const * pSdrObj,
// Separate transparency
eState = rOldSet.GetItemState(XATTR_FILLTRANSPARENCE, true, &pItem);
- if (eState == SfxItemState::SET)
+ if (!bSkipResBackground && eState == SfxItemState::SET)
{
sal_uInt16 nRes = WW8ITEMVALUE(rOldSet, XATTR_FILLTRANSPARENCE,
XFillTransparenceItem);
@@ -1828,7 +1851,7 @@ void SwWW8ImplReader::MatchSdrItemsIntoFlySet( SdrObject const * pSdrObj,
// Background: SvxBrushItem
eState = rOldSet.GetItemState(XATTR_FILLSTYLE, true, &pItem);
- if (eState == SfxItemState::SET)
+ if (!bSkipResBackground && eState == SfxItemState::SET)
{
const drawing::FillStyle eFill = static_cast<const XFillStyleItem*>(pItem)->GetValue();