summaryrefslogtreecommitdiff
path: root/oox/source/export
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2023-04-12 11:18:42 +0900
committerTomaž Vajngerl <quikee@gmail.com>2023-04-25 13:38:18 +0200
commit6252959192c07973af698ce30fa67b1a29e4871e (patch)
tree5713580848f0608f7143b6dad041d50a342c752e /oox/source/export
parentb09c377888e2e75859fff37fdf9408065eb522d6 (diff)
oox: add support for theme import and export of blip effects
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 <quikee@gmail.com>
Diffstat (limited to 'oox/source/export')
-rw-r--r--oox/source/export/ThemeExport.cxx8
-rw-r--r--oox/source/export/drawingml.cxx112
2 files changed, 113 insertions, 7 deletions
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<model::BlipEffect> 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);