diff options
author | Michael Stahl <mstahl@redhat.com> | 2015-04-14 16:25:42 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2015-04-14 17:36:13 +0200 |
commit | b82791e3c586d6e4247d0eb1bb94681bcb113762 (patch) | |
tree | fdbb724ea5a7f421d3a1a246e85e01926082c584 | |
parent | ea8db4ad8e1c75c3ab2f31fea4e061600231f9d1 (diff) |
tdf#89478: svx: ODF import: SvxBrushItem Graphics should override Color
The bugdoc has:
<style:page-layout-properties fo:background-color="#007f7f" >
<style:background-image
xlink:href="Pictures/2000003900002FA3000055F455EC9F63.svm"/>
</style:page-layout-properties>
In this case it's clearly better to prefer the Graphics.
The old code could actually store both in the model but the UI only
allows setting either Color or Graphic, so this should be good enough.
(regression from 7d9bb549d498d6beed2c4050c402d09643febdfa)
Change-Id: Id33231ad90815d9791f90289fb0b55455d334c14
-rw-r--r-- | svx/source/unodraw/unobrushitemhelper.cxx | 27 | ||||
-rw-r--r-- | sw/qa/extras/odfimport/data/PageBackground.odt | bin | 13175 -> 13301 bytes | |||
-rw-r--r-- | sw/qa/extras/odfimport/odfimport.cxx | 6 |
3 files changed, 20 insertions, 13 deletions
diff --git a/svx/source/unodraw/unobrushitemhelper.cxx b/svx/source/unodraw/unobrushitemhelper.cxx index 4a2ec1d3c0c8..d10aab649ee0 100644 --- a/svx/source/unodraw/unobrushitemhelper.cxx +++ b/svx/source/unodraw/unobrushitemhelper.cxx @@ -50,19 +50,8 @@ void setSvxBrushItemAsFillAttributesToTargetSet(const SvxBrushItem& rBrush, SfxI const sal_uInt8 nTransparency(rBrush.GetColor().GetTransparency()); - if(0xff != nTransparency) - { - // we have a color fill - const Color aColor(rBrush.GetColor().GetRGBColor()); - - rToSet.Put(XFillStyleItem(drawing::FillStyle_SOLID)); - rToSet.Put(XFillColorItem(OUString(), aColor)); - - // #125189# nTransparency is in range [0..254], convert to [0..100] which is used in - // XFillTransparenceItem (caution with the range which is in an *item-specific* range) - rToSet.Put(XFillTransparenceItem((((sal_Int32)nTransparency * 100) + 127) / 254)); - } - else if(GPOS_NONE != rBrush.GetGraphicPos()) + // tdf#89478 check for image first + if (GPOS_NONE != rBrush.GetGraphicPos()) { // we have a graphic fill, set fill style rToSet.Put(XFillStyleItem(drawing::FillStyle_BITMAP)); @@ -131,6 +120,18 @@ void setSvxBrushItemAsFillAttributesToTargetSet(const SvxBrushItem& rBrush, SfxI rToSet.Put(XFillTransparenceItem(nGraphicTransparency)); } } + else if (0xff != nTransparency) + { + // we have a color fill + const Color aColor(rBrush.GetColor().GetRGBColor()); + + rToSet.Put(XFillStyleItem(drawing::FillStyle_SOLID)); + rToSet.Put(XFillColorItem(OUString(), aColor)); + + // #125189# nTransparency is in range [0..254], convert to [0..100] which is used in + // XFillTransparenceItem (caution with the range which is in an *item-specific* range) + rToSet.Put(XFillTransparenceItem((((sal_Int32)nTransparency * 100) + 127) / 254)); + } else { // GPOS_NONE == rBrush.GetGraphicPos() && 0xff == rBrush.GetColor().GetTransparency(), diff --git a/sw/qa/extras/odfimport/data/PageBackground.odt b/sw/qa/extras/odfimport/data/PageBackground.odt Binary files differindex dbb1082d2b77..3733d5baed20 100644 --- a/sw/qa/extras/odfimport/data/PageBackground.odt +++ b/sw/qa/extras/odfimport/data/PageBackground.odt diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx index f967f3414a00..551c2de35f05 100644 --- a/sw/qa/extras/odfimport/odfimport.cxx +++ b/sw/qa/extras/odfimport/odfimport.cxx @@ -316,6 +316,12 @@ DECLARE_ODFIMPORT_TEST(testPageBackground, "PageBackground.odt") CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty<drawing::FillStyle>(xPropertySet, "FillStyle")); CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty<OUString>(xPropertySet, "FillBitmapName")); CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty<drawing::BitmapMode>(xPropertySet, "FillBitmapMode")); + + uno::Reference<beans::XPropertySet> xPropertySetOld(getStyles("PageStyles")->getByName("OldStandard"), uno::UNO_QUERY); + // The background image was overridden by color + CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, getProperty<drawing::FillStyle>(xPropertySetOld, "FillStyle")); + CPPUNIT_ASSERT_EQUAL(OUString("Sky"), getProperty<OUString>(xPropertySetOld, "FillBitmapName")); + CPPUNIT_ASSERT_EQUAL(drawing::BitmapMode_REPEAT, getProperty<drawing::BitmapMode>(xPropertySetOld, "FillBitmapMode")); } DECLARE_ODFIMPORT_TEST(testFdo56272, "fdo56272.odt") |