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/+/183611 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
This commit is contained in:
committed by
Miklos Vajna
parent
412da215c1
commit
726099e511
@@ -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;
|
||||
|
||||
@@ -160,6 +163,7 @@ private:
|
||||
void setupAnimations();
|
||||
void setupMasterPageFields();
|
||||
void resolveEffect(CustomAnimationEffectPtr const& rEffect);
|
||||
void cleanup();
|
||||
|
||||
public:
|
||||
SlideshowLayerRenderer(SdrPage& rPage, bool bRenderBackground, bool bRenderMasterPage);
|
||||
|
||||
@@ -160,8 +160,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)
|
||||
{
|
||||
@@ -172,13 +173,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++)
|
||||
{
|
||||
@@ -188,7 +192,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -251,9 +255,11 @@ findTextBlock(drawinglayer::primitive2d::Primitive2DContainer const& rContainer,
|
||||
}
|
||||
|
||||
/// show/hide paragraphs in the container
|
||||
void modifyParagraphs(const drawinglayer::primitive2d::Primitive2DContainer& rContainer,
|
||||
drawinglayer::geometry::ViewInformation2D const& rViewInformation2D,
|
||||
std::deque<sal_Int32> const& rPreserveIndices, bool bRenderObject)
|
||||
void modifyParagraphs(
|
||||
const 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);
|
||||
|
||||
@@ -278,11 +284,13 @@ void modifyParagraphs(const drawinglayer::primitive2d::Primitive2DContainer& rCo
|
||||
bool bHideIndex = aIterator == rPreserveIndices.end();
|
||||
|
||||
pParagraphPrimitive2d.setVisible(!bHideIndex);
|
||||
if (bHideIndex)
|
||||
rPrimitivesToUnhide.push_back(pPrimitive);
|
||||
}
|
||||
nIndex++;
|
||||
}
|
||||
|
||||
changeBackground(rContainer, bRenderObject);
|
||||
changeBackground(rContainer, bRenderObject, rPrimitivesToUnhide);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -559,8 +567,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: */
|
||||
|
||||
Reference in New Issue
Block a user