diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2024-07-19 13:23:41 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2024-08-02 15:25:42 +0200 |
commit | 6475f4de73807f44ee1a32aa22447ed7ee1971c8 (patch) | |
tree | 72abac302636e9609edec655b898ffdfca161bc4 /svx | |
parent | 183078c3a4314f88c858cf0825ffa7bfcd384dd6 (diff) |
reduce cost of dynamic casting in SdrMarkView::CheckSingleSdrObjectHit
which shows up when navigating large complex documents with
lots of shapes
Change-Id: I0631daf1365387f1192815402921ada191ab6046
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170760
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
(cherry picked from commit 0ee4b0339c3f3fd2f39f7193e2cf54df63a071b6)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170730
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/svdraw/svdmrkv.cxx | 2 | ||||
-rw-r--r-- | svx/source/svdraw/svdobj.cxx | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index fbbbfcac0cad..0d409f609f49 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -2426,7 +2426,7 @@ SdrObject* SdrMarkView::CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nT const bool bCheckIfMarkable(nOptions & SdrSearchOptions::TESTMARKABLE); const bool bDeep(nOptions & SdrSearchOptions::DEEP); - const bool bOLE(dynamic_cast< const SdrOle2Obj* >(pObj) != nullptr); + const bool bOLE(DynCastSdrOle2Obj(pObj) != nullptr); auto pTextObj = DynCastSdrTextObj( pObj); const bool bTXT(pTextObj && pTextObj->IsTextFrame()); SdrObject* pRet=nullptr; diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index eadccae5b3a4..d956616d43a9 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -3269,6 +3269,15 @@ SdrTextObj* DynCastSdrTextObj(SdrObject* pObj) return nullptr; } +SdrOle2Obj* DynCastSdrOle2Obj(SdrObject* pObj) +{ + // SdrTextObj has subclasses, with lots of SdrObjKind identifiers, so use a virtual method + // to be safer. + if( pObj && pObj->IsSdrOle2Obj() ) + return static_cast<SdrOle2Obj*>(pObj); + return nullptr; +} + rtl::Reference<SdrObject> SdrObjFactory::CreateObjectFromFactory(SdrModel& rSdrModel, SdrInventor nInventor, SdrObjKind nObjIdentifier) { SdrObjCreatorParams aParams { nInventor, nObjIdentifier, rSdrModel }; |