diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2023-04-02 06:28:01 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2023-04-02 11:42:42 +0200 |
commit | 24a374ebc9da56cc6721e8feaa1e15ba850bf41d (patch) | |
tree | 4b03e866089c0a7ef0b5188d72588b4ec55c547f | |
parent | 82ed010cd39351adcd4015e2bdd1591aa869cf18 (diff) |
tdf#154040 use a SdrObjKind::NewFrame for frame creation in writer
Instead of (ab)using SdrObjKind::NONE for the temporary, empty
SdrObject instance in writer when creating a new frame, use a new
SdrObjKind::NewFrame kind for the object and use a empty SdrObject
instance EmptyObject - minimal implementation of SdrObject).
Change-Id: I0277a8f0cf7bfd428e106258ae8710b77e62c41b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149924
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
-rw-r--r-- | include/svx/svdobjkind.hxx | 3 | ||||
-rw-r--r-- | svx/source/svdraw/svdcrtv.cxx | 12 | ||||
-rw-r--r-- | svx/source/svdraw/svdobj.cxx | 17 | ||||
-rw-r--r-- | sw/source/core/frmedt/feshview.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/docvw/edtwin.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/ribbar/drawbase.cxx | 6 |
6 files changed, 25 insertions, 17 deletions
diff --git a/include/svx/svdobjkind.hxx b/include/svx/svdobjkind.hxx index e6063bc10ce57..d25eba0a00278 100644 --- a/include/svx/svdobjkind.hxx +++ b/include/svx/svdobjkind.hxx @@ -141,7 +141,8 @@ enum class SdrObjKind : sal_uInt16 ReportDesignSubReport = 506, // writer, arbitrarily place at 600 - SwFlyDrawObjIdentifier = 601 + SwFlyDrawObjIdentifier = 601, + NewFrame = 602 }; inline constexpr bool IsInventorE3D(SdrObjKind e) diff --git a/svx/source/svdraw/svdcrtv.cxx b/svx/source/svdraw/svdcrtv.cxx index 8c3c0750377f9..3a27e56694c74 100644 --- a/svx/source/svdraw/svdcrtv.cxx +++ b/svx/source/svdraw/svdcrtv.cxx @@ -414,7 +414,7 @@ bool SdrCreateView::ImpBegCreateObj(SdrInventor nInvent, SdrObjKind nIdent, cons // object should not be created. Since it is possible to use it as a helper // object (e.g. in letting the user define an area with the interactive // construction) at least no items should be set at that object. - if(nInvent != SdrInventor::Default || nIdent != SdrObjKind::NONE) + if(nInvent != SdrInventor::Default || nIdent != SdrObjKind::NewFrame) { mpCurrentCreate->SetMergedItemSet(maDefaultAttr); } @@ -734,11 +734,11 @@ void SdrCreateView::ShowCreateObj(/*OutputDevice* pOut, sal_Bool bFull*/) // overlay objects instead. bool bUseSolidDragging(IsSolidDragging()); - // #i101648# check if dragged object is a naked SdrObject (not - // a derivation). This is e.g. used in SW Frame construction - // as placeholder. Do not use SolidDragging for naked SdrObjects, - // they cannot have a valid optical representation - if(bUseSolidDragging && SdrObjKind::NONE == mpCurrentCreate->GetObjIdentifier()) + // #i101648# check if dragged object is a SdrObjKind::NewFrame. + // This is e.g. used in SW Frame construction as placeholder. + // Do not use SolidDragging for SdrObjKind::NewFrame kind of objects, + // they cannot have a valid optical representation. + if (bUseSolidDragging && SdrObjKind::NewFrame == mpCurrentCreate->GetObjIdentifier()) { bUseSolidDragging = false; } diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 8f3d2e7eb12a2..ab9aa7a9dcf1d 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -3197,6 +3197,9 @@ rtl::Reference<SdrObject> SdrObjFactory::CreateObjectFromFactory(SdrModel& rSdrM namespace { +// SdrObject subclass, which represents an empty object of a +// certain type (kind). +template <SdrObjKind OBJECT_KIND, SdrInventor OBJECT_INVENTOR> class EmptyObject final : public SdrObject { private: @@ -3221,17 +3224,17 @@ public: SdrInventor GetObjInventor() const override { - return SdrInventor::Default; + return OBJECT_INVENTOR; } SdrObjKind GetObjIdentifier() const override { - return SdrObjKind::NONE; + return OBJECT_KIND; } void NbcRotate(const Point& /*rRef*/, Degree100 /*nAngle*/, double /*sinAngle*/, double /*cosAngle*/) override { - assert(false); + assert(false); // should not be called for this kind of objects } }; @@ -3329,7 +3332,7 @@ rtl::Reference<SdrObject> SdrObjFactory::MakeNewObject( } } break; - case SdrObjKind::NONE: pObj = new EmptyObject(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; @@ -3352,7 +3355,11 @@ rtl::Reference<SdrObject> SdrObjFactory::MakeNewObject( case SdrObjKind::Media : pObj=new SdrMediaObj(rSdrModel); break; #endif case SdrObjKind::Table : pObj=new sdr::table::SdrTableObj(rSdrModel); break; - default: break; + case SdrObjKind::NewFrame: // used for frame creation in writer + pObj = new EmptyObject<SdrObjKind::NewFrame, SdrInventor::Default>(rSdrModel); + break; + default: + break; } } diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx index 7d38371d6b721..be160057093e7 100644 --- a/sw/source/core/frmedt/feshview.cxx +++ b/sw/source/core/frmedt/feshview.cxx @@ -2070,7 +2070,7 @@ bool SwFEShell::ImpEndCreate() } } - if( SdrInventor::Default == rSdrObj.GetObjInventor() && rSdrObj.GetObjIdentifier() == SdrObjKind::NONE ) + if (SdrInventor::Default == rSdrObj.GetObjInventor() && rSdrObj.GetObjIdentifier() == SdrObjKind::NewFrame) { // For OBJ_NONE a fly is inserted. const tools::Long nWidth = rBound.Right() - rBound.Left(); diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx index 50ad58e1d7fd7..114fa3cea8a69 100644 --- a/sw/source/uibase/docvw/edtwin.cxx +++ b/sw/source/uibase/docvw/edtwin.cxx @@ -726,7 +726,7 @@ inline void SwEditWin::EnterArea() */ void SwEditWin::InsFrame(sal_uInt16 nCols) { - StdDrawMode( SdrObjKind::NONE, false ); + StdDrawMode(SdrObjKind::NewFrame, false); m_bInsFrame = true; m_nInsFrameColCount = nCols; } diff --git a/sw/source/uibase/ribbar/drawbase.cxx b/sw/source/uibase/ribbar/drawbase.cxx index 146f2ffde9ef8..4e77bbc1f6956 100644 --- a/sw/source/uibase/ribbar/drawbase.cxx +++ b/sw/source/uibase/ribbar/drawbase.cxx @@ -261,7 +261,7 @@ bool SwDrawBase::MouseButtonUp(const MouseEvent& rMEvt) } else { - if (SdrObjKind::NONE == nDrawMode) + if (SdrObjKind::NewFrame == nDrawMode) { SwRewriter aRewriter; @@ -275,7 +275,7 @@ bool SwDrawBase::MouseButtonUp(const MouseEvent& rMEvt) CreateDefaultObjectAtPosWithSize(aPnt, Size(1000, 1000)); } - if (SdrObjKind::NONE == nDrawMode) // Text border inserted + if (SdrObjKind::NewFrame == nDrawMode) // Text border inserted { uno::Reference< frame::XDispatchRecorder > xRecorder = m_pSh->GetView().GetViewFrame().GetBindings().GetRecorder(); @@ -303,7 +303,7 @@ bool SwDrawBase::MouseButtonUp(const MouseEvent& rMEvt) m_pSh->SetFlyFrameAttr( aSet ); } } - if (m_pWin->GetSdrDrawMode() == SdrObjKind::NONE) + if (m_pWin->GetSdrDrawMode() == SdrObjKind::NewFrame) { m_pSh->EndUndo(); } |