include/editeng/borderline.hxx | 4 - include/editeng/brushitem.hxx | 2 include/sfx2/namedcolor.hxx | 4 + sc/source/filter/excel/xestyle.cxx | 96 ++++++---------------------- sc/source/filter/inc/export/ExportTools.hxx | 38 +++++++++++ 5 files changed, 68 insertions(+), 76 deletions(-)
New commits: commit 614dfb98cd4705b63bf1e525d3d34df9ce950ebb Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat Jul 29 15:48:35 2023 +0200 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Tue Aug 1 08:16:03 2023 +0200 set finalColor of the ComplexColor in BorderLine and BrushItem The final color is stored inside the ComplexColor and is used to represent the final computed color from theme color and/or transforms. Change-Id: I405615bba144bfe876b75c565746d9eebc88e973 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155111 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/include/editeng/borderline.hxx b/include/editeng/borderline.hxx index eb7d2f0f4f8e..596b8b59f413 100644 --- a/include/editeng/borderline.hxx +++ b/include/editeng/borderline.hxx @@ -172,8 +172,11 @@ public: model::ComplexColor const& getComplexColor() const { + auto pUnConst = const_cast<SvxBorderLine*>(this); + pUnConst->m_aComplexColor.setFinalColor(GetColor()); return m_aComplexColor; } + void setComplexColor(model::ComplexColor const& rComplexColor) { m_aComplexColor = rComplexColor; @@ -258,4 +261,3 @@ EDITENG_DLLPUBLIC bool operator!=( const SvxBorderLine& rLeft, const SvxBorderLi } // namespace editeng #endif - diff --git a/include/editeng/brushitem.hxx b/include/editeng/brushitem.hxx index 26e5458bc5bf..de433f2f272d 100644 --- a/include/editeng/brushitem.hxx +++ b/include/editeng/brushitem.hxx @@ -93,6 +93,8 @@ public: const model::ComplexColor& getComplexColor() const { + auto pUnConst = const_cast<SvxBrushItem*>(this); + pUnConst->maComplexColor.setFinalColor(GetColor()); return maComplexColor; } diff --git a/include/sfx2/namedcolor.hxx b/include/sfx2/namedcolor.hxx index fc7941686fbd..1235cf848827 100644 --- a/include/sfx2/namedcolor.hxx +++ b/include/sfx2/namedcolor.hxx @@ -47,6 +47,10 @@ struct SFX2_DLLPUBLIC NamedColor if (m_nLumMod != 0) aComplexColor.addTransformation({ model::TransformationType::LumOff, m_nLumOff }); } + else + { + aComplexColor.setColor(m_aColor); + } aComplexColor.setFinalColor(m_aColor); commit fc996d8d195263f09d8aaf65deaf9d42f7413be8 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat Jul 29 15:42:32 2023 +0200 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Tue Aug 1 08:15:55 2023 +0200 sc: remove code duplication at OOXML export of ComplexColor This removes the code duplication when exporting the ComplexColor to OOXML. Now we use a common oox::xls::writeComplexColor function which writes a ComplexColor to the stream. Change-Id: I4e7bb1f8427409d09550c71894c327dba5096bec Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155110 Tested-by: Tomaž Vajngerl <qui...@gmail.com> Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx index 02fb6c1a90d6..2937c153fb21 100644 --- a/sc/source/filter/excel/xestyle.cxx +++ b/sc/source/filter/excel/xestyle.cxx @@ -49,6 +49,7 @@ #include <conditio.hxx> #include <dbdata.hxx> #include <filterentries.hxx> +#include <export/ExportTools.hxx> #include <o3tl/safeint.hxx> #include <oox/export/utils.hxx> @@ -1851,29 +1852,17 @@ static void lcl_WriteBorder(XclExpXmlStream& rStrm, sal_Int32 nElement, sal_uInt if( nLineStyle == EXC_LINE_NONE ) { rStyleSheet->singleElement(nElement); - } - else if (rComplexColor.isValidSchemeType()) - { - rStyleSheet->startElement(nElement, XML_style, ToLineStyle(nLineStyle)); - - sal_Int32 nTheme = oox::convertThemeColorTypeToExcelThemeNumber(rComplexColor.getSchemeType()); - double fTintShade = oox::convertColorTransformsToTintOrShade(rComplexColor); - rStyleSheet->singleElement(XML_color, - XML_theme, OString::number(nTheme), - XML_tint, sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0)); - - rStyleSheet->endElement(nElement); + return; } else if (rColor == Color(0, 0, 0)) { rStyleSheet->singleElement(nElement, XML_style, ToLineStyle(nLineStyle)); + return; } - else - { - rStyleSheet->startElement(nElement, XML_style, ToLineStyle(nLineStyle)); - rStyleSheet->singleElement(XML_color, XML_rgb, XclXmlUtils::ToOString(rColor)); - rStyleSheet->endElement( nElement ); - } + + rStyleSheet->startElement(nElement, XML_style, ToLineStyle(nLineStyle)); + oox::xls::writeComplexColor(rStyleSheet, XML_color, rComplexColor, rColor); + rStyleSheet->endElement(nElement); } void XclExpCellBorder::SaveXml(XclExpXmlStream& rStream) const @@ -2003,62 +1992,27 @@ void XclExpCellArea::SaveXml( XclExpXmlStream& rStrm ) const if (maForeColor != COL_TRANSPARENT || maBackColor != COL_TRANSPARENT) { - if (maForegroundComplexColor.isValidSchemeType()) - { - sal_Int32 nTheme = oox::convertThemeColorTypeToExcelThemeNumber(maForegroundComplexColor.getSchemeType()); - double fTintShade = oox::convertColorTransformsToTintOrShade(maForegroundComplexColor); - rStyleSheet->singleElement(XML_fgColor, - XML_theme, OString::number(nTheme), - XML_tint, sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0)); - } - else if (maForeColor != COL_TRANSPARENT) - { - rStyleSheet->singleElement(XML_fgColor, XML_rgb, XclXmlUtils::ToOString(maForeColor)); - } - - if (maBackgroundComplexColor.isValidSchemeType()) - { - sal_Int32 nTheme = oox::convertThemeColorTypeToExcelThemeNumber(maBackgroundComplexColor.getSchemeType()); - double fTintShade = oox::convertColorTransformsToTintOrShade(maBackgroundComplexColor); - rStyleSheet->singleElement(XML_bgColor, - XML_theme, OString::number(nTheme), - XML_tint, sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0)); - } - else if (maBackColor != COL_TRANSPARENT) - { - rStyleSheet->singleElement(XML_bgColor, XML_rgb, XclXmlUtils::ToOString(maBackColor)); - } + oox::xls::writeComplexColor(rStyleSheet, XML_fgColor, maForegroundComplexColor, maForeColor); + oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, maBackgroundComplexColor, maBackColor); } else { - if (maForegroundComplexColor.isValidSchemeType()) - { - sal_Int32 nTheme = oox::convertThemeColorTypeToExcelThemeNumber(maForegroundComplexColor.getSchemeType()); - double fTintShade = oox::convertColorTransformsToTintOrShade(maForegroundComplexColor); - - rStyleSheet->singleElement(XML_fgColor, - XML_theme, OString::number(nTheme), - XML_tint, sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0)); - } - else if (mnForeColor != 0) { - rStyleSheet->singleElement(XML_fgColor, XML_rgb, XclXmlUtils::ToOString(rPalette.GetColor(mnForeColor))); + Color aColor = rPalette.GetColor(mnForeColor); + if (maForegroundComplexColor.isValidSchemeType()) + oox::xls::writeComplexColor(rStyleSheet, XML_fgColor, maForegroundComplexColor, aColor); + else if (mnForeColor != 0) + oox::xls::writeComplexColor(rStyleSheet, XML_fgColor, maForegroundComplexColor, aColor); } - if (maBackgroundComplexColor.isValidSchemeType()) { - sal_Int32 nTheme = oox::convertThemeColorTypeToExcelThemeNumber(maBackgroundComplexColor.getSchemeType()); - double fTintShade = oox::convertColorTransformsToTintOrShade(maBackgroundComplexColor); - rStyleSheet->singleElement(XML_bgColor, - XML_theme, OString::number(nTheme), - XML_tint, sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0)); - } - else if (mnBackColor != 0) - { - rStyleSheet->singleElement(XML_bgColor, XML_rgb, XclXmlUtils::ToOString(rPalette.GetColor(mnBackColor))); + Color aColor = rPalette.GetColor(mnBackColor); + if (maBackgroundComplexColor.isValidSchemeType()) + oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, maBackgroundComplexColor, aColor); + else if (mnForeColor != 0) + oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, maBackgroundComplexColor, aColor); } } - rStyleSheet->endElement( XML_patternFill ); } @@ -2082,16 +2036,8 @@ void XclExpColor::SaveXml( XclExpXmlStream& rStrm ) const sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream(); rStyleSheet->startElement(XML_fill); rStyleSheet->startElement(XML_patternFill); - if (maComplexColor.isValidSchemeType()) - { - sal_Int32 nTheme = oox::convertThemeColorTypeToExcelThemeNumber(maComplexColor.getSchemeType()); - double fTintShade = oox::convertColorTransformsToTintOrShade(maComplexColor); - rStyleSheet->singleElement(XML_bgColor, - XML_theme, OString::number(nTheme), - XML_tint, sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0)); - } - else - rStyleSheet->singleElement(XML_bgColor, XML_rgb, XclXmlUtils::ToOString(maColor)); + + oox::xls::writeComplexColor(rStyleSheet, XML_bgColor, maComplexColor, maColor); rStyleSheet->endElement( XML_patternFill ); rStyleSheet->endElement( XML_fill ); diff --git a/sc/source/filter/inc/export/ExportTools.hxx b/sc/source/filter/inc/export/ExportTools.hxx new file mode 100644 index 000000000000..e5ea27561f39 --- /dev/null +++ b/sc/source/filter/inc/export/ExportTools.hxx @@ -0,0 +1,38 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <docmodel/color/ComplexColor.hxx> +#include <sax/fshelper.hxx> +#include <oox/export/ColorExportUtils.hxx> +#include <oox/token/tokens.hxx> +#include <oox/token/namespaces.hxx> + +namespace oox::xls +{ +void writeComplexColor(sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, + model::ComplexColor const& rComplexColor, Color const& rColor) +{ + if (rComplexColor.isValidSchemeType()) + { + sal_Int32 nTheme + = oox::convertThemeColorTypeToExcelThemeNumber(rComplexColor.getSchemeType()); + double fTintShade = oox::convertColorTransformsToTintOrShade(rComplexColor); + pFS->singleElement(nElement, XML_theme, OString::number(nTheme), XML_tint, + sax_fastparser::UseIf(OString::number(fTintShade), fTintShade != 0.0)); + } + else if (rColor != COL_TRANSPARENT) + { + pFS->singleElement(nElement, XML_rgb, XclXmlUtils::ToOString(rColor)); + } +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */