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