31 #include <rtl/ustrbuf.hxx>
34 #include <svx/strings.hrc>
78 nGap(0), nEscRel(5000), nEscAbs(0),
80 bFitLineLen(true), bEscRel(true), bFixedAngle(false)
123 bool bLft=(aTl.X()-aLft.X()<aRgt.X()-aTl.X());
135 bool bTop=(aTl.Y()-aTop.Y()<aBtm.Y()-aTl.Y());
147 BigInt aHorX(aBestPt.X()-aTl.X()); aHorX*=aHorX;
148 BigInt aHorY(aBestPt.Y()-aTl.Y()); aHorY*=aHorY;
149 BigInt aVerX(aBest2.X()-aTl.X()); aVerX*=aVerX;
150 BigInt aVerY(aBest2.Y()-aTl.Y()); aVerY*=aVerY;
152 bTakeIt=aVerX+aVerY<aHorX+aHorY;
154 bTakeIt=aVerX+aVerY>=aHorX+aHorY;
171 return std::make_unique<sdr::properties::CaptionProperties>(*this);
179 return std::make_unique<sdr::contact::ViewContactOfSdrCaptionObj>(*this);
186 mbSpecialTextBoxShadow(false),
188 mbSuppressGetBitmap(false),
199 mbSpecialTextBoxShadow(false),
201 mbSuppressGetBitmap(false),
235 return CloneHelper< SdrCaptionObj >(rTargetModel);
257 if (!aName.isEmpty())
265 return sName.makeStringAndClear();
270 return SvxResId(STR_ObjNamePluralCAPTION);
294 pHdl->SetPointNum(0);
295 rHdlList.
AddHdl(std::move(pHdl));
449 rPara.
CalcEscPos(aTl, rRect, aEscPos, eEscDir);
452 if(eEscDir==LKS || eEscDir==RTS)
454 aPol[0].setX( aEscPos.X() );
458 aPol[0].setY( aEscPos.Y() );
493 if (eEscDir==LKS || eEscDir==RTS) {
495 aPol[1].setX((aTl.X()+aEscPos.X())/2 );
497 if (eEscDir==LKS) aPol[1].AdjustX( -(rPara.
nLineLen) );
498 else aPol[1].AdjustX(rPara.
nLineLen );
502 aPol[1].setY((aTl.Y()+aEscPos.Y())/2 );
504 if (eEscDir==OBN) aPol[1].AdjustY( -(rPara.
nLineLen) );
505 else aPol[1].AdjustY(rPara.
nLineLen );
516 switch (rPara.
eType) {
579 return PointerStyle::DrawCaption;
602 Size aSiz(rPnt.X()-aRelPos0.X(),rPnt.Y()-aRelPos0.Y());
687 pRet = std::move(pTail);
688 else if (pRect && !pTail)
689 pRet = std::move(pRect);
690 else if (pTail && pRect)
692 if (pTail->GetSubList())
694 pTail->GetSubList()->NbcInsertObject(pRect.release());
695 pRet = std::move(pTail);
697 else if (pRect->GetSubList())
699 pRect->GetSubList()->NbcInsertObject(pTail.release(),0);
700 pRet = std::move(pRect);
716 assert(rotate !=
nullptr);
724 *rotate = fmod(*rotate + F_PI, F_2PI);
737 double fRotate, fShearX;
738 rMatrix.
decompose(aScale, aTranslate, fRotate, fShearX);
740 handleNegativeScale(aScale, &fRotate);
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
virtual SdrObjKind GetObjIdentifier() const override
virtual void RestGeoData(const SdrObjGeoData &rGeo) override
SdrPageView * GetPageView() const
sal_uInt32 GetPolyNum() const
virtual ~SdrCaptionObj() override
SdrObjUserCall * pUserCall
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const override
const Point & GetStart() const
SVX_DLLPRIVATE void ImpGetCaptParams(ImpCaptParams &rPara) const
void ResizePoly(tools::Polygon &rPoly, const Point &rRef, const Fraction &xFact, const Fraction &yFact)
bool mbSpecialTextBoxShadow
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
SdrCaptionObj(SdrModel &rSdrModel)
void SetTailPos(const Point &rPos)
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
virtual void NbcInsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix &rMatrix, const basegfx::B2DPolyPolygon &rPolyPolygon) override
constexpr TypedWhichId< SdrCaptionLineLenItem > SDRATTR_CAPTIONLINELEN(SDRATTR_CAPTION_FIRST+8)
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
virtual const tools::Rectangle & GetLogicRect() const override
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const override
virtual Point GetRelativePos() const override
sal_uInt32 GetPointNum() const
virtual void SetBoundRectDirty()
virtual bool EndCreate(SdrDragStat &rStat, SdrCreateCmd eCmd) override
::basegfx::B2DPolygon getTailPolygon() const
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
virtual bool BckCreate(SdrDragStat &rStat) override
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat &rDrag) const override
Polygon dragged by the user when creating the object.
All geometrical data of an arbitrary object for use in undo/redo.
virtual Point GetSnapPoint(sal_uInt32 i) const override
virtual void NbcSetRelativePos(const Point &rPnt) override
The relative position of a SdrObject is the distance of the upper left corner of the logic bounding r...
void SetOrtho8Possible(bool bOn=true)
Rectangle objects (rectangle, circle, ...)
const SdrHdl * GetHdl() const
static SVX_DLLPRIVATE void ImpCalcTail1(const ImpCaptParams &rPara, tools::Polygon &rPoly, tools::Rectangle const &rRect)
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override
void CalcEscPos(const Point &rTail, const tools::Rectangle &rRect, Point &rPt, EscDir &rDir) const
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_CAPTIONFIXEDANGLE(SDRATTR_CAPTION_FIRST+1)
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const override
OUString SvxResId(const char *pId)
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
SdrCaptionObj & operator=(const SdrCaptionObj &rObj)
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override
constexpr TypedWhichId< SdrCaptionEscDirItem > SDRATTR_CAPTIONESCDIR(SDRATTR_CAPTION_FIRST+4)
const SfxItemSet & GetObjectItemSet() const
SdrObject * SdrObjectPrimitiveHit(const SdrObject &rObject, const Point &rPnt, sal_uInt16 nTol, const SdrPageView &rSdrPageView, const SdrLayerIDSet *pVisiLayer, bool bTextOnly, drawinglayer::primitive2d::Primitive2DContainer *pHitContainer)
tools::Long BigMulDiv(tools::Long nVal, tools::Long nMul, tools::Long nDiv)
virtual SdrObjGeoData * NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
static SVX_DLLPRIVATE void ImpCalcTail(const ImpCaptParams &rPara, tools::Polygon &rPoly, tools::Rectangle const &rRect)
static SVX_DLLPRIVATE void ImpCalcTail3(const ImpCaptParams &rPara, tools::Polygon &rPoly, tools::Rectangle const &rRect)
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const override
constexpr TypedWhichId< SdrCaptionEscRelItem > SDRATTR_CAPTIONESCREL(SDRATTR_CAPTION_FIRST+6)
void SetNoSnap(bool bOn=true)
void SetEndDragChangesGeoAndAttributes(bool bOn)
constexpr TypedWhichId< SdrCaptionEscAbsItem > SDRATTR_CAPTIONESCABS(SDRATTR_CAPTION_FIRST+7)
SVX_DLLPRIVATE void ImpRecalcTail()
bool decompose(B2DTuple &rScale, B2DTuple &rTranslate, double &rRotate, double &rShearX) const
SdrObject * GetCreateObj() const
tools::Long FRound(double fVal)
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
class SdrCaptionGapItem Distance of the line start from the Rect
constexpr TypedWhichId< SdrMetricItem > SDRATTR_CAPTIONGAP(SDRATTR_CAPTION_FIRST+3)
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
SdrPathObjUniquePtr ImpConvertMakeObj(const basegfx::B2DPolyPolygon &rPolyPolygon, bool bClosed, bool bBezier) const
virtual SdrCaptionObj * CloneSdrObject(SdrModel &rTargetModel) const override
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
void BroadcastObjectChange() const
B2DPolygon createPolygonFromRect(const B2DRectangle &rRect, double fRadiusX, double fRadiusY)
sal_Int32 GetPointCount() const
void ActionChanged() const
SdrView * GetView() const
SdrModel & getSdrModelFromSdrObject() const
virtual SdrObjList * GetSubList() const override
void SetEndDragChangesAttributes(bool bOn)
constexpr TypedWhichId< SdrCaptionTypeItem > SDRATTR_CAPTIONTYPE(SDRATTR_CAPTION_FIRST+0)
virtual OUString TakeObjNamePlural() const override
void MovePoly(tools::Polygon &rPoly, const Size &S)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
virtual const tools::Rectangle & GetLastBoundRect() const
virtual bool MovCreate(SdrDragStat &rStat) override
SdrRectObj & operator=(const SdrRectObj &rCopy)
void SetActionRect(const tools::Rectangle &rR)
virtual PointerStyle GetCreatePointer() const override
get the cursor/pointer that signals creating this object
virtual OUString TakeObjNameSingul() const override
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
OUString ImpGetDescriptionStr(const char *pStrCacheID) const
virtual void BrkCreate(SdrDragStat &rStat) override
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
constexpr TypedWhichId< SdrCaptionFitLineLenItem > SDRATTR_CAPTIONFITLINELEN(SDRATTR_CAPTION_FIRST+9)
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
const Point & GetNow() const
const Point & GetAnchorPos() const
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
virtual void RestGeoData(const SdrObjGeoData &rGeo) override
virtual void SetRectsDirty(bool bNotMyself=false, bool bRecursive=true)
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
virtual bool hasSpecialDrag() const override
The standard transformations (Move,Resize,Rotate,Mirror,Shear) are taken over by the View (TakeXorPol...
virtual void SetSnapRect(const tools::Rectangle &rRect)
bool LineGeometryUsageIsNecessary() const
constexpr TypedWhichId< SdrCaptionEscIsRelItem > SDRATTR_CAPTIONESCISREL(SDRATTR_CAPTION_FIRST+5)
void NbcSetTailPos(const Point &rPos)
virtual void SetChanged()
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
periodic cubic Spline (ni)
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
static SVX_DLLPRIVATE void ImpCalcTail2(const ImpCaptParams &rPara, tools::Polygon &rPoly, tools::Rectangle const &rRect)
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
const Point & GetFixedTailPos() const
const Point & GetTailPos() const
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
virtual sal_uInt32 GetSnapPointCount() const override
snap to special points of an Object (polygon points, center of circle)
virtual bool BegCreate(SdrDragStat &rStat) override
Every object must be able to create itself interactively.