LibreOffice Module svx (master)  1
svdotxat.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <comphelper/string.hxx>
21 #include <o3tl/sorted_vector.hxx>
22 #include <svl/style.hxx>
23 #include <svx/svdotext.hxx>
24 #include <svx/svdmodel.hxx>
25 #include <svx/svdoutl.hxx>
26 #include <svx/svdorect.hxx>
27 #include <svx/svdocapt.hxx>
28 #include <editeng/editdata.hxx>
29 #include <svx/sdtfchim.hxx>
30 
31 
32 #include <editeng/outlobj.hxx>
33 #include <editeng/outliner.hxx>
34 #include <editeng/editobj.hxx>
35 
36 namespace {
37 // The style family which is appended to the style names is padded to this many characters.
38 const short PADDING_LENGTH_FOR_STYLE_FAMILY = 5;
39 // this character will be used to pad the style families when they are appended to the style names
40 const char PADDING_CHARACTER_FOR_STYLE_FAMILY = ' ';
41 }
42 
43 bool SdrTextObj::AdjustTextFrameWidthAndHeight( tools::Rectangle& rR, bool bHgt, bool bWdt ) const
44 {
45  if (!mbTextFrame)
46  // Not a text frame. Bail out.
47  return false;
48 
49  if (rR.IsEmpty())
50  // Empty rectangle.
51  return false;
52 
53  bool bFitToSize = IsFitToSize();
54  if (bFitToSize)
55  return false;
56 
57  bool bWdtGrow = bWdt && IsAutoGrowWidth();
58  bool bHgtGrow = bHgt && IsAutoGrowHeight();
59  if (!bWdtGrow && !bHgtGrow)
60  // Not supposed to auto-adjust width or height.
61  return false;
62 
63  SdrTextAniKind eAniKind = GetTextAniKind();
65 
66  bool bScroll = eAniKind == SdrTextAniKind::Scroll || eAniKind == SdrTextAniKind::Alternate || eAniKind == SdrTextAniKind::Slide;
67  bool bHScroll = bScroll && (eAniDir == SdrTextAniDirection::Left || eAniDir == SdrTextAniDirection::Right);
68  bool bVScroll = bScroll && (eAniDir == SdrTextAniDirection::Up || eAniDir == SdrTextAniDirection::Down);
69 
70  tools::Rectangle aOldRect = rR;
71  tools::Long nHgt = 0, nMinHgt = 0, nMaxHgt = 0;
72  tools::Long nWdt = 0, nMinWdt = 0, nMaxWdt = 0;
73 
74  Size aNewSize = rR.GetSize();
75  aNewSize.AdjustWidth( -1 ); aNewSize.AdjustHeight( -1 );
76 
77  Size aMaxSiz(100000, 100000);
78  Size aTmpSiz(getSdrModelFromSdrObject().GetMaxObjSize());
79 
80  if (aTmpSiz.Width())
81  aMaxSiz.setWidth( aTmpSiz.Width() );
82  if (aTmpSiz.Height())
83  aMaxSiz.setHeight( aTmpSiz.Height() );
84 
85  if (bWdtGrow)
86  {
87  nMinWdt = GetMinTextFrameWidth();
88  nMaxWdt = GetMaxTextFrameWidth();
89  if (nMaxWdt == 0 || nMaxWdt > aMaxSiz.Width())
90  nMaxWdt = aMaxSiz.Width();
91  if (nMinWdt <= 0)
92  nMinWdt = 1;
93 
94  aNewSize.setWidth( nMaxWdt );
95  }
96 
97  if (bHgtGrow)
98  {
99  nMinHgt = GetMinTextFrameHeight();
100  nMaxHgt = GetMaxTextFrameHeight();
101  if (nMaxHgt == 0 || nMaxHgt > aMaxSiz.Height())
102  nMaxHgt = aMaxSiz.Height();
103  if (nMinHgt <= 0)
104  nMinHgt = 1;
105 
106  aNewSize.setHeight( nMaxHgt );
107  }
108 
111  aNewSize.AdjustWidth( -nHDist );
112  aNewSize.AdjustHeight( -nVDist );
113 
114  if (aNewSize.Width() < 2)
115  aNewSize.setWidth( 2 );
116  if (aNewSize.Height() < 2)
117  aNewSize.setHeight( 2 );
118 
119  if (!IsInEditMode())
120  {
121  if (bHScroll)
122  aNewSize.setWidth( 0x0FFFFFFF ); // don't break ticker text
123  if (bVScroll)
124  aNewSize.setHeight( 0x0FFFFFFF );
125  }
126 
127  if (mpEditingOutliner)
128  {
130  if (bWdtGrow)
131  {
133  nWdt = aSiz2.Width() + 1; // a little tolerance
134  if (bHgtGrow)
135  nHgt = aSiz2.Height() + 1; // a little tolerance
136  }
137  else
138  {
139  nHgt = mpEditingOutliner->GetTextHeight() + 1; // a little tolerance
140  }
141  }
142  else
143  {
144  Outliner& rOutliner = ImpGetDrawOutliner();
145  rOutliner.SetPaperSize(aNewSize);
146  rOutliner.SetUpdateLayout(true);
147  // TODO: add the optimization with bPortionInfoChecked etc. here
148  OutlinerParaObject* pOutlinerParaObject = GetOutlinerParaObject();
149  if (pOutlinerParaObject)
150  {
151  rOutliner.SetText(*pOutlinerParaObject);
153  }
154 
155  if (bWdtGrow)
156  {
157  Size aSiz2(rOutliner.CalcTextSize());
158  nWdt = aSiz2.Width() + 1; // a little tolerance
159  if (bHgtGrow)
160  nHgt = aSiz2.Height() + 1; // a little tolerance
161  }
162  else
163  {
164  nHgt = rOutliner.GetTextHeight() + 1; // a little tolerance
165  }
166  rOutliner.Clear();
167  }
168 
169  if (nWdt < nMinWdt)
170  nWdt = nMinWdt;
171  if (nWdt > nMaxWdt)
172  nWdt = nMaxWdt;
173  nWdt += nHDist;
174  if (nWdt < 1)
175  nWdt = 1; // nHDist may be negative
176  if (nHgt < nMinHgt)
177  nHgt = nMinHgt;
178  if (nHgt > nMaxHgt)
179  nHgt = nMaxHgt;
180  nHgt += nVDist;
181  if (nHgt < 1)
182  nHgt = 1; // nVDist may be negative
183  tools::Long nWdtGrow = nWdt - (rR.Right() - rR.Left());
184  tools::Long nHgtGrow = nHgt - (rR.Bottom() - rR.Top());
185 
186  if (nWdtGrow == 0)
187  bWdtGrow = false;
188  if (nHgtGrow == 0)
189  bHgtGrow = false;
190 
191  if (!bWdtGrow && !bHgtGrow)
192  return false;
193 
194  if (bWdtGrow)
195  {
197 
198  if (eHAdj == SDRTEXTHORZADJUST_LEFT)
199  rR.AdjustRight(nWdtGrow );
200  else if (eHAdj == SDRTEXTHORZADJUST_RIGHT)
201  rR.AdjustLeft( -nWdtGrow );
202  else
203  {
204  tools::Long nWdtGrow2 = nWdtGrow / 2;
205  rR.AdjustLeft( -nWdtGrow2 );
206  rR.SetRight( rR.Left() + nWdt );
207  }
208  }
209 
210  if (bHgtGrow)
211  {
213 
214  if (eVAdj == SDRTEXTVERTADJUST_TOP)
215  rR.AdjustBottom(nHgtGrow );
216  else if (eVAdj == SDRTEXTVERTADJUST_BOTTOM)
217  rR.AdjustTop( -nHgtGrow );
218  else
219  {
220  tools::Long nHgtGrow2 = nHgtGrow / 2;
221  rR.AdjustTop( -nHgtGrow2 );
222  rR.SetBottom( rR.Top() + nHgt );
223  }
224  }
225 
226  if (maGeo.nRotationAngle)
227  {
228  // Object is rotated.
229  Point aD1(rR.TopLeft());
230  aD1 -= aOldRect.TopLeft();
231  Point aD2(aD1);
233  aD2 -= aD1;
234  rR.Move(aD2.X(), aD2.Y());
235  }
236 
237  return true;
238 }
239 
241 {
242  bool bRet = AdjustTextFrameWidthAndHeight(maRect,bHgt,bWdt);
243  if (bRet)
244  {
246  if (auto pRectObj = dynamic_cast<SdrRectObj *>(this)) { // this is a hack
247  pRectObj->SetXPolyDirty();
248  }
249  if (auto pCaptionObj = dynamic_cast<SdrCaptionObj *>(this)) { // this is a hack
250  pCaptionObj->ImpRecalcTail();
251  }
252  }
253  return bRet;
254 }
255 
257 {
258  tools::Rectangle aNewRect(maRect);
259  bool bRet=AdjustTextFrameWidthAndHeight(aNewRect);
260  if (bRet) {
261  tools::Rectangle aBoundRect0; if (m_pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
262  maRect = aNewRect;
264  if (auto pRectObj = dynamic_cast<SdrRectObj *>(this)) { // this is a hack
265  pRectObj->SetXPolyDirty();
266  }
267  bool bScPostIt = false;
268  if (auto pCaptionObj = dynamic_cast<SdrCaptionObj *>(this)) { // this is a hack
269  pCaptionObj->ImpRecalcTail();
270  // tdf#114956, tdf#138549 use GetSpecialTextBoxShadow to recognize
271  // that this SdrCaption is for a ScPostit
272  bScPostIt = pCaptionObj->GetSpecialTextBoxShadow();
273  }
274 
275  // to not slow down EditView visualization on Overlay (see
276  // TextEditOverlayObject) it is necessary to suppress the
277  // Invalidates for the deep repaint when the size of the
278  // TextFrame changed (AdjustTextFrameWidthAndHeight returned
279  // true). The ObjectChanges are valid, invalidate will be
280  // done on EndTextEdit anyways
281  const bool bSuppressChangeWhenEditOnOverlay(
282  IsInEditMode() &&
284  GetTextEditOutliner()->hasEditViewCallbacks());
285 
286  if (!bSuppressChangeWhenEditOnOverlay || bScPostIt)
287  {
288  SetChanged();
290  }
291 
293  }
294  return bRet;
295 }
296 
298 {
299  SfxStyleSheetBasePool* pStylePool(getSdrModelFromSdrObject().GetStyleSheetPool());
300  if (pStylePool==nullptr)
301  return;
302 
303  std::vector<OUString> aStyleNames;
304  OutlinerParaObject* pOutlinerParaObject = GetOutlinerParaObject();
305  if (pOutlinerParaObject!=nullptr)
306  {
307  // First, we collect all stylesheets contained in the ParaObject in
308  // the container aStyles. The Family is always appended to the name
309  // of the stylesheet.
310  const EditTextObject& rTextObj=pOutlinerParaObject->GetTextObject();
311  OUString aStyleName;
312  SfxStyleFamily eStyleFam;
313  sal_Int32 nParaCnt=rTextObj.GetParagraphCount();
314 
315 
316  for(sal_Int32 nParaNum(0); nParaNum < nParaCnt; nParaNum++)
317  {
318  rTextObj.GetStyleSheet(nParaNum, aStyleName, eStyleFam);
319 
320  if (!aStyleName.isEmpty())
321  {
322  AppendFamilyToStyleName(aStyleName, eStyleFam);
323 
324  bool bFnd(false);
325  sal_uInt32 nNum(aStyleNames.size());
326 
327  while(!bFnd && nNum > 0)
328  {
329  // we don't want duplicate stylesheets
330  nNum--;
331  bFnd = aStyleName == aStyleNames[nNum];
332  }
333 
334  if(!bFnd)
335  {
336  aStyleNames.push_back(aStyleName);
337  }
338  }
339  }
340  }
341 
342  // now convert the strings in the vector from names to StyleSheet*
344  while (!aStyleNames.empty()) {
345  OUString aName = aStyleNames.back();
346  aStyleNames.pop_back();
347 
349  SfxStyleSheetBase* pStyleBase = pStylePool->Find(aName,eFam);
350  SfxStyleSheet* pStyle = dynamic_cast<SfxStyleSheet*>( pStyleBase );
351  if (pStyle!=nullptr && pStyle!=GetStyleSheet()) {
352  aStyleSheets.insert(pStyle);
353  }
354  }
355  // now remove all superfluous stylesheets
356  sal_uInt16 nNum=GetBroadcasterCount();
357  while (nNum>0) {
358  nNum--;
359  SfxBroadcaster* pBroadcast=GetBroadcasterJOE(nNum);
360  SfxStyleSheet* pStyle=dynamic_cast<SfxStyleSheet*>( pBroadcast );
361  if (pStyle!=nullptr && pStyle!=GetStyleSheet()) { // special case for stylesheet of the object
362  if (aStyleSheets.find(pStyle)==aStyleSheets.end()) {
363  EndListening(*pStyle);
364  }
365  }
366  }
367  // and finally, merge all stylesheets that are contained in aStyles with previous broadcasters
368  for(SfxStyleSheet* pStyle : aStyleSheets) {
369  // let StartListening see for itself if there's already a listener registered
370  StartListening(*pStyle, DuplicateHandling::Prevent);
371  }
372 }
373 
378 void SdrTextObj::RemoveOutlinerCharacterAttribs( const std::vector<sal_uInt16>& rCharWhichIds )
379 {
380  sal_Int32 nText = getTextCount();
381 
382  while( --nText >= 0 )
383  {
384  SdrText* pText = getText( nText );
385  OutlinerParaObject* pOutlinerParaObject = pText ? pText->GetOutlinerParaObject() : nullptr;
386 
387  if(pOutlinerParaObject)
388  {
389  Outliner* pOutliner = nullptr;
390 
391  if( mpEditingOutliner || (pText == getActiveText()) )
392  pOutliner = mpEditingOutliner;
393 
394  if(!pOutliner)
395  {
396  pOutliner = &ImpGetDrawOutliner();
397  pOutliner->SetText(*pOutlinerParaObject);
398  }
399 
400  ESelection aSelAll( 0, 0, EE_PARA_ALL, EE_TEXTPOS_ALL );
401  for( const auto& rWhichId : rCharWhichIds )
402  {
403  pOutliner->RemoveAttribs( aSelAll, false, rWhichId );
404  }
405 
406  if(!mpEditingOutliner || (pText != getActiveText()) )
407  {
408  const sal_Int32 nParaCount = pOutliner->GetParagraphCount();
409  std::optional<OutlinerParaObject> pTemp = pOutliner->CreateParaObject(0, nParaCount);
410  pOutliner->Clear();
411  NbcSetOutlinerParaObjectForText(std::move(pTemp), pText);
412  }
413  }
414  }
415 }
416 
418 {
419  if (mpEditingOutliner)
421 
423 
424  bool bHasText = false;
425  if( pOPO )
426  {
427  const EditTextObject& rETO = pOPO->GetTextObject();
428  sal_Int32 nParaCount = rETO.GetParagraphCount();
429 
430  if( nParaCount > 0 )
431  bHasText = (nParaCount > 1) || (!rETO.GetText( 0 ).isEmpty());
432  }
433 
434  return bHasText;
435 }
436 
437 void SdrTextObj::AppendFamilyToStyleName(OUString& styleName, SfxStyleFamily family)
438 {
439  OUStringBuffer aFam;
440  aFam.append(static_cast<sal_Int32>(family));
441  comphelper::string::padToLength(aFam, PADDING_LENGTH_FOR_STYLE_FAMILY , PADDING_CHARACTER_FOR_STYLE_FAMILY);
442 
443  styleName += "|" + aFam.makeStringAndClear();
444 }
445 
447 {
448  OUString familyString = styleName.copy(styleName.getLength() - PADDING_LENGTH_FOR_STYLE_FAMILY);
449  familyString = comphelper::string::stripEnd(familyString, PADDING_CHARACTER_FOR_STYLE_FAMILY);
450  sal_uInt16 nFam = static_cast<sal_uInt16>(familyString.toInt32());
451  assert(nFam != 0);
452  return static_cast<SfxStyleFamily>(nFam);
453 }
454 
455 
456 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
tools::Long GetTextLowerDistance() const
Bottom inner spacing to borders.
Definition: svdotext.cxx:1744
OString stripEnd(std::string_view rIn, char c)
virtual bool IsAutoGrowHeight() const
Definition: svdotext.cxx:303
void RemoveOutlinerCharacterAttribs(const std::vector< sal_uInt16 > &rCharWhichIds)
iterates over the paragraphs of a given SdrObject and removes all hard set character attributes with ...
Definition: svdotxat.cxx:378
virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt=true, bool bWdt=true)
Definition: svdotxat.cxx:240
tools::Long AdjustRight(tools::Long nHorzMoveDelta)
void setWidth(tools::Long nWidth)
std::string GetValue
constexpr tools::Long Left() const
virtual SdrText * getText(sal_Int32 nIndex) const override
returns the nth available text.
Definition: svdotext.cxx:2066
void SetPaperSize(const Size &rSize)
tools::Long GetTextLeftDistance() const
Left inner spacing to borders.
Definition: svdotext.cxx:1729
SdrTextHorzAdjust
Definition: sdtaitm.hxx:53
long Long
double mfSinRotationAngle
Definition: svdtrans.hxx:219
bool IsInEditMode() const
Definition: svdotext.hxx:314
SdrTextAniKind GetTextAniKind() const
Definition: svdotext.cxx:1749
const_iterator find(const Value &x) const
SfxBroadcaster * GetBroadcasterJOE(sal_uInt16 nNo) const
sal_uInt32 GetTextHeight() const
sal_Int32 GetParagraphCount() const
tools::Long GetMinTextFrameHeight() const
Definition: svdotext.cxx:1691
virtual bool HasText() const override
Definition: svdotxat.cxx:417
SdrTextAniKind
Animation type for text frame.
Definition: sdtakitm.hxx:29
tools::Long GetMaxTextFrameHeight() const
Definition: svdotext.cxx:1696
constexpr tools::Long Width() const
OutlinerParaObject * GetOutlinerParaObject()
Definition: svdtext.cxx:89
SfxStyleSheet * GetStyleSheet() const
Definition: svdobj.cxx:2225
tools::Rectangle maRect
Definition: svdotext.hxx:170
void SetFixedCellHeight(bool bUseFixedCellHeight)
static void AppendFamilyToStyleName(OUString &styleName, SfxStyleFamily family)
Appends the style family to a provided style name.
Definition: svdotxat.cxx:437
tools::Long GetMaxTextFrameWidth() const
Definition: svdotext.cxx:1706
SfxStyleFamily
virtual bool IsAutoGrowWidth() const
Definition: svdotext.cxx:328
SVX_DLLPRIVATE SdrOutliner * GetTextEditOutliner() const
Definition: svdotext.hxx:145
tools::Long AdjustBottom(tools::Long nVertMoveDelta)
sal_uInt16 GetBroadcasterCount() const
virtual void SetBoundAndSnapRectsDirty(bool bNotMyself=false, bool bRecursive=true)
Definition: svdobj.cxx:510
constexpr bool IsEmpty() const
void RemoveAttribs(const ESelection &rSelection, bool bRemoveParaAttribs, sal_uInt16 nWhich)
void NbcSetOutlinerParaObjectForText(std::optional< OutlinerParaObject > pTextObject, SdrText *pText)
Definition: svdotext.cxx:1344
SdrTextHorzAdjust GetTextHorizontalAdjust() const
Definition: svdotext.cxx:355
bool mbTextFrame
Definition: svdotext.hxx:219
const EditTextObject & GetTextObject() const
SdrTextVertAdjust GetTextVerticalAdjust() const
Definition: svdotext.cxx:387
void SetText(const OutlinerParaObject &)
#define EE_PARA_ALL
bool IsFitToSize() const
returns true if the old feature for fitting shape content should into shape is enabled. implies IsAutoFit()==false!
Definition: svdotext.cxx:1850
SdrOutliner * mpEditingOutliner
Definition: svdotext.hxx:184
void BroadcastObjectChange() const
Definition: svdobj.cxx:1008
virtual OUString GetText(sal_Int32 nPara) const =0
constexpr tools::Long Right() const
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:279
SdrObjUserCall * m_pUserCall
Definition: svdobj.hxx:878
constexpr tools::Long Top() const
constexpr void SetRight(tools::Long v)
constexpr void SetBottom(tools::Long v)
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
const_iterator end() const
virtual SdrText * getActiveText() const
returns the currently active text.
Definition: svdotext.cxx:2057
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
Definition: svdobj.cxx:2013
std::optional< OutlinerParaObject > CreateParaObject(sal_Int32 nStartPara=0, sal_Int32 nParaCount=EE_PARA_ALL) const
tools::Long GetMinTextFrameWidth() const
Definition: svdotext.cxx:1701
constexpr Point TopLeft() const
tools::Long AdjustTop(tools::Long nVertMoveDelta)
constexpr tools::Long Bottom() const
static SfxStyleFamily ReadFamilyFromStyleName(const OUString &styleName)
Reads the style family from a style name to which the family has been appended.
Definition: svdotxat.cxx:446
tools::Long GetTextRightDistance() const
Right inner spacing to borders.
Definition: svdotext.cxx:1734
virtual const tools::Rectangle & GetLastBoundRect() const
Definition: svdobj.cxx:971
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
Definition: svdtrans.hxx:114
constexpr Size GetSize() const
tools::Long GetTextUpperDistance() const
Top inner spacing to borders.
Definition: svdotext.cxx:1739
void SetMaxAutoPaperSize(const Size &rSz)
constexpr tools::Long Height() const
virtual OutlinerParaObject * GetOutlinerParaObject() const override
Definition: svdotext.cxx:1330
virtual bool AdjustTextFrameWidthAndHeight()
Definition: svdotxat.cxx:256
GeoStat maGeo
Definition: svdotext.hxx:173
virtual sal_Int32 GetParagraphCount() const =0
Degree100 nRotationAngle
Definition: svdtrans.hxx:216
OUString aName
tools::Long AdjustWidth(tools::Long n)
double mfCosRotationAngle
Definition: svdtrans.hxx:220
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
void ImpSetTextStyleSheetListeners()
Definition: svdotxat.cxx:297
bool SetUpdateLayout(bool bUpdate)
SdrTextAniDirection GetTextAniDirection() const
Definition: svdotext.cxx:1754
SdrTextAniDirection
Definition: sdtaditm.hxx:29
tools::Long AdjustHeight(tools::Long n)
constexpr TypedWhichId< SdrTextFixedCellHeightItem > SDRATTR_TEXT_USEFIXEDCELLHEIGHT(SDRATTR_MISC_FIRST+23)
void setHeight(tools::Long nHeight)
void Move(tools::Long nHorzMoveDelta, tools::Long nVertMoveDelta)
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
Definition: svdotext.cxx:2081
tools::Long AdjustLeft(tools::Long nHorzMoveDelta)
virtual void GetStyleSheet(sal_Int32 nPara, OUString &rName, SfxStyleFamily &eFamily) const =0
void Clear()
std::pair< const_iterator, bool > insert(Value &&x)
virtual void SetChanged()
Definition: svdobj.cxx:1032
virtual SfxStyleSheetBase * Find(const OUString &, SfxStyleFamily eFam, SfxStyleSearchBits n=SfxStyleSearchBits::All)
#define EE_TEXTPOS_ALL
SdrOutliner & ImpGetDrawOutliner() const
Definition: svdotext.cxx:1164
Size CalcTextSize()
static bool HasTextImpl(SdrOutliner const *pOutliner)
returns false if the given pointer is NULL or if the given SdrOutliner contains no text...
Definition: svdotext.cxx:467
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
Definition: svdobj.cxx:2739
SdrTextVertAdjust
Definition: sdtaitm.hxx:29
scroll back and forth
OStringBuffer & padToLength(OStringBuffer &rBuffer, sal_Int32 nLength, char cFill= '\0')