summaryrefslogtreecommitdiff
path: root/svx
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
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')
-rw-r--r--svx/source/sdr/contact/viewobjectcontactofgroup.cxx5
-rw-r--r--svx/source/svdraw/svdobj.cxx18
-rw-r--r--svx/source/svdraw/svdviter.cxx12
3 files changed, 14 insertions, 21 deletions
diff --git a/svx/source/sdr/contact/viewobjectcontactofgroup.cxx b/svx/source/sdr/contact/viewobjectcontactofgroup.cxx
index 8469a00c1e45..90a74cfabc8a 100644
--- a/svx/source/sdr/contact/viewobjectcontactofgroup.cxx
+++ b/svx/source/sdr/contact/viewobjectcontactofgroup.cxx
@@ -76,10 +76,7 @@ namespace sdr::contact
bool ViewObjectContactOfGroup::isPrimitiveVisibleOnAnyLayer(const SdrLayerIDSet& aLayers) const
{
- SdrLayerIDSet aObjectLayers;
- getSdrObject().getMergedHierarchySdrLayerIDSet(aObjectLayers);
- aObjectLayers &= aLayers;
- return !aObjectLayers.IsEmpty();
+ return getSdrObject().isVisibleOnAnyOfTheseLayers(aLayers);
}
} // end of namespace
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)
diff --git a/svx/source/svdraw/svdviter.cxx b/svx/source/svdraw/svdviter.cxx
index 3ad7cb40f86e..baa13909b6c7 100644
--- a/svx/source/svdraw/svdviter.cxx
+++ b/svx/source/svdraw/svdviter.cxx
@@ -68,10 +68,7 @@ bool SdrViewIter::ImpCheckPageView(SdrPageView const* pPV) const
{
// Looking for an object? First, determine if it visible in
// this PageView.
- SdrLayerIDSet aObjLay;
- mpObject->getMergedHierarchySdrLayerIDSet(aObjLay);
- aObjLay &= pPV->GetVisibleLayers();
- return !aObjLay.IsEmpty();
+ return mpObject->isVisibleOnAnyOfTheseLayers(pPV->GetVisibleLayers());
}
else
{
@@ -91,12 +88,9 @@ bool SdrViewIter::ImpCheckPageView(SdrPageView const* pPV) const
{
// Looking for an object? First, determine if it visible in
// this PageView.
- SdrLayerIDSet aObjLay;
- mpObject->getMergedHierarchySdrLayerIDSet(aObjLay);
- aObjLay &= pPV->GetVisibleLayers();
+ SdrLayerIDSet aObjLay = pPV->GetVisibleLayers();
aObjLay &= pPg->TRG_GetMasterPageVisibleLayers();
-
- if (!aObjLay.IsEmpty())
+ if (mpObject->isVisibleOnAnyOfTheseLayers(aObjLay))
{
return true;
} // else, look at the next master page of this page...