sd/source/ui/inc/SlideshowLayerRenderer.hxx | 4 ++ sd/source/ui/tools/SlideshowLayerRenderer.cxx | 42 +++++++++++++++++++------- 2 files changed, 35 insertions(+), 11 deletions(-)
New commits: commit cf6e23681e54ce9472a9c1d44450beadce2144ce Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Dec 9 16:53:26 2024 +0900 Commit: Marco Cecchetti <marco.cecche...@collabora.com> CommitDate: Mon Dec 9 12:51:27 2024 +0100 slideshow: reset visibility of primitives after rendering If the visible flag is not reset to true, it may be used outside of slideshow rendering. Change-Id: I42589b75c85d6e24af65a4d910bec4ac0c1a45e4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178128 Reviewed-by: Marco Cecchetti <marco.cecche...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> diff --git a/sd/source/ui/inc/SlideshowLayerRenderer.hxx b/sd/source/ui/inc/SlideshowLayerRenderer.hxx index f6c3c6534564..21962d1ee5b4 100644 --- a/sd/source/ui/inc/SlideshowLayerRenderer.hxx +++ b/sd/source/ui/inc/SlideshowLayerRenderer.hxx @@ -23,6 +23,7 @@ #include <optional> #include <unordered_map> #include <unordered_set> +#include <drawinglayer/primitive2d/CommonTypes.hxx> #include <frozen/bits/defines.h> #include <frozen/bits/elsa_std.h> @@ -111,6 +112,8 @@ struct RenderState std::array<sal_Int32, 4> maIndices = { 0, 0, 0, 0 }; + std::vector<drawinglayer::primitive2d::Primitive2DReference> maPrimitivesToUnhide; + SdrObject* mpCurrentTarget = nullptr; sal_Int32 mnCurrentTargetParagraph = -1; @@ -175,6 +178,7 @@ private: void setupAnimations(); void setupMasterPageFields(); void resolveEffect(CustomAnimationEffectPtr const& rEffect); + void cleanup(); public: SlideshowLayerRenderer(SdrPage& rPage, bool bRenderBackground, bool bRenderMasterPage); diff --git a/sd/source/ui/tools/SlideshowLayerRenderer.cxx b/sd/source/ui/tools/SlideshowLayerRenderer.cxx index bf15654013b0..d17b4beaedf7 100644 --- a/sd/source/ui/tools/SlideshowLayerRenderer.cxx +++ b/sd/source/ui/tools/SlideshowLayerRenderer.cxx @@ -161,8 +161,9 @@ OUString getMasterTextFieldType(SdrObject* pObject) bool isGroup(SdrObject* pObject) { return pObject->getChildrenOfSdrObject() != nullptr; } /// Sets visible for all kinds of polypolys in the container -void changePolyPolys(drawinglayer::primitive2d::Primitive2DContainer& rContainer, - bool bRenderObject) +void changePolyPolys( + drawinglayer::primitive2d::Primitive2DContainer& rContainer, bool bRenderObject, + std::vector<drawinglayer::primitive2d::Primitive2DReference>& rPrimitivesToUnhide) { for (auto& pBasePrimitive : rContainer) { @@ -173,13 +174,16 @@ void changePolyPolys(drawinglayer::primitive2d::Primitive2DContainer& rContainer || pBasePrimitive->getPrimitive2DID() == PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D) { pBasePrimitive->setVisible(bRenderObject); + if (!bRenderObject) + rPrimitivesToUnhide.push_back(pBasePrimitive); } } } /// Searches for rectangle primitive and changes if the background should be rendered -void changeBackground(drawinglayer::primitive2d::Primitive2DContainer const& rContainer, - bool bRenderObject) +void changeBackground( + drawinglayer::primitive2d::Primitive2DContainer const& rContainer, bool bRenderObject, + std::vector<drawinglayer::primitive2d::Primitive2DReference>& rPrimitivesToUnhide) { for (size_t i = 0; i < rContainer.size(); i++) { @@ -189,7 +193,7 @@ void changeBackground(drawinglayer::primitive2d::Primitive2DContainer const& rCo drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; pBasePrimitive->get2DDecomposition(aPrimitiveContainer, drawinglayer::geometry::ViewInformation2D()); - changePolyPolys(aPrimitiveContainer, bRenderObject); + changePolyPolys(aPrimitiveContainer, bRenderObject, rPrimitivesToUnhide); } } } @@ -252,9 +256,11 @@ findTextBlock(drawinglayer::primitive2d::Primitive2DContainer const& rContainer, } /// show/hide paragraphs in the container -void modifyParagraphs(drawinglayer::primitive2d::Primitive2DContainer& rContainer, - drawinglayer::geometry::ViewInformation2D const& rViewInformation2D, - std::deque<sal_Int32> const& rPreserveIndices, bool bRenderObject) +void modifyParagraphs( + drawinglayer::primitive2d::Primitive2DContainer& rContainer, + drawinglayer::geometry::ViewInformation2D const& rViewInformation2D, + std::deque<sal_Int32> const& rPreserveIndices, bool bRenderObject, + std::vector<drawinglayer::primitive2d::Primitive2DReference>& rPrimitivesToUnhide) { auto* pTextBlock = findTextBlock(rContainer, rViewInformation2D); @@ -279,11 +285,13 @@ void modifyParagraphs(drawinglayer::primitive2d::Primitive2DContainer& rContaine bool bHideIndex = aIterator == rPreserveIndices.end(); pParagraphPrimitive2d.setVisible(!bHideIndex); + if (bHideIndex) + rPrimitivesToUnhide.push_back(pPrimitive); } nIndex++; } - changeBackground(rContainer, bRenderObject); + changeBackground(rContainer, bRenderObject, rPrimitivesToUnhide); } } @@ -560,8 +568,10 @@ public: auto const& rViewInformation2D = rOriginal.GetObjectContact().getViewInformation2D(); auto rContainer = static_cast<drawinglayer::primitive2d::Primitive2DContainer&>(rVisitor); + modifyParagraphs(rContainer, rViewInformation2D, rParagraphs, - mrRenderPass.mbRenderObjectBackground); + mrRenderPass.mbRenderObjectBackground, + mrRenderState.maPrimitivesToUnhide); } } }; @@ -1001,8 +1011,10 @@ bool SlideshowLayerRenderer::render(unsigned char* pBuffer, bool& bIsBitmapLayer else { if (maRenderState.maRenderPasses.empty()) + { + cleanup(); return false; - + } auto const& rRenderPass = maRenderState.maRenderPasses.front(); maRenderState.meStage = rRenderPass.meStage; @@ -1021,6 +1033,14 @@ bool SlideshowLayerRenderer::render(unsigned char* pBuffer, bool& bIsBitmapLayer return true; } +void SlideshowLayerRenderer::cleanup() +{ + for (auto& pPrimitive : maRenderState.maPrimitivesToUnhide) + { + pPrimitive->setVisible(true); + } +} + } // end of namespace sd /* vim:set shiftwidth=4 softtabstop=4 expandtab: */