summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Le Grand (allotropia) <armin.le.grand.extern@allotropia.de>2023-04-21 15:18:09 +0200
committerArmin Le Grand <Armin.Le.Grand@me.com>2023-05-03 17:38:46 +0200
commitbb198176684c3d9377e26c04a29ec66deb811949 (patch)
tree731abe7ce1b95805900f39c6c7ac2c1c6ccfb211
parentf1fd3e32508ee3e8aca6f90724e7af8664652e41 (diff)
MCGR: Make MCGR default for oox im/export, cleanup
Following an error in CppunitTest_chart2_export3 I updated the transparency definition at WriteGradientFill and corrected usages. Had to correct/adapt some Chart UnitTests. Some of these changes are temporary since this will/has to change when ODF MCGR im/export is integrated. I checked that all of these cases actually work, comparing im LO and MSO. Adapted some Chart2ImportTest to directly compare/check now for the fully imported tranparence gradient with available higher precision. Adapted OoxDrawingmlTest testGradientMultiStepTransparency to use new MCGR capabilities. Adapted testTextframeGradient and tested the turn-around with rtf gradients. These are a little bit limited and needed some extra care. Adapted testTextframeGradient. Adapted SdOOXMLExportTest1, testTdf94238 Adapted SdOOXMLExportTest1, testTdf128345GradientAxial Adapted SdOOXMLExportTest2, testTdf105739 Adapted SdOOXMLExportTest3, testTdf127372 Adapted SdOOXMLExportTest3, testTdf127379 Adapted SdMiscTest, testFillGradient Adapted testTextframeGradient Adapted ScFiltersTest3, testTdf129789 Adapted SdUiImpressTest, testPageFillGradient Adapted SdOOXMLExportTest1, testTdf128345GradientLinear by using better double-to-integer rounding (basegfx::fround) in DrawingML::WriteGradientStop. After double calculations this makes the tansition to integer correct and stable. Also took back change at testTdf128345ChartArea_CG_TS_export which showed the same flaw before. 2nd look @testTdf128345Legend_CS_TG_axial_export made me add that stuff again and adapt the axial ColorStop adding in the export to not export the middle enty twice. Extended test a little bit, too. Only do not add value if it starts at 0.0 aka StartColor, else adding it is corect. Adapted some tests CPPUNIT_ASSERT to CPPUNIT_ASSERT_EQUAL after being pointed to it from gerrit_linux_clang_dbgutil build. Change-Id: I4a993053da8960035671b655e67908f36e59b5fe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150763 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
-rw-r--r--chart2/qa/extras/chart2geometry.cxx33
-rw-r--r--chart2/qa/extras/chart2import.cxx34
-rw-r--r--include/oox/export/drawingml.hxx8
-rw-r--r--oox/CppunitTest_oox_drawingml.mk1
-rw-r--r--oox/CppunitTest_oox_shape.mk1
-rw-r--r--oox/qa/unit/drawingml.cxx13
-rw-r--r--oox/qa/unit/shape.cxx137
-rw-r--r--oox/source/drawingml/fillproperties.cxx353
-rw-r--r--oox/source/export/chartexport.cxx45
-rw-r--r--oox/source/export/drawingml.cxx205
-rw-r--r--oox/source/vml/vmlformatting.cxx3
-rw-r--r--sc/qa/unit/subsequent_filters_test3.cxx28
-rw-r--r--sd/qa/unit/data/xml/n819614_0.xml102
-rw-r--r--sd/qa/unit/export-tests-ooxml1.cxx38
-rw-r--r--sd/qa/unit/export-tests-ooxml2.cxx15
-rw-r--r--sd/qa/unit/export-tests-ooxml3.cxx30
-rw-r--r--sd/qa/unit/import-tests.cxx15
-rw-r--r--sd/qa/unit/misc-tests.cxx14
-rw-r--r--sd/qa/unit/uiimpress.cxx9
-rw-r--r--sw/CppunitTest_sw_odfexport.mk1
-rw-r--r--sw/ooxmlexport_setup.mk3
-rw-r--r--sw/qa/extras/odfexport/odfexport.cxx30
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport2.cxx38
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx42
-rw-r--r--sw/rtfexport_setup.mk1
-rw-r--r--sw/source/filter/ww8/rtfattributeoutput.cxx50
26 files changed, 526 insertions, 723 deletions
diff --git a/chart2/qa/extras/chart2geometry.cxx b/chart2/qa/extras/chart2geometry.cxx
index 9a69b81e593a..d52633c80814 100644
--- a/chart2/qa/extras/chart2geometry.cxx
+++ b/chart2/qa/extras/chart2geometry.cxx
@@ -170,6 +170,12 @@ void Chart2GeometryTest::testTdf128345ChartArea_CG_TS_export()
// Without the patch the transparency was lost in saved pptx file.
loadFromURL(u"odp/tdf128345_ChartArea_CG_TS.odp");
+ // MCGR: Similar to testTdf128345Legend_CS_TG_axial_export:
+ // Checked that it works with the existing import file,
+ // but will change with ODF MCGR im/export again.
+ // Adapting for now, but need to re-check values after
+ // ODF im/export for MCGR is integrated
+
// Make sure the chart area has a transparency in gradient stops in saved pptx file.
save("Impress MS PowerPoint 2007 XML");
xmlDocUniquePtr pXmlDoc = parseExport("ppt/charts/chart1.xml");
@@ -188,6 +194,12 @@ void Chart2GeometryTest::testTdf128345ChartArea_CG_TS_import()
// Make sure chart area has transparency when pptx document is opened and resaved as odp.
// As of Aug 2020, the import generates a transparency gradient. When import is changed to
// generate solid transparency, the test needs to be adapted.
+
+ // MCGR: Similar to testTdf128345Legend_CS_TG_axial_export:
+ // Checked that it works with the existing import file,
+ // but will change with ODF MCGR im/export again. We will need to
+ // update the *.odp input file. Disable unclear values for now and
+ // adapt when ODF im/export for MCGR is integrated
loadFromURL(u"pptx/tdf128345_ChartArea_CG_TS.pptx");
// Find transparency gradient name
@@ -216,7 +228,7 @@ void Chart2GeometryTest::testTdf128345ChartArea_CG_TS_import()
assertXPath(pXmlDoc2, sStart + " and @draw:start='30%']");
assertXPath(pXmlDoc2, sStart + " and @draw:end='30%']");
assertXPath(pXmlDoc2, sStart + " and @draw:angle='30deg']");
- assertXPath(pXmlDoc2, sStart + " and @draw:border='20%']");
+ assertXPath(pXmlDoc2, sStart + " and @draw:border='0%']"); // MCGR: no border anymore 20% -> 0%
}
void Chart2GeometryTest::testTdf128345ChartWall_CS_TG_export()
@@ -283,13 +295,21 @@ void Chart2GeometryTest::testTdf128345Legend_CS_TG_axial_export()
CPPUNIT_ASSERT(pXmlDoc);
OString sPathStart("//c:chartSpace/c:chart/c:legend/c:spPr/a:gradFill");
- assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs", 3); // axial
- // no element for 0% transparent
+
+ // MCGR: three entries due to axial being mirrored+expanded to linear
+ assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs", 3);
+
+ // MCGR: start entry, no transparence, pos zero
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[1]/a:srgbClr/a:alpha", 0);
- // 100% transparent = opacity 0. It comes from "axial", therefore it is in the middle.
+ assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[1]", "pos", "0");
+
+ // MCGR: middle entry, 100% transparence, pos 0.5
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[2]/a:srgbClr/a:alpha", "val", "0");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[2]", "pos", "50000");
+
+ // MCGR: end entry, no transparence, pos 1.0
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[3]/a:srgbClr/a:alpha", 0);
+ assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[3]", "pos", "100000");
}
void Chart2GeometryTest::testTdf128345Legend_CS_TG_axial_import()
@@ -320,8 +340,9 @@ void Chart2GeometryTest::testTdf128345Legend_CS_TG_axial_import()
const OString sAttribute("@draw:name='" + OU2O(sOUOpacityName) + "'");
const OString sStart("//office:document-styles/office:styles/draw:opacity[" + sAttribute);
assertXPath(pXmlDoc2, sStart + "]", 1);
- assertXPath(pXmlDoc2, sStart + " and @draw:style='axial']");
- assertXPath(pXmlDoc2, sStart + " and @draw:start='0%']");
+ // MCGR: Needs odf im/export for MCGR, then adapt.
+ assertXPath(pXmlDoc2, sStart + " and @draw:style='linear']"); // MCGR: axial -> linear
+ assertXPath(pXmlDoc2, sStart + " and @draw:start='100%']"); // MCGR: 0% -> 100%
assertXPath(pXmlDoc2, sStart + " and @draw:end='100%']");
}
diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx
index 786ad81dccc2..776c6e706bd9 100644
--- a/chart2/qa/extras/chart2import.cxx
+++ b/chart2/qa/extras/chart2import.cxx
@@ -32,8 +32,9 @@
#include <iterator>
#include <com/sun/star/util/Color.hpp>
-#include <com/sun/star/awt/Gradient.hpp>
+#include <com/sun/star/awt/Gradient2.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <basegfx/utils/gradienttools.hxx>
class Chart2ImportTest : public ChartTest
{
@@ -618,12 +619,23 @@ CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testBnc889755)
//tdf#139940 - the title's gradient was lost and was filled with solid blue, instead of a "blue underline".
uno::Reference<drawing::XDrawPagesSupplier> xDoc(mxComponent, uno::UNO_QUERY_THROW);
uno::Reference<drawing::XDrawPage> xPage(xDoc->getDrawPages()->getByIndex(0), uno::UNO_QUERY_THROW);
+
// Shape "Title 3"
+ // MCGR: Use the whole completely imported transparency gradient to check for correctness
uno::Reference<beans::XPropertySet> xShapeProps(xPage->getByIndex(4), uno::UNO_QUERY_THROW);
- awt::Gradient aTransparence;
+ awt::Gradient2 aTransparence;
xShapeProps->getPropertyValue("FillTransparenceGradient") >>= aTransparence;
- CPPUNIT_ASSERT(aTransparence.StartColor != aTransparence.EndColor);
- CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(ColorTransparency, aTransparence.StartColor));
+
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aTransparence);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.25, 0.25, 0.25));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.070000000000000007));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.25, 0.25, 0.25));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 0.080000000000000002));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[2].getStopColor(), basegfx::BColor(1.0, 1.0, 1.0));
}
CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testBnc882383)
@@ -652,14 +664,22 @@ CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTransparencyGradientValue)
xPropertySet->getPropertyValue("FillTransparenceGradientName") >>= sTranspGradientName;
CPPUNIT_ASSERT(!sTranspGradientName.isEmpty());
- awt::Gradient aTransparenceGradient;
+ awt::Gradient2 aTransparenceGradient;
uno::Reference< lang::XMultiServiceFactory > xFact(xChartDoc, uno::UNO_QUERY);
CPPUNIT_ASSERT(xFact.is());
uno::Reference< container::XNameAccess > xTransparenceGradient(xFact->createInstance("com.sun.star.drawing.TransparencyGradientTable"), uno::UNO_QUERY);
uno::Any rTransparenceValue = xTransparenceGradient->getByName(sTranspGradientName);
CPPUNIT_ASSERT(rTransparenceValue >>= aTransparenceGradient);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(3355443), aTransparenceGradient.EndColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(5000268), aTransparenceGradient.StartColor);
+
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aTransparenceGradient);
+
+ // MCGR: Use the whole completely imported transparency gradient to check for correctness
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.3, 0.3, 0.3));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.2, 0.2, 0.2));
}
CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testSimpleStrictXLSX)
diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx
index 6cba4b06b6e0..451b3f0eaae0 100644
--- a/include/oox/export/drawingml.hxx
+++ b/include/oox/export/drawingml.hxx
@@ -355,8 +355,7 @@ public:
void WriteColor( const OUString& sColorSchemeName, const css::uno::Sequence< css::beans::PropertyValue >& aTransformations, sal_Int32 nAlpha = MAX_PERCENT );
void WriteColor( const ::Color nColor, const css::uno::Sequence< css::beans::PropertyValue >& aTransformations, sal_Int32 nAlpha = MAX_PERCENT );
void WriteColorTransformations( const css::uno::Sequence< css::beans::PropertyValue >& aTransformations, sal_Int32 nAlpha = MAX_PERCENT );
- void WriteGradientStop(sal_uInt16 nStop, ::Color nColor, sal_Int32 nAlpha = MAX_PERCENT);
- void WriteGradientStop2(double fOffset, const basegfx::BColor& rColor, const basegfx::BColor& rAlpha);
+ void WriteGradientStop(double fOffset, const basegfx::BColor& rColor, const basegfx::BColor& rAlpha);
void WriteLineArrow( const css::uno::Reference< css::beans::XPropertySet >& rXPropSet, bool bLineStart );
void WriteConnectorConnections( sal_Int32 nStartGlueId, sal_Int32 nEndGlueId, sal_Int32 nStartID, sal_Int32 nEndID );
@@ -377,10 +376,7 @@ public:
*/
void WriteGradientFill(
const css::awt::Gradient2* pColorGradient, sal_Int32 nFixColor,
- const css::awt::Gradient2* pTransparenceGradient, sal_Int32 nFixTransparence);
- void WriteGradientFill2(
- const css::awt::Gradient2* pColorGradient, sal_Int32 nFixColor,
- const css::awt::Gradient2* pTransparenceGradient, sal_Int32 nFixTransparence);
+ const css::awt::Gradient2* pTransparenceGradient, double fFixTransparence = 0.0);
void WriteGrabBagGradientFill( const css::uno::Sequence< css::beans::PropertyValue >& aGradientStops, const css::awt::Gradient2& rGradient);
diff --git a/oox/CppunitTest_oox_drawingml.mk b/oox/CppunitTest_oox_drawingml.mk
index 3a9e0d0a28f7..d670e05cd7b5 100644
--- a/oox/CppunitTest_oox_drawingml.mk
+++ b/oox/CppunitTest_oox_drawingml.mk
@@ -31,6 +31,7 @@ $(eval $(call gb_CppunitTest_use_libraries,oox_drawingml, \
tl \
unotest \
utl \
+ basegfx \
))
$(eval $(call gb_CppunitTest_use_sdk_api,oox_drawingml))
diff --git a/oox/CppunitTest_oox_shape.mk b/oox/CppunitTest_oox_shape.mk
index 073a21133708..a969d808a28b 100644
--- a/oox/CppunitTest_oox_shape.mk
+++ b/oox/CppunitTest_oox_shape.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_CppunitTest_use_libraries,oox_shape, \
test \
unotest \
utl \
+ basegfx \
))
$(eval $(call gb_CppunitTest_use_sdk_api,oox_shape))
diff --git a/oox/qa/unit/drawingml.cxx b/oox/qa/unit/drawingml.cxx
index 09ab7121d8c8..8d5627a16cdc 100644
--- a/oox/qa/unit/drawingml.cxx
+++ b/oox/qa/unit/drawingml.cxx
@@ -9,7 +9,7 @@
#include <test/unoapi_test.hxx>
-#include <com/sun/star/awt/Gradient.hpp>
+#include <com/sun/star/awt/Gradient2.hpp>
#include <com/sun/star/awt/Rectangle.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/container/XNamed.hpp>
@@ -35,6 +35,7 @@
#include <docmodel/theme/Theme.hxx>
#include <comphelper/sequenceashashmap.hxx>
+#include <basegfx/utils/gradienttools.hxx>
using namespace ::com::sun::star;
@@ -181,7 +182,7 @@ CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testGradientMultiStepTransparency)
uno::Reference<container::XNamed> xShape(xDrawPage->getByIndex(1), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("Rectangle 4"), xShape->getName());
uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
- awt::Gradient aTransparence;
+ awt::Gradient2 aTransparence;
xShapeProps->getPropertyValue("FillTransparenceGradient") >>= aTransparence;
// Without the accompanying fix in place, this test would have failed with:
@@ -189,7 +190,13 @@ CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testGradientMultiStepTransparency)
// - Actual : 3487029 (0x353535)
// i.e. the end transparency was not 100%, but was 21%, leading to an unexpected visible line on
// the right of this shape.
- CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(ColorTransparency, aTransparence.EndColor));
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aTransparence);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(5), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[4].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[4].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
}
CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testShapeTextAlignment)
diff --git a/oox/qa/unit/shape.cxx b/oox/qa/unit/shape.cxx
index 523003ee351a..e8d4f188b8d3 100644
--- a/oox/qa/unit/shape.cxx
+++ b/oox/qa/unit/shape.cxx
@@ -14,7 +14,7 @@
#include <string_view>
#include <com/sun/star/awt/FontWeight.hpp>
-#include <com/sun/star/awt/Gradient.hpp>
+#include <com/sun/star/awt/Gradient2.hpp>
#include <com/sun/star/awt/Size.hpp>
#include <com/sun/star/awt/XBitmap.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
@@ -37,6 +37,7 @@
#include <svx/svdoashp.hxx>
#include <tools/color.hxx>
#include <docmodel/uno/UnoThemeColor.hxx>
+#include <basegfx/utils/gradienttools.hxx>
using namespace ::com::sun::star;
@@ -467,11 +468,22 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testWriterFontwork3)
uno::Reference<beans::XPropertySet> xShapeProps(xDrawPage->getByIndex(0), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(uno::Any(drawing::FillStyle_GRADIENT),
xShapeProps->getPropertyValue(u"FillStyle"));
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
xShapeProps->getPropertyValue(u"FillGradient") >>= aGradient;
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.0, 0.0, 1.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[1].getStopColor(),
+ basegfx::BColor(0.96862745098039216, 0.58823529411764708, 0.27450980392156865));
+
CPPUNIT_ASSERT_EQUAL(sal_Int16(690), aGradient.Angle);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(255), aGradient.StartColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(16225862), aGradient.EndColor);
CPPUNIT_ASSERT_EQUAL(sal_Int16(0), aGradient.XOffset);
CPPUNIT_ASSERT_EQUAL(sal_Int16(0), aGradient.YOffset);
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style);
@@ -482,11 +494,22 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testWriterFontwork3)
uno::Reference<beans::XPropertySet> xShapeProps(xDrawPage->getByIndex(1), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(uno::Any(drawing::FillStyle_GRADIENT),
xShapeProps->getPropertyValue(u"FillStyle"));
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
xShapeProps->getPropertyValue(u"FillGradient") >>= aGradient;
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.40000000000000002));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[0].getStopColor(),
+ basegfx::BColor(0.96862745098039216, 0.58823529411764708, 0.27450980392156865));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.0, 0.0, 1.0));
+
CPPUNIT_ASSERT_EQUAL(sal_Int16(900), aGradient.Angle);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(255), aGradient.EndColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(16225862), aGradient.StartColor);
CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.XOffset);
CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.YOffset);
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style);
@@ -497,11 +520,22 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testWriterFontwork3)
uno::Reference<beans::XPropertySet> xShapeProps(xDrawPage->getByIndex(2), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(uno::Any(drawing::FillStyle_GRADIENT),
xShapeProps->getPropertyValue(u"FillStyle"));
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
xShapeProps->getPropertyValue(u"FillGradient") >>= aGradient;
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[0].getStopColor(),
+ basegfx::BColor(0.96862745098039216, 0.58823529411764708, 0.27450980392156865));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.0, 0.0, 1.0));
+
CPPUNIT_ASSERT_EQUAL(sal_Int16(900), aGradient.Angle);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(255), aGradient.EndColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(16225862), aGradient.StartColor);
CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aGradient.XOffset);
CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aGradient.YOffset);
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RECT, aGradient.Style);
@@ -604,12 +638,23 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient)
uno::Reference<beans::XPropertySet> xShapeProps(xDrawPage->getByIndex(0), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(uno::Any(drawing::FillStyle_GRADIENT),
xShapeProps->getPropertyValue(u"FillStyle"));
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
xShapeProps->getPropertyValue(u"FillGradient") >>= aGradient;
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(),
+ basegfx::BColor(1.0, 0.75294117647058822, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(),
+ basegfx::BColor(0.75294117647058822, 0.0, 0.0));
+
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style);
CPPUNIT_ASSERT_EQUAL(sal_Int16(690), aGradient.Angle);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(16760832), aGradient.StartColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(12582912), aGradient.EndColor);
CPPUNIT_ASSERT_EQUAL(uno::Any(drawing::LineStyle_SOLID),
xShapeProps->getPropertyValue(u"LineStyle"));
@@ -627,19 +672,41 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient)
uno::Reference<beans::XPropertySet> xShapeProps(xDrawPage->getByIndex(1), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(uno::Any(drawing::FillStyle_GRADIENT),
xShapeProps->getPropertyValue(u"FillStyle"));
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
xShapeProps->getPropertyValue(u"FillGradient") >>= aGradient;
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(),
+ basegfx::BColor(0.0, 0.51372549019607838, 0.8784313725490196));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(),
+ basegfx::BColor(0.90196078431372551, 0.90196078431372551, 0.0));
+
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(15132160), aGradient.EndColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(33760), aGradient.StartColor);
CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.XOffset);
CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.YOffset);
xShapeProps->getPropertyValue(u"FillTransparenceGradient") >>= aGradient;
- CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style);
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
// Transparency is encoded in gray color.
- CPPUNIT_ASSERT_EQUAL(sal_Int32(5000268), aGradient.EndColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(6710886), aGradient.StartColor);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[0].getStopColor(),
+ basegfx::BColor(0.40000000000000002, 0.40000000000000002, 0.40000000000000002));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[1].getStopColor(),
+ basegfx::BColor(0.29999999999999999, 0.29999999999999999, 0.29999999999999999));
+
+ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style);
CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.XOffset);
CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.YOffset);
@@ -663,19 +730,39 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient)
uno::Reference<beans::XPropertySet> xShapeProps(xDrawPage->getByIndex(2), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(uno::Any(drawing::FillStyle_GRADIENT),
xShapeProps->getPropertyValue(u"FillStyle"));
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
xShapeProps->getPropertyValue(u"FillGradient") >>= aGradient;
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[0].getStopColor(),
+ basegfx::BColor(0.26666666666666666, 0.44705882352941179, 0.7686274509803922));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[1].getStopColor(),
+ basegfx::BColor(0.26666666666666666, 0.44705882352941179, 0.7686274509803922));
+
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RECT, aGradient.Style);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(4485828), aGradient.EndColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(4485828), aGradient.StartColor);
CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aGradient.XOffset);
CPPUNIT_ASSERT_EQUAL(sal_Int16(0), aGradient.YOffset);
xShapeProps->getPropertyValue(u"FillTransparenceGradient") >>= aGradient;
- CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RECT, aGradient.Style);
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
// Transparency is encoded in gray color.
- CPPUNIT_ASSERT_EQUAL(sal_Int32(16777215), aGradient.EndColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aGradient.StartColor);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(1.0, 1.0, 1.0));
+
+ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RECT, aGradient.Style);
CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aGradient.XOffset);
CPPUNIT_ASSERT_EQUAL(sal_Int16(0), aGradient.YOffset);
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
index 026a341e2c4d..2896ae14fe18 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -318,30 +318,6 @@ awt::Size lclGetOriginalSize( const GraphicHelper& rGraphicHelper, const Referen
return aSizeHmm;
}
-/**
- * Looks for a last gradient transition and possibly sets a gradient border
- * based on that.
- */
-void extractGradientBorderFromStops(const GradientFillProperties& rGradientProps,
- const GraphicHelper& rGraphicHelper, ::Color nPhClr,
- awt::Gradient& rGradient)
-{
- if (rGradientProps.maGradientStops.size() <= 1)
- return;
-
- auto it = rGradientProps.maGradientStops.rbegin();
- double fLastPos = it->first;
- Color aLastColor = it->second;
- ++it;
- double fLastButOnePos = it->first;
- Color aLastButOneColor = it->second;
- if (!aLastColor.equals(aLastButOneColor, rGraphicHelper, nPhClr))
- return;
-
- // Last transition has the same color, we can map that to a border.
- rGradient.Border = rtl::math::round((fLastPos - fLastButOnePos) * 100);
-}
-
} // namespace
void GradientFillProperties::assignUsed( const GradientFillProperties& rSourceProps )
@@ -480,9 +456,7 @@ void FillProperties::pushToPropMap(ShapePropertyMap& rPropMap, const GraphicHelp
case XML_gradFill:
// do not create gradient struct if property is not supported...
- static bool bMCGR(nullptr != std::getenv("MCGR_TEST"));
-
- if( bMCGR && rPropMap.supportsProperty( ShapeProperty::FillGradient ) )
+ if( rPropMap.supportsProperty( ShapeProperty::FillGradient ) )
{
// use awt::Gradient2, prepare ColorStops
awt::Gradient2 aGradient;
@@ -607,331 +581,6 @@ void FillProperties::pushToPropMap(ShapePropertyMap& rPropMap, const GraphicHelp
rPropMap.setProperty(ShapeProperty::GradientTransparency, aGradient);
}
}
-
- if( !bMCGR && rPropMap.supportsProperty( ShapeProperty::FillGradient ) )
- {
- sal_Int32 nEndTrans = 0;
- sal_Int32 nStartTrans = 0;
- awt::Gradient2 aGradient;
- assert(aGradient.ColorStops.get() && "cid#1524676 aGradient.ColorStops._pSequence won't be null here");
- aGradient.Angle = 900;
- aGradient.StartIntensity = 100;
- aGradient.EndIntensity = 100;
-
- // Old code, values in aGradient overwritten in many cases by newer code below
- if( maGradientProps.maGradientStops.size() > 1 )
- {
- aGradient.StartColor = sal_Int32(maGradientProps.maGradientStops.begin()->second.getColor( rGraphicHelper, nPhClr ));
- aGradient.EndColor = sal_Int32(maGradientProps.maGradientStops.rbegin()->second.getColor( rGraphicHelper, nPhClr ));
- if( maGradientProps.maGradientStops.rbegin()->second.hasTransparency() )
- nEndTrans = maGradientProps.maGradientStops.rbegin()->second.getTransparency()*255/100;
- if( maGradientProps.maGradientStops.begin()->second.hasTransparency() )
- nStartTrans = maGradientProps.maGradientStops.begin()->second.getTransparency()*255/100;
- }
-
- // "rotate with shape" set to false -> do not rotate
- if ( !maGradientProps.moRotateWithShape.value_or( true ) )
- nShapeRotation = 0;
-
- if( maGradientProps.moGradientPath.has_value() )
- {
- IntegerRectangle2D aFillToRect = maGradientProps.moFillToRect.value_or( IntegerRectangle2D( 0, 0, MAX_PERCENT, MAX_PERCENT ) );
- sal_Int32 nCenterX = (MAX_PERCENT + aFillToRect.X1 - aFillToRect.X2) / 2;
- aGradient.XOffset = getLimitedValue<sal_Int16, sal_Int32>(
- nCenterX / PER_PERCENT, 0, 100);
- sal_Int32 nCenterY = (MAX_PERCENT + aFillToRect.Y1 - aFillToRect.Y2) / 2;
- aGradient.YOffset = getLimitedValue<sal_Int16, sal_Int32>(
- nCenterY / PER_PERCENT, 0, 100);
-
- if( maGradientProps.moGradientPath.value() == XML_circle )
- {
- // Style should be radial at least when the horizontal center is at 50%.
- // Otherwise import as a linear gradient, because it is the most similar to the MSO radial style.
- aGradient.Style = awt::GradientStyle_LINEAR;
- if( aGradient.XOffset == 100 && aGradient.YOffset == 100 )
- aGradient.Angle = 450;
- else if( aGradient.XOffset == 0 && aGradient.YOffset == 100 )
- aGradient.Angle = 3150;
- else if( aGradient.XOffset == 100 && aGradient.YOffset == 0 )
- aGradient.Angle = 1350;
- else if( aGradient.XOffset == 0 && aGradient.YOffset == 0 )
- aGradient.Angle = 2250;
- else
- aGradient.Style = awt::GradientStyle_RADIAL;
- }
- else
- {
- aGradient.Style = awt::GradientStyle_RECT;
- }
-
- ::std::swap( aGradient.StartColor, aGradient.EndColor );
- ::std::swap( nStartTrans, nEndTrans );
-
- extractGradientBorderFromStops(maGradientProps, rGraphicHelper, nPhClr,
- aGradient);
- }
- else if (!maGradientProps.maGradientStops.empty())
- {
- // A copy of the gradient stops for local modification
- GradientFillProperties::GradientStopMap aGradientStops(maGradientProps.maGradientStops);
-
- // Add a fake gradient stop at 0% and 100% if necessary, so that the gradient always starts
- // at 0% and ends at 100%, to make following logic clearer (?).
- auto a0 = aGradientStops.find( 0.0 );
- if( a0 == aGradientStops.end() )
- {
- // temp variable required
- Color aFirstColor(aGradientStops.begin()->second);
- aGradientStops.emplace( 0.0, aFirstColor );
- }
-
- auto a1 = aGradientStops.find( 1.0 );
- if( a1 == aGradientStops.end() )
- {
- // ditto
- Color aLastColor(aGradientStops.rbegin()->second);
- aGradientStops.emplace( 1.0, aLastColor );
- }
-
- // Check if the gradient is symmetric, which we will emulate with an "axial" gradient.
- bool bSymmetric(true);
- {
- GradientFillProperties::GradientStopMap::const_iterator aItA( aGradientStops.begin() );
- GradientFillProperties::GradientStopMap::const_iterator aItZ(std::prev(aGradientStops.end()));
- assert(aItZ != aGradientStops.end());
- while( bSymmetric && aItA->first < aItZ->first )
- {
- if (!aItA->second.equals(aItZ->second, rGraphicHelper, nPhClr))
- bSymmetric = false;
- else
- {
- ++aItA;
- aItZ = std::prev(aItZ);
- }
- }
- // Don't be fooled if the middlemost stop isn't at 0.5.
- if( bSymmetric && aItA == aItZ && aItA->first != 0.5 )
- bSymmetric = false;
-
- // If symmetric, do the rest of the logic for just a half.
- if( bSymmetric )
- {
- // aItZ already points to the colour for the middle, but insert a fake stop at the
- // exact middle if necessary.
- if( aItA->first != aItZ->first )
- {
- Color aMiddleColor = aItZ->second;
- auto a05 = aGradientStops.find( 0.5 );
-
- if( a05 != aGradientStops.end() )
- a05->second = aMiddleColor;
- else
- aGradientStops.emplace( 0.5, aMiddleColor );
- }
- // Drop the rest of the stops
- while( aGradientStops.rbegin()->first > 0.5 )
- aGradientStops.erase( aGradientStops.rbegin()->first );
- }
- }
-
- SAL_INFO("oox.drawingml.gradient", "symmetric: " << (bSymmetric ? "YES" : "NO") <<
- ", number of stops: " << aGradientStops.size());
- size_t nIndex = 0;
- for (auto const& gradientStop : aGradientStops)
- SAL_INFO("oox.drawingml.gradient", " " << nIndex++ << ": " <<
- gradientStop.first << ": " <<
- std::hex << sal_Int32(gradientStop.second.getColor( rGraphicHelper, nPhClr )) << std::dec <<
- "@" << (100 - gradientStop.second.getTransparency()) << "%");
-
- // Now estimate the simple LO style gradient (only two stops, at n% and 100%, where n ==
- // the "border") that best emulates the gradient between begin() and prior(end()).
-
- // First look for the largest segment in the gradient.
- GradientFillProperties::GradientStopMap::iterator aIt(aGradientStops.begin());
- double nWidestWidth = -1;
- GradientFillProperties::GradientStopMap::iterator aWidestSegmentStart(aIt);
- ++aIt;
- while( aIt != aGradientStops.end() )
- {
- if (aIt->first - std::prev(aIt)->first > nWidestWidth)
- {
- nWidestWidth = aIt->first - std::prev(aIt)->first;
- aWidestSegmentStart = std::prev(aIt);
- }
- ++aIt;
- }
- assert( nWidestWidth >= 0 );
-
- double nBorder = 0;
- bool bSwap(false);
-
- // Do we have just two segments, and either one is of uniform colour, or three or more
- // segments, and the widest one is the first or last one, and is it of uniform colour? If
- // so, deduce the border from it, and drop that segment.
- if( aGradientStops.size() == 3 &&
- aGradientStops.begin()->second.getColor(rGraphicHelper, nPhClr) == std::next(aGradientStops.begin())->second.getColor(rGraphicHelper, nPhClr) &&
- aGradientStops.begin()->second.getTransparency() == std::next(aGradientStops.begin())->second.getTransparency())
- {
- // Two segments, first is uniformly coloured
- SAL_INFO("oox.drawingml.gradient", "two segments, first is uniformly coloured");
- nBorder = std::next(aGradientStops.begin())->first - aGradientStops.begin()->first;
- aGradientStops.erase(aGradientStops.begin());
- aWidestSegmentStart = aGradientStops.begin();
- }
- else if( !bSymmetric &&
- aGradientStops.size() == 3 &&
- std::next(aGradientStops.begin())->second.getColor(rGraphicHelper, nPhClr) == std::prev(aGradientStops.end())->second.getColor(rGraphicHelper, nPhClr) &&
- std::next(aGradientStops.begin())->second.getTransparency() == std::prev(aGradientStops.end())->second.getTransparency())
- {
- // Two segments, second is uniformly coloured
- SAL_INFO("oox.drawingml.gradient", "two segments, second is uniformly coloured");
- auto aNext = std::next(aGradientStops.begin());
- auto aPrev = std::prev(aGradientStops.end());
- assert(aPrev != aGradientStops.end());
- nBorder = aPrev->first - aNext->first;
- aGradientStops.erase(aNext);
- aWidestSegmentStart = aGradientStops.begin();
- bSwap = true;
- nShapeRotation = 180*60000 - nShapeRotation;
- }
- else if( !bSymmetric &&
- aGradientStops.size() >= 4 &&
- aWidestSegmentStart->second.getColor( rGraphicHelper, nPhClr ) == std::next(aWidestSegmentStart)->second.getColor(rGraphicHelper, nPhClr) &&
- aWidestSegmentStart->second.getTransparency() == std::next(aWidestSegmentStart)->second.getTransparency() &&
- ( aWidestSegmentStart == aGradientStops.begin() ||
- std::next(aWidestSegmentStart) == std::prev(aGradientStops.end())))
- {
- // Not symmetric, three or more segments, the widest is first or last and is uniformly coloured
- SAL_INFO("oox.drawingml.gradient", "first or last segment is widest and is uniformly coloured");
- nBorder = std::next(aWidestSegmentStart)->first - aWidestSegmentStart->first;
-
- // If it's the last segment that is uniformly coloured, rotate the gradient 180
- // degrees and swap start and end colours
- if (std::next(aWidestSegmentStart) == std::prev(aGradientStops.end()))
- {
- bSwap = true;
- nShapeRotation = 180*60000 - nShapeRotation;
- }
-
- aGradientStops.erase( aWidestSegmentStart++ );
-
- // Look for which is widest now
- aIt = std::next(aGradientStops.begin());
- nWidestWidth = -1;
- while( aIt != aGradientStops.end() )
- {
- if (aIt->first - std::prev(aIt)->first > nWidestWidth)
- {
- nWidestWidth = aIt->first - std::prev(aIt)->first;
- aWidestSegmentStart = std::prev(aIt);
- }
- ++aIt;
- }
- }
- SAL_INFO("oox.drawingml.gradient", "widest segment start: " << aWidestSegmentStart->first << ", border: " << nBorder);
- assert( (!bSymmetric && !bSwap) || !(bSymmetric && bSwap) );
-
- // Now we have a potential border and a largest segment. Use those.
-
- aGradient.Style = bSymmetric ? awt::GradientStyle_AXIAL : awt::GradientStyle_LINEAR;
- sal_Int32 nShadeAngle = maGradientProps.moShadeAngle.value_or( 0 );
- // Adjust for flips
- if ( bFlipH )
- nShadeAngle = 180*60000 - nShadeAngle;
- if ( bFlipV )
- nShadeAngle = -nShadeAngle;
- sal_Int32 nDmlAngle = nShadeAngle + nShapeRotation;
- // convert DrawingML angle (in 1/60000 degrees) to API angle (in 1/10 degrees)
- aGradient.Angle = static_cast< sal_Int16 >( (8100 - (nDmlAngle / (PER_DEGREE / 10))) % 3600 );
- Color aStartColor, aEndColor;
-
- // Make a note where the widest segment stops, because we will try to grow it next.
- auto aWidestSegmentEnd = std::next(aWidestSegmentStart);
-
- // Try to grow the widest segment backwards: if a previous segment has the same
- // color, just different transparency, include it.
- while (aWidestSegmentStart != aGradientStops.begin())
- {
- auto it = std::prev(aWidestSegmentStart);
- if (it->second.getColor(rGraphicHelper, nPhClr)
- != aWidestSegmentStart->second.getColor(rGraphicHelper, nPhClr))
- {
- break;
- }
-
- aWidestSegmentStart = it;
- }
-
- // Try to grow the widest segment forward: if a next segment has the same
- // color, just different transparency, include it.
- while (aWidestSegmentEnd != std::prev(aGradientStops.end()))
- {
- auto it = std::next(aWidestSegmentEnd);
- if (it->second.getColor(rGraphicHelper, nPhClr)
- != aWidestSegmentEnd->second.getColor(rGraphicHelper, nPhClr))
- {
- break;
- }
-
- aWidestSegmentEnd = it;
- }
-
- assert(aWidestSegmentEnd != aGradientStops.end());
-
- if( bSymmetric )
- {
- aStartColor = aWidestSegmentEnd->second;
- aEndColor = aWidestSegmentStart->second;
- nBorder *= 2;
- }
- else if( bSwap )
- {
- aStartColor = aWidestSegmentEnd->second;
- aEndColor = aWidestSegmentStart->second;
- }
- else
- {
- aStartColor = aWidestSegmentStart->second;
- aEndColor = aWidestSegmentEnd->second;
- }
-
- SAL_INFO("oox.drawingml.gradient", "start color: " << std::hex << sal_Int32(aStartColor.getColor( rGraphicHelper, nPhClr )) << std::dec <<
- "@" << (100-aStartColor.getTransparency()) << "%"
- ", end color: " << std::hex << sal_Int32(aEndColor.getColor( rGraphicHelper, nPhClr )) << std::dec <<
- "@" << (100-aEndColor.getTransparency()) << "%");
-
- aGradient.StartColor = sal_Int32(aStartColor.getColor( rGraphicHelper, nPhClr ));
- aGradient.EndColor = sal_Int32(aEndColor.getColor( rGraphicHelper, nPhClr ));
-
- nStartTrans = aStartColor.hasTransparency() ? aStartColor.getTransparency()*255/100 : 0;
- nEndTrans = aEndColor.hasTransparency() ? aEndColor.getTransparency()*255/100 : 0;
-
- aGradient.Border = rtl::math::round(100*nBorder);
- }
-
- // for temporary backward compatibility, complete data by creating ColorStops for awt::Gradient2
- basegfx::utils::fillColorStopSequenceFromColorStops(
- aGradient.ColorStops,
- basegfx::ColorStops {
- basegfx::ColorStop(0.0, ::Color(ColorTransparency, aGradient.StartColor).getBColor()),
- basegfx::ColorStop(1.0, ::Color(ColorTransparency, aGradient.EndColor).getBColor()) });
-
- // push gradient or named gradient to property map
- if( rPropMap.setProperty( ShapeProperty::FillGradient, aGradient ) )
- eFillStyle = FillStyle_GRADIENT;
-
- // push gradient transparency to property map
- if( nStartTrans != 0 || nEndTrans != 0 )
- {
- awt::Gradient aGrad(aGradient);
- uno::Any aVal;
- aGrad.EndColor = static_cast<sal_Int32>( nEndTrans | nEndTrans << 8 | nEndTrans << 16 );
- aGrad.StartColor = static_cast<sal_Int32>( nStartTrans | nStartTrans << 8 | nStartTrans << 16 );
- aVal <<= aGrad;
- rPropMap.setProperty( ShapeProperty::GradientTransparency, aGrad );
- }
-
- }
break;
case XML_blipFill:
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 94f956428d19..da8ef4924615 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -481,27 +481,6 @@ static sal_Int32 lcl_generateRandomValue()
return comphelper::rng::uniform_int_distribution(0, 100000000-1);
}
-static sal_Int32 lcl_getAlphaFromTransparenceGradient(const awt::Gradient2& rGradient, bool bStart)
-{
- // Our alpha is a gray color value.
- sal_uInt8 nRed(0);
-
- if (rGradient.ColorStops.getLength() > 0)
- {
- if (bStart)
- nRed = static_cast<sal_uInt8>(rGradient.ColorStops[0].StopColor.Red * 255.0);
- else
- nRed = static_cast<sal_uInt8>(rGradient.ColorStops[rGradient.ColorStops.getLength() - 1].StopColor.Red * 255.0);
- }
- else
- {
- nRed = ::Color(ColorTransparency, bStart ? rGradient.StartColor : rGradient.EndColor).GetRed();
- }
-
- // drawingML alpha is a percentage on a 0..100000 scale.
- return (255 - nRed) * oox::drawingml::MAX_PERCENT / 255;
-}
-
bool DataLabelsRange::empty() const
{
return maLabels.empty();
@@ -1945,7 +1924,20 @@ void ChartExport::exportSolidFill(const Reference< XPropertySet >& xPropSet)
if (!bNeedGradientFill && 0 != aTransparenceGradient.StartColor)
{
- nAlpha = lcl_getAlphaFromTransparenceGradient(aTransparenceGradient, true);
+ // Our alpha is a gray color value.
+ sal_uInt8 nRed(0);
+
+ if (aTransparenceGradient.ColorStops.getLength() > 0)
+ {
+ nRed = static_cast<sal_uInt8>(aTransparenceGradient.ColorStops[0].StopColor.Red * 255.0);
+ }
+ else
+ {
+ nRed = ::Color(ColorTransparency, aTransparenceGradient.StartColor).GetRed();
+ }
+
+ // drawingML alpha is a percentage on a 0..100000 scale.
+ nAlpha = (255 - nRed) * oox::drawingml::MAX_PERCENT / 255;
}
}
// write XML
@@ -1954,7 +1946,7 @@ void ChartExport::exportSolidFill(const Reference< XPropertySet >& xPropSet)
// no longer create copy/PseudoColorGradient, use new API of
// WriteGradientFill to express fix fill color
mpFS->startElementNS(XML_a, XML_gradFill, XML_rotWithShape, "0");
- WriteGradientFill(nullptr, nFillColor, &aTransparenceGradient, 0);
+ WriteGradientFill(nullptr, nFillColor, &aTransparenceGradient);
mpFS->endElementNS(XML_a, XML_gradFill);
}
else
@@ -2034,7 +2026,7 @@ void ChartExport::exportGradientFill( const Reference< XPropertySet >& xPropSet
uno::Reference< container::XNameAccess > xTransparenceGradient(xFact->createInstance("com.sun.star.drawing.TransparencyGradientTable"), uno::UNO_QUERY);
uno::Any rTransparenceValue = xTransparenceGradient->getByName(sFillTransparenceGradientName);
basegfx::utils::fillGradient2FromAny(aTransparenceGradient, rTransparenceValue);
- WriteGradientFill(&aGradient, 0, &aTransparenceGradient, 0);
+ WriteGradientFill(&aGradient, 0, &aTransparenceGradient);
}
else if (GetProperty(xPropSet, "FillTransparence") )
{
@@ -2042,11 +2034,12 @@ void ChartExport::exportGradientFill( const Reference< XPropertySet >& xPropSet
// WriteGradientFill to express fix transparency
sal_Int32 nTransparency = 0;
mAny >>= nTransparency;
- WriteGradientFill(&aGradient, 0, nullptr, nTransparency);
+ // nTransparency is [0..100]%
+ WriteGradientFill(&aGradient, 0, nullptr, nTransparency * 0.01);
}
else
{
- WriteGradientFill(&aGradient, 0, &aTransparenceGradient, 0);
+ WriteGradientFill(&aGradient, 0, &aTransparenceGradient);
}
mpFS->endElementNS(XML_a, XML_gradFill);
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 77c4c1b02186..ad07308ada62 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -152,28 +152,6 @@ using ::sax_fastparser::FastSerializerHelper;
namespace
{
-/// Extracts start or end alpha information from a transparency gradient.
-sal_Int32 GetAlphaFromTransparenceGradient(const awt::Gradient2& rGradient, bool bStart)
-{
- // Our alpha is a gray color value.
- sal_uInt8 nRed(0);
-
- if (rGradient.ColorStops.getLength() > 0)
- {
- if (bStart)
- nRed = static_cast<sal_uInt8>(rGradient.ColorStops[0].StopColor.Red * 255.0);
- else
- nRed = static_cast<sal_uInt8>(rGradient.ColorStops[rGradient.ColorStops.getLength() - 1].StopColor.Red * 255.0);
- }
- else
- {
- nRed = ::Color(ColorTransparency, bStart ? rGradient.StartColor : rGradient.EndColor).GetRed();
- }
-
- // drawingML alpha is a percentage on a 0..100000 scale.
- return (255 - nRed) * oox::drawingml::MAX_PERCENT / 255;
-}
-
const char* g_aPredefinedClrNames[] = {
"dk1",
"lt1",
@@ -509,7 +487,20 @@ void DrawingML::WriteSolidFill( const Reference< XPropertySet >& rXPropSet )
if (!bNeedGradientFill && 0 != aTransparenceGradient.StartColor)
{
- nAlpha = GetAlphaFromTransparenceGradient(aTransparenceGradient, true);
+ // Our alpha is a gray color value.
+ sal_uInt8 nRed(0);
+
+ if (aTransparenceGradient.ColorStops.getLength() > 0)
+ {
+ nRed = static_cast<sal_uInt8>(aTransparenceGradient.ColorStops[0].StopColor.Red * 255.0);
+ }
+ else
+ {
+ nRed = ::Color(ColorTransparency, aTransparenceGradient.StartColor).GetRed();
+ }
+
+ // drawingML alpha is a percentage on a 0..100000 scale.
+ nAlpha = (255 - nRed) * oox::drawingml::MAX_PERCENT / 255;
}
}
@@ -519,7 +510,7 @@ void DrawingML::WriteSolidFill( const Reference< XPropertySet >& rXPropSet )
// no longer create copy/PseudoColorGradient, use new API of
// WriteGradientFill to express fix fill color
mpFS->startElementNS(XML_a, XML_gradFill, XML_rotWithShape, "0");
- WriteGradientFill(nullptr, nFillColor, &aTransparenceGradient, 0);
+ WriteGradientFill(nullptr, nFillColor, &aTransparenceGradient);
mpFS->endElementNS( XML_a, XML_gradFill );
}
else if ( nFillColor != nOriginalColor )
@@ -600,19 +591,12 @@ bool DrawingML::WriteSchemeColor(OUString const& rPropertyName, const uno::Refer
return true;
}
-void DrawingML::WriteGradientStop2(double fOffset, const basegfx::BColor& rColor, const basegfx::BColor& rAlpha)
+void DrawingML::WriteGradientStop(double fOffset, const basegfx::BColor& rColor, const basegfx::BColor& rAlpha)
{
- mpFS->startElementNS(XML_a, XML_gs, XML_pos, OString::number(static_cast<sal_uInt32>(fOffset * 100000)));
+ mpFS->startElementNS(XML_a, XML_gs, XML_pos, OString::number(basegfx::fround(fOffset * 100000)));
WriteColor(
::Color(rColor),
- static_cast<sal_Int32>((1.0 - rAlpha.luminance()) * oox::drawingml::MAX_PERCENT));
- mpFS->endElementNS( XML_a, XML_gs );
-}
-
-void DrawingML::WriteGradientStop(sal_uInt16 nStop, ::Color nColor, sal_Int32 nAlpha)
-{
- mpFS->startElementNS(XML_a, XML_gs, XML_pos, OString::number(nStop * 1000));
- WriteColor(nColor, nAlpha);
+ basegfx::fround((1.0 - rAlpha.luminance()) * oox::drawingml::MAX_PERCENT));
mpFS->endElementNS( XML_a, XML_gs );
}
@@ -706,7 +690,7 @@ void DrawingML::WriteGradientFill( const Reference< XPropertySet >& rXPropSet )
awt::Gradient2 aTransparenceGradient;
awt::Gradient2* pTransparenceGradient(nullptr);
- sal_Int32 nTransparency(0);
+ double fTransparency(0.0);
OUString sFillTransparenceGradientName;
if (GetProperty(rXPropSet, "FillTransparenceGradientName")
@@ -722,10 +706,13 @@ void DrawingML::WriteGradientFill( const Reference< XPropertySet >& rXPropSet )
{
// no longer create PseudoTransparencyGradient, use new API of
// WriteGradientFill to express fix transparency
+ sal_Int32 nTransparency(0);
mAny >>= nTransparency;
+ // nTransparency is [0..100]%
+ fTransparency = nTransparency * 0.01;
}
- WriteGradientFill(&aGradient, 0, pTransparenceGradient, nTransparency);
+ WriteGradientFill(&aGradient, 0, pTransparenceGradient, fTransparency);
mpFS->endElementNS(XML_a, XML_gradFill);
}
@@ -790,14 +777,14 @@ void DrawingML::WriteGrabBagGradientFill( const Sequence< PropertyValue >& aGrad
}
}
-void DrawingML::WriteGradientFill2(
+void DrawingML::WriteGradientFill(
const awt::Gradient2* pColorGradient, sal_Int32 nFixColor,
- const awt::Gradient2* pTransparenceGradient, sal_Int32 nFixTransparence)
+ const awt::Gradient2* pTransparenceGradient, double fFixTransparence)
{
basegfx::ColorStops aColorStops;
basegfx::ColorStops aAlphaStops;
basegfx::BColor aSingleColor(::Color(ColorTransparency, nFixColor).getBColor());
- basegfx::BColor aSingleAlpha(::Color(ColorTransparency, nFixTransparence).getBColor().luminance());
+ basegfx::BColor aSingleAlpha(fFixTransparence);
awt::Gradient2 aGradient;
if (nullptr != pColorGradient)
@@ -865,10 +852,21 @@ void DrawingML::WriteGradientFill2(
aRevCurrAlpha++;
}
- // add non-mirrored gradients, translated and scaled to [0.5 .. 1.0]
basegfx::ColorStops::const_iterator aCurrColor(aColorStops.begin());
basegfx::ColorStops::const_iterator aCurrAlpha(aAlphaStops.begin());
+ if (basegfx::fTools::equalZero(aCurrColor->getStopOffset()))
+ {
+ // Caution: do not add 1st entry again, that would be double since it was
+ // already added as last element of the inverse run above. But only if
+ // the gradient has a start entry for 0.0 aka StartColor, else it is correct.
+ // Since aColorStops and aAlphaStops are already syched (see
+ // synchronizeColorStops above), testing one of them is sufficient here.
+ aCurrColor++;
+ aCurrAlpha++;
+ }
+
+ // add non-mirrored gradients, translated and scaled to [0.5 .. 1.0]
while (aCurrColor != aColorStops.end() && aCurrAlpha != aAlphaStops.end())
{
aNewColorStops.emplace_back((aCurrColor->getStopOffset() * 0.5) + 0.5, aCurrColor->getStopColor());
@@ -907,7 +905,7 @@ void DrawingML::WriteGradientFill2(
while (aCurrColor != aColorStops.end() && aCurrAlpha != aAlphaStops.end())
{
- WriteGradientStop2(
+ WriteGradientStop(
aCurrColor->getStopOffset(),
aCurrColor->getStopColor(),
aCurrAlpha->getStopColor());
@@ -935,131 +933,6 @@ void DrawingML::WriteGradientFill2(
}
}
-void DrawingML::WriteGradientFill(
- const awt::Gradient2* pColorGradient, sal_Int32 nFixColor,
- const awt::Gradient2* pTransparenceGradient, sal_Int32 nFixTransparence)
-{
- static bool bMCGR(nullptr != std::getenv("MCGR_TEST"));
-
- if (bMCGR)
- {
- WriteGradientFill2(pColorGradient, nFixColor, pTransparenceGradient, nFixTransparence);
- return;
- }
-
- // evtl need a temporary pseudo-color gradient
- awt::Gradient2 aColorGradient;
-
- if (nullptr == pColorGradient && nullptr == pTransparenceGradient)
- {
- // this is an error: *one* gradient has to be given
- return;
- }
-
- if (nullptr == pColorGradient)
- {
- // create complete temporary copy to keep orig export working
- aColorGradient = *pTransparenceGradient;
-
- // change parameters specific for PseudoColorGradient
- aColorGradient.StartIntensity = 100;
- aColorGradient.EndIntensity = 100;
- aColorGradient.StartColor = nFixColor;
- aColorGradient.EndColor = nFixColor;
-
- basegfx::utils::fillColorStopSequenceFromColorStops(
- aColorGradient.ColorStops,
- basegfx::ColorStops {
- basegfx::ColorStop(0.0, ::Color(ColorTransparency, nFixColor).getBColor()) });
-
- pColorGradient = &aColorGradient;
- }
-
- sal_Int32 nStartAlpha(MAX_PERCENT);
- sal_Int32 nEndAlpha(MAX_PERCENT);
-
- if (nullptr == pTransparenceGradient)
- {
- nStartAlpha = nEndAlpha = (MAX_PERCENT - (PER_PERCENT * nFixTransparence));
- }
- else
- {
- nStartAlpha = GetAlphaFromTransparenceGradient(*pTransparenceGradient, true);
- nEndAlpha = GetAlphaFromTransparenceGradient(*pTransparenceGradient, false);
- }
-
- switch( pColorGradient->Style )
- {
- default:
- case awt::GradientStyle_LINEAR:
- {
- mpFS->startElementNS(XML_a, XML_gsLst);
- WriteGradientStop(pColorGradient->Border, ColorWithIntensity(pColorGradient->StartColor, pColorGradient->StartIntensity),
- nStartAlpha);
- WriteGradientStop(100, ColorWithIntensity(pColorGradient->EndColor, pColorGradient->EndIntensity),
- nEndAlpha);
- mpFS->endElementNS( XML_a, XML_gsLst );
- mpFS->singleElementNS(
- XML_a, XML_lin, XML_ang,
- OString::number(((3600 - pColorGradient->Angle + 900) * 6000) % 21600000));
- break;
- }
-
- case awt::GradientStyle_AXIAL:
- {
- mpFS->startElementNS(XML_a, XML_gsLst);
- WriteGradientStop(0, ColorWithIntensity(pColorGradient->EndColor, pColorGradient->EndIntensity),
- nEndAlpha);
- if (pColorGradient->Border > 0 && pColorGradient->Border < 100)
- {
- WriteGradientStop(pColorGradient->Border/2,
- ColorWithIntensity(pColorGradient->EndColor, pColorGradient->EndIntensity),
- nEndAlpha);
- }
- WriteGradientStop(50, ColorWithIntensity(pColorGradient->StartColor, pColorGradient->StartIntensity),
- nStartAlpha);
- if (pColorGradient->Border > 0 && pColorGradient->Border < 100)
- {
- WriteGradientStop(100 - pColorGradient->Border/2,
- ColorWithIntensity(pColorGradient->EndColor, pColorGradient->EndIntensity),
- nEndAlpha);
- }
- WriteGradientStop(100, ColorWithIntensity(pColorGradient->EndColor, pColorGradient->EndIntensity),
- nEndAlpha);
- mpFS->endElementNS(XML_a, XML_gsLst);
- mpFS->singleElementNS(
- XML_a, XML_lin, XML_ang,
- OString::number(((3600 - pColorGradient->Angle + 900) * 6000) % 21600000));
- break;
- }
-
- case awt::GradientStyle_RADIAL:
- case awt::GradientStyle_ELLIPTICAL:
- case awt::GradientStyle_RECT:
- case awt::GradientStyle_SQUARE:
- {
- mpFS->startElementNS(XML_a, XML_gsLst);
- WriteGradientStop(0, ColorWithIntensity(pColorGradient->EndColor, pColorGradient->EndIntensity),
- nEndAlpha);
- if (pColorGradient->Border > 0 && pColorGradient->Border < 100)
- {
- // Map border to an additional gradient stop, which has the
- // same color as the final stop.
- WriteGradientStop(100 - pColorGradient->Border,
- ColorWithIntensity(pColorGradient->StartColor, pColorGradient->StartIntensity),
- nStartAlpha);
- }
- WriteGradientStop(100,
- ColorWithIntensity(pColorGradient->StartColor, pColorGradient->StartIntensity),
- nStartAlpha);
- mpFS->endElementNS(XML_a, XML_gsLst);
-
- WriteGradientPath(*pColorGradient, mpFS, pColorGradient->Style == awt::GradientStyle_RADIAL || pColorGradient->Style == awt::GradientStyle_ELLIPTICAL);
- break;
- }
- }
-}
-
void DrawingML::WriteLineArrow( const Reference< XPropertySet >& rXPropSet, bool bLineStart )
{
ESCHER_LineEnd eLineEnd;
diff --git a/oox/source/vml/vmlformatting.cxx b/oox/source/vml/vmlformatting.cxx
index 2e96c61bb366..029d5429d921 100644
--- a/oox/source/vml/vmlformatting.cxx
+++ b/oox/source/vml/vmlformatting.cxx
@@ -787,9 +787,10 @@ void FillModel::pushToPropMap( ShapePropertyMap& rPropMap, const GraphicHelper&
const Color& rOuterColor = bOuterToInner ? aColor1 : aColor2;
const Color& rInnerColor = bOuterToInner ? aColor2 : aColor1;
+ // add in order of offset
lcl_setGradientStop( aFillProps.maGradientProps.maGradientStops, 0.0, rOuterColor);
+ lcl_setGradientStop( aFillProps.maGradientProps.maGradientStops, 0.5, rInnerColor);
lcl_setGradientStop( aFillProps.maGradientProps.maGradientStops, 1.0, rOuterColor);
- lcl_setGradientStop( aFillProps.maGradientProps.maGradientStops, 0.5, rInnerColor );
}
else // focus of -100%, 0%, and 100% is linear gradient
{
diff --git a/sc/qa/unit/subsequent_filters_test3.cxx b/sc/qa/unit/subsequent_filters_test3.cxx
index 400a2fbcdd2c..779e07fe4589 100644
--- a/sc/qa/unit/subsequent_filters_test3.cxx
+++ b/sc/qa/unit/subsequent_filters_test3.cxx
@@ -1628,12 +1628,16 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testTdf129789)
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, rStyleItemH2.GetValue());
const XFillGradientItem& rGradientItem = pCaptionH2->GetMergedItem(XATTR_FILLGRADIENT);
+ const basegfx::ColorStops& rColorStops(rGradientItem.GetGradientValue().GetColorStops());
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), rColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops[0].getStopOffset(), 0.0));
CPPUNIT_ASSERT_EQUAL(
- Color(0xdde8cb),
- Color(rGradientItem.GetGradientValue().GetColorStops().front().getStopColor()));
- CPPUNIT_ASSERT_EQUAL(
- Color(0xffd7d7),
- Color(rGradientItem.GetGradientValue().GetColorStops().back().getStopColor()));
+ rColorStops[0].getStopColor(),
+ basegfx::BColor(0.8666666666666667, 0.90980392156862744, 0.79607843137254897));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(rColorStops[1].getStopColor(),
+ basegfx::BColor(1.0, 0.84313725490196079, 0.84313725490196079));
SdrCaptionObj* const pCaptionH9 = checkCaption(*pDoc, ScAddress(7, 8, 0), false);
@@ -1641,12 +1645,16 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testTdf129789)
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, rStyleItemH9.GetValue());
const XFillGradientItem& rGradientItem2 = pCaptionH2->GetMergedItem(XATTR_FILLGRADIENT);
+ const basegfx::ColorStops& rColorStops2(rGradientItem2.GetGradientValue().GetColorStops());
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), rColorStops2.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops2[0].getStopOffset(), 0.0));
CPPUNIT_ASSERT_EQUAL(
- Color(0xdde8cb),
- Color(rGradientItem2.GetGradientValue().GetColorStops().front().getStopColor()));
- CPPUNIT_ASSERT_EQUAL(
- Color(0xffd7d7),
- Color(rGradientItem2.GetGradientValue().GetColorStops().back().getStopColor()));
+ rColorStops2[0].getStopColor(),
+ basegfx::BColor(0.8666666666666667, 0.90980392156862744, 0.79607843137254897));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops2[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(rColorStops2[1].getStopColor(),
+ basegfx::BColor(1.0, 0.84313725490196079, 0.84313725490196079));
}
{
diff --git a/sd/qa/unit/data/xml/n819614_0.xml b/sd/qa/unit/data/xml/n819614_0.xml
index 8048bbf3de04..3635f2d26d3e 100644
--- a/sd/qa/unit/data/xml/n819614_0.xml
+++ b/sd/qa/unit/data/xml/n819614_0.xml
@@ -3133,7 +3133,7 @@
</XShape>
<XShape positionX="11049" positionY="2544" sizeX="2531" sizeY="1078" type="com.sun.star.drawing.CustomShape" text="Test1&#10;" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3195,7 +3195,7 @@
</XShape>
<XShape positionX="182" positionY="4529" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="A " fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3257,7 +3257,7 @@
</XShape>
<XShape positionX="792" positionY="5919" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="A1" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3381,7 +3381,7 @@
</XShape>
<XShape positionX="792" positionY="7189" sizeX="2728" sizeY="1268" type="com.sun.star.drawing.CustomShape" text="A3" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3443,7 +3443,7 @@
</XShape>
<XShape positionX="792" positionY="8671" sizeX="2653" sizeY="1156" type="com.sun.star.drawing.CustomShape" text="A4" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3505,7 +3505,7 @@
</XShape>
<XShape positionX="791" positionY="9939" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="A5" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3567,7 +3567,7 @@
</XShape>
<XShape positionX="741" positionY="11210" sizeX="2850" sizeY="1151" type="com.sun.star.drawing.CustomShape" text="A6" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3629,7 +3629,7 @@
</XShape>
<XShape positionX="792" positionY="12483" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="A7" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3691,7 +3691,7 @@
</XShape>
<XShape positionX="1430" positionY="13753" sizeX="2683" sizeY="1036" type="com.sun.star.drawing.CustomShape" text="A7i" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3753,7 +3753,7 @@
</XShape>
<XShape positionX="1369" positionY="14901" sizeX="2694" sizeY="1062" type="com.sun.star.drawing.CustomShape" text="A7ii" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3815,7 +3815,7 @@
</XShape>
<XShape positionX="730" positionY="16071" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="A8" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3877,7 +3877,7 @@
</XShape>
<XShape positionX="4319" positionY="4529" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="B" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -3939,7 +3939,7 @@
</XShape>
<XShape positionX="5005" positionY="5921" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B1" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4001,7 +4001,7 @@
</XShape>
<XShape positionX="4885" positionY="17689" sizeX="2922" sizeY="1148" type="com.sun.star.drawing.CustomShape" text="B2" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4063,7 +4063,7 @@
</XShape>
<XShape positionX="4946" positionY="7277" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B3" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4125,7 +4125,7 @@
</XShape>
<XShape positionX="4946" positionY="8585" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B4" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4187,7 +4187,7 @@
</XShape>
<XShape positionX="4946" positionY="9893" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B5" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4249,7 +4249,7 @@
</XShape>
<XShape positionX="4946" positionY="11200" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B6" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4311,7 +4311,7 @@
</XShape>
<XShape positionX="5382" positionY="12508" sizeX="2663" sizeY="1210" type="com.sun.star.drawing.CustomShape" text="B6i" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4373,7 +4373,7 @@
</XShape>
<XShape positionX="4946" positionY="13816" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B7" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4435,7 +4435,7 @@
</XShape>
<XShape positionX="4946" positionY="15124" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B8" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4497,7 +4497,7 @@
</XShape>
<XShape positionX="4946" positionY="16432" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="B9" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4559,7 +4559,7 @@
</XShape>
<XShape positionX="7973" positionY="4529" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="C" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4621,7 +4621,7 @@
</XShape>
<XShape positionX="8659" positionY="5921" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="C1" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4683,7 +4683,7 @@
</XShape>
<XShape positionX="8659" positionY="7201" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="C2" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4745,7 +4745,7 @@
</XShape>
<XShape positionX="8659" positionY="8480" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="C3" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4807,7 +4807,7 @@
</XShape>
<XShape positionX="8659" positionY="9759" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="C4" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4869,7 +4869,7 @@
</XShape>
<XShape positionX="8659" positionY="11039" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="C5" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4931,7 +4931,7 @@
</XShape>
<XShape positionX="8686" positionY="12309" sizeX="2663" sizeY="1100" type="com.sun.star.drawing.CustomShape" text="C6" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -4993,7 +4993,7 @@
</XShape>
<XShape positionX="11253" positionY="4526" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="D" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5055,7 +5055,7 @@
</XShape>
<XShape positionX="11817" positionY="5866" sizeX="2743" sizeY="1365" type="com.sun.star.drawing.CustomShape" text="D1" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5117,7 +5117,7 @@
</XShape>
<XShape positionX="12481" positionY="7416" sizeX="2477" sizeY="1087" type="com.sun.star.drawing.CustomShape" text="D1i" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5179,7 +5179,7 @@
</XShape>
<XShape positionX="12489" positionY="8677" sizeX="2466" sizeY="1007" type="com.sun.star.drawing.CustomShape" text="D1ii" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5303,7 +5303,7 @@
</XShape>
<XShape positionX="11990" positionY="16505" sizeX="2743" sizeY="1033" type="com.sun.star.drawing.CustomShape" text="D2" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5427,7 +5427,7 @@
</XShape>
<XShape positionX="11991" positionY="10999" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="D4" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5489,7 +5489,7 @@
</XShape>
<XShape positionX="11991" positionY="12479" sizeX="2973" sizeY="1337" type="com.sun.star.drawing.CustomShape" text="D5" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5551,7 +5551,7 @@
</XShape>
<XShape positionX="12627" positionY="13962" sizeX="2444" sizeY="1183" type="com.sun.star.drawing.CustomShape" text="D5i" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5613,7 +5613,7 @@
</XShape>
<XShape positionX="12627" positionY="15233" sizeX="2444" sizeY="1143" type="com.sun.star.drawing.CustomShape" text="D5ii" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5675,7 +5675,7 @@
</XShape>
<XShape positionX="14956" positionY="4526" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="E" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5737,7 +5737,7 @@
</XShape>
<XShape positionX="15642" positionY="5918" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="E1" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5799,7 +5799,7 @@
</XShape>
<XShape positionX="15642" positionY="7198" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="E2" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5861,7 +5861,7 @@
</XShape>
<XShape positionX="15642" positionY="8477" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="E3" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5923,7 +5923,7 @@
</XShape>
<XShape positionX="18239" positionY="4526" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="F" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -5985,7 +5985,7 @@
</XShape>
<XShape positionX="18875" positionY="5947" sizeX="2740" sizeY="1130" type="com.sun.star.drawing.CustomShape" text="F1" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -6047,7 +6047,7 @@
</XShape>
<XShape positionX="19301" positionY="7223" sizeX="2636" sizeY="968" type="com.sun.star.drawing.CustomShape" text="F1i" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -6109,7 +6109,7 @@
</XShape>
<XShape positionX="18972" positionY="11059" sizeX="2629" sizeY="1230" type="com.sun.star.drawing.CustomShape" text="F2" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -6233,7 +6233,7 @@
</XShape>
<XShape positionX="18972" positionY="8371" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="F4" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -6295,7 +6295,7 @@
</XShape>
<XShape positionX="18972" positionY="9715" sizeX="2743" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="F5" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -6357,7 +6357,7 @@
</XShape>
<XShape positionX="22111" positionY="4457" sizeX="2743" sizeY="1244" type="com.sun.star.drawing.CustomShape" text="G" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -6419,7 +6419,7 @@
</XShape>
<XShape positionX="22750" positionY="5947" sizeX="2557" sizeY="1131" type="com.sun.star.drawing.CustomShape" text="G1" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
@@ -6481,7 +6481,7 @@
</XShape>
<XShape positionX="22750" positionY="7224" sizeX="2421" sizeY="1100" type="com.sun.star.drawing.CustomShape" text="G2" fontHeight="18.000000" fontColor="ffffffff" textAutoGrowHeight="false" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="BLOCK" textVerticalAdjust="CENTER" textLeftDistance="12" textRightDistance="12" textUpperDistance="12" textLowerDistance="12" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="GRADIENT" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName="">
<FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/>
- <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="35" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
+ <FillGradient style="LINEAR" startColor="ffffff" endColor="ffffff" angle="1800" border="0" xOffset="0" yOffset="0" startIntensity="100" endIntensity="100" stepCount="0"/>
<FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/>
<FillBitmap width="32" height="32"/>
<LineDash style="RECT" dots="1" dotLen="20" dashes="1" dashLen="20" distance="20"/>
diff --git a/sd/qa/unit/export-tests-ooxml1.cxx b/sd/qa/unit/export-tests-ooxml1.cxx
index 0c0815a548ec..b9f1fb7a9412 100644
--- a/sd/qa/unit/export-tests-ooxml1.cxx
+++ b/sd/qa/unit/export-tests-ooxml1.cxx
@@ -1212,7 +1212,7 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf94238)
uno::Reference<beans::XPropertySet> xShape(getShape(0, xPage));
CPPUNIT_ASSERT(xShape.is());
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
CPPUNIT_ASSERT(xShape->getPropertyValue("FillGradient") >>= aGradient);
// Without the accompanying fix in place, this test would have failed with
@@ -1222,13 +1222,25 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf94238)
// - aGradient.Border was 0
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style);
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(100), aGradient.YOffset);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(39), aGradient.Border);
+ // MCGR: 39->0 no border needed anyore with ooxml import
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(0), aGradient.Border);
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
// Without the accompanying fix in place, this test would have failed with
// 'Expected: 0, Actual : 10592673', i.e. the start color of the gradient
// was incorrect.
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0x0), aGradient.StartColor);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0x8B8B8B), aGradient.EndColor);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.39000000000000001));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[2].getStopColor(),
+ basegfx::BColor(0.54509803921568623, 0.54509803921568623, 0.54509803921568623));
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testPictureTransparency)
@@ -1470,11 +1482,21 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf128345GradientAxial)
saveAndReload("Impress Office Open XML");
uno::Reference<beans::XPropertySet> xShapePropSet(getShapeFromPage(0, 0));
- awt::Gradient aTransparenceGradient;
+ awt::Gradient2 aTransparenceGradient;
xShapePropSet->getPropertyValue("FillTransparenceGradient") >>= aTransparenceGradient;
- CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aTransparenceGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(ColorTransparency, aTransparenceGradient.EndColor));
- CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aTransparenceGradient.Style);
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aTransparenceGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(1.0, 1.0, 1.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.5));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[2].getStopColor(), basegfx::BColor(1.0, 1.0, 1.0));
+ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aTransparenceGradient.Style);
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf134969TransparencyOnColorGradient)
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index d3ef83cb0c04..a656b37857ea 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -1007,11 +1007,20 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest2, testTdf105739)
CPPUNIT_ASSERT_EQUAL(int(drawing::FillStyle_GRADIENT), static_cast<int>(aFillStyle));
// Test gradient properties
- com::sun::star::awt::Gradient aFillGradient;
+ com::sun::star::awt::Gradient2 aFillGradient;
aXBackgroundPropSet->getPropertyValue("FillGradient") >>= aFillGradient;
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aFillGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(1.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(),
+ basegfx::BColor(0.0, 0.69019607843137254, 0.31372549019607843));
CPPUNIT_ASSERT_EQUAL(int(awt::GradientStyle_LINEAR), static_cast<int>(aFillGradient.Style));
- CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(ColorTransparency, aFillGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0x00b050), Color(ColorTransparency, aFillGradient.EndColor));
}
}
diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx
index 6fdf10a5bcce..7b3bc17da941 100644
--- a/sd/qa/unit/export-tests-ooxml3.cxx
+++ b/sd/qa/unit/export-tests-ooxml3.cxx
@@ -1243,10 +1243,18 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf127372)
createSdImpressDoc("odp/tdf127372.odp");
saveAndReload("Impress Office Open XML");
uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0));
- awt::Gradient aTransparenceGradient;
+ awt::Gradient2 aTransparenceGradient;
xShape->getPropertyValue("FillTransparenceGradient") >>= aTransparenceGradient;
- CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aTransparenceGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aTransparenceGradient.EndColor));
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aTransparenceGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf127379)
@@ -1268,10 +1276,20 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf127379)
aXBackgroundPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, aFillStyle);
- awt::Gradient aGradient;
+ awt::Gradient2 aGradient;
CPPUNIT_ASSERT(aXBackgroundPropSet->getPropertyValue("FillGradient") >>= aGradient);
- CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(ColorTransparency, aGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0x2A6099), Color(ColorTransparency, aGradient.EndColor));
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(1.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(
+ aColorStops[1].getStopColor(),
+ basegfx::BColor(0.16470588235294117, 0.37647058823529411, 0.59999999999999998));
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf98603)
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 8bd818d442ea..6e996d14fb91 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -125,7 +125,12 @@ CPPUNIT_TEST_FIXTURE(SdImportTest, testDocumentLayout)
{ u"fdo47434.pptx", u"xml/fdo47434_", u"" },
{ u"n758621.ppt", u"xml/n758621_", u"" },
{ u"fdo64586.ppt", u"xml/fdo64586_", u"" },
+
+ // needed to adapt this, the border parameter is no longer
+ // exported with MCGRs due to oox neither needing nor
+ // supporting it with now freely definable gradients
{ u"n819614.pptx", u"xml/n819614_", u"" },
+
{ u"n820786.pptx", u"xml/n820786_", u"" },
{ u"n762695.pptx", u"xml/n762695_", u"" },
{ u"n593612.pptx", u"xml/n593612_", u"" },
@@ -172,9 +177,15 @@ CPPUNIT_TEST_FIXTURE(SdImportTest, testDocumentLayout)
= OUStringToOString(createFileURL(aFilesToCompare[i].sDump), RTL_TEXTENCODING_UTF8)
+ OString::number(j) + ".xml";
- if (nUpdateMe == j)
+ if (nUpdateMe == i) // index was wrong here
{
- std::ofstream aStream(aFileName.getStr(),
+ // had to adapt this, std::ofstream annot write to an URL but needs a
+ // filesystem path. Seems as if no one had to adapt any of the cases
+ // for some years :-/
+ OUString sTempFilePath;
+ osl::FileBase::getSystemPathFromFileURL(OUString::fromUtf8(aFileName),
+ sTempFilePath);
+ std::ofstream aStream(sTempFilePath.toUtf8().getStr(),
std::ofstream::out | std::ofstream::binary);
aStream << aString;
aStream.close();
diff --git a/sd/qa/unit/misc-tests.cxx b/sd/qa/unit/misc-tests.cxx
index 3f2b299160d1..cfa4f6a037c0 100644
--- a/sd/qa/unit/misc-tests.cxx
+++ b/sd/qa/unit/misc-tests.cxx
@@ -280,12 +280,20 @@ void SdMiscTest::testFillGradient()
uno::Reference<beans::XPropertySet> xPropSet2(xIndexAccess->getByIndex(0),
uno::UNO_QUERY_THROW);
drawing::FillStyle eFillStyle;
- awt::Gradient aGradient2;
+ awt::Gradient2 aGradient2;
CPPUNIT_ASSERT(xPropSet2->getPropertyValue("FillStyle") >>= eFillStyle);
CPPUNIT_ASSERT_EQUAL(int(drawing::FillStyle_GRADIENT), static_cast<int>(eFillStyle));
CPPUNIT_ASSERT(xPropSet2->getPropertyValue("FillGradient") >>= aGradient2);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(Color(255, 0, 0)), aGradient2.StartColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(Color(0, 255, 0)), aGradient2.EndColor);
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient2);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(1.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.0, 1.0, 0.0));
}
void SdMiscTest::testTdf44774()
diff --git a/sd/qa/unit/uiimpress.cxx b/sd/qa/unit/uiimpress.cxx
index 9c295a531b8c..09845d3e6cc2 100644
--- a/sd/qa/unit/uiimpress.cxx
+++ b/sd/qa/unit/uiimpress.cxx
@@ -765,8 +765,13 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testPageFillGradient)
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, eXFS);
XGradient aGradient = rPageAttr.GetItem(XATTR_FILLGRADIENT)->GetGradientValue();
- CPPUNIT_ASSERT_EQUAL(Color(0xff0000), Color(aGradient.GetColorStops().front().getStopColor()));
- CPPUNIT_ASSERT_EQUAL(Color(0x0000ff), Color(aGradient.GetColorStops().back().getStopColor()));
+ const basegfx::ColorStops& rColorStops(aGradient.GetColorStops());
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), rColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(rColorStops[0].getStopColor(), basegfx::BColor(1.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(rColorStops[1].getStopColor(), basegfx::BColor(0.0, 0.0, 1.0));
}
CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf134053)
diff --git a/sw/CppunitTest_sw_odfexport.mk b/sw/CppunitTest_sw_odfexport.mk
index 62bc134ab0a4..a8c175021c3b 100644
--- a/sw/CppunitTest_sw_odfexport.mk
+++ b/sw/CppunitTest_sw_odfexport.mk
@@ -32,6 +32,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_odfexport, \
unotest \
utl \
vcl \
+ basegfx \
))
$(eval $(call gb_CppunitTest_use_externals,sw_odfexport,\
diff --git a/sw/ooxmlexport_setup.mk b/sw/ooxmlexport_setup.mk
index e124ee3b6a12..ef1cbb3bffe9 100644
--- a/sw/ooxmlexport_setup.mk
+++ b/sw/ooxmlexport_setup.mk
@@ -26,7 +26,8 @@ define sw_ooxmlexport_libraries
unotest \
utl \
vcl \
- svxcore
+ svxcore \
+ basegfx
endef
# template for ooxmlexport tests (there are several so that they can be run in parallel)
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index 9b7834afcd47..cdafc3abc4ba 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -12,7 +12,7 @@
#include <swmodeltestbase.hxx>
#include <com/sun/star/awt/FontSlant.hpp>
-#include <com/sun/star/awt/Gradient.hpp>
+#include <com/sun/star/awt/Gradient2.hpp>
#include <com/sun/star/container/XIndexReplace.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/drawing/PointSequenceSequence.hpp>
@@ -51,6 +51,7 @@
#include <comphelper/sequenceashashmap.hxx>
#include <vcl/filter/PDFiumLibrary.hxx>
#include <comphelper/scopeguard.hxx>
+#include <basegfx/utils/gradienttools.hxx>
#include <docufld.hxx> // for SwHiddenTextField::ParseIfFieldDefinition() method call
#include <unoprnms.hxx>
@@ -791,16 +792,31 @@ DECLARE_ODFEXPORT_TEST(testTextframeGradient, "textframe-gradient.odt")
uno::Reference<beans::XPropertySet> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xFrame, "FillStyle"));
- awt::Gradient aGradient = getProperty<awt::Gradient>(xFrame, "FillGradient");
- CPPUNIT_ASSERT_EQUAL(Color(0xC0504D), Color(ColorTransparency, aGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0xD99594), Color(ColorTransparency, aGradient.EndColor));
+ awt::Gradient2 aGradient = getProperty<awt::Gradient2>(xFrame, "FillGradient");
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.75294117647058822, 0.31372549019607843, 0.30196078431372547));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.85098039215686272, 0.58431372549019611, 0.58039215686274515));
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style);
xFrame.set(xIndexAccess->getByIndex(1), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xFrame, "FillStyle"));
- aGradient = getProperty<awt::Gradient>(xFrame, "FillGradient");
- CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0x666666), Color(ColorTransparency, aGradient.EndColor));
+ aGradient = getProperty<awt::Gradient2>(xFrame, "FillGradient");
+
+ // MCGR: Use the completely imported gradient to check for correctness
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.40000000000000002, 0.40000000000000002, 0.40000000000000002));
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style);
}
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx
index b3967abb88c5..8a816ae9f9dd 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport2.cxx
@@ -14,7 +14,7 @@
#include <com/sun/star/awt/XBitmap.hpp>
#include <com/sun/star/drawing/FillStyle.hpp>
#include <com/sun/star/drawing/LineStyle.hpp>
-#include <com/sun/star/awt/Gradient.hpp>
+#include <com/sun/star/awt/Gradient2.hpp>
#include <com/sun/star/style/TabStop.hpp>
#include <com/sun/star/view/XViewSettingsSupplier.hpp>
#include <com/sun/star/text/RelOrientation.hpp>
@@ -32,6 +32,7 @@
#include <com/sun/star/text/XTextFieldsSupplier.hpp>
#include <oox/drawingml/drawingmltypes.hxx>
+#include <basegfx/utils/gradienttools.hxx>
class Test : public SwModelTestBase
{
@@ -578,17 +579,36 @@ DECLARE_OOXMLEXPORT_TEST(testTextframeGradient, "textframe-gradient.docx")
uno::Reference<beans::XPropertySet> xFrame(getShape(1), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xFrame, "FillStyle"));
- awt::Gradient aGradient = getProperty<awt::Gradient>(xFrame, "FillGradient");
- CPPUNIT_ASSERT_EQUAL(Color(0xC0504D), Color(ColorTransparency, aGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0xD99594), Color(ColorTransparency, aGradient.EndColor));
- CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style);
+ awt::Gradient2 aGradient(getProperty<awt::Gradient2>(xFrame, "FillGradient"));
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.85098039215686272, 0.58431372549019611, 0.58039215686274515));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.5));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.75294117647058822, 0.31372549019607843, 0.30196078431372547));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[2].getStopColor(), basegfx::BColor(0.85098039215686272, 0.58431372549019611, 0.58039215686274515));
+ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style);
xFrame.set(getShape(2), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, getProperty<drawing::FillStyle>(xFrame, "FillStyle"));
- aGradient = getProperty<awt::Gradient>(xFrame, "FillGradient");
- CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0x666666), Color(ColorTransparency, aGradient.EndColor));
- CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style);
+ aGradient = getProperty<awt::Gradient2>(xFrame, "FillGradient");
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), basegfx::BColor(0.40000000000000002, 0.40000000000000002, 0.40000000000000002));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.5));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), basegfx::BColor(0.0, 0.0, 0.0));
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[2].getStopColor(), basegfx::BColor(0.40000000000000002, 0.40000000000000002, 0.40000000000000002));
+ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style);
// Left / right margin was incorrect: the attribute was missing and we
// didn't have the right default (had 0 instead of the below one).
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index 0a5ef84d9a5d..0a5bd68c3b26 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -9,7 +9,7 @@
#include <swmodeltestbase.hxx>
-#include <com/sun/star/awt/Gradient.hpp>
+#include <com/sun/star/awt/Gradient2.hpp>
#include <com/sun/star/awt/XBitmap.hpp>
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
@@ -30,6 +30,7 @@
#include <com/sun/star/text/XBookmarksSupplier.hpp>
#include <tools/UnitConversion.hxx>
+#include <basegfx/utils/gradienttools.hxx>
using namespace css;
@@ -612,18 +613,41 @@ DECLARE_RTFEXPORT_TEST(testTextframeGradient, "textframe-gradient.rtf")
uno::Reference<beans::XPropertySet> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT,
getProperty<drawing::FillStyle>(xFrame, "FillStyle"));
- awt::Gradient aGradient = getProperty<awt::Gradient>(xFrame, "FillGradient");
- CPPUNIT_ASSERT_EQUAL(Color(0xC0504D), Color(ColorTransparency, aGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0xD99594), Color(ColorTransparency, aGradient.EndColor));
- CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style);
+ awt::Gradient2 aGradient = getProperty<awt::Gradient2>(xFrame, "FillGradient");
+
+ // prepare compare colors
+ const basegfx::BColor aColA(0.85098039215686272, 0.58431372549019611, 0.58039215686274515);
+ const basegfx::BColor aColB(0.75294117647058822, 0.31372549019607843, 0.30196078431372547);
+ const basegfx::BColor aColC(0.40000000000000002, 0.40000000000000002, 0.40000000000000002);
+ const basegfx::BColor aColD(0.0, 0.0, 0.0);
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::ColorStops aColorStops;
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
+ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style);
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), aColA);
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.5));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), aColB);
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[2].getStopColor(), aColA);
xFrame.set(xIndexAccess->getByIndex(1), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT,
getProperty<drawing::FillStyle>(xFrame, "FillStyle"));
- aGradient = getProperty<awt::Gradient>(xFrame, "FillGradient");
- CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(ColorTransparency, aGradient.StartColor));
- CPPUNIT_ASSERT_EQUAL(Color(0x666666), Color(ColorTransparency, aGradient.EndColor));
- CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style);
+ aGradient = getProperty<awt::Gradient2>(xFrame, "FillGradient");
+
+ // MCGR: Use the completely imported transparency gradient to check for correctness
+ basegfx::utils::fillColorStopsFromGradient2(aColorStops, aGradient);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
+ CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style);
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[0].getStopColor(), aColC);
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.5));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[1].getStopColor(), aColD);
+ CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0));
+ CPPUNIT_ASSERT_EQUAL(aColorStops[2].getStopColor(), aColC);
}
DECLARE_RTFEXPORT_TEST(testRecordChanges, "record-changes.rtf")
diff --git a/sw/rtfexport_setup.mk b/sw/rtfexport_setup.mk
index e4421cab8ac3..c24cb812a9ef 100644
--- a/sw/rtfexport_setup.mk
+++ b/sw/rtfexport_setup.mk
@@ -36,6 +36,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_rtfexport$(1), \
utl \
vcl \
tl \
+ basegfx \
))
$(eval $(call gb_CppunitTest_use_externals,sw_rtfexport$(1),\
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 0d59c8dfae4e..e545c6c9a734 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -3707,29 +3707,39 @@ void RtfAttributeOutput::FormatFillGradient(const XFillGradientItem& rFillGradie
m_aFlyProperties.push_back(std::make_pair<OString, OString>(
"fillType", OString::number(7))); // Shade using the fillAngle
- const XGradient& rGradient = rFillGradient.GetGradientValue();
- const Color aStartColor(rGradient.GetColorStops().front().getStopColor());
+ const XGradient& rGradient(rFillGradient.GetGradientValue());
+ const basegfx::ColorStops& rColorStops(rGradient.GetColorStops());
+
+ // MCGR: It would be best to export the full MCGR definition here
+ // with all ColorStops in rColorStops, but rtf does not support this.
+ // Best thing to do and to stay compatible is to export front/back
+ // colors as start/end and - when more than two ColorStops are defined -
+ // guess that GradientStyle_AXIAL is used and thus create a "fillFocus"
+ // entry
+ // NOTE: I also found that loading file from testTextframeGradient
+ // "textframe-gradient.rtf" and save-as *inverts* the gradient, so I
+ // exchanged here fillColor/fillBackColor to get the correct order
+ const Color aStartColor(rColorStops.front().getStopColor());
m_aFlyProperties.push_back(std::make_pair<OString, OString>(
- "fillBackColor", OString::number(wwUtility::RGBToBGR(aStartColor))));
+ "fillColor", OString::number(wwUtility::RGBToBGR(aStartColor))));
- const Color aEndColor(rGradient.GetColorStops().back().getStopColor());
- m_aFlyProperties.push_back(std::make_pair<OString, OString>(
- "fillColor", OString::number(wwUtility::RGBToBGR(aEndColor))));
-
- switch (rGradient.GetGradientStyle())
+ if (rColorStops.size() < 3)
{
- case css::awt::GradientStyle_LINEAR:
- break;
- case css::awt::GradientStyle_AXIAL:
- m_aFlyProperties.push_back(
- std::make_pair<OString, OString>("fillFocus", OString::number(50)));
- break;
- case css::awt::GradientStyle_RADIAL:
- case css::awt::GradientStyle_ELLIPTICAL:
- case css::awt::GradientStyle_SQUARE:
- case css::awt::GradientStyle_RECT:
- default:
- break;
+ // two-color version, use back as 2nd color
+ const Color aEndColor(rColorStops.back().getStopColor());
+ m_aFlyProperties.push_back(std::make_pair<OString, OString>(
+ "fillBackColor", OString::number(wwUtility::RGBToBGR(aEndColor))));
+ }
+ else
+ {
+ // assume what was formally GradientStyle_AXIAL, see above and also refer to
+ // FillModel::pushToPropMap 'fFocus' value and usage.
+ // The 2nd color is the in-between color, use it
+ const Color aEndColor(rColorStops[1].getStopColor());
+ m_aFlyProperties.push_back(std::make_pair<OString, OString>(
+ "fillBackColor", OString::number(wwUtility::RGBToBGR(aEndColor))));
+ m_aFlyProperties.push_back(
+ std::make_pair<OString, OString>("fillFocus", OString::number(50)));
}
}