summaryrefslogtreecommitdiff
path: root/svx/source/svdraw/svdobj.cxx
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2023-05-22 18:47:36 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-05-23 14:36:47 +0200
commit8de6e211b760761f1f80b2a7371a5f6b640ab14e (patch)
tree491c5af3970afac184b0e31aba8ace51b228a6f7 /svx/source/svdraw/svdobj.cxx
parentf1ac4376ffaee143ad24931744637aa0a4717016 (diff)
tdf#155410 move some layer/object visibility computation inside SdrObject
which has the nice effect of (a) removing some duplicated code (b) being more efficient with deeply nested complex objects Change-Id: Ifee10d40fca3faac0f5a7b79febdba756850f30f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152124 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svx/source/svdraw/svdobj.cxx')
-rw-r--r--svx/source/svdraw/svdobj.cxx18
1 files changed, 10 insertions, 8 deletions
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index ab9aa7a9dcf1..03f9f0f95739 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -647,16 +647,18 @@ SdrLayerID SdrObject::GetLayer() const
return mnLayerID;
}
-void SdrObject::getMergedHierarchySdrLayerIDSet(SdrLayerIDSet& rSet) const
+bool SdrObject::isVisibleOnAnyOfTheseLayers(const SdrLayerIDSet& rSet) const
{
- rSet.Set(GetLayer());
+ if (rSet.IsSet(GetLayer()))
+ return true;
SdrObjList* pOL=GetSubList();
- if (pOL!=nullptr) {
- const size_t nObjCount = pOL->GetObjCount();
- for (size_t nObjNum = 0; nObjNum<nObjCount; ++nObjNum) {
- pOL->GetObj(nObjNum)->getMergedHierarchySdrLayerIDSet(rSet);
- }
- }
+ if (!pOL)
+ return false;
+ const size_t nObjCount = pOL->GetObjCount();
+ for (size_t nObjNum = 0; nObjNum<nObjCount; ++nObjNum)
+ if (pOL->GetObj(nObjNum)->isVisibleOnAnyOfTheseLayers(rSet))
+ return true;
+ return false;
}
void SdrObject::NbcSetLayer(SdrLayerID nLayer)