From 6252959192c07973af698ce30fa67b1a29e4871e Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Wed, 12 Apr 2023 11:18:42 +0900 Subject: oox: add support for theme import and export of blip effects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds support for (most) blip effects import, export and the document model. Change-Id: Iec15f4de22c31268019fa1a60432e40ae8f03635 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150262 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- oox/source/export/ThemeExport.cxx | 8 +-- oox/source/export/drawingml.cxx | 112 +++++++++++++++++++++++++++++++++++++- 2 files changed, 113 insertions(+), 7 deletions(-) (limited to 'oox/source/export') diff --git a/oox/source/export/ThemeExport.cxx b/oox/source/export/ThemeExport.cxx index 16da603fa14c..88ff2d6364fc 100644 --- a/oox/source/export/ThemeExport.cxx +++ b/oox/source/export/ThemeExport.cxx @@ -581,13 +581,13 @@ OString convertRectangleAlignment(model::RectangleAlignment eFlipMode) } } // end anonymous ns -void ThemeExport::writeBlip(model::BlipFill const& rBlipFil) +void ThemeExport::writeBlip(model::BlipFill const& rBlipFill) { - if (!rBlipFil.mxGraphic.is()) + if (!rBlipFill.mxGraphic.is()) return; oox::drawingml::GraphicExport aExporter(mpFS, mpFilterBase, meDocumentType); - Graphic aGraphic(rBlipFil.mxGraphic); - aExporter.writeBlip(aGraphic, false); + Graphic aGraphic(rBlipFill.mxGraphic); + aExporter.writeBlip(aGraphic, rBlipFill.maBlipEffects, false); } void ThemeExport::writeBlipFill(model::BlipFill const& rBlipFill) diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index f58e76eda95e..aaad66b4d083 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -1475,7 +1475,7 @@ const char* DrawingML::GetRelationCompPrefix() const return getRelationCompPrefix(meDocumentType); } -OUString GraphicExport::writeBlip(Graphic const& rGraphic , bool bRelPathToMedia) +OUString GraphicExport::writeBlip(Graphic const& rGraphic, std::vector const& rEffects, bool bRelPathToMedia) { OUString sRelId; @@ -1483,8 +1483,114 @@ OUString GraphicExport::writeBlip(Graphic const& rGraphic , bool bRelPathToMedia mpFS->startElementNS(XML_a, XML_blip, FSNS(XML_r, XML_embed), sRelId); - //WriteImageBrightnessContrastTransparence(rXPropSet); - //WriteArtisticEffect(rXPropSet); + for (auto const& rEffect : rEffects) + { + switch (rEffect.meType) + { + case model::BlipEffectType::AlphaBiLevel: + { + mpFS->singleElementNS(XML_a, XML_alphaBiLevel, XML_thresh, OString::number(rEffect.mnThreshold)); + } + break; + case model::BlipEffectType::AlphaCeiling: + { + mpFS->singleElementNS(XML_a, XML_alphaCeiling); + } + break; + case model::BlipEffectType::AlphaFloor: + { + mpFS->singleElementNS(XML_a, XML_alphaFloor); + } + break; + case model::BlipEffectType::AlphaInverse: + { + mpFS->singleElementNS(XML_a, XML_alphaInv); + // TODO: export rEffect.maColor1 + } + break; + case model::BlipEffectType::AlphaModulate: + { + mpFS->singleElementNS(XML_a, XML_alphaMod); + // TODO + } + break; + case model::BlipEffectType::AlphaModulateFixed: + { + mpFS->singleElementNS(XML_a, XML_alphaModFix, XML_amt, OString::number(rEffect.mnAmount)); + } + break; + case model::BlipEffectType::AlphaReplace: + { + mpFS->singleElementNS(XML_a, XML_alphaRepl, XML_a, OString::number(rEffect.mnAlpha)); + } + break; + case model::BlipEffectType::BiLevel: + { + mpFS->singleElementNS(XML_a, XML_biLevel, XML_thresh, OString::number(rEffect.mnThreshold)); + } + break; + case model::BlipEffectType::Blur: + { + mpFS->singleElementNS(XML_a, XML_blur, + XML_rad, OString::number(rEffect.mnRadius), + XML_grow, rEffect.mbGrow ? "1" : "0"); + } + break; + case model::BlipEffectType::ColorChange: + { + mpFS->startElementNS(XML_a, XML_clrChange, XML_useA, rEffect.mbUseAlpha ? "1" : "0"); + mpFS->endElementNS(XML_a, XML_clrChange); + } + break; + case model::BlipEffectType::ColorReplace: + { + mpFS->startElementNS(XML_a, XML_clrRepl); + mpFS->endElementNS(XML_a, XML_clrRepl); + } + break; + case model::BlipEffectType::DuoTone: + { + mpFS->startElementNS(XML_a, XML_duotone); + mpFS->endElementNS(XML_a, XML_duotone); + } + break; + case model::BlipEffectType::FillOverlay: + { + mpFS->singleElementNS(XML_a, XML_fillOverlay); + } + break; + case model::BlipEffectType::Grayscale: + { + mpFS->singleElementNS(XML_a, XML_grayscl); + } + break; + case model::BlipEffectType::HSL: + { + mpFS->singleElementNS(XML_a, XML_hsl, + XML_hue, OString::number(rEffect.mnHue), + XML_sat, OString::number(rEffect.mnSaturation), + XML_lum, OString::number(rEffect.mnLuminance)); + } + break; + case model::BlipEffectType::Luminance: + { + mpFS->singleElementNS(XML_a, XML_lum, + XML_bright, OString::number(rEffect.mnBrightness), + XML_contrast, OString::number(rEffect.mnContrast)); + } + break; + case model::BlipEffectType::Tint: + { + mpFS->singleElementNS(XML_a, XML_tint, + XML_hue, OString::number(rEffect.mnHue), + XML_amt, OString::number(rEffect.mnAmount)); + } + break; + + default: + break; + } + } mpFS->endElementNS(XML_a, XML_blip); -- cgit