From b53b01a050bbb43cd571c428e86fc23a2fa5773c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Sat, 11 Feb 2023 17:08:54 +0900 Subject: [PATCH] svx: make SdrObject abstract by making CloneSdrObject pure virtual MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change makes SdrObject an abstract class that can't be as we don't want it to be instantiated. With this the ClonseSdrObject became a pure virtual function. With this change also the SwFlyDrawObj needs a implementation of the CloneSdrFunction, which was previously provided by SdrObject. Change-Id: I2efb8c1e6fac12b17ce497285067029d7da1c1fd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148239 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl --- include/svx/svdobj.hxx | 2 +- svx/source/svdraw/svdobj.cxx | 7 +------ sw/source/core/draw/dflyobj.cxx | 11 +++++++++++ sw/source/core/inc/dflyobj.hxx | 5 ++++- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index 08ef71a168a8..52923dc5b92e 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -442,7 +442,7 @@ public: virtual bool HasLimitedRotation() const; // Returns a copy of the object. Every inherited class must reimplement this. - virtual rtl::Reference CloneSdrObject(SdrModel& rTargetModel) const; + virtual rtl::Reference CloneSdrObject(SdrModel& rTargetModel) const = 0; // helper, since Clone always return the type of the current subclass template static rtl::Reference Clone(T const & rObj, SdrModel& rTargetModel) diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index e733c2d83871..af9cac05631c 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -1048,11 +1048,6 @@ bool SdrObject::HasLimitedRotation() const return false; } -rtl::Reference SdrObject::CloneSdrObject(SdrModel& rTargetModel) const -{ - return new SdrObject(rTargetModel, *this); -} - OUString SdrObject::TakeObjNameSingul() const { OUString sName(SvxResId(STR_ObjNameSingulNONE)); @@ -3329,7 +3324,7 @@ rtl::Reference SdrObjFactory::MakeNewObject( } } break; - case SdrObjKind::NONE : pObj=new SdrObject(rSdrModel); break; + case SdrObjKind::NONE : pObj = nullptr; break; case SdrObjKind::Group : pObj=new SdrObjGroup(rSdrModel); break; case SdrObjKind::Polygon : pObj=new SdrPathObj(rSdrModel, SdrObjKind::Polygon ); break; case SdrObjKind::PolyLine : pObj=new SdrPathObj(rSdrModel, SdrObjKind::PolyLine ); break; diff --git a/sw/source/core/draw/dflyobj.cxx b/sw/source/core/draw/dflyobj.cxx index 3095d5a2a6f4..45068cf1fd89 100644 --- a/sw/source/core/draw/dflyobj.cxx +++ b/sw/source/core/draw/dflyobj.cxx @@ -130,6 +130,12 @@ SwFlyDrawObj::SwFlyDrawObj(SdrModel& rSdrModel) { } +SwFlyDrawObj::SwFlyDrawObj(SdrModel& rSdrModel, SwFlyDrawObj const& rSource) + : SdrObject(rSdrModel, rSource) + , mbIsTextBox(false) +{ +} + SwFlyDrawObj::~SwFlyDrawObj() { } @@ -145,6 +151,11 @@ SdrObjKind SwFlyDrawObj::GetObjIdentifier() const return SdrObjKind::SwFlyDrawObjIdentifier; } +rtl::Reference SwFlyDrawObj::CloneSdrObject(SdrModel& rTargetModel) const +{ + return new SwFlyDrawObj(rTargetModel); +} + // TODO: Need own primitive to get the FlyFrame paint working namespace drawinglayer::primitive2d { diff --git a/sw/source/core/inc/dflyobj.hxx b/sw/source/core/inc/dflyobj.hxx index db853d2262b2..7e62bdaddefa 100644 --- a/sw/source/core/inc/dflyobj.hxx +++ b/sw/source/core/inc/dflyobj.hxx @@ -44,8 +44,11 @@ private: public: SwFlyDrawObj(SdrModel& rSdrModel); + SwFlyDrawObj(SdrModel& rSdrModel, SwFlyDrawObj const& rSource); + + // for instantiation of this class while loading (via factory + virtual rtl::Reference CloneSdrObject(SdrModel& rTargetModel) const override; - // for instantiation of this class while loading (via factory) virtual SdrInventor GetObjInventor() const override; virtual SdrObjKind GetObjIdentifier() const override; virtual bool IsTextBox() const override { return mbIsTextBox; }