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 bool bRet = AdjustTextFrameWidthAndHeight(maRect,bHgt,bWdt);
244 if (bRet)
245 {
247 if (auto pRectObj = dynamic_cast<SdrRectObj *>(this)) { // this is a hack
248 pRectObj->SetXPolyDirty();
249 }
250 if (auto pCaptionObj = dynamic_cast<SdrCaptionObj *>(this)) { // this is a hack
251 pCaptionObj->ImpRecalcTail();
252 }
253 }
254 return bRet;
255}
256
258{
259 tools::Rectangle aNewRect(maRect);
260 bool bRet=AdjustTextFrameWidthAndHeight(aNewRect);
261 if (bRet) {
262 tools::Rectangle aBoundRect0; if (m_pUserCall!=nullptr) aBoundRect0=GetLastBoundRect();
263 maRect = aNewRect;
265 if (auto pRectObj = dynamic_cast<SdrRectObj *>(this)) { // this is a hack
266 pRectObj->SetXPolyDirty();
267 }
268 bool bScPostIt = false;
269 if (auto pCaptionObj = dynamic_cast<SdrCaptionObj *>(this)) { // this is a hack
270 pCaptionObj->ImpRecalcTail();
271 // tdf#114956, tdf#138549 use GetSpecialTextBoxShadow to recognize
272 // that this SdrCaption is for a ScPostit
273 bScPostIt = pCaptionObj->GetSpecialTextBoxShadow();
274 }
275
276 // to not slow down EditView visualization on Overlay (see
277 // TextEditOverlayObject) it is necessary to suppress the
278 // Invalidates for the deep repaint when the size of the
279 // TextFrame changed (AdjustTextFrameWidthAndHeight returned
280 // true). The ObjectChanges are valid, invalidate will be
281 // done on EndTextEdit anyways
282 const bool bSuppressChangeWhenEditOnOverlay(
283 IsInEditMode() &&
285 GetTextEditOutliner()->hasEditViewCallbacks());
286
287 if (!bSuppressChangeWhenEditOnOverlay || bScPostIt)
288 {
289 SetChanged();
291 }
292
294 }
295 return bRet;
296}
297
299{
300 SfxStyleSheetBasePool* pStylePool(getSdrModelFromSdrObject().GetStyleSheetPool());
301 if (pStylePool==nullptr)
302 return;
303
304 std::vector<OUString> aStyleNames;
305 OutlinerParaObject* pOutlinerParaObject = GetOutlinerParaObject();
306 if (pOutlinerParaObject!=nullptr)
307 {
308 // First, we collect all stylesheets contained in the ParaObject in
309 // the container aStyles. The Family is always appended to the name
310 // of the stylesheet.
311 const EditTextObject& rTextObj=pOutlinerParaObject->GetTextObject();
312 OUString aStyleName;
313 SfxStyleFamily eStyleFam;
314 sal_Int32 nParaCnt=rTextObj.GetParagraphCount();
315
316
317 for(sal_Int32 nParaNum(0); nParaNum < nParaCnt; nParaNum++)
318 {
319 rTextObj.GetStyleSheet(nParaNum, aStyleName, eStyleFam);
320
321 if (!aStyleName.isEmpty())
322 {
323 AppendFamilyToStyleName(aStyleName, eStyleFam);
324
325 bool bFnd(false);
326 sal_uInt32 nNum(aStyleNames.size());
327
328 while(!bFnd && nNum > 0)
329 {
330 // we don't want duplicate stylesheets
331 nNum--;
332 bFnd = aStyleName == aStyleNames[nNum];
333 }
334
335 if(!bFnd)
336 {
337 aStyleNames.push_back(aStyleName);
338 }
339 }
340 }
341 }
342
343 // now convert the strings in the vector from names to StyleSheet*
345 while (!aStyleNames.empty()) {
346 OUString aName = aStyleNames.back();
347 aStyleNames.pop_back();
348
350 SfxStyleSheetBase* pStyleBase = pStylePool->Find(aName,eFam);
351 SfxStyleSheet* pStyle = dynamic_cast<SfxStyleSheet*>( pStyleBase );
352 if (pStyle!=nullptr && pStyle!=GetStyleSheet()) {
353 aStyleSheets.insert(pStyle);
354 }
355 }
356 // now remove all superfluous stylesheets
357 sal_uInt16 nNum=GetBroadcasterCount();
358 while (nNum>0) {
359 nNum--;
360 SfxBroadcaster* pBroadcast=GetBroadcasterJOE(nNum);
361 SfxStyleSheet* pStyle=dynamic_cast<SfxStyleSheet*>( pBroadcast );
362 if (pStyle!=nullptr && pStyle!=GetStyleSheet()) { // special case for stylesheet of the object
363 if (aStyleSheets.find(pStyle)==aStyleSheets.end()) {
364 EndListening(*pStyle);
365 }
366 }
367 }
368 // and finally, merge all stylesheets that are contained in aStyles with previous broadcasters
369 for(SfxStyleSheet* pStyle : aStyleSheets) {
370 // let StartListening see for itself if there's already a listener registered
371 StartListening(*pStyle, DuplicateHandling::Prevent);
372 }
373}
374
379void SdrTextObj::RemoveOutlinerCharacterAttribs( const std::vector<sal_uInt16>& rCharWhichIds )
380{
381 sal_Int32 nText = getTextCount();
382
383 while( --nText >= 0 )
384 {
385 SdrText* pText = getText( nText );
386 OutlinerParaObject* pOutlinerParaObject = pText ? pText->GetOutlinerParaObject() : nullptr;
387
388 if(pOutlinerParaObject)
389 {
390 Outliner* pOutliner = nullptr;
391
392 if( mpEditingOutliner || (pText == getActiveText()) )
393 pOutliner = mpEditingOutliner;
394
395 if(!pOutliner)
396 {
397 pOutliner = &ImpGetDrawOutliner();
398 pOutliner->SetText(*pOutlinerParaObject);
399 }
400
401 ESelection aSelAll( 0, 0, EE_PARA_ALL, EE_TEXTPOS_ALL );
402 for( const auto& rWhichId : rCharWhichIds )
403 {
404 pOutliner->RemoveAttribs( aSelAll, false, rWhichId );
405 }
406
407 if(!mpEditingOutliner || (pText != getActiveText()) )
408 {
409 const sal_Int32 nParaCount = pOutliner->GetParagraphCount();
410 std::optional<OutlinerParaObject> pTemp = pOutliner->CreateParaObject(0, nParaCount);
411 pOutliner->Clear();
412 NbcSetOutlinerParaObjectForText(std::move(pTemp), pText);
413 }
414 }
415 }
416}
417
419{
422
424
425 bool bHasText = false;
426 if( pOPO )
427 {
428 const EditTextObject& rETO = pOPO->GetTextObject();
429 sal_Int32 nParaCount = rETO.GetParagraphCount();
430
431 if( nParaCount > 0 )
432 bHasText = (nParaCount > 1) || (!rETO.GetText( 0 ).isEmpty());
433 }
434
435 return bHasText;
436}
437
439{
440 OUStringBuffer aFam;
441 aFam.append(static_cast<sal_Int32>(family));
442 comphelper::string::padToLength(aFam, PADDING_LENGTH_FOR_STYLE_FAMILY , PADDING_CHARACTER_FOR_STYLE_FAMILY);
443
444 styleName += "|" + aFam;
445}
446
448{
449 std::u16string_view familyString = styleName.substr(styleName.size() - PADDING_LENGTH_FOR_STYLE_FAMILY);
450 familyString = comphelper::string::stripEnd(familyString, PADDING_CHARACTER_FOR_STYLE_FAMILY);
451 sal_uInt16 nFam = static_cast<sal_uInt16>(o3tl::toInt32(familyString));
452 assert(nFam != 0);
453 return static_cast<SfxStyleFamily>(nFam);
454}
455
456
457/* 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 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
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
Definition: svdobj.cxx:2012
void BroadcastObjectChange() const
Definition: svdobj.cxx:978
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:289
SdrObjUserCall * m_pUserCall
Definition: svdobj.hxx:903
SfxStyleSheet * GetStyleSheet() const
Definition: svdobj.cxx:2247
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
Definition: svdobj.cxx:2766
virtual void SetChanged()
Definition: svdobj.cxx:1002
virtual const tools::Rectangle & GetLastBoundRect() const
Definition: svdobj.cxx:940
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:340
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:379
GeoStat maGeo
Definition: svdotext.hxx:171
virtual bool IsAutoGrowWidth() const
Definition: svdotext.cxx:313
tools::Long GetMaxTextFrameHeight() const
Definition: svdotext.cxx:1718
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:447
tools::Long GetTextLowerDistance() const
Bottom inner spacing to borders.
Definition: svdotext.cxx:1766
SdrOutliner & ImpGetDrawOutliner() const
Definition: svdotext.cxx:1179
void ImpSetTextStyleSheetListeners()
Definition: svdotxat.cxx:298
tools::Long GetMinTextFrameHeight() const
Definition: svdotext.cxx:1713
bool IsFitToSize() const
returns true if the old feature for fitting shape content should into shape is enabled....
Definition: svdotext.cxx:1872
bool IsInEditMode() const
Definition: svdotext.hxx:312
virtual SdrText * getActiveText() const
returns the currently active text.
Definition: svdotext.cxx:2079
SdrOutliner * mpEditingOutliner
Definition: svdotext.hxx:182
static void AppendFamilyToStyleName(OUString &styleName, SfxStyleFamily family)
Appends the style family to a provided style name.
Definition: svdotxat.cxx:438
tools::Long GetMaxTextFrameWidth() const
Definition: svdotext.cxx:1728
tools::Rectangle maRect
Definition: svdotext.hxx:168
virtual OutlinerParaObject * GetOutlinerParaObject() const override
Definition: svdotext.cxx:1344
void NbcSetOutlinerParaObjectForText(std::optional< OutlinerParaObject > pTextObject, SdrText *pText)
Definition: svdotext.cxx:1367
tools::Long GetTextLeftDistance() const
Left inner spacing to borders
Definition: svdotext.cxx:1751
virtual bool IsAutoGrowHeight() const
Definition: svdotext.cxx:288
tools::Long GetTextRightDistance() const
Right inner spacing to borders
Definition: svdotext.cxx:1756
virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt=true, bool bWdt=true)
Definition: svdotxat.cxx:241
SdrTextAniDirection GetTextAniDirection() const
Definition: svdotext.cxx:1776
virtual bool HasText() const override
Definition: svdotxat.cxx:418
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:452
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
Definition: svdotext.cxx:2103
virtual bool AdjustTextFrameWidthAndHeight()
Definition: svdotxat.cxx:257
tools::Long GetMinTextFrameWidth() const
Definition: svdotext.cxx:1723
SdrTextVertAdjust GetTextVerticalAdjust() const
Definition: svdotext.cxx:372
virtual SdrText * getText(sal_Int32 nIndex) const override
returns the nth available text.
Definition: svdotext.cxx:2088
SdrTextAniKind GetTextAniKind() const
Definition: svdotext.cxx:1771
SVX_DLLPRIVATE SdrOutliner * GetTextEditOutliner() const
Definition: svdotext.hxx:143
bool mbTextFrame
Definition: svdotext.hxx:217
tools::Long GetTextUpperDistance() const
Top inner spacing to borders.
Definition: svdotext.cxx:1761
OutlinerParaObject * GetOutlinerParaObject()
Definition: svdtext.cxx:88
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) const
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