sd/source/ui/tools/SlideshowLayerRenderer.cxx | 73 +++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-)
New commits: commit 4da4617266bc816256b6c1d898046ab51080af35 Author: Marco Cecchetti <marco.cecche...@collabora.com> AuthorDate: Sun Nov 3 18:22:38 2024 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Mon Mar 24 13:00:52 2025 +0100 lok: slideshow: send fill, line, font colors for an animated layer We improved the information collected when a layer to be animated is renderered. When the fill style is solid we send the fill color for the animated shape, so that on the client we can check per each texel if it is part of the shape fill and in case substitute the original fill color with the color computed by the animation. The same is done for the line color. Moreover, in case the animated object is a paragraph, we send the font color. Change-Id: Iffca357879ef13489c5d943fb5c6faeeaca0d1b2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183254 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/sd/source/ui/tools/SlideshowLayerRenderer.cxx b/sd/source/ui/tools/SlideshowLayerRenderer.cxx index 6729c3f23c57..df5c19af4547 100644 --- a/sd/source/ui/tools/SlideshowLayerRenderer.cxx +++ b/sd/source/ui/tools/SlideshowLayerRenderer.cxx @@ -18,6 +18,10 @@ #include <svx/svdpagv.hxx> #include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx> #include <svx/unoshape.hxx> +#include <svx/xfillit0.hxx> +#include <svx/xlineit0.hxx> +#include <svx/xflclit.hxx> +#include <svx/xlnclit.hxx> #include <vcl/virdev.hxx> #include <tools/json_writer.hxx> @@ -704,8 +708,51 @@ void writeBoundingBox(::tools::JsonWriter& aJsonWriter, SdrObject* pObject) aJsonWriter.put("height", aRect.GetHeight()); } +uno::Reference<text::XTextRange> +getParagraphFromShape(int nPara, uno::Reference<beans::XPropertySet> const& xShape) +{ + uno::Reference<text::XText> xText + = uno::Reference<text::XTextRange>(xShape, uno::UNO_QUERY_THROW)->getText(); + if (!xText.is()) + return {}; + + uno::Reference<container::XEnumerationAccess> paraEnumAccess(xText, uno::UNO_QUERY); + if (!paraEnumAccess.is()) + return {}; + uno::Reference<container::XEnumeration> paraEnum(paraEnumAccess->createEnumeration()); + if (!paraEnum.is()) + return {}; + + for (int i = 0; i < nPara; ++i) + paraEnum->nextElement(); + + uno::Reference<text::XTextRange> xParagraph(paraEnum->nextElement(), uno::UNO_QUERY_THROW); + + return xParagraph; +} + +void writeFontColor(::tools::JsonWriter& aJsonWriter, SdrObject* pObject, sal_Int32 nParagraph) +{ + uno::Reference<drawing::XShape> xShape = GetXShapeForSdrObject(pObject); + uno::Reference<beans::XPropertySet> xShapePropSet(xShape, uno::UNO_QUERY_THROW); + if (!xShapePropSet.is()) + return; + + uno::Reference<text::XTextRange> xParagraph = getParagraphFromShape(nParagraph, xShapePropSet); + if (!xParagraph.is()) + return; + + uno::Reference<beans::XPropertySet> xPropSet(xParagraph->getStart(), uno::UNO_QUERY_THROW); + if (!xPropSet) + return; + + Color aCharColor; + xPropSet->getPropertyValue("CharColor") >>= aCharColor; + aJsonWriter.put("fontColor", "#" + aCharColor.AsRGBHEXString()); +} + void writeAnimated(::tools::JsonWriter& aJsonWriter, AnimationLayerInfo const& rLayerInfo, - SdrObject* pObject) + SdrObject* pObject, sal_Int32 nParagraph = -1) { aJsonWriter.put("type", "animated"); { @@ -719,6 +766,28 @@ void writeAnimated(::tools::JsonWriter& aJsonWriter, AnimationLayerInfo const& r aJsonWriter.put("type", "bitmap"); writeContentNode(aJsonWriter); writeBoundingBox(aJsonWriter, pObject); + + if (nParagraph < 0) + { + drawing::FillStyle aFillStyle + = pObject->GetProperties().GetItem(XATTR_FILLSTYLE).GetValue(); + if (aFillStyle == drawing::FillStyle::FillStyle_SOLID) + { + auto aFillColor = pObject->GetProperties().GetItem(XATTR_FILLCOLOR).GetColorValue(); + aJsonWriter.put("fillColor", "#" + aFillColor.AsRGBHEXString()); + } + drawing::LineStyle aLineStyle + = pObject->GetProperties().GetItem(XATTR_LINESTYLE).GetValue(); + if (aLineStyle == drawing::LineStyle::LineStyle_SOLID) + { + auto aLineColor = pObject->GetProperties().GetItem(XATTR_LINECOLOR).GetColorValue(); + aJsonWriter.put("lineColor", "#" + aLineColor.AsRGBHEXString()); + } + } + else + { + writeFontColor(aJsonWriter, pObject, nParagraph); + } } } @@ -757,7 +826,7 @@ void SlideshowLayerRenderer::writeJSON(OString& rJsonMsg, RenderPass const& rRen auto aParagraphInfoIterator = rInfo.maParagraphInfos.find(nParagraph); if (aParagraphInfoIterator != rInfo.maParagraphInfos.end()) { - writeAnimated(aJsonWriter, aParagraphInfoIterator->second, pObject); + writeAnimated(aJsonWriter, aParagraphInfoIterator->second, pObject, nParagraph); } } else if (rInfo.moObjectInfo)