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 <svl/style.hxx>
22 #include <svx/svdotext.hxx>
23 #include <svx/svdmodel.hxx>
24 #include <svx/svdoutl.hxx>
25 #include <svx/svdorect.hxx>
26 #include <svx/svdocapt.hxx>
27 #include <editeng/editdata.hxx>
28 #include <svx/sdtfchim.hxx>
29 
30 
31 #include <editeng/outlobj.hxx>
32 #include <editeng/outliner.hxx>
33 #include <editeng/editobj.hxx>
34 
35 namespace {
36 // The style family which is appended to the style names is padded to this many characters.
37 const short PADDING_LENGTH_FOR_STYLE_FAMILY = 5;
38 // this character will be used to pad the style families when they are appended to the style names
39 const char PADDING_CHARACTER_FOR_STYLE_FAMILY = ' ';
40 }
41 
42 bool SdrTextObj::AdjustTextFrameWidthAndHeight( tools::Rectangle& rR, bool bHgt, bool bWdt ) const
43 {
44  if (!bTextFrame)
45  // Not a text frame. Bail out.
46  return false;
47 
48  if (rR.IsEmpty())
49  // Empty rectangle.
50  return false;
51 
52  bool bFitToSize = IsFitToSize();
53  if (bFitToSize)
54  return false;
55 
56  bool bWdtGrow = bWdt && IsAutoGrowWidth();
57  bool bHgtGrow = bHgt && IsAutoGrowHeight();
58  if (!bWdtGrow && !bHgtGrow)
59  // Not supposed to auto-adjust width or height.
60  return false;
61 
62  SdrTextAniKind eAniKind = GetTextAniKind();
64 
65  bool bScroll = eAniKind == SdrTextAniKind::Scroll || eAniKind == SdrTextAniKind::Alternate || eAniKind == SdrTextAniKind::Slide;
66  bool bHScroll = bScroll && (eAniDir == SdrTextAniDirection::Left || eAniDir == SdrTextAniDirection::Right);
67  bool bVScroll = bScroll && (eAniDir == SdrTextAniDirection::Up || eAniDir == SdrTextAniDirection::Down);
68 
69  tools::Rectangle aOldRect = rR;
70  long nHgt = 0, nMinHgt = 0, nMaxHgt = 0;
71  long nWdt = 0, nMinWdt = 0, nMaxWdt = 0;
72 
73  Size aNewSize = rR.GetSize();
74  aNewSize.AdjustWidth( -1 ); aNewSize.AdjustHeight( -1 );
75 
76  Size aMaxSiz(100000, 100000);
77  Size aTmpSiz(getSdrModelFromSdrObject().GetMaxObjSize());
78 
79  if (aTmpSiz.Width())
80  aMaxSiz.setWidth( aTmpSiz.Width() );
81  if (aTmpSiz.Height())
82  aMaxSiz.setHeight( aTmpSiz.Height() );
83 
84  if (bWdtGrow)
85  {
86  nMinWdt = GetMinTextFrameWidth();
87  nMaxWdt = GetMaxTextFrameWidth();
88  if (nMaxWdt == 0 || nMaxWdt > aMaxSiz.Width())
89  nMaxWdt = aMaxSiz.Width();
90  if (nMinWdt <= 0)
91  nMinWdt = 1;
92 
93  aNewSize.setWidth( nMaxWdt );
94  }
95 
96  if (bHgtGrow)
97  {
98  nMinHgt = GetMinTextFrameHeight();
99  nMaxHgt = GetMaxTextFrameHeight();
100  if (nMaxHgt == 0 || nMaxHgt > aMaxSiz.Height())
101  nMaxHgt = aMaxSiz.Height();
102  if (nMinHgt <= 0)
103  nMinHgt = 1;
104 
105  aNewSize.setHeight( nMaxHgt );
106  }
107 
108  long nHDist = GetTextLeftDistance() + GetTextRightDistance();
109  long nVDist = GetTextUpperDistance() + GetTextLowerDistance();
110  aNewSize.AdjustWidth( -nHDist );
111  aNewSize.AdjustHeight( -nVDist );
112 
113  if (aNewSize.Width() < 2)
114  aNewSize.setWidth( 2 );
115  if (aNewSize.Height() < 2)
116  aNewSize.setHeight( 2 );
117 
118  if (!IsInEditMode())
119  {
120  if (bHScroll)
121  aNewSize.setWidth( 0x0FFFFFFF ); // don't break ticker text
122  if (bVScroll)
123  aNewSize.setHeight( 0x0FFFFFFF );
124  }
125 
126  if (pEdtOutl)
127  {
128  pEdtOutl->SetMaxAutoPaperSize(aNewSize);
129  if (bWdtGrow)
130  {
131  Size aSiz2(pEdtOutl->CalcTextSize());
132  nWdt = aSiz2.Width() + 1; // a little tolerance
133  if (bHgtGrow)
134  nHgt = aSiz2.Height() + 1; // a little tolerance
135  }
136  else
137  {
138  nHgt = pEdtOutl->GetTextHeight() + 1; // a little tolerance
139  }
140  }
141  else
142  {
143  Outliner& rOutliner = ImpGetDrawOutliner();
144  rOutliner.SetPaperSize(aNewSize);
145  rOutliner.SetUpdateMode(true);
146  // TODO: add the optimization with bPortionInfoChecked etc. here
147  OutlinerParaObject* pOutlinerParaObject = GetOutlinerParaObject();
148  if (pOutlinerParaObject)
149  {
150  rOutliner.SetText(*pOutlinerParaObject);
152  }
153 
154  if (bWdtGrow)
155  {
156  Size aSiz2(rOutliner.CalcTextSize());
157  nWdt = aSiz2.Width() + 1; // a little tolerance
158  if (bHgtGrow)
159  nHgt = aSiz2.Height() + 1; // a little tolerance
160  }
161  else
162  {
163  nHgt = rOutliner.GetTextHeight() + 1; // a little tolerance
164  }
165  rOutliner.Clear();
166  }
167 
168  if (nWdt < nMinWdt)
169  nWdt = nMinWdt;
170  if (nWdt > nMaxWdt)
171  nWdt = nMaxWdt;
172  nWdt += nHDist;
173  if (nWdt < 1)
174  nWdt = 1; // nHDist may be negative
175  if (nHgt < nMinHgt)
176  nHgt = nMinHgt;
177  if (nHgt > nMaxHgt)
178  nHgt = nMaxHgt;
179  nHgt += nVDist;
180  if (nHgt < 1)
181  nHgt = 1; // nVDist may be negative
182  long nWdtGrow = nWdt - (rR.Right() - rR.Left());
183  long nHgtGrow = nHgt - (rR.Bottom() - rR.Top());
184 
185  if (nWdtGrow == 0)
186  bWdtGrow = false;
187  if (nHgtGrow == 0)
188  bHgtGrow = false;
189 
190  if (!bWdtGrow && !bHgtGrow)
191  return false;
192 
193  if (bWdtGrow)
194  {
196 
197  if (eHAdj == SDRTEXTHORZADJUST_LEFT)
198  rR.AdjustRight(nWdtGrow );
199  else if (eHAdj == SDRTEXTHORZADJUST_RIGHT)
200  rR.AdjustLeft( -nWdtGrow );
201  else
202  {
203  long nWdtGrow2 = nWdtGrow / 2;
204  rR.AdjustLeft( -nWdtGrow2 );
205  rR.SetRight( rR.Left() + nWdt );
206  }
207  }
208 
209  if (bHgtGrow)
210  {
212 
213  if (eVAdj == SDRTEXTVERTADJUST_TOP)
214  rR.AdjustBottom(nHgtGrow );
215  else if (eVAdj == SDRTEXTVERTADJUST_BOTTOM)
216  rR.AdjustTop( -nHgtGrow );
217  else
218  {
219  long nHgtGrow2 = nHgtGrow / 2;
220  rR.AdjustTop( -nHgtGrow2 );
221  rR.SetBottom( rR.Top() + nHgt );
222  }
223  }
224 
225  if (aGeo.nRotationAngle)
226  {
227  // Object is rotated.
228  Point aD1(rR.TopLeft());
229  aD1 -= aOldRect.TopLeft();
230  Point aD2(aD1);
231  RotatePoint(aD2, Point(), aGeo.nSin, aGeo.nCos);
232  aD2 -= aD1;
233  rR.Move(aD2.X(), aD2.Y());
234  }
235 
236  return true;
237 }
238 
240 {
241  bool bRet = AdjustTextFrameWidthAndHeight(maRect,bHgt,bWdt);
242  if (bRet)
243  {
244  SetRectsDirty();
245  if (dynamic_cast<const SdrRectObj *>(this) != nullptr) { // this is a hack
246  static_cast<SdrRectObj*>(this)->SetXPolyDirty();
247  }
248  if (dynamic_cast<const SdrCaptionObj *>(this) != nullptr) { // this is a hack
249  static_cast<SdrCaptionObj*>(this)->ImpRecalcTail();
250  }
251  }
252  return bRet;
253 }
254 
256 {
257  tools::Rectangle aNewRect(maRect);
258  bool bRet=AdjustTextFrameWidthAndHeight(aNewRect);
259  if (bRet) {
260  tools::Rectangle aBoundRect0; if (pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
261  maRect = aNewRect;
262  SetRectsDirty();
263  if (dynamic_cast<const SdrRectObj *>(this) != nullptr) { // this is a hack
264  static_cast<SdrRectObj*>(this)->SetXPolyDirty();
265  }
266  if (dynamic_cast<const SdrCaptionObj *>(this) != nullptr) { // this is a hack
267  static_cast<SdrCaptionObj*>(this)->ImpRecalcTail();
268  }
269 
270  // to not slow down EditView visualization on Overlay (see
271  // TextEditOverlayObject) it is necessary to suppress the
272  // Invalidates for the deep repaint when the size of the
273  // TextFrame changed (AdjustTextFrameWidthAndHeight returned
274  // true). The ObjectChanges are valid, invalidate will be
275  // done on EndTextEdit anyways
276  const bool bSuppressChangeWhenEditOnOverlay(
277  IsInEditMode() &&
279  GetTextEditOutliner()->hasEditViewCallbacks());
280 
281  if (!bSuppressChangeWhenEditOnOverlay)
282  {
283  SetChanged();
285  }
286 
288  }
289  return bRet;
290 }
291 
293 {
294  SfxStyleSheetBasePool* pStylePool(getSdrModelFromSdrObject().GetStyleSheetPool());
295  if (pStylePool!=nullptr)
296  {
297  std::vector<OUString> aStyleNames;
298  OutlinerParaObject* pOutlinerParaObject = GetOutlinerParaObject();
299  if (pOutlinerParaObject!=nullptr)
300  {
301  // First, we collect all stylesheets contained in the ParaObject in
302  // the container aStyles. The Family is always appended to the name
303  // of the stylesheet.
304  const EditTextObject& rTextObj=pOutlinerParaObject->GetTextObject();
305  OUString aStyleName;
306  SfxStyleFamily eStyleFam;
307  sal_Int32 nParaCnt=rTextObj.GetParagraphCount();
308 
309 
310  for(sal_Int32 nParaNum(0); nParaNum < nParaCnt; nParaNum++)
311  {
312  rTextObj.GetStyleSheet(nParaNum, aStyleName, eStyleFam);
313 
314  if (!aStyleName.isEmpty())
315  {
316  AppendFamilyToStyleName(aStyleName, eStyleFam);
317 
318  bool bFnd(false);
319  sal_uInt32 nNum(aStyleNames.size());
320 
321  while(!bFnd && nNum > 0)
322  {
323  // we don't want duplicate stylesheets
324  nNum--;
325  bFnd = aStyleName == aStyleNames[nNum];
326  }
327 
328  if(!bFnd)
329  {
330  aStyleNames.push_back(aStyleName);
331  }
332  }
333  }
334  }
335 
336  // now convert the strings in the vector from names to StyleSheet*
338  while (!aStyleNames.empty()) {
339  OUString aName = aStyleNames.back();
340  aStyleNames.pop_back();
341 
343  SfxStyleSheetBase* pStyleBase = pStylePool->Find(aName,eFam);
344  SfxStyleSheet* pStyle = dynamic_cast<SfxStyleSheet*>( pStyleBase );
345  if (pStyle!=nullptr && pStyle!=GetStyleSheet()) {
346  aStyleSheets.insert(pStyle);
347  }
348  }
349  // now remove all superfluous stylesheets
350  sal_uInt16 nNum=GetBroadcasterCount();
351  while (nNum>0) {
352  nNum--;
353  SfxBroadcaster* pBroadcast=GetBroadcasterJOE(nNum);
354  SfxStyleSheet* pStyle=dynamic_cast<SfxStyleSheet*>( pBroadcast );
355  if (pStyle!=nullptr && pStyle!=GetStyleSheet()) { // special case for stylesheet of the object
356  if (aStyleSheets.find(pStyle)==aStyleSheets.end()) {
357  EndListening(*pStyle);
358  }
359  }
360  }
361  // and finally, merge all stylesheets that are contained in aStyles with previous broadcasters
362  for(SfxStyleSheet* pStyle : aStyleSheets) {
363  // let StartListening see for itself if there's already a listener registered
364  StartListening(*pStyle, DuplicateHandling::Prevent);
365  }
366  }
367 }
368 
373 void SdrTextObj::RemoveOutlinerCharacterAttribs( const std::vector<sal_uInt16>& rCharWhichIds )
374 {
375  sal_Int32 nText = getTextCount();
376 
377  while( --nText >= 0 )
378  {
379  SdrText* pText = getText( nText );
380  OutlinerParaObject* pOutlinerParaObject = pText ? pText->GetOutlinerParaObject() : nullptr;
381 
382  if(pOutlinerParaObject)
383  {
384  Outliner* pOutliner = nullptr;
385 
386  if( pEdtOutl || (pText == getActiveText()) )
387  pOutliner = pEdtOutl;
388 
389  if(!pOutliner)
390  {
391  pOutliner = &ImpGetDrawOutliner();
392  pOutliner->SetText(*pOutlinerParaObject);
393  }
394 
395  ESelection aSelAll( 0, 0, EE_PARA_ALL, EE_TEXTPOS_ALL );
396  for( const auto& rWhichId : rCharWhichIds )
397  {
398  pOutliner->RemoveAttribs( aSelAll, false, rWhichId );
399  }
400 
401  if(!pEdtOutl || (pText != getActiveText()) )
402  {
403  const sal_Int32 nParaCount = pOutliner->GetParagraphCount();
404  std::unique_ptr<OutlinerParaObject> pTemp = pOutliner->CreateParaObject(0, nParaCount);
405  pOutliner->Clear();
406  NbcSetOutlinerParaObjectForText(std::move(pTemp), pText);
407  }
408  }
409  }
410 }
411 
413 {
414  if( pEdtOutl )
415  return HasTextImpl(pEdtOutl);
416 
418 
419  bool bHasText = false;
420  if( pOPO )
421  {
422  const EditTextObject& rETO = pOPO->GetTextObject();
423  sal_Int32 nParaCount = rETO.GetParagraphCount();
424 
425  if( nParaCount > 0 )
426  bHasText = (nParaCount > 1) || (!rETO.GetText( 0 ).isEmpty());
427  }
428 
429  return bHasText;
430 }
431 
432 void SdrTextObj::AppendFamilyToStyleName(OUString& styleName, SfxStyleFamily family)
433 {
434  OUStringBuffer aFam;
435  aFam.append(static_cast<sal_Int32>(family));
436  comphelper::string::padToLength(aFam, PADDING_LENGTH_FOR_STYLE_FAMILY , PADDING_CHARACTER_FOR_STYLE_FAMILY);
437 
438  styleName += "|" + aFam.makeStringAndClear();
439 }
440 
442 {
443  OUString familyString = styleName.copy(styleName.getLength() - PADDING_LENGTH_FOR_STYLE_FAMILY);
444  familyString = comphelper::string::stripEnd(familyString, PADDING_CHARACTER_FOR_STYLE_FAMILY);
445  sal_uInt16 nFam = static_cast<sal_uInt16>(familyString.toInt32());
446  assert(nFam != 0);
447  return static_cast<SfxStyleFamily>(nFam);
448 }
449 
450 
451 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
OString stripEnd(const OString &rIn, char c)
Point TopLeft() const
long Width() const
long GetMinTextFrameHeight() const
Definition: svdotext.cxx:1704
virtual bool IsAutoGrowHeight() const
Definition: svdotext.cxx:257
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:373
virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt=true, bool bWdt=true)
Definition: svdotxat.cxx:239
long AdjustWidth(long n)
SdrObjUserCall * pUserCall
Definition: svdobj.hxx:923
std::string GetValue
long Height() const
double nSin
Definition: svdtrans.hxx:219
virtual SdrText * getText(sal_Int32 nIndex) const override
returns the nth available text.
Definition: svdotext.cxx:2049
GeoStat aGeo
Definition: svdotext.hxx:185
void SetPaperSize(const Size &rSize)
SdrTextHorzAdjust
Definition: sdtaitm.hxx:53
long AdjustLeft(long nHorzMoveDelta)
long GetMinTextFrameWidth() const
Definition: svdotext.cxx:1714
void GetStyleSheet(sal_Int32 nPara, OUString &rName, SfxStyleFamily &eFamily) const
SdrOutliner * pEdtOutl
Definition: svdotext.hxx:196
long nRotationAngle
Definition: svdtrans.hxx:216
bool IsInEditMode() const
Definition: svdotext.hxx:323
SdrTextAniKind GetTextAniKind() const
Definition: svdotext.cxx:1762
const_iterator find(const Value &x) const
SfxBroadcaster * GetBroadcasterJOE(sal_uInt16 nNo) const
sal_Int32 GetParagraphCount() const
long AdjustHeight(long n)
virtual bool HasText() const override
Definition: svdotxat.cxx:412
SdrTextAniKind
Animation type for text frame.
Definition: sdtakitm.hxx:29
long AdjustBottom(long nVertMoveDelta)
void Move(long nHorzMoveDelta, long nVertMoveDelta)
Rectangle objects (rectangle, circle, ...)
Definition: svdorect.hxx:39
bool IsEmpty() const
long Right() const
SfxStyleSheet * GetStyleSheet() const
Definition: svdobj.cxx:2134
tools::Rectangle maRect
Definition: svdotext.hxx:182
void SetFixedCellHeight(bool bUseFixedCellHeight)
static void AppendFamilyToStyleName(OUString &styleName, SfxStyleFamily family)
Appends the style family to a provided style name.
Definition: svdotxat.cxx:432
long Top() const
SfxStyleFamily
virtual bool IsAutoGrowWidth() const
Definition: svdotext.cxx:282
SVX_DLLPRIVATE SdrOutliner * GetTextEditOutliner() const
Definition: svdotext.hxx:157
sal_uInt16 GetBroadcasterCount() const
OUString GetText(sal_Int32 nPara) const
void RemoveAttribs(const ESelection &rSelection, bool bRemoveParaAttribs, sal_uInt16 nWhich)
SdrTextHorzAdjust GetTextHorizontalAdjust() const
Definition: svdotext.cxx:309
const EditTextObject & GetTextObject() const
SdrTextVertAdjust GetTextVerticalAdjust() const
Definition: svdotext.cxx:341
double nCos
Definition: svdtrans.hxx:220
long GetTextLeftDistance() const
Left inner spacing to borders.
Definition: svdotext.cxx:1742
void SetText(const OutlinerParaObject &)
long GetTextRightDistance() const
Right inner spacing to borders.
Definition: svdotext.cxx:1747
#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:1833
void BroadcastObjectChange() const
Definition: svdobj.cxx:904
void SetRight(long v)
long GetMaxTextFrameHeight() const
Definition: svdotext.cxx:1709
long Bottom() const
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:272
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
const_iterator end() const
virtual SdrText * getActiveText() const
returns the currently active text.
Definition: svdotext.cxx:2040
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
Definition: svdobj.cxx:1918
long GetTextUpperDistance() const
Top inner spacing to borders.
Definition: svdotext.cxx:1752
Size GetSize() const
bool bTextFrame
Definition: svdotext.hxx:231
static SfxStyleFamily ReadFamilyFromStyleName(const OUString &styleName)
Reads the style family from a style name to which the family has been appended.
Definition: svdotxat.cxx:441
long GetMaxTextFrameWidth() const
Definition: svdotext.cxx:1719
sal_Int32 GetParagraphCount() const
virtual const tools::Rectangle & GetLastBoundRect() const
Definition: svdobj.cxx:867
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
Definition: svdtrans.hxx:114
std::unique_ptr< OutlinerParaObject > CreateParaObject(sal_Int32 nStartPara=0, sal_Int32 nParaCount=EE_PARA_ALL) const
void SetMaxAutoPaperSize(const Size &rSz)
long AdjustRight(long nHorzMoveDelta)
virtual OutlinerParaObject * GetOutlinerParaObject() const override
Definition: svdotext.cxx:1354
virtual bool AdjustTextFrameWidthAndHeight()
Definition: svdotxat.cxx:255
void NbcSetOutlinerParaObjectForText(std::unique_ptr< OutlinerParaObject > pTextObject, SdrText *pText)
Definition: svdotext.cxx:1368
OUString aName
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
void SetBottom(long v)
long AdjustTop(long nVertMoveDelta)
void ImpSetTextStyleSheetListeners()
Definition: svdotxat.cxx:292
SdrTextAniDirection GetTextAniDirection() const
Definition: svdotext.cxx:1767
void SetUpdateMode(bool bUpdate)
long Left() const
SdrTextAniDirection
Definition: sdtaditm.hxx:29
virtual void SetRectsDirty(bool bNotMyself=false, bool bRecursive=true)
Definition: svdobj.cxx:434
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
Definition: svdotext.cxx:2064
#define SDRATTR_TEXT_USEFIXEDCELLHEIGHT
Definition: svddef.hxx:222
void Clear()
OutlinerParaObject * GetOutlinerParaObject() const
Definition: svdtext.cxx:88
std::pair< const_iterator, bool > insert(Value &&x)
virtual void SetChanged()
Definition: svdobj.cxx:928
sal_uLong GetTextHeight() const
virtual SfxStyleSheetBase * Find(const OUString &, SfxStyleFamily eFam, SfxStyleSearchBits n=SfxStyleSearchBits::All)
void setWidth(long nWidth)
#define EE_TEXTPOS_ALL
SdrOutliner & ImpGetDrawOutliner() const
Definition: svdotext.cxx:1144
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:420
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
Definition: svdobj.cxx:2648
SdrTextVertAdjust
Definition: sdtaitm.hxx:29
long GetTextLowerDistance() const
Bottom inner spacing to borders.
Definition: svdotext.cxx:1757
scroll back and forth
void setHeight(long nHeight)
OStringBuffer & padToLength(OStringBuffer &rBuffer, sal_Int32 nLength, char cFill= '\0')