chart2/inc/unonames.hxx | 2 chart2/qa/extras/chart2export2.cxx | 19 ++ chart2/qa/extras/chart2export3.cxx | 21 ++- chart2/qa/extras/chart2import.cxx | 148 ---------------------- chart2/source/inc/CharacterProperties.hxx | 3 chart2/source/inc/FillProperties.hxx | 1 chart2/source/inc/LinePropertiesHelper.hxx | 1 chart2/source/model/main/DataPointProperties.cxx | 29 ++++ chart2/source/model/main/DataPointProperties.hxx | 4 chart2/source/tools/CharacterProperties.cxx | 13 + chart2/source/tools/FillProperties.cxx | 17 +- chart2/source/tools/LinePropertiesHelper.cxx | 12 + chart2/source/view/main/PropertyMapper.cxx | 10 + include/oox/export/drawingml.hxx | 19 ++ oox/source/drawingml/chart/seriesconverter.cxx | 67 ++++++--- oox/source/drawingml/chart/typegroupconverter.cxx | 24 ++- oox/source/drawingml/textcharacterproperties.cxx | 22 +-- oox/source/export/chartexport.cxx | 46 ++++-- oox/source/export/drawingml.cxx | 145 +++++++++++++-------- oox/source/token/properties.txt | 4 20 files changed, 329 insertions(+), 278 deletions(-)
New commits: commit f15e0583c2fff48bf79dc9f1a349e40e8802ad70 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Wed Dec 3 23:49:57 2025 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Thu Dec 4 08:21:07 2025 +0100 chart2: Add ComplexColor to many properties of chart elements This adds ComplexColor to many of the color properties that are available in charts. It also handles some import code in oox, so the complex colors are set correctly to the chart elements if an OOXML document is loaded. This doesn't yet handle export and if a theme is changed, as well if a color is changed manually in the chart. Change the tests so they now assert the scheme color like it is defined in the source document and not the calculated derived color. In addition change the WriteRunProperties to have a struct as an input instead a number of parameters, which in most cases don't need to be filled out and are using the default value. This was needed for the new parameter bUseTextSchemeColors, which is used for charts, so the text colors use tx1 and tx2 elements instead dk1 and dk2, which are usually used in Impress. Change-Id: Iaebbaea983c5232c51233c1a02bd8fe1da24d551 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194939 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <[email protected]> diff --git a/chart2/inc/unonames.hxx b/chart2/inc/unonames.hxx index abe190844962..92cc62f2d527 100644 --- a/chart2/inc/unonames.hxx +++ b/chart2/inc/unonames.hxx @@ -26,6 +26,7 @@ inline constexpr OUString CHART_UNONAME_LABEL_SEP = u"LabelSeparator"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_BORDER_STYLE = u"LabelBorderStyle"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_BORDER_WIDTH = u"LabelBorderWidth"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_BORDER_COLOR = u"LabelBorderColor"_ustr; +inline constexpr OUString CHART_UNONAME_LABEL_BORDER_COMPLEX_COLOR = u"LabelBorderComplexColor"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_BORDER_DASH = u"LabelBorderDash"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_BORDER_DASHNAME = u"LabelBorderDashName"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_BORDER_TRANS = u"LabelBorderTransparency"_ustr; @@ -33,6 +34,7 @@ inline constexpr OUString CHART_UNONAME_LABEL_FILL_STYLE = u"LabelFillStyle"_ust inline constexpr OUString CHART_UNONAME_LABEL_FILL_BACKGROUND = u"LabelFillBackground"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_FILL_HATCH_NAME = u"LabelFillHatchName"_ustr; inline constexpr OUString CHART_UNONAME_LABEL_FILL_COLOR = u"LabelFillColor"_ustr; +inline constexpr OUString CHART_UNONAME_LABEL_FILL_COMPLEX_COLOR = u"LabelFillComplexColor"_ustr; inline constexpr OUString CHART_UNONAME_CUSTOM_LABEL_FIELDS = u"CustomLabelFields"_ustr; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/qa/extras/chart2export2.cxx b/chart2/qa/extras/chart2export2.cxx index 5bcaaf5e09ae..1be3ab2a3822 100644 --- a/chart2/qa/extras/chart2export2.cxx +++ b/chart2/qa/extras/chart2export2.cxx @@ -245,7 +245,7 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testPieChartDataPointExplosionXLSX) CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testCustomDataLabel) { - loadFromFile(u"pptx/tdf115107.pptx"); + loadFromFile(u"pptx/CustomDataLabel_tdf115107.pptx"); Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xChartDoc.is()); @@ -357,12 +357,25 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest2, testCustomDataLabel) save(TestFilter::PPTX_2007); xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/charts/chart1.xml"_ustr); CPPUNIT_ASSERT(pXmlDoc); + // Check the data labels font color for the complete data series assertXPathInsensitive( pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:txPr/a:p/a:pPr/" - "a:defRPr/a:solidFill/a:srgbClr", - "val", u"404040"); + "a:defRPr/a:solidFill/a:schemeClr", + "val", u"tx1"); + + assertXPathInsensitive( + pXmlDoc, + "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:txPr/a:p/a:pPr/" + "a:defRPr/a:solidFill/a:schemeClr/a:lumMod", + "val", u"75000"); + + assertXPathInsensitive( + pXmlDoc, + "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:txPr/a:p/a:pPr/" + "a:defRPr/a:solidFill/a:schemeClr/a:lumOff", + "val", u"25000"); } /// Test for tdf#94235 diff --git a/chart2/qa/extras/chart2export3.cxx b/chart2/qa/extras/chart2export3.cxx index 8bf0d154d9a5..5424f4a8bd1e 100644 --- a/chart2/qa/extras/chart2export3.cxx +++ b/chart2/qa/extras/chart2export3.cxx @@ -522,9 +522,28 @@ CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testBarChartDataPointPropXLSX) assertXPathInsensitive(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", u"000000"); assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:idx", "val", u"2"); + + // TODO: Gradient should be using a scheme colors - accent 1 + /* + <a:gs pos="0"> + <a:schemeClr val="accent1"> + <a:lumMod val="5000" /> + <a:lumOff val="95000" /> + </a:schemeClr> + </a:gs> + + <a:gs pos="100000"> + <a:schemeClr val="accent1"> + <a:lumMod val="30000" /> + <a:lumOff val="70000" /> + </a:schemeClr> + </a:gs> + */ assertXPathInsensitive(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", u"f6f8fc"); assertXPathInsensitive(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", u"c7d5ed"); - assertXPathInsensitive(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", u"70ad47"); + + // Should be a scheme color - accent6 as in input document + assertXPathInsensitive(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:ln/a:solidFill/a:schemeClr", "val", u"accent6"); } CPPUNIT_TEST_FIXTURE(Chart2ExportTest3, testAxisCharacterPropertiesXLSX) diff --git a/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index 0eb9b9375b6f..9f0abcd4c146 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -1775,154 +1775,6 @@ CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf122226) CPPUNIT_ASSERT_EQUAL_MESSAGE( "Data labels should be separated into new lines", u" "_ustr, nLabelSeparator ); } -CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf115107) -{ - // import complex data point labels - loadFromFile(u"pptx/tdf115107.pptx"); - - Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); - - uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); - CPPUNIT_ASSERT(xDataSeries.is()); - float nFontSize; - sal_Int64 nFontColor; - sal_Int32 nCharUnderline; - uno::Reference<beans::XPropertySet> xPropertySet; - uno::Sequence<uno::Reference<chart2::XDataPointCustomLabelField>> aFields; - - // 1 - xPropertySet.set(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW); - xPropertySet->getPropertyValue(u"CustomLabelFields"_ustr) >>= aFields; - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), aFields.getLength()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[0]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"90.0 = "_ustr, aFields[0]->getString()); - aFields[0]->getPropertyValue(u"CharHeight"_ustr) >>= nFontSize; - aFields[0]->getPropertyValue(u"CharColor"_ustr) >>= nFontColor; - CPPUNIT_ASSERT_EQUAL(static_cast<float>(18), nFontSize); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xed7d31), nFontColor); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_VALUE, aFields[1]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"90"_ustr, aFields[1]->getString()); - - // 2 - xPropertySet.set(xDataSeries->getDataPointByIndex(1), uno::UNO_SET_THROW); - xPropertySet->getPropertyValue(u"CustomLabelFields"_ustr) >>= aFields; - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8), aFields.getLength()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[0]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"Text"_ustr, aFields[0]->getString()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u" : "_ustr, aFields[1]->getString()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_CATEGORYNAME, aFields[2]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"B"_ustr, aFields[2]->getString()); - aFields[2]->getPropertyValue(u"CharHeight"_ustr) >>= nFontSize; - aFields[2]->getPropertyValue(u"CharColor"_ustr) >>= nFontColor; - CPPUNIT_ASSERT_EQUAL(static_cast<float>(16), nFontSize); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xed7d31), nFontColor); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_NEWLINE, aFields[3]->getFieldType()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[4]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"Multi"_ustr, aFields[4]->getString()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[5]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"line"_ustr, aFields[5]->getString()); - aFields[5]->getPropertyValue(u"CharHeight"_ustr) >>= nFontSize; - aFields[5]->getPropertyValue(u"CharColor"_ustr) >>= nFontColor; - CPPUNIT_ASSERT_EQUAL(static_cast<float>(11.97), nFontSize); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xbf9000), nFontColor); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_NEWLINE, aFields[6]->getFieldType()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[7]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"Abc"_ustr, aFields[7]->getString()); - aFields[7]->getPropertyValue(u"CharHeight"_ustr) >>= nFontSize; - aFields[7]->getPropertyValue(u"CharColor"_ustr) >>= nFontColor; - aFields[7]->getPropertyValue(u"CharUnderline"_ustr) >>= nCharUnderline; - CPPUNIT_ASSERT_EQUAL(static_cast<float>(12), nFontSize); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xa9d18e), nFontColor); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nCharUnderline); - - // 3 - xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_SET_THROW); - xPropertySet->getPropertyValue(u"CustomLabelFields"_ustr) >>= aFields; - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aFields.getLength()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_SERIESNAME, aFields[0]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"DATA"_ustr, aFields[0]->getString()); - - // 4 - xPropertySet.set(xDataSeries->getDataPointByIndex(3), uno::UNO_SET_THROW); - xPropertySet->getPropertyValue(u"CustomLabelFields"_ustr) >>= aFields; - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), aFields.getLength()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_CELLREF, aFields[0]->getFieldType()); - //CPPUNIT_ASSERT_EQUAL(OUString("70"), aFields[0]->getString()); TODO: Not implemented yet - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u" <CELLREF"_ustr, aFields[1]->getString()); -} - -CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf115107_2) -{ - // import complex data point labels in cobo charts with multiple data series - loadFromFile(u"pptx/tdf115107-2.pptx"); - - Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY); - CPPUNIT_ASSERT(xChartDoc.is()); - - uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0)); - CPPUNIT_ASSERT(xDataSeries.is()); - float nFontSize; - sal_Int64 nFontColor; - uno::Reference<beans::XPropertySet> xPropertySet; - uno::Sequence<uno::Reference<chart2::XDataPointCustomLabelField>> aFields; - - // First series - xPropertySet.set(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW); - xPropertySet->getPropertyValue(u"CustomLabelFields"_ustr) >>= aFields; - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), aFields.getLength()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_VALUE, aFields[0]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"4.3"_ustr, aFields[0]->getString()); - aFields[0]->getPropertyValue(u"CharHeight"_ustr) >>= nFontSize; - aFields[0]->getPropertyValue(u"CharColor"_ustr) >>= nFontColor; - CPPUNIT_ASSERT_EQUAL(static_cast<float>(18), nFontSize); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xc00000), nFontColor); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u" "_ustr, aFields[1]->getString()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_SERIESNAME, aFields[2]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"Bars"_ustr, aFields[2]->getString()); - - // Second series - xDataSeries = getDataSeriesFromDoc(xChartDoc, 0, 1); - CPPUNIT_ASSERT(xDataSeries.is()); - - xPropertySet.set(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW); - xPropertySet->getPropertyValue(u"CustomLabelFields"_ustr) >>= aFields; - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), aFields.getLength()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_VALUE, aFields[0]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"2"_ustr, aFields[0]->getString()); - aFields[0]->getPropertyValue(u"CharHeight"_ustr) >>= nFontSize; - aFields[0]->getPropertyValue(u"CharColor"_ustr) >>= nFontColor; - CPPUNIT_ASSERT_EQUAL(static_cast<float>(18), nFontSize); - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xffd966), nFontColor); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u" "_ustr, aFields[1]->getString()); - - CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_SERIESNAME, aFields[2]->getFieldType()); - CPPUNIT_ASSERT_EQUAL(u"Line"_ustr, aFields[2]->getString()); - -} - CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTdf116163) { loadFromFile(u"pptx/tdf116163.pptx"); diff --git a/chart2/qa/extras/data/pptx/tdf115107.pptx b/chart2/qa/extras/data/pptx/CustomDataLabel_tdf115107.pptx similarity index 100% rename from chart2/qa/extras/data/pptx/tdf115107.pptx rename to chart2/qa/extras/data/pptx/CustomDataLabel_tdf115107.pptx diff --git a/chart2/source/inc/CharacterProperties.hxx b/chart2/source/inc/CharacterProperties.hxx index be3f1f989165..391d65e0bf36 100644 --- a/chart2/source/inc/CharacterProperties.hxx +++ b/chart2/source/inc/CharacterProperties.hxx @@ -46,15 +46,18 @@ namespace CharacterProperties PROP_CHAR_FONT_CHAR_SET, PROP_CHAR_FONT_PITCH, PROP_CHAR_COLOR, + PROP_CHAR_COMPLEX_COLOR, // PROP_CHAR_BACKGROUND_COLOR, // PROP_CHAR_BACKGROUND_TRANSPARENCY, alpha channel in COLOR PROP_CHAR_ESCAPEMENT, PROP_CHAR_CHAR_HEIGHT, PROP_CHAR_UNDERLINE, PROP_CHAR_UNDERLINE_COLOR, + PROP_CHAR_UNDERLINE_COMPLEX_COLOR, PROP_CHAR_UNDERLINE_HAS_COLOR, PROP_CHAR_OVERLINE, PROP_CHAR_OVERLINE_COLOR, + PROP_CHAR_OVERLINE_COMPLEX_COLOR, PROP_CHAR_OVERLINE_HAS_COLOR, PROP_CHAR_WEIGHT, PROP_CHAR_POSTURE, diff --git a/chart2/source/inc/FillProperties.hxx b/chart2/source/inc/FillProperties.hxx index c76ee51d1a2f..55de2b5b5482 100644 --- a/chart2/source/inc/FillProperties.hxx +++ b/chart2/source/inc/FillProperties.hxx @@ -37,6 +37,7 @@ namespace FillProperties // com.sun.star.drawing.FillProperties PROP_FILL_STYLE = FAST_PROPERTY_ID_START_FILL_PROP , PROP_FILL_COLOR + , PROP_FILL_COMPLEX_COLOR , PROP_FILL_TRANSPARENCE , PROP_FILL_TRANSPARENCE_GRADIENT_NAME // , PROP_FILL_TRANSPARENCE_GRADIENT //optional diff --git a/chart2/source/inc/LinePropertiesHelper.hxx b/chart2/source/inc/LinePropertiesHelper.hxx index d664273916b3..7cee5c7b4917 100644 --- a/chart2/source/inc/LinePropertiesHelper.hxx +++ b/chart2/source/inc/LinePropertiesHelper.hxx @@ -41,6 +41,7 @@ namespace LinePropertiesHelper PROP_LINE_DASH, PROP_LINE_DASH_NAME, //not in service description PROP_LINE_COLOR, + PROP_LINE_COMPLEX_COLOR, PROP_LINE_TRANSPARENCE, PROP_LINE_WIDTH, PROP_LINE_JOINT, diff --git a/chart2/source/model/main/DataPointProperties.cxx b/chart2/source/model/main/DataPointProperties.cxx index 53f88600214f..0d9ffa3b7213 100644 --- a/chart2/source/model/main/DataPointProperties.cxx +++ b/chart2/source/model/main/DataPointProperties.cxx @@ -35,6 +35,7 @@ #include <com/sun/star/chart2/DataPointGeometry3D.hpp> #include <com/sun/star/chart2/DataPointLabel.hpp> #include <com/sun/star/chart2/Symbol.hpp> +#include <com/sun/star/util/XComplexColor.hpp> #include <tools/color.hxx> @@ -59,6 +60,11 @@ void DataPointProperties::AddPropertiesToVector( | beans::PropertyAttribute::MAYBEVOID // "maybe auto" | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back("ComplexColor", + PROP_DATAPOINT_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "FillColor", PROP_DATAPOINT_COLOR, cppu::UnoType<sal_Int32>::get(), @@ -66,6 +72,11 @@ void DataPointProperties::AddPropertiesToVector( | beans::PropertyAttribute::MAYBEVOID // "maybe auto" | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back("FillComplexColor", + PROP_DATAPOINT_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "Transparency", PROP_DATAPOINT_TRANSPARENCY, cppu::UnoType<sal_Int16>::get(), @@ -161,6 +172,11 @@ void DataPointProperties::AddPropertiesToVector( | beans::PropertyAttribute::MAYBEVOID // "maybe auto" | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back("BorderComplexColor", + PROP_DATAPOINT_BORDER_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT); + rOutProperties.emplace_back( "BorderStyle", PROP_DATAPOINT_BORDER_STYLE, cppu::UnoType<drawing::LineStyle>::get(), @@ -194,6 +210,11 @@ void DataPointProperties::AddPropertiesToVector( | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back("LineComplexColor", + PROP_DATAPOINT_BORDER_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "LineStyle", LinePropertiesHelper::PROP_LINE_STYLE, cppu::UnoType<drawing::LineStyle>::get(), @@ -401,6 +422,10 @@ void DataPointProperties::AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID // "maybe auto" | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( CHART_UNONAME_LABEL_BORDER_COMPLEX_COLOR, + PROP_DATAPOINT_LABEL_BORDER_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT); rOutProperties.emplace_back( CHART_UNONAME_LABEL_FILL_STYLE, PROP_DATAPOINT_LABEL_FILL_STYLE, cppu::UnoType<drawing::FillStyle>::get(), @@ -412,6 +437,10 @@ void DataPointProperties::AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back(CHART_UNONAME_LABEL_FILL_COMPLEX_COLOR, + PROP_DATAPOINT_LABEL_FILL_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT); rOutProperties.emplace_back( CHART_UNONAME_LABEL_FILL_BACKGROUND, PROP_DATAPOINT_LABEL_FILL_BACKGROUND, cppu::UnoType<sal_Bool>::get(), diff --git a/chart2/source/model/main/DataPointProperties.hxx b/chart2/source/model/main/DataPointProperties.hxx index fe1969bc5f15..b3bf4cbcc147 100644 --- a/chart2/source/model/main/DataPointProperties.hxx +++ b/chart2/source/model/main/DataPointProperties.hxx @@ -36,11 +36,13 @@ namespace DataPointProperties { PROP_DATAPOINT_LABEL_FILL_STYLE, PROP_DATAPOINT_LABEL_FILL_COLOR, + PROP_DATAPOINT_LABEL_FILL_COMPLEX_COLOR, PROP_DATAPOINT_LABEL_FILL_BACKGROUND, PROP_DATAPOINT_LABEL_FILL_HATCH_NAME, // common PROP_DATAPOINT_COLOR = FAST_PROPERTY_ID_START_DATA_POINT, + PROP_DATAPOINT_COMPLEX_COLOR, PROP_DATAPOINT_TRANSPARENCY, // fill @@ -54,6 +56,7 @@ namespace DataPointProperties // border (of filled objects) PROP_DATAPOINT_BORDER_COLOR, + PROP_DATAPOINT_BORDER_COMPLEX_COLOR, PROP_DATAPOINT_BORDER_STYLE, PROP_DATAPOINT_BORDER_WIDTH, PROP_DATAPOINT_BORDER_DASH_NAME, @@ -83,6 +86,7 @@ namespace DataPointProperties PROP_DATAPOINT_TEXT_WORD_WRAP, PROP_DATAPOINT_LABEL_BORDER_STYLE, PROP_DATAPOINT_LABEL_BORDER_COLOR, + PROP_DATAPOINT_LABEL_BORDER_COMPLEX_COLOR, PROP_DATAPOINT_LABEL_BORDER_WIDTH, PROP_DATAPOINT_LABEL_BORDER_DASH, PROP_DATAPOINT_LABEL_BORDER_DASH_NAME, diff --git a/chart2/source/tools/CharacterProperties.cxx b/chart2/source/tools/CharacterProperties.cxx index 4bb0cbda2591..44c08c170f45 100644 --- a/chart2/source/tools/CharacterProperties.cxx +++ b/chart2/source/tools/CharacterProperties.cxx @@ -23,6 +23,7 @@ #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/awt/FontSlant.hpp> #include <com/sun/star/lang/Locale.hpp> +#include <com/sun/star/util/XComplexColor.hpp> #include <com/sun/star/awt/FontUnderline.hpp> #include <com/sun/star/awt/FontWeight.hpp> @@ -85,6 +86,10 @@ void CharacterProperties::AddPropertiesToVector( cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back("CharComplexColor", + PROP_CHAR_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT | beans::PropertyAttribute::MAYBEVOID ); // CharEscapement rOutProperties.emplace_back( "CharEscapement", PROP_CHAR_ESCAPEMENT, @@ -110,6 +115,10 @@ void CharacterProperties::AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT | beans::PropertyAttribute::MAYBEVOID ); + rOutProperties.emplace_back("CharUnderlineComplexColor", + PROP_CHAR_UNDERLINE_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT | beans::PropertyAttribute::MAYBEVOID ); // CharUnderlineHasColor rOutProperties.emplace_back( "CharUnderlineHasColor", PROP_CHAR_UNDERLINE_HAS_COLOR, @@ -129,6 +138,10 @@ void CharacterProperties::AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT | beans::PropertyAttribute::MAYBEVOID ); + rOutProperties.emplace_back("CharOverlineComplexColor", + PROP_CHAR_OVERLINE_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT | beans::PropertyAttribute::MAYBEVOID ); // CharOverlineHasColor rOutProperties.emplace_back( "CharOverlineHasColor", PROP_CHAR_OVERLINE_HAS_COLOR, diff --git a/chart2/source/tools/FillProperties.cxx b/chart2/source/tools/FillProperties.cxx index ba3b63c83db1..eee993b2d9df 100644 --- a/chart2/source/tools/FillProperties.cxx +++ b/chart2/source/tools/FillProperties.cxx @@ -22,20 +22,18 @@ #include <com/sun/star/drawing/BitmapMode.hpp> #include <com/sun/star/drawing/FillStyle.hpp> #include <com/sun/star/drawing/RectanglePoint.hpp> +#include <com/sun/star/util/XComplexColor.hpp> #include <tools/color.hxx> -using namespace ::com::sun::star; - -using ::com::sun::star::beans::Property; - +using namespace css; namespace chart { namespace { -void lcl_AddPropertiesToVector_without_BitmapProperties( std::vector< css::beans::Property > & rOutProperties ) +void lcl_AddPropertiesToVector_without_BitmapProperties( std::vector<beans::Property> & rOutProperties ) { rOutProperties.emplace_back( "FillStyle", FillProperties::PROP_FILL_STYLE, @@ -50,6 +48,11 @@ void lcl_AddPropertiesToVector_without_BitmapProperties( std::vector< css::beans | beans::PropertyAttribute::MAYBEVOID // "maybe auto" | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back("FillComplexColor", + FillProperties::PROP_FILL_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEVOID | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "FillTransparence", FillProperties::PROP_FILL_TRANSPARENCE, cppu::UnoType<sal_Int16>::get(), @@ -92,7 +95,7 @@ void lcl_AddPropertiesToVector_without_BitmapProperties( std::vector< css::beans | beans::PropertyAttribute::MAYBEDEFAULT ); } -void lcl_AddPropertiesToVector_only_BitmapProperties( std::vector< css::beans::Property > & rOutProperties ) +void lcl_AddPropertiesToVector_only_BitmapProperties(std::vector<beans::Property> & rOutProperties) { rOutProperties.emplace_back( "FillBitmapName", FillProperties::PROP_FILL_BITMAP_NAME, @@ -183,7 +186,7 @@ void lcl_AddDefaultsToMap_only_BitmapProperties( }//end anonymous namespace void FillProperties::AddPropertiesToVector( - std::vector< Property > & rOutProperties ) + std::vector<beans::Property> & rOutProperties ) { // Fill Properties see service drawing::FillProperties lcl_AddPropertiesToVector_without_BitmapProperties( rOutProperties ); diff --git a/chart2/source/tools/LinePropertiesHelper.cxx b/chart2/source/tools/LinePropertiesHelper.cxx index 8b9598c7461c..a86fd63b8023 100644 --- a/chart2/source/tools/LinePropertiesHelper.cxx +++ b/chart2/source/tools/LinePropertiesHelper.cxx @@ -24,18 +24,17 @@ #include <com/sun/star/drawing/LineDash.hpp> #include <com/sun/star/drawing/LineCap.hpp> #include <com/sun/star/drawing/LineJoint.hpp> +#include <com/sun/star/util/XComplexColor.hpp> #include <comphelper/diagnose_ex.hxx> #include <tools/color.hxx> -using namespace ::com::sun::star; - -using ::com::sun::star::beans::Property; +using namespace css; namespace chart { void LinePropertiesHelper::AddPropertiesToVector( - std::vector< Property > & rOutProperties ) + std::vector<beans::Property> & rOutProperties ) { // Line Properties see service drawing::LineProperties rOutProperties.emplace_back( "LineStyle", @@ -64,6 +63,11 @@ void LinePropertiesHelper::AddPropertiesToVector( beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back("LineComplexColor", + PROP_LINE_COMPLEX_COLOR, + cppu::UnoType<util::XComplexColor>::get(), + beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT | beans::PropertyAttribute::MAYBEVOID); + rOutProperties.emplace_back( "LineTransparence", PROP_LINE_TRANSPARENCE, cppu::UnoType<sal_Int16>::get(), diff --git a/chart2/source/view/main/PropertyMapper.cxx b/chart2/source/view/main/PropertyMapper.cxx index e042144747ba..4bbf72755608 100644 --- a/chart2/source/view/main/PropertyMapper.cxx +++ b/chart2/source/view/main/PropertyMapper.cxx @@ -266,6 +266,7 @@ const tPropertyNameMap& PropertyMapper::getPropertyNameMapForCharacterProperties //shape property -- chart model object property static tPropertyNameMap s_aShapePropertyMapForCharacterProperties{ {"CharColor", "CharColor"}, + {"CharComplexColor", "CharComplexColor"}, {"CharContoured", "CharContoured"}, {"CharEmphasis", "CharEmphasis"},//the service style::CharacterProperties describes a property called 'CharEmphasize' which is nowhere implemented {"CharEscapement", "CharEscapement"}, @@ -301,9 +302,11 @@ const tPropertyNameMap& PropertyMapper::getPropertyNameMapForCharacterProperties {"CharStrikeout", "CharStrikeout"}, {"CharUnderline", "CharUnderline"}, {"CharUnderlineColor", "CharUnderlineColor"}, + {"CharUnderlineComplexColor", "CharUnderlineComplexColor"}, {"CharUnderlineHasColor", "CharUnderlineHasColor"}, {"CharOverline", "CharOverline"}, {"CharOverlineColor", "CharOverlineColor"}, + {"CharOverlineComplexColor", "CharOverlineComplexColor"}, {"CharOverlineHasColor", "CharOverlineHasColor"}, {"CharWeight", "CharWeight"}, {"CharWeightAsian", "CharWeightAsian"}, @@ -338,6 +341,7 @@ const tPropertyNameMap& PropertyMapper::getPropertyNameMapForFillProperties() {"FillBackground", "FillBackground"}, {"FillBitmapName", "FillBitmapName"}, {"FillColor", "FillColor"}, + {"FillComplexColor", "FillComplexColor"}, {"FillGradientName", "FillGradientName"}, {"FillGradientStepCount", "FillGradientStepCount"}, {"FillHatchName", "FillHatchName"}, @@ -362,6 +366,7 @@ const tPropertyNameMap& PropertyMapper::getPropertyNameMapForLineProperties() //shape property -- chart model object property static tPropertyNameMap s_aShapePropertyMapForLineProperties{ {"LineColor", "LineColor"}, + {"LineComplexColor", "LineComplexColor"}, {"LineDashName", "LineDashName"}, {"LineJoint", "LineJoint"}, {"LineStyle", "LineStyle"}, @@ -411,6 +416,7 @@ const tPropertyNameMap& PropertyMapper::getPropertyNameMapForLineSeriesPropertie //shape property -- chart model object property static tPropertyNameMap s_aShapePropertyMapForLineSeriesProperties{ {"LineColor", "Color"}, + {"LineComplexColor", "ComplexColor"}, {"LineDashName", "LineDashName"}, {"LineStyle", "LineStyle"}, {"LineTransparence", "Transparency"}, @@ -426,9 +432,11 @@ namespace { {"LineStyle", CHART_UNONAME_LABEL_BORDER_STYLE}, {"LineWidth", CHART_UNONAME_LABEL_BORDER_WIDTH}, {"LineColor", CHART_UNONAME_LABEL_BORDER_COLOR}, + {"LineComplexColor", CHART_UNONAME_LABEL_BORDER_COMPLEX_COLOR}, {"LineTransparence", CHART_UNONAME_LABEL_BORDER_TRANS}, {"FillStyle", CHART_UNONAME_LABEL_FILL_STYLE}, {"FillColor", CHART_UNONAME_LABEL_FILL_COLOR}, + {"FillComplexColor", CHART_UNONAME_LABEL_FILL_COMPLEX_COLOR}, {"FillBackground", CHART_UNONAME_LABEL_FILL_BACKGROUND}, {"FillHatchName", CHART_UNONAME_LABEL_FILL_HATCH_NAME} }); @@ -450,6 +458,7 @@ const tPropertyNameMap& PropertyMapper::getPropertyNameMapForFilledSeriesPropert {"FillBackground", "FillBackground"}, {"FillBitmapName", "FillBitmapName"}, {"FillColor", "Color"}, + {"FillComplexColor", "ComplexColor"}, {"FillGradientName", "GradientName"}, {"FillGradientStepCount", "GradientStepCount"}, {"FillHatchName", "HatchName"}, @@ -468,6 +477,7 @@ const tPropertyNameMap& PropertyMapper::getPropertyNameMapForFilledSeriesPropert {"FillBitmapPositionOffsetY", "FillBitmapPositionOffsetY"}, //line properties {"LineColor", "BorderColor"}, + {"LineComplexColor", "BorderComplexColor"}, {"LineDashName", "BorderDashName"}, {"LineStyle", "BorderStyle"}, {"LineTransparence", "BorderTransparency"}, diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx index ae595dacdf12..5fa0a2caa435 100644 --- a/include/oox/export/drawingml.hxx +++ b/include/oox/export/drawingml.hxx @@ -279,6 +279,17 @@ public: void writeSvgExtension(OUString const& rSvgRelId); }; +struct WriteRunInput +{ + bool bIsField = false; + bool bCheckDirect = false; + bool bOverridingCharHeight = false; + sal_Int32 nCharHeight = -1; + sal_Int16 nScriptType = css::i18n::ScriptType::LATIN; + bool bUseTextSchemeColors = false; + css::uno::Reference<css::beans::XPropertySet> xShapePropSet; +}; + class DrawingML { @@ -379,7 +390,7 @@ public: void WriteConnectorConnections( sal_Int32 nStartGlueId, sal_Int32 nEndGlueId, sal_Int32 nStartID, sal_Int32 nEndID ); bool WriteCharColor(const css::uno::Reference<css::beans::XPropertySet>& xPropertySet); - bool WriteSchemeColor(OUString const& rPropertyName, const css::uno::Reference<css::beans::XPropertySet>& xPropertySet); + bool WriteSchemeColor(OUString const& rPropertyName, const css::uno::Reference<css::beans::XPropertySet>& xPropertySet, bool bUseTextSchemeColors = false); void WriteSolidFill( ::Color nColor, sal_Int32 nAlpha = MAX_PERCENT ); void WriteSolidFill( const OUString& sSchemeName, const css::uno::Sequence< css::beans::PropertyValue >& aTransformations, sal_Int32 nAlpha = MAX_PERCENT ); @@ -482,10 +493,8 @@ public: void WriteRun( const css::uno::Reference< css::text::XTextRange >& rRun, bool& rbOverridingCharHeight, sal_Int32& rnCharHeight, const css::uno::Reference< css::beans::XPropertySet >& rXShapePropSet); - void WriteRunProperties( const css::uno::Reference< css::beans::XPropertySet >& rRun, bool bIsField, sal_Int32 nElement, bool bCheckDirect, - bool& rbOverridingCharHeight, sal_Int32& rnCharHeight, - sal_Int16 nScriptType = css::i18n::ScriptType::LATIN, - const css::uno::Reference< css::beans::XPropertySet >& rXShapePropSet = {}); + + void WriteRunProperties(const css::uno::Reference< css::beans::XPropertySet >& rRun, sal_Int32 nElement, WriteRunInput& rRunInput); void WritePresetShape( const OString& pShape , std::vector< std::pair<sal_Int32,sal_Int32>> & rAvList ); OOX_DLLPUBLIC void WritePresetShape( const OString& pShape ); diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx index c0a15a85d922..4b8674ece646 100644 --- a/oox/source/drawingml/chart/seriesconverter.cxx +++ b/oox/source/drawingml/chart/seriesconverter.cxx @@ -55,6 +55,9 @@ #include <drawingml/textfield.hxx> #include <drawingml/textbody.hxx> #include <drawingml/hatchmap.hxx> +#include <oox/helper/graphichelper.hxx> +#include <docmodel/color/ComplexColor.hxx> +#include <docmodel/uno/UnoComplexColor.hxx> namespace oox::drawingml::chart { @@ -196,72 +199,86 @@ void lclConvertLabelFormatting( PropertySet& rPropSet, ObjectFormatter& rFormatt void importBorderProperties( PropertySet& rPropSet, Shape& rShape, const GraphicHelper& rGraphicHelper ) { - LineProperties& rLP = rShape.getLineProperties(); + LineProperties& rLineProperties = rShape.getLineProperties(); // no fill has the same effect as no border so skip it - if (rLP.maLineFill.moFillType.has_value() && rLP.maLineFill.moFillType.value() == XML_noFill) + if (rLineProperties.maLineFill.moFillType.has_value() && rLineProperties.maLineFill.moFillType.value() == XML_noFill) return; - if (rLP.moLineWidth.has_value()) + if (rLineProperties.moLineWidth.has_value()) { - sal_Int32 nWidth = convertEmuToHmm(rLP.moLineWidth.value()); + sal_Int32 nWidth = convertEmuToHmm(rLineProperties.moLineWidth.value()); rPropSet.setProperty(PROP_LabelBorderWidth, uno::Any(nWidth)); rPropSet.setProperty(PROP_LabelBorderStyle, uno::Any(drawing::LineStyle_SOLID)); } - const Color& aColor = rLP.maLineFill.maFillColor; - ::Color nColor = aColor.getColor(rGraphicHelper); + const Color& aOOXColor = rLineProperties.maLineFill.maFillColor; + ::Color nColor = aOOXColor.getColor(rGraphicHelper); rPropSet.setProperty(PROP_LabelBorderColor, uno::Any(nColor)); + + model::ComplexColor aComplexColor = aOOXColor.getComplexColor(); + auto xComplexColor = model::color::createXComplexColor(aComplexColor); + rPropSet.setProperty(PROP_LabelBorderComplexColor, uno::Any(xComplexColor)); } -void lcl_ImportLeaderLineProperties(PropertySet& rPropSet, Shape& rShape, - const GraphicHelper& rGraphicHelper) +void lcl_ImportLeaderLineProperties(PropertySet& rPropSet, Shape& rShape, const GraphicHelper& rGraphicHelper) { - LineProperties& rLP = rShape.getLineProperties(); + LineProperties& rLineProperties = rShape.getLineProperties(); // no fill has the same effect as no line so skip it - if (rLP.maLineFill.moFillType.has_value() && rLP.maLineFill.moFillType.value() == XML_noFill) + if (rLineProperties.maLineFill.moFillType.has_value() && rLineProperties.maLineFill.moFillType.value() == XML_noFill) return; - if (rLP.moLineWidth.has_value()) + if (rLineProperties.moLineWidth.has_value()) { - sal_Int32 nWidth = convertEmuToHmm(rLP.moLineWidth.value()); + sal_Int32 nWidth = convertEmuToHmm(rLineProperties.moLineWidth.value()); rPropSet.setProperty(PROP_LineWidth, uno::Any(nWidth)); } - if (rLP.maLineFill.moFillType.has_value() && rLP.maLineFill.moFillType.value() == XML_solidFill) + if (rLineProperties.maLineFill.moFillType.has_value() && rLineProperties.maLineFill.moFillType.value() == XML_solidFill) { - const Color& aColor = rLP.maLineFill.maFillColor; - ::Color nColor = aColor.getColor(rGraphicHelper); + const Color& aOOXColor = rLineProperties.maLineFill.maFillColor; + ::Color nColor = aOOXColor.getColor(rGraphicHelper); rPropSet.setProperty(PROP_LineColor, uno::Any(nColor)); + + model::ComplexColor aComplexColor = aOOXColor.getComplexColor(); + auto xComplexColor = model::color::createXComplexColor(aComplexColor); + rPropSet.setProperty(PROP_LineComplexColor, uno::Any(xComplexColor)); } } void importFillProperties( PropertySet& rPropSet, Shape& rShape, const GraphicHelper& rGraphicHelper, ModelObjectHelper& rModelObjHelper ) { - FillProperties& rFP = rShape.getFillProperties(); + FillProperties& rFillProperties = rShape.getFillProperties(); - if (rFP.moFillType.has_value() && rFP.moFillType.value() == XML_solidFill) + if (rFillProperties.moFillType.has_value() && rFillProperties.moFillType.value() == XML_solidFill) { rPropSet.setProperty(PROP_LabelFillStyle, drawing::FillStyle_SOLID); - const Color& aColor = rFP.maFillColor; - ::Color nColor = aColor.getColor(rGraphicHelper); + const Color& aOOXColor = rFillProperties.maFillColor; + ::Color nColor = aOOXColor.getColor(rGraphicHelper); rPropSet.setProperty(PROP_LabelFillColor, uno::Any(nColor)); + + model::ComplexColor aComplexColor = aOOXColor.getComplexColor(); + auto xComplexColor = model::color::createXComplexColor(aComplexColor); + rPropSet.setProperty(PROP_LabelFillComplexColor, uno::Any(xComplexColor)); } - else if(rFP.moFillType.has_value() && rFP.moFillType.value() == XML_pattFill) + else if(rFillProperties.moFillType.has_value() && rFillProperties.moFillType.value() == XML_pattFill) { rPropSet.setProperty(PROP_LabelFillStyle, drawing::FillStyle_HATCH); rPropSet.setProperty(PROP_LabelFillBackground, true); - Color aHatchColor( rFP.maPatternProps.maPattFgColor ); - drawing::Hatch aHatch = createHatch(rFP.maPatternProps.moPattPreset.value(), aHatchColor.getColor(rGraphicHelper, 0)); + Color aHatchColor( rFillProperties.maPatternProps.maPattFgColor ); + drawing::Hatch aHatch = createHatch(rFillProperties.maPatternProps.moPattPreset.value(), aHatchColor.getColor(rGraphicHelper, 0)); OUString sHatchName = rModelObjHelper.insertFillHatch(aHatch); rPropSet.setProperty(PROP_LabelFillHatchName, sHatchName); - const Color& aColor = rFP.maPatternProps.maPattBgColor; - ::Color nColor = aColor.getColor(rGraphicHelper); + const Color& aOOXColor = rFillProperties.maPatternProps.maPattBgColor; + ::Color nColor = aOOXColor.getColor(rGraphicHelper); rPropSet.setProperty(PROP_LabelFillColor, uno::Any(nColor)); - } + model::ComplexColor aComplexColor = aOOXColor.getComplexColor(); + auto xComplexColor = model::color::createXComplexColor(aComplexColor); + rPropSet.setProperty(PROP_LabelFillComplexColor, uno::Any(xComplexColor)); + } } DataPointCustomLabelFieldType lcl_ConvertFieldNameToFieldEnum( std::u16string_view rField ) diff --git a/oox/source/drawingml/chart/typegroupconverter.cxx b/oox/source/drawingml/chart/typegroupconverter.cxx index a71a1c525636..31ac67952b9f 100644 --- a/oox/source/drawingml/chart/typegroupconverter.cxx +++ b/oox/source/drawingml/chart/typegroupconverter.cxx @@ -47,8 +47,13 @@ #include <oox/token/properties.hxx> #include <oox/token/tokens.hxx> #include <tools/UnitConversion.hxx> +#include <docmodel/color/ComplexColor.hxx> +#include <docmodel/uno/UnoComplexColor.hxx> -namespace oox::drawingml::chart { +namespace oox::drawingml::chart +{ + +using namespace css; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::chart2; @@ -525,17 +530,26 @@ void TypeGroupConverter::convertMarker( PropertySet& rPropSet, sal_Int32 nOoxSym if(xShapeProps.is()) { - Color aFillColor = xShapeProps->getFillProperties().maFillColor; - aSymbol.FillColor = sal_Int32(aFillColor.getColor(getFilter().getGraphicHelper())); + Color aFillOOXColor = xShapeProps->getFillProperties().maFillColor; + aSymbol.FillColor = sal_Int32(aFillOOXColor.getColor(getFilter().getGraphicHelper())); // tdf#124817: if there is no fill color, use line color of the symbol if( aSymbol.FillColor < 0 ) { - Color aLineColor = xShapeProps->getLineProperties().maLineFill.maFillColor; - aSymbol.BorderColor = sal_Int32(aLineColor.getColor(getFilter().getGraphicHelper())); + Color aLineOOXColor = xShapeProps->getLineProperties().maLineFill.maFillColor; + aSymbol.BorderColor = sal_Int32(aLineOOXColor.getColor(getFilter().getGraphicHelper())); rPropSet.setProperty(PROP_Color, aSymbol.BorderColor); + + model::ComplexColor aComplexColor = aLineOOXColor.getComplexColor(); + auto xComplexColor = model::color::createXComplexColor(aComplexColor); + rPropSet.setProperty(PROP_ComplexColor, uno::Any(xComplexColor)); } else + { rPropSet.setProperty(PROP_Color, aSymbol.FillColor); + model::ComplexColor aComplexColor = aFillOOXColor.getComplexColor(); + auto xComplexColor = model::color::createXComplexColor(aComplexColor); + rPropSet.setProperty(PROP_ComplexColor, uno::Any(xComplexColor)); + } } // set the property diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx index 28c0f8536cb0..e36c6056f613 100644 --- a/oox/source/drawingml/textcharacterproperties.cxx +++ b/oox/source/drawingml/textcharacterproperties.cxx @@ -114,12 +114,12 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil if ( maFillProperties.moFillType.has_value() ) { - Color aColor = maFillProperties.getBestSolidColor(); + Color aOOXColor = maFillProperties.getBestSolidColor(); bool bContoured = false; // noFill doesn't exist for characters. Map noFill to 99% transparency if (maFillProperties.moFillType.value() == XML_noFill) - aColor.addTransformation(XML_alpha, 1000); + aOOXColor.addTransformation(XML_alpha, 1000); // tdf#137438 Emulate text outline color/transparency. // If the outline color dominates, then use it as the text color. @@ -132,15 +132,15 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil // tdf#127696 If the text color is white (and the outline color doesn't dominate), // then this is contoured text in LO. - if (nLineTransparency < aColor.getTransparency() - || (bContoured = aColor.getColor(rFilter.getGraphicHelper()) == COL_WHITE)) - aColor = std::move(aLineColor); + if (nLineTransparency < aOOXColor.getTransparency() + || (bContoured = aOOXColor.getColor(rFilter.getGraphicHelper()) == COL_WHITE)) + aOOXColor = std::move(aLineColor); } - rPropMap.setProperty(PROP_CharColor, aColor.getColor(rFilter.getGraphicHelper())); + rPropMap.setProperty(PROP_CharColor, aOOXColor.getColor(rFilter.getGraphicHelper())); // set theme color - model::ComplexColor aComplexColor = aColor.getComplexColor(); - sal_Int32 nToken = Color::getColorMapToken(aColor.getSchemeColorName()); + model::ComplexColor aComplexColor = aOOXColor.getComplexColor(); + sal_Int32 nToken = Color::getColorMapToken(aOOXColor.getSchemeColorName()); if (nToken != -1) { rFilter.getGraphicHelper().getSchemeColorToken(nToken); @@ -150,14 +150,14 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil rPropMap.setProperty(PROP_CharComplexColor, model::color::createXComplexColor(aComplexColor)); rPropMap.setProperty(PROP_CharContoured, bContoured); - if (aColor.hasTransparency()) + if (aOOXColor.hasTransparency()) { - const auto nTransparency = aColor.getTransparency(); + const auto nTransparency = aOOXColor.getTransparency(); rPropMap.setProperty(PROP_CharTransparence, nTransparency); // WORKAROUND: Fully transparent white has the same value as COL_AUTO, avoid collision if (nTransparency == 100 - && aColor.getColor(rFilter.getGraphicHelper()).GetRGBColor() == COL_AUTO.GetRGBColor()) + && aOOXColor.getColor(rFilter.getGraphicHelper()).GetRGBColor() == COL_AUTO.GetRGBColor()) rPropMap.setProperty(PROP_CharColor, ::Color(ColorTransparency, 0xFFFFFFFE)); } } diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 4c598ae42018..ad4141186896 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -2264,18 +2264,25 @@ void ChartExport::exportTitle( const Reference< XShape >& xShape, bool bIsCharte pFS->startElement(FSNS(XML_a, XML_pPr)); - bool bDummy = false; - sal_Int32 nDummy; - WriteRunProperties(xPropSet, false, XML_defRPr, true, bDummy, nDummy ); + { + WriteRunInput aInput; + aInput.bCheckDirect = true; + aInput.bUseTextSchemeColors = true; + WriteRunProperties(xPropSet, XML_defRPr, aInput); + } pFS->endElement( FSNS( XML_a, XML_pPr ) ); for (const uno::Reference<chart2::XFormattedString>& rxFS : xFormattedTitle) { pFS->startElement(FSNS(XML_a, XML_r)); - bDummy = false; Reference< beans::XPropertySet > xRunPropSet(rxFS, uno::UNO_QUERY); - WriteRunProperties(xRunPropSet, false, XML_rPr, true, bDummy, nDummy); + { + WriteRunInput aInput; + aInput.bCheckDirect = true; + aInput.bUseTextSchemeColors = true; + WriteRunProperties(xRunPropSet, XML_rPr, aInput); + } pFS->startElement(FSNS(XML_a, XML_t)); // the linebreak should always be at the end of the XFormattedString text @@ -2296,8 +2303,12 @@ void ChartExport::exportTitle( const Reference< XShape >& xShape, bool bIsCharte pFS->startElement(FSNS(XML_a, XML_p)); pFS->startElement(FSNS(XML_a, XML_pPr)); - bDummy = false; - WriteRunProperties(xPropSet, false, XML_defRPr, true, bDummy, nDummy); + + WriteRunInput aInput; + aInput.bCheckDirect = true; + aInput.bUseTextSchemeColors = true; + WriteRunProperties(xPropSet, XML_defRPr, aInput); + pFS->endElement(FSNS(XML_a, XML_pPr)); } } @@ -4032,8 +4043,10 @@ void ChartExport::exportTextProps(const Reference<XPropertySet>& xPropSet, pFS->startElement(FSNS(XML_a, XML_p)); pFS->startElement(FSNS(XML_a, XML_pPr)); - WriteRunProperties(xPropSet, false, XML_defRPr, true, o3tl::temporary(false), - o3tl::temporary(sal_Int32())); + WriteRunInput aInput; + aInput.bCheckDirect = true; + aInput.bUseTextSchemeColors = true; + WriteRunProperties(xPropSet, XML_defRPr, aInput); pFS->endElement(FSNS(XML_a, XML_pPr)); pFS->endElement(FSNS(XML_a, XML_p)); @@ -4846,9 +4859,10 @@ OUString getFieldTypeString( const chart2::DataPointCustomLabelFieldType aType ) void writeRunProperties( ChartExport* pChartExport, Reference<XPropertySet> const & xPropertySet ) { - bool bDummy = false; - sal_Int32 nDummy; - pChartExport->WriteRunProperties(xPropertySet, false, XML_rPr, true, bDummy, nDummy); + WriteRunInput aInput; + aInput.bCheckDirect = true; + aInput.bUseTextSchemeColors = true; + pChartExport->WriteRunProperties(xPropertySet, XML_rPr, aInput); } void writeCustomLabel( const FSHelperPtr& pFS, ChartExport* pChartExport, @@ -6025,13 +6039,13 @@ void ChartExport::outputStyleEntry(FSHelperPtr pFS, sal_Int32 nElTokenId, model: exportShapeProps(aEntry.mxShapePr->getShapeProperties().makePropertySet(), XML_cs); } - bool bDummy; - sal_Int32 nDummy; - if (aEntry.mrTextCharacterPr) { PropertyMap *pPM = aEntry.mrTextCharacterPr.get(); Reference< XPropertySet > rPS = pPM->makePropertySet(); - WriteRunProperties(rPS, false, XML_defRPr, false, bDummy, nDummy ); + + WriteRunInput aInput; + aInput.bUseTextSchemeColors = true; + WriteRunProperties(rPS, XML_defRPr, aInput); } if (aEntry.mxTextBodyPr) { diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 2915e108a654..3d398a9c8ef5 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -156,20 +156,19 @@ using ::sax_fastparser::FastSerializerHelper; namespace { -const char* const g_aPredefinedClrNames[] = { - "dk1", - "lt1", - "dk2", - "lt2", - "accent1", - "accent2", - "accent3", - "accent4", - "accent5", - "accent6", - "hlink", - "folHlink", -}; +constexpr auto g_aSchemeColorNames = std::to_array<const char*>({ + "dk1", "lt1", "dk2", "lt2", + "accent1", "accent2", "accent3", + "accent4", "accent5", "accent6", + "hlink", "folHlink", +}); + +constexpr auto g_aSchemeColorNamesText = std::to_array<const char*>({ + "tx1", "bg1", "tx2", "bg2", + "accent1", "accent2", "accent3", + "accent4", "accent5", "accent6", + "hlink", "folHlink", +}); /** converts 1/100mm to the ST_TextSpacingPoint (1/100pt) */ sal_Int64 toTextSpacingPoint(sal_Int64 mm100) @@ -558,7 +557,7 @@ void DrawingML::WriteSolidFill( const Reference< XPropertySet >& rXPropSet ) } } -bool DrawingML::WriteSchemeColor(OUString const& rPropertyName, const uno::Reference<beans::XPropertySet>& xPropertySet) +bool DrawingML::WriteSchemeColor(OUString const& rPropertyName, const uno::Reference<beans::XPropertySet>& xPropertySet, bool bUseTextSchemeColors) { if (!xPropertySet->getPropertySetInfo()->hasPropertyByName(rPropertyName)) return false; @@ -571,28 +570,40 @@ bool DrawingML::WriteSchemeColor(OUString const& rPropertyName, const uno::Refer auto aComplexColor = model::color::getFromXComplexColor(xComplexColor); if (aComplexColor.getThemeColorType() == model::ThemeColorType::Unknown) return false; - const char* pColorName = g_aPredefinedClrNames[sal_Int16(aComplexColor.getThemeColorType())]; + + auto nThemeColorIndex = sal_Int16(aComplexColor.getThemeColorType()); + OString aColorName; + if (bUseTextSchemeColors) + aColorName = g_aSchemeColorNamesText[nThemeColorIndex]; + else + aColorName = g_aSchemeColorNames[nThemeColorIndex]; + mpFS->startElementNS(XML_a, XML_solidFill); - mpFS->startElementNS(XML_a, XML_schemeClr, XML_val, pColorName); + mpFS->startElementNS(XML_a, XML_schemeClr, XML_val, aColorName); + for (auto const& rTransform : aComplexColor.getTransformations()) { + sal_Int32 nElement = XML_none; switch (rTransform.meType) { case model::TransformationType::LumMod: - mpFS->singleElementNS(XML_a, XML_lumMod, XML_val, OString::number(rTransform.mnValue * 10)); + nElement = XML_lumMod; break; case model::TransformationType::LumOff: - mpFS->singleElementNS(XML_a, XML_lumOff, XML_val, OString::number(rTransform.mnValue * 10)); + nElement = XML_lumOff; break; case model::TransformationType::Tint: - mpFS->singleElementNS(XML_a, XML_tint, XML_val, OString::number(rTransform.mnValue * 10)); + nElement = XML_tint; break; case model::TransformationType::Shade: - mpFS->singleElementNS(XML_a, XML_shade, XML_val, OString::number(rTransform.mnValue * 10)); + nElement = XML_shade; break; default: break; } + + if (nElement != XML_none) + mpFS->singleElementNS(XML_a, nElement, XML_val, OString::number(rTransform.mnValue * 10)); } // Alpha is actually not contained in maTransformations although possible (as of Mar 2023). sal_Int16 nAPITransparency(0); @@ -2482,14 +2493,12 @@ static OUString lcl_GetTarget(const css::uno::Reference<css::frame::XModel>& xMo return sTarget; } -void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool bIsField, sal_Int32 nElement, - bool bCheckDirect,bool& rbOverridingCharHeight, sal_Int32& rnCharHeight, - sal_Int16 nScriptType, const Reference< XPropertySet >& rXShapePropSet) +void DrawingML::WriteRunProperties(const Reference<XPropertySet>& rRun, sal_Int32 nElement, WriteRunInput& rRunInput) { Reference< XPropertySet > rXPropSet = rRun; Reference< XPropertyState > rXPropState( rRun, UNO_QUERY ); OUString usLanguage; - bool bComplex = ( nScriptType == css::i18n::ScriptType::COMPLEX ); + bool bComplex = (rRunInput.nScriptType == css::i18n::ScriptType::COMPLEX); const char* bold = "0"; const char* italic = nullptr; const char* underline = nullptr; @@ -2500,17 +2509,17 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool sal_Int32 nCharKerning = 0; sal_Int32 nCharEscapementHeight = 0; - if ( nElement == XML_endParaRPr && rbOverridingCharHeight ) + if (nElement == XML_endParaRPr && rRunInput.bOverridingCharHeight) { - nSize = rnCharHeight; + nSize = rRunInput.nCharHeight; } else if (GetProperty(rXPropSet, u"CharHeight"_ustr)) { nSize = static_cast<sal_Int32>(100*(*o3tl::doAccess<float>(mAny))); if ( nElement == XML_rPr || nElement == XML_defRPr ) { - rbOverridingCharHeight = true; - rnCharHeight = nSize; + rRunInput.bOverridingCharHeight = true; + rRunInput.nCharHeight = nSize; } } @@ -2628,7 +2637,7 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool } bool bLang = false; - switch(nScriptType) + switch (rRunInput.nScriptType) { case css::i18n::ScriptType::ASIAN: bLang = GetProperty(rXPropSet, u"CharLocaleAsian"_ustr); break; @@ -2647,10 +2656,10 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool usLanguage = aLanguageTag.getBcp47MS(); } - if (bCheckDirect && GetDirectProperty(rXPropSet, rXPropState, u"CharEscapement"_ustr)) + if (rRunInput.bCheckDirect && GetDirectProperty(rXPropSet, rXPropState, u"CharEscapement"_ustr)) mAny >>= nCharEscapement; - if (bCheckDirect && GetDirectProperty(rXPropSet, rXPropState, u"CharEscapementHeight"_ustr)) + if (rRunInput.bCheckDirect && GetDirectProperty(rXPropSet, rXPropState, u"CharEscapementHeight"_ustr)) mAny >>= nCharEscapementHeight; if (DFLT_ESC_AUTO_SUPER == nCharEscapement) @@ -2704,11 +2713,11 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool // Fontwork-shapes in LO have text outline and fill from shape stroke and shape fill // PowerPoint has this as run properties - if (IsFontworkShape(rXShapePropSet)) + if (IsFontworkShape(rRunInput.xShapePropSet)) { - WriteOutline(rXShapePropSet); - WriteBlipOrNormalFill(rXShapePropSet, u"Graphic"_ustr); - WriteShapeEffects(rXShapePropSet); + WriteOutline(rRunInput.xShapePropSet); + WriteBlipOrNormalFill(rRunInput.xShapePropSet, u"Graphic"_ustr); + WriteShapeEffects(rRunInput.xShapePropSet); } else { @@ -2743,7 +2752,7 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool else { color.SetAlpha(255); - if (!WriteSchemeColor(u"CharComplexColor"_ustr, rXPropSet)) + if (!WriteSchemeColor(u"CharComplexColor"_ustr, rXPropSet, rRunInput.bUseTextSchemeColors)) WriteSolidFill(color, nTransparency); } mpFS->endElementNS(XML_a, XML_ln); @@ -2756,7 +2765,7 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool { color.SetAlpha(255); // TODO: special handle embossed/engraved - if (!WriteSchemeColor(u"CharComplexColor"_ustr, rXPropSet)) + if (!WriteSchemeColor(u"CharComplexColor"_ustr, rXPropSet, rRunInput.bUseTextSchemeColors)) { WriteSolidFill(color, nTransparency); } @@ -2765,9 +2774,9 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool { // Resolve COL_AUTO for PPTX since MS Powerpoint doesn't have automatic colors. bool bIsTextBackgroundDark = mbIsBackgroundDark; - if (rXShapePropSet.is() && GetProperty(rXShapePropSet, u"FillStyle"_ustr) + if (rRunInput.xShapePropSet.is() && GetProperty(rRunInput.xShapePropSet, u"FillStyle"_ustr) && mAny.get<FillStyle>() != FillStyle_NONE - && GetProperty(rXShapePropSet, u"FillColor"_ustr)) + && GetProperty(rRunInput.xShapePropSet, u"FillColor"_ustr)) { ::Color aShapeFillColor(ColorTransparency, mAny.get<sal_uInt32>()); bIsTextBackgroundDark = aShapeFillColor.IsDark(); @@ -2779,10 +2788,10 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool WriteSolidFill(COL_BLACK); } - if (rXShapePropSet.is() && GetDocumentType() != DOCUMENT_DOCX) + if (rRunInput.xShapePropSet.is() && GetDocumentType() != DOCUMENT_DOCX) { mpFS->startElementNS(XML_a, XML_effectLst); - WriteTextGlowEffect(rXShapePropSet); + WriteTextGlowEffect(rRunInput.xShapePropSet); mpFS->endElementNS(XML_a, XML_effectLst); } } @@ -2842,7 +2851,7 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool XML_charset, charset ); } - if (bCheckDirect + if (rRunInput.bCheckDirect && GetDirectProperty(rXPropSet, rXPropState, bComplex ? u"CharFontNameComplex"_ustr : u"CharFontNameAsian"_ustr)) { @@ -2863,7 +2872,7 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool XML_charset, charset ); } - if( bIsField ) + if (rRunInput.bIsField) { Reference< XTextField > rXTextField; if (GetProperty(rXPropSet, u"TextField"_ustr)) @@ -3143,7 +3152,17 @@ void DrawingML::WriteRun( const Reference< XTextRange >& rRun, Reference< XPropertySet > xPropSet( rRun, uno::UNO_QUERY ); - WriteRunProperties( xPropSet, bIsURLField, XML_rPr, true, rbOverridingCharHeight, rnCharHeight, GetScriptType(sText), rXShapePropSet); + WriteRunInput aInput; + aInput.bIsField = bIsURLField; + aInput.bCheckDirect = true; + aInput.nScriptType = GetScriptType(sText); + aInput.xShapePropSet = rXShapePropSet; + aInput.bOverridingCharHeight = rbOverridingCharHeight; + aInput.nCharHeight = rnCharHeight; + WriteRunProperties(xPropSet, XML_rPr, aInput); + rbOverridingCharHeight = aInput.bOverridingCharHeight; + rnCharHeight = aInput.nCharHeight; + mpFS->startElementNS(XML_a, XML_t); mpFS->writeEscaped( sText ); mpFS->endElementNS( XML_a, XML_t ); @@ -3717,8 +3736,17 @@ void DrawingML::WriteLstStyle(const css::uno::Reference<css::text::XTextContent> if( !WriteParagraphProperties(rParagraph, fFirstCharHeight, nElement) ) mpFS->startElementNS(XML_a, nElement); - WriteRunProperties(xFirstRunPropSet, false, XML_defRPr, true, rbOverridingCharHeight, - rnCharHeight, GetScriptType(rRun->getString()), rXShapePropSet); + + WriteRunInput aInput; + aInput.bCheckDirect = true; + aInput.nScriptType = GetScriptType(rRun->getString()); + aInput.xShapePropSet = rXShapePropSet; + aInput.bOverridingCharHeight = rbOverridingCharHeight; + aInput.nCharHeight = rnCharHeight; + WriteRunProperties(xFirstRunPropSet, XML_defRPr, aInput); + rbOverridingCharHeight = aInput.bOverridingCharHeight; + rnCharHeight = aInput.nCharHeight; + mpFS->endElementNS(XML_a, nElement); } } @@ -3861,9 +3889,14 @@ void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph, } } Reference< XPropertySet > rXPropSet( rParagraph, UNO_QUERY ); - sal_Int16 nDummy = -1; - WriteRunProperties(rXPropSet, false, XML_endParaRPr, false, rbOverridingCharHeight, - rnCharHeight, nDummy, rXShapePropSet); + + WriteRunInput aInput; + aInput.xShapePropSet = rXShapePropSet; + aInput.bOverridingCharHeight = rbOverridingCharHeight; + aInput.nCharHeight = rnCharHeight; + WriteRunProperties(rXPropSet, XML_endParaRPr, aInput); + rbOverridingCharHeight = aInput.bOverridingCharHeight; + rnCharHeight = aInput.nCharHeight; mpFS->endElementNS( XML_a, XML_p ); } @@ -4577,9 +4610,15 @@ void DrawingML::WriteText(const Reference<XInterface>& rXIface, bool bBodyPr, bo { mpFS->startElementNS(XML_a, XML_p); WriteParagraphProperties(xParagraph, nCharHeight, XML_pPr); - sal_Int16 nDummy = -1; - WriteRunProperties(rXPropSet, false, XML_endParaRPr, false, - bOverridingCharHeight, nCharHeight, nDummy, rXPropSet); + + WriteRunInput aInput; + aInput.xShapePropSet = rXPropSet; + aInput.bOverridingCharHeight = bOverridingCharHeight; + aInput.nCharHeight = nCharHeight; + WriteRunProperties(rXPropSet, XML_endParaRPr, aInput); + bOverridingCharHeight = aInput.bOverridingCharHeight; + nCharHeight = aInput.nCharHeight; + mpFS->endElementNS(XML_a, XML_p); } return; diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt index 3787bf6e4af3..36207d8d697e 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -30,6 +30,7 @@ BlackDay BlockIncrement Border BorderColor +BorderComplexColor BorderDashName BorderStyle BorderTransparency @@ -108,6 +109,7 @@ Color ColumnGrand ColumnLabelRanges CompileEnglish +ComplexColor ConditionalFormat ConnectBars ContainsHeader @@ -317,6 +319,7 @@ Japanese Keys Label LabelBorderColor +LabelBorderComplexColor LabelBorderStyle LabelBorderWidth LabelPlacement @@ -326,6 +329,7 @@ LabelFillBackground LabelFillHatchName LabelFillStyle LabelFillColor +LabelFillComplexColor CustomLabelFields LayoutInfo LeftBorder
