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