diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2023-05-22 18:47:36 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-05-23 14:36:47 +0200 |
commit | 8de6e211b760761f1f80b2a7371a5f6b640ab14e (patch) | |
tree | 491c5af3970afac184b0e31aba8ace51b228a6f7 /svx/source/svdraw/svdobj.cxx | |
parent | f1ac4376ffaee143ad24931744637aa0a4717016 (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.cxx | 18 |
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) |