28#include <svx/strings.hrc>
66 return std::make_unique<sdr::properties::TextProperties>(*
this);
72 return std::make_unique<sdr::contact::ViewContactOfTextObj>(*
this);
77 , mpEditingOutliner(nullptr)
79 , maTextEditOffset(
Point(0, 0))
82 , mbTextSizeDirty(false)
84 , mbDisableAutoWidthOnDragging(false)
85 , mbTextAnimationAllowed(true)
86 , mbInDownScale(false)
94 , mpEditingOutliner(nullptr)
95 , meTextKind(rSource.meTextKind)
96 , maTextEditOffset(
Point(0, 0))
97 , mbTextFrame(rSource.mbTextFrame)
98 , mbNoShear(rSource.mbNoShear)
99 , mbTextSizeDirty(rSource.mbTextSizeDirty)
100 , mbInEditMode(false)
101 , mbDisableAutoWidthOnDragging(rSource.mbDisableAutoWidthOnDragging)
102 , mbTextAnimationAllowed(true)
103 , mbInDownScale(false)
115 if( pText && rSource.
HasText() )
142 , mpEditingOutliner(nullptr)
144 , maTextEditOffset(
Point(0, 0))
147 , mbTextSizeDirty(false)
148 , mbInEditMode(false)
149 , mbDisableAutoWidthOnDragging(false)
150 , mbTextAnimationAllowed(true)
151 , mbInDownScale(false)
163 , mpEditingOutliner(nullptr)
164 , meTextKind(eNewTextKind)
165 , maTextEditOffset(
Point(0, 0))
168 , mbTextSizeDirty(false)
169 , mbInEditMode(false)
170 , mbDisableAutoWidthOnDragging(false)
171 , mbTextAnimationAllowed(true)
172 , mbInDownScale(false)
181 , mpEditingOutliner(nullptr)
182 , meTextKind(eNewTextKind)
183 , maTextEditOffset(
Point(0, 0))
186 , mbTextSizeDirty(false)
187 , mbInEditMode(false)
188 , mbDisableAutoWidthOnDragging(false)
189 , mbTextAnimationAllowed(true)
190 , mbInDownScale(false)
254 rOutliner.
Read(rInput,rBaseURL,eFormat);
329 if(!bInEditMOde && bRet)
465 if(p1stPara==
nullptr)
471 if( pOutliner->
GetText(p1stPara).isEmpty() )
482 const bool bRemove(pNewPage ==
nullptr && pOldPage !=
nullptr);
483 const bool bInsert(pNewPage !=
nullptr && pOldPage ==
nullptr);
486 if (bLinked && bRemove)
494 if (bLinked && bInsert)
564 std::optional<basegfx::B2DPolyPolygon> pContourPolyPolygon;
566 -rAnchorRect.
Left(), -rAnchorRect.
Top()));
580 pContourPolyPolygon.emplace();
597 *pContourPolyPolygon = pCopy->TakeContour();
611 pContourPolyPolygon->transform(aMatrix);
614 rOutliner.
SetPolygon(aXorPolyPolygon, pContourPolyPolygon ? &*pContourPolyPolygon :
nullptr);
675 aAnkRect.
Move(aTmpPt.
X(),aTmpPt.
Y());
677 rAnchorRect=aAnkRect;
703 if (!bFitToSize && !bContourFrame)
723 if (!bChainedFrame) {
764 else if (pOutlinerParaObject)
765 pPara = *pOutlinerParaObject;
772 if( !pTestObj || !bHitTest || pTestObj !=
this ||
845 *pAnchorRect=aAnkRect;
876 bool bNoStretching(
false);
882 OUString aTestString(
u'J');
894 pOut->SetFont(aTmpFont);
895 Size aSize1(
pOut->GetTextWidth(aTestString),
pOut->GetTextHeight());
897 pOut->SetFont(aTmpFont);
898 Size aSize2(
pOut->GetTextWidth(aTestString),
pOut->GetTextHeight());
899 pOut->SetFont(aOriginalFont);
904 bNoStretching = (aSize1 == aSize2);
911 bNoStretching =
true;
918 unsigned nLoopCount=0;
919 bool bNoMoreLoop =
false;
923 if (nIsWdt==0) nIsWdt=1;
927 if (nIsHgt==0) nIsHgt=1;
933 double nX = (nWantWdt * 100.0) /
double(nIsWdt);
934 double nY = (nWantHgt * 100.0) /
double(nIsHgt);
949 while (nLoopCount<5 && !bNoMoreLoop)
997 if (((nXDiff>=nXTolMi || !bChkX) && nXDiff<=nXTolPl) || nXDiff==nXDiff0) {
1003 if (std::abs(nXDiff) <= 2 * nXCorr)
1006 nDiv += (nMul - nDiv) / 2.0;
1008 nMul += (nDiv - nMul) / 2.0;
1010 nX = nX * double(nMul) / double(nDiv);
1054 if(!aStr2.isEmpty() && aStr2.indexOf(
u'\x00FF') == -1)
1059 if(aStr2.getLength() > 10)
1061 aStr2 = OUString::Concat(aStr2.subView(0, 8)) +
"...";
1064 aStr += aStr2 +
"\'";
1071 if (!
aName.isEmpty())
1130 if (bFitToSize) aR=aAnchor2;
1160 case 0: aP = aRectangle.TopLeft();
break;
1161 case 1: aP = aRectangle.TopRight();
break;
1162 case 2: aP = aRectangle.BottomLeft();
break;
1163 case 3: aP = aRectangle.BottomRight();
break;
1164 default: aP = aRectangle.Center();
break;
1177 OutlinerMode nOutlinerMode = OutlinerMode::OutlineObject;
1179 nOutlinerMode = OutlinerMode::TextObject;
1180 rOutl.
Init( nOutlinerMode );
1185 nStat &=
~EEControlBits(EEControlBits::STRETCHING|EEControlBits::AUTOPAGESIZE);
1187 Size aMaxSize(100000,100000);
1218 nStat|=EEControlBits::STRETCHING|EEControlBits::AUTOPAGESIZE;
1223 TakeTextRect(rOutliner, rTextRect,
false, &rAnchorRect);
1224 rPaintRect = rTextRect;
1233 rPaintRect=rAnchorRect;
1258 double fSpacingScaleY;
1260 return fSpacingScaleY;
1273 bool bIsVerticalWriting)
const
1284 if (fMaxScale > 0.0)
1294 if (aCurrentTextBoxSize.
Height() == 0)
1298 aCurrentTextBoxSize.
extendBy(0, nExtendTextBoxBy);
1299 double fCurrentFitFactor = 1.0;
1301 if (bIsVerticalWriting)
1302 fCurrentFitFactor = double(rTextBoxSize.
Width()) / aCurrentTextBoxSize.
Width();
1304 fCurrentFitFactor = double(rTextBoxSize.
Height()) / aCurrentTextBoxSize.
Height();
1306 double fInitialFontScaleY = 0.0;
1307 double fInitialSpacing = 0.0;
1310 if (fCurrentFitFactor >= 1.0 && fInitialFontScaleY >= 100.0 && fInitialSpacing >= 100.0)
1317 double fMaxY = fMaxScale;
1319 double fBestFontScale = 0.0;
1320 double fBestSpacing = 100.0;
1321 double fBestFitFactor = fCurrentFitFactor;
1323 if (fCurrentFitFactor >= 1.0)
1325 fMinY = fInitialFontScaleY;
1326 fBestFontScale = fInitialFontScaleY;
1327 fBestSpacing = fInitialSpacing;
1328 fBestFitFactor = fCurrentFitFactor;
1332 fMaxY = std::min(fInitialFontScaleY, fMaxScale);
1335 double fInTheMidle = 0.5;
1338 double fFitFactorTarget = 1.00;
1340 while (iteration < 10)
1343 double fScaleY = fMinY + (fMaxY - fMinY) * fInTheMidle;
1345 double fScaledFontHeight = fFontHeightPt * (fScaleY / 100.0);
1346 double fRoundedScaledFontHeight = std::floor(fScaledFontHeight * 10.0) / 10.0;
1347 double fCurrentFontScale = (fRoundedScaledFontHeight / fFontHeightPt) * 100.0;
1349 fCurrentFitFactor = 0.0;
1351 for (
double fCurrentSpacing : {100.0, 90.0, 80.0})
1353 if (fCurrentFitFactor >= fFitFactorTarget)
1356 rOutliner.
setGlobalScale(fCurrentFontScale, fCurrentFontScale, 100.0, fCurrentSpacing);
1359 aCurrentTextBoxSize.
extendBy(0, nExtendTextBoxBy);
1360 if (bIsVerticalWriting)
1361 fCurrentFitFactor = double(rTextBoxSize.
Width()) / aCurrentTextBoxSize.
Width();
1363 fCurrentFitFactor = double(rTextBoxSize.
Height()) / aCurrentTextBoxSize.
Height();
1366 if (fCurrentSpacing == 100.0)
1368 if (fCurrentFitFactor > fFitFactorTarget)
1369 fMinY = fCurrentFontScale;
1371 fMaxY = fCurrentFontScale;
1374 if ((fBestFitFactor < fFitFactorTarget && fCurrentFitFactor > fBestFitFactor)
1375 || (fCurrentFitFactor >= fFitFactorTarget && fCurrentFitFactor < fBestFitFactor))
1377 fBestFontScale = fCurrentFontScale;
1378 fBestSpacing = fCurrentSpacing;
1379 fBestFitFactor = fCurrentFitFactor;
1383 rOutliner.
setGlobalScale(fBestFontScale, fBestFontScale, 100.0, fBestSpacing);
1443 ? css::text::WritingMode_TB_RL
1444 : css::text::WritingMode_LR_TB,
1496 return std::make_unique<SdrTextObjGeoData>();
1518 drawing::TextFitToSizeType
eType = drawing::TextFitToSizeType_NONE;
1538 nOutlMode = OutlinerMode::OutlineObject;
1560 if(pOutlinerParaObject)
1572 if( !pOutlinerParaObject && bVertical )
1580 if (!pOutlinerParaObject ||
1625 if (pOutlinerParaObject)
1641 return pOutlinerParaObject->IsTopToBottom();
1694 double fRotate(0.0);
1695 double fShearX(0.0);
1696 rMatrix.
decompose(aScale, aTranslate, fRotate, fShearX);
1699 bool bFlipX = aScale.
getX() < 0.0,
1700 bFlipY = aScale.
getY() < 0.0;
1911 aScrollFrameRect.
SetTop( aAnchorRect.
Top() );
1918 pBlackHole->EnableOutput(
false);
1919 pRetval->
Record(pBlackHole);
1922 rOutliner.
Draw(*pBlackHole, aPaintPos);
1928 rScrollRectangle = aScrollFrameRect;
1929 rPaintRectangle = aPaintRect;
1937 return GetFitToSize() == drawing::TextFitToSizeType_AUTOFIT;
1942 const drawing::TextFitToSizeType eFit =
GetFitToSize();
1943 return (eFit == drawing::TextFitToSizeType_PROPORTIONAL
1944 || eFit == drawing::TextFitToSizeType_ALLLINES);
1960 const bool bGrowX = bool(nStat & EditStatusFlags::TEXTWIDTHCHANGED);
1961 const bool bGrowY = bool(nStat & EditStatusFlags::TextHeightChanged);
1989 for (
size_t i = 0;
i < nObjCount;
i++) {
1992 if (pCurObj->
GetName() == aObjName) {
2006 if (aNextLinkName.empty()) {
2015 if (!pNextTextObj) {
2016 SAL_INFO(
"svx.chaining",
"[CHAINING] Can't find object as next link.");
2030 bool bNextLinkUnsetYet = !aNextLinkName.isEmpty() && !
mpNextInChain;
2033 if (bNextLinkUnsetYet || bInconsistentNextLink) {
2037 return !aNextLinkName.isEmpty();
2058 SAL_INFO(
"svx.chaining",
"[CHAINING] Overflow going on");
2063 SAL_INFO(
"svx.chaining",
"[CHAINING] Underflow going on");
2066 bool bIsOverflowFromUnderflow = aTxtChainFlow.
IsOverflow();
2068 if (bIsOverflowFromUnderflow) {
2069 SAL_INFO(
"svx.chaining",
"[CHAINING] Overflow going on (underflow induced)");
2136 if (pTextObjClone !=
nullptr) {
EditStatusFlags GetStatusWord() const
virtual OUString GetText(sal_Int32 nPara) const=0
virtual void CheckForFlowEvents(SdrOutliner *) override
The transformation of a rectangle into a polygon, by using angle parameters from GeoStat.
double mfCosRotationAngle
double mfSinRotationAngle
Degree100 m_nRotationAngle
const EditTextObject & GetTextObject() const
void SetVertical(bool bNew)
bool IsTopToBottom() const
bool IsEffectivelyVertical() const
void SetMaxAutoPaperSize(const Size &rSz)
void SetText(const OutlinerParaObject &)
OUString GetText(Paragraph const *pPara, sal_Int32 nParaCount=1) const
const Size & GetPaperSize() const
void SetMinColumnWrapHeight(tools::Long nVal)
Paragraph * GetParagraph(sal_Int32 nAbsPos) const
void SetMinAutoPaperSize(const Size &rSz)
void getGlobalScale(double &rFontX, double &rFontY, double &rSpacingX, double &rSpacingY) const
std::optional< OutlinerParaObject > CreateParaObject(sal_Int32 nStartPara=0, sal_Int32 nParaCount=EE_PARA_ALL) const
void SetPaperSize(const Size &rSize)
void SetStyleSheet(sal_Int32 nPara, SfxStyleSheet *pStyle)
bool SetUpdateLayout(bool bUpdate)
void SetFixedCellHeight(bool bUseFixedCellHeight)
void setRoundFontSizeToPt(bool bRound) const
EEControlBits GetControlWord() const
void SetControlWord(EEControlBits nWord)
void SetPolygon(const basegfx::B2DPolyPolygon &rPolyPolygon)
void setGlobalScale(double rFontX=100.0, double rFontY=100.0, double rSpacingX=100.0, double rSpacingY=100.0)
void Draw(OutputDevice &rOutDev, const tools::Rectangle &rOutRect)
ErrCode Read(SvStream &rInput, const OUString &rBaseURL, EETextFormat, SvKeyValueIterator *pHTTPHeaderAttrs=nullptr)
void SetRefMapMode(const MapMode &)
void Init(OutlinerMode nMode)
OutputDevice * GetRefDevice() const
bool IsTopToBottom() const
sal_Int32 GetParagraphCount() const
static vcl::Font GetDefaultFont(DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice *pOutDev=nullptr)
constexpr tools::Long Y() const
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
virtual const tools::Rectangle & GetSnapRect() const override
tools::Rectangle maSnapRect
TextChain * GetTextChain() const
All geometrical data of an arbitrary object for use in undo/redo.
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
const Point & GetAnchorPos() const
void ActionChanged() const
virtual rtl::Reference< SdrObject > getFullDragClone() const
virtual sdr::properties::BaseProperties & GetProperties() const
virtual void Shear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear)
bool LineGeometryUsageIsNecessary() const
void BroadcastObjectChange() const
void SetObjectItemSet(const SfxItemSet &rSet)
virtual void RestoreGeoData(const SdrObjGeoData &rGeo)
bool mbSupportTextIndentingOnLineWidthChange
void SetObjectItem(const SfxPoolItem &rItem)
const SfxPoolItem & GetObjectItem(const sal_uInt16 nWhich) const
virtual void Mirror(const Point &rRef1, const Point &rRef2)
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage)
virtual void SaveGeoData(SdrObjGeoData &rGeo) const
static rtl::Reference< T > Clone(T const &rObj, SdrModel &rTargetModel)
virtual void Move(const Size &rSiz)
SdrModel & getSdrModelFromSdrObject() const
SdrObjUserCall * m_pUserCall
virtual void SetLogicRect(const tools::Rectangle &rRect)
SfxStyleSheet * GetStyleSheet() const
virtual const OUString & GetName() const
sdr::contact::ViewContact & GetViewContact() const
virtual void Rotate(const Point &rRef, Degree100 nAngle, double sn, double cs)
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
virtual void SetChanged()
virtual const tools::Rectangle & GetLastBoundRect() const
SdrPage * getSdrPageFromSdrObject() const
virtual basegfx::B2DPolyPolygon TakeContour() const
contour for TextToContour
virtual void SetSnapRect(const tools::Rectangle &rRect)
virtual void SetBoundRectDirty()
virtual void SetBoundAndSnapRectsDirty(bool bNotMyself=false, bool bRecursive=true)
const SfxItemSet & GetObjectItemSet() const
void SetTextObj(const SdrTextObj *pObj)
const SdrTextObj * GetTextObj() const
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
double GetMaxScale() const
SdrTextObj * GetPrevLinkInChain() const
SdrTextHorzAdjust GetTextHorizontalAdjust() const
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
virtual rtl::Reference< SdrObject > CloneSdrObject(SdrModel &rTargetModel) const override
virtual std::unique_ptr< SdrObjGeoData > NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
virtual void AdaptTextMinSize()
bool HasTextColumnsSpacing() const
virtual bool IsAutoGrowWidth() const
tools::Long GetMaxTextFrameHeight() const
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
bool IsTopToBottom() const
tools::Rectangle const & getRectangle() const
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
void UpdateOutlinerFormatting(SdrOutliner &rOutl, tools::Rectangle &rPaintRect) const
Update given Outliner equivalently to SdrTextObj::Paint()
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
tools::Long GetTextLowerDistance() const
Bottom inner spacing to borders.
SVX_DLLPRIVATE void ImpDeregisterLink()
SdrOutliner & ImpGetDrawOutliner() const
SdrTextObj * GetNextLinkInChain() const
sal_Int32 GetTextColumnsSpacing() const
void ImpSetTextStyleSheetListeners()
virtual sal_Int32 CheckTextHit(const Point &rPnt) const
returns the index of the text that contains the given point or -1
tools::Long GetMinTextFrameHeight() const
virtual OUString TakeObjNameSingul() const override
void SetTextColumnsSpacing(sal_Int32 nSpacing)
bool IsAutoFit() const
returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false!
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
virtual const Size & GetTextSize() const
void NbcSetEckenradius(tools::Long nRad)
bool IsFitToSize() const
returns true if the old feature for fitting shape content should into shape is enabled....
bool CanCreateEditOutlinerParaObject() const
bool IsInEditMode() const
SVX_DLLPRIVATE void ImpRegisterLink()
SdrTextObj * mpPrevInChain
virtual ~SdrTextObj() override
static void ImpSetCharStretching(SdrOutliner &rOutliner, const Size &rTextSize, const Size &rShapeSize, Fraction &rFitXCorrection)
double GetFontScale() const
SVX_DLLPRIVATE void ImpSetupDrawOutlinerForPaint(bool bContourFrame, SdrOutliner &rOutliner, tools::Rectangle &rTextRect, tools::Rectangle &rAnchorRect, tools::Rectangle &rPaintRect, Fraction &aFitXCorrection) const
void autoFitTextForCompatibility(SdrOutliner &rOutliner, const Size &rShapeSize, bool bIsVerticalWriting) const
virtual SdrText * getActiveText() const
returns the currently active text.
SdrOutliner * mpEditingOutliner
tools::Long GetMaxTextFrameWidth() const
virtual void TakeTextAnchorRect(::tools::Rectangle &rAnchorRect) const
void ImpSetContourPolygon(SdrOutliner &rOutliner, tools::Rectangle const &rAnchorRect, bool bLineWidth) const
virtual OutlinerParaObject * GetOutlinerParaObject() const override
bool mbIsUnchainableClone
void SetText(const OUString &rStr)
void NbcSetOutlinerParaObjectForText(std::optional< OutlinerParaObject > pTextObject, SdrText *pText)
virtual bool IsReallyEdited() const
returns true only if we are in edit mode and the user actually changed anything
virtual void onEditOutlinerStatusEvent(EditStatus *pEditStatus)
called from the SdrObjEditView during text edit when the status of the edit outliner changes
virtual void NbcReformatText() override
tools::Long GetTextLeftDistance() const
Left inner spacing to borders
tools::Rectangle maRectangle
virtual OUString TakeObjNamePlural() const override
std::optional< OutlinerParaObject > CreateEditOutlinerParaObject() const
GDIMetaFile * GetTextScrollMetaFileAndRectangle(tools::Rectangle &rScrollRectangle, tools::Rectangle &rPaintRectangle)
virtual basegfx::B2DPolyPolygon TakeContour() const override
contour for TextToContour
virtual bool IsAutoGrowHeight() const
bool ImpCanConvTextToCurve() const
void ImpAutoFitText(SdrOutliner &rOutliner) const
bool mbTextAnimationAllowed
virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix &rMatrix, const basegfx::B2DPolyPolygon &rPolyPolygon) override
tools::Long GetTextRightDistance() const
Right inner spacing to borders
rtl::Reference< SdrText > mxText
void NbcSetText(const OUString &rStr)
virtual bool IsFontwork() const
virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt=true, bool bWdt=true)
SVX_DLLPRIVATE void ImpInitDrawOutliner(SdrOutliner &rOutl) const
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
double GetSpacingScale() const
SdrTextAniDirection GetTextAniDirection() const
static void ImpJustifyRect(tools::Rectangle &rRect)
bool IsContourTextFrame() const
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
virtual Point GetSnapPoint(sal_uInt32 i) const override
bool IsLinkedText() const
bool mbDisableAutoWidthOnDragging
SdrTextObj(SdrModel &rSdrModel)
virtual bool HasText() const override
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
virtual sal_uInt32 GetSnapPointCount() const override
snap to special points of an Object (polygon points, center of circle)
const tools::Rectangle & GetGeoRect() const
static bool HasTextImpl(SdrOutliner const *pOutliner)
returns false if the given pointer is NULL or if the given SdrOutliner contains no text.
virtual void SetVerticalWriting(bool bVertical)
void SetTextColumnsNumber(sal_Int16 nColumns)
virtual void TakeTextRect(SdrOutliner &rOutliner, tools::Rectangle &rTextRect, bool bNoEditText, tools::Rectangle *pAnchorRect, bool bLineWidth=true) const
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
css::drawing::TextFitToSizeType GetFitToSize() const
virtual bool AdjustTextFrameWidthAndHeight()
virtual rtl::Reference< SdrObject > getFullDragClone() const override
virtual void NbcSetOutlinerParaObject(std::optional< OutlinerParaObject > pTextObject) override
void onChainingEvent()
called from the SdrObjEditView during text edit when a chain of boxes is to be updated
tools::Long GetMinTextFrameWidth() const
virtual void setActiveText(sal_Int32 nIndex)
changes the current active text
SdrTextObj * mpNextInChain
tools::Long GetEckenradius() const
SdrTextVertAdjust GetTextVerticalAdjust() const
TextChain * GetTextChain() const
void AdjustRectToTextDistance(tools::Rectangle &rAnchorRect) const
virtual SdrObjKind GetObjIdentifier() const override
virtual void TakeUnrotatedSnapRect(tools::Rectangle &rRect) const
virtual SdrText * getText(sal_Int32 nIndex) const override
returns the nth available text.
void SetTextAnimationAllowed(bool bNew)
void ForceOutlinerParaObject()
SdrTextAniKind GetTextAniKind() const
bool IsHideContour() const
void FitFrameToTextSize()
bool HasTextColumnsNumber() const
void SetObjectItemNoBroadcast(const SfxPoolItem &rItem)
bool GetPreventChainable() const
void SetNextLinkInChain(SdrTextObj *)
void SetupOutlinerFormatting(SdrOutliner &rOutl, tools::Rectangle &rPaintRect) const
Setup given Outliner equivalently to SdrTextObj::Paint()
sal_Int16 GetTextColumnsNumber() const
void setRectangle(tools::Rectangle const &rRectangle)
tools::Long GetTextUpperDistance() const
Top inner spacing to borders.
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
virtual bool IsVerticalWriting() const
OutlinerParaObject * GetOutlinerParaObject()
void CheckPortionInfo(const SdrOutliner &rOutliner)
void ForceOutlinerParaObject(OutlinerMode nOutlMode)
virtual void SetOutlinerParaObject(std::optional< OutlinerParaObject > pTextObject)
SfxItemPool * GetPool() const
bool HasItem(sal_uInt16 nWhich, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
void extendBy(tools::Long x, tools::Long y)
tools::Long AdjustWidth(tools::Long n)
constexpr tools::Long Width() const
void ExecuteUnderflow(SdrOutliner *)
void ExecuteOverflow(SdrOutliner *, SdrOutliner *)
bool decompose(B2DTuple &rScale, B2DTuple &rTranslate, double &rRotate, double &rShearX) const
void rotate(double fRadiant)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
void transform(const basegfx::B2DHomMatrix &rMatrix)
virtual void SetObjectItemDirect(const SfxPoolItem &rItem)=0
void SetFontSize(const Size &)
OUString SvxResId(TranslateId aId)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT(EE_CHAR_START+2)
tools::Long FRound(double fVal)
#define SAL_INFO(area, stream)
B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
B2DHomMatrix createScaleShearXRotateTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fShearX, double fRadiant, double fTranslateX, double fTranslateY)
OString stripStart(const OString &rIn, char c)
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
constexpr T & temporary(T &&x)
SdrMetricItem makeSdrEckenradiusItem(tools::Long nRadius)
SdrOnOffItem makeSdrShadowItem(bool bShadow)
SdrOnOffItem makeSdrTextAutoGrowHeightItem(bool bAuto)
SdrOnOffItem makeSdrTextAutoGrowWidthItem(bool bAuto)
@ SDRTEXTVERTADJUST_BOTTOM
@ SDRTEXTVERTADJUST_BLOCK
@ SDRTEXTVERTADJUST_CENTER
@ SDRTEXTHORZADJUST_BLOCK
@ SDRTEXTHORZADJUST_CENTER
@ SDRTEXTHORZADJUST_RIGHT
SdrTextAniKind
Animation type for text frame.
@ Slide
scroll back and forth
@ Alternate
scroll through
SdrMetricItem makeSdrTextMinFrameHeightItem(tools::Long mnHeight)
SdrMetricItem makeSdrTextMinFrameWidthItem(tools::Long mnWidth)
UNDERLYING_TYPE get() const
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_SHADOW(SDRATTR_SHADOW_FIRST+0)
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_TEXT_AUTOGROWWIDTH(SDRATTR_MISC_FIRST+12)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_LEFTDIST(SDRATTR_MISC_FIRST+4)
constexpr TypedWhichId< SdrTextFitToSizeTypeItem > SDRATTR_TEXT_FITTOSIZE(SDRATTR_MISC_FIRST+3)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_MAXFRAMEHEIGHT(SDRATTR_MISC_FIRST+9)
constexpr TypedWhichId< SdrTextFixedCellHeightItem > SDRATTR_TEXT_USEFIXEDCELLHEIGHT(SDRATTR_MISC_FIRST+23)
constexpr TypedWhichId< SdrTextHorzAdjustItem > SDRATTR_TEXT_HORZADJUST(SDRATTR_MISC_FIRST+13)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_MINFRAMEWIDTH(SDRATTR_MISC_FIRST+10)
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_TEXT_AUTOGROWHEIGHT(SDRATTR_MISC_FIRST+2)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_MINFRAMEHEIGHT(SDRATTR_MISC_FIRST+1)
constexpr TypedWhichId< SdrTextVertAdjustItem > SDRATTR_TEXT_VERTADJUST(SDRATTR_MISC_FIRST+8)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_MAXFRAMEWIDTH(SDRATTR_MISC_FIRST+11)
constexpr TypedWhichId< SdrTextAniKindItem > SDRATTR_TEXT_ANIKIND(SDRATTR_MISC_FIRST+14)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_RIGHTDIST(SDRATTR_MISC_FIRST+5)
constexpr TypedWhichId< SdrTextAniDirectionItem > SDRATTR_TEXT_ANIDIRECTION(SDRATTR_MISC_FIRST+15)
constexpr TypedWhichId< SfxInt16Item > SDRATTR_TEXTCOLUMNS_NUMBER(SDRATTR_TEXTCOLUMNS_FIRST+0)
constexpr TypedWhichId< SfxStringItem > SDRATTR_TEXT_CHAINNEXTNAME(SDRATTR_MISC_FIRST+25)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_LOWERDIST(SDRATTR_MISC_FIRST+7)
constexpr TypedWhichId< SvxWritingModeItem > SDRATTR_TEXTDIRECTION(SDRATTR_NOTPERSIST_FIRST+34)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_CORNER_RADIUS(SDRATTR_MISC_FIRST+0)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXTCOLUMNS_SPACING(SDRATTR_TEXTCOLUMNS_FIRST+1)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_TEXT_UPPERDIST(SDRATTR_MISC_FIRST+6)
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_TEXT_CONTOURFRAME(SDRATTR_MISC_FIRST+21)
SdrTextObj * DynCastSdrTextObj(SdrObject *pObj)
@ OutlineText
TitleText, special text object for StarDraw.
static SdrObject * ImpGetObjByName(SdrObjList const *pObjList, std::u16string_view aObjName)
static void ImpUpdateChainLinks(SdrTextObj *pTextObj, std::u16string_view aNextLinkName)
tools::Polygon Rect2Poly(const tools::Rectangle &rRect, const GeoStat &rGeo)
void RotatePoly(tools::Polygon &rPoly, const Point &rRef, double sn, double cs)
void ShearPoly(tools::Polygon &rPoly, const Point &rRef, double tn)
Degree100 NormAngle36000(Degree100 a)
Normalize angle to -180.00..179.99.
void ShearPoint(Point &rPnt, const Point &rRef, double tn, bool bVShear=false)
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
constexpr TypedWhichId< XFormTextStyleItem > XATTR_FORMTXTSTYLE(XATTR_TEXT_FIRST)
constexpr TypedWhichId< XFormTextHideFormItem > XATTR_FORMTXTHIDEFORM(XATTR_TEXT_FIRST+10)