sd/source/ui/inc/SlideshowLayerRenderer.hxx | 4 ++ sd/source/ui/tools/SlideshowLayerRenderer.cxx | 42 +++++++++++++++++++------- 2 files changed, 35 insertions(+), 11 deletions(-)
New commits: commit 96a7c020fd375d94e1353ab2fb9be70a7e76cb82 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Mon Dec 9 16:53:26 2024 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Wed Dec 11 13:50:19 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 <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> (cherry picked from commit cf6e23681e54ce9472a9c1d44450beadce2144ce) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178309 Tested-by: Tomaž Vajngerl <[email protected]> Reviewed-by: Tomaž Vajngerl <[email protected]> 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 106bc564d340..e2b1f4ade226 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); } } } @@ -240,9 +244,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); @@ -267,11 +273,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); } } @@ -548,8 +556,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); } } }; @@ -976,8 +986,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; @@ -996,6 +1008,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: */
