summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2023-04-02 06:28:01 +0900
committerTomaž Vajngerl <quikee@gmail.com>2023-04-02 11:42:42 +0200
commit24a374ebc9da56cc6721e8feaa1e15ba850bf41d (patch)
tree4b03e866089c0a7ef0b5188d72588b4ec55c547f
parent82ed010cd39351adcd4015e2bdd1591aa869cf18 (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.hxx3
-rw-r--r--svx/source/svdraw/svdcrtv.cxx12
-rw-r--r--svx/source/svdraw/svdobj.cxx17
-rw-r--r--sw/source/core/frmedt/feshview.cxx2
-rw-r--r--sw/source/uibase/docvw/edtwin.cxx2
-rw-r--r--sw/source/uibase/ribbar/drawbase.cxx6
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();
}