sc/source/filter/excel/xestyle.cxx | 96 ++++++---------------------- sc/source/filter/inc/export/ExportTools.hxx | 38 +++++++++++ 2 files changed, 59 insertions(+), 75 deletions(-)
New commits: commit 2f9385f184f39d70d55c301a1173dc5eedd60979 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat Jul 29 15:42:32 2023 +0200 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Mon Aug 28 12:40:43 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> (cherry picked from commit fc996d8d195263f09d8aaf65deaf9d42f7413be8) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156103 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx index 403121ffec37..50db4781f1d4 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> @@ -1852,29 +1853,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 @@ -2004,62 +1993,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 ); } @@ -2083,16 +2037,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: */