LibreOffice Module sw (master)  1
porfly.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 <dcontact.hxx>
21 #include <dflyobj.hxx>
22 #include <pam.hxx>
23 #include "portab.hxx"
24 #include <flyfrm.hxx>
25 #include <rootfrm.hxx>
26 #include <frmfmt.hxx>
27 #include <viewsh.hxx>
28 #include <textboxhelper.hxx>
29 
30 #include <sal/log.hxx>
31 #include <fmtanchr.hxx>
32 #include <fmtflcnt.hxx>
33 #include <fmtornt.hxx>
34 #include <flyfrms.hxx>
35 #include <txatbase.hxx>
36 #include "porfly.hxx"
37 #include "porlay.hxx"
38 #include "inftxt.hxx"
39 
40 #include <sortedobjs.hxx>
41 
47 {
48 }
49 
51 {
52  OSL_ENSURE( GetFix() >= rInf.X(), "SwFlyPortion::Format" );
53 
54  // tabs must be expanded
55  if( rInf.GetLastTab() )
56  rInf.GetLastTab()->FormatEOL( rInf );
57 
58  rInf.GetLast()->FormatEOL( rInf );
59  PrtWidth( static_cast<sal_uInt16>(GetFix() - rInf.X() + PrtWidth()) );
60  if( !Width() )
61  {
62  OSL_ENSURE( Width(), "+SwFlyPortion::Format: a fly is a fly is a fly" );
63  Width(1);
64  }
65 
66  // resetting
67  rInf.SetFly( nullptr );
68  rInf.Width( rInf.RealWidth() );
69  rInf.GetParaPortion()->SetFly();
70 
71  // trailing blank:
72  if( rInf.GetIdx() < TextFrameIndex(rInf.GetText().getLength())
73  && TextFrameIndex(1) < rInf.GetIdx()
74  && !rInf.GetRest()
75  && ' ' == rInf.GetChar( rInf.GetIdx() )
76  && ' ' != rInf.GetChar(rInf.GetIdx() - TextFrameIndex(1))
77  && ( !rInf.GetLast() || !rInf.GetLast()->IsBreakPortion() ) )
78  {
79  SetBlankWidth( rInf.GetTextSize(OUString(' ')).Width() );
81  }
82 
83  const sal_uInt16 nNewWidth = static_cast<sal_uInt16>(rInf.X() + PrtWidth());
84  if( rInf.Width() <= nNewWidth )
85  {
86  Truncate();
87  if( nNewWidth > rInf.Width() )
88  {
89  PrtWidth( nNewWidth - rInf.Width() );
90  SetFixWidth( PrtWidth() );
91  }
92  return true;
93  }
94  return false;
95 }
96 
98 {
99  bool bFull = rInf.Width() < rInf.X() + PrtWidth();
100 
101  if( bFull )
102  {
103  // If the line is full, and the character-bound frame is at
104  // the beginning of a line
105  // If it is not possible to side step into a Fly
106  // "Begin of line" criteria ( ! rInf.X() ) has to be extended.
107  // KerningPortions at beginning of line, e.g., for grid layout
108  // must be considered.
109  const SwLinePortion* pLastPor = rInf.GetLast();
110  const sal_uInt16 nLeft = ( pLastPor &&
111  ( pLastPor->IsKernPortion() ||
112  pLastPor->IsErgoSumPortion() ) ) ?
113  pLastPor->Width() :
114  0;
115 
116  if( nLeft == rInf.X() && ! rInf.GetFly() )
117  {
118  Width( rInf.Width() );
119  bFull = false; // so that notes can still be placed in this line
120  }
121  else
122  {
123  if( !rInf.GetFly() )
124  rInf.SetNewLine( true );
125  Width(0);
126  SetAscent(0);
128  if( rInf.GetLast() )
129  rInf.GetLast()->FormatEOL( rInf );
130 
131  return bFull;
132  }
133  }
134 
135  rInf.GetParaPortion()->SetFly();
136  return bFull;
137 }
138 
139 //TODO: improve documentation
149  TextFrameIndex const nStart, TextFrameIndex const nEnd)
150 {
151  SwSortedObjs *pObjs = nullptr;
152  if ( nullptr != (pObjs = GetDrawObjs()) )
153  {
154  for ( size_t i = 0; GetDrawObjs() && i < pObjs->size(); ++i )
155  {
156  // Consider changed type of <SwSortedList> entries
157  SwAnchoredObject* pAnchoredObj = (*pObjs)[i];
158  const SwFormatAnchor& rAnch = pAnchoredObj->GetFrameFormat().GetAnchor();
159  if (rAnch.GetAnchorId() == RndStdIds::FLY_AS_CHAR)
160  {
161  const SwPosition* pPos = rAnch.GetContentAnchor();
163  if (nStart <= nIndex && nIndex < nEnd)
164  {
165  if ( dynamic_cast< const SwFlyFrame *>( pAnchoredObj ) != nullptr )
166  {
167  RemoveFly( static_cast<SwFlyFrame*>(pAnchoredObj) );
168  pNew->AppendFly( static_cast<SwFlyFrame*>(pAnchoredObj) );
169  }
170  else if ( dynamic_cast< const SwAnchoredDrawObject *>( pAnchoredObj ) != nullptr )
171  {
172  RemoveDrawObj( *pAnchoredObj );
173  pNew->AppendDrawObj( *pAnchoredObj );
174  }
175  --i;
176  }
177  }
178  }
179  }
180 }
181 
183 {
184  sw::MergedAttrIter iter(*this);
185  for (SwTextAttr const* pHt = iter.NextAttr(); pHt; pHt = iter.NextAttr())
186  {
187  if( RES_TXTATR_FLYCNT == pHt->Which() )
188  {
189  SwFrameFormat* pFrameFormat = pHt->GetFlyCnt().GetFrameFormat();
190  if( pFrameFormat == pSearch )
191  {
192  return TextFrameIndex(pHt->GetStart());
193  }
194  }
195  }
196  OSL_ENSURE(false, "CalcFlyPos: Not Found!");
198 }
199 
201 {
202  // Baseline output
203  // Re-paint everything at a CompletePaint call
204  SwRect aRepaintRect(rInf.GetPaintRect());
205 
206  if(rInf.GetTextFrame()->IsRightToLeft())
207  rInf.GetTextFrame()->SwitchLTRtoRTL(aRepaintRect);
208 
209  if(rInf.GetTextFrame()->IsVertical())
210  rInf.GetTextFrame()->SwitchHorizontalToVertical(aRepaintRect);
211 
212  if((m_pFly->IsCompletePaint() ||
213  m_pFly->getFrameArea().IsOver(aRepaintRect)) &&
215  {
216  SwRect aRect(m_pFly->getFrameArea());
217  if(!m_pFly->IsCompletePaint())
218  aRect.Intersection_(aRepaintRect);
219 
220  // GetFlyFrame() may change the layout mode at the output device.
221  {
222  SwLayoutModeModifier aLayoutModeModifier(*rInf.GetOut());
223  m_pFly->PaintSwFrame(const_cast<vcl::RenderContext&>(*rInf.GetOut()), aRect);
224  }
225  const_cast<SwTextPaintInfo&>(rInf).GetRefDev()->SetLayoutMode(rInf.GetOut()->GetLayoutMode());
226 
227  // As the OutputDevice might be anything, the font must be re-selected.
228  // Being in const method should not be a problem.
229  const_cast<SwTextPaintInfo&>(rInf).SelectFont();
230 
231  assert(rInf.GetVsh());
232  SAL_WARN_IF(rInf.GetVsh()->GetOut() != rInf.GetOut(), "sw.core", "SwFlyCntPortion::Paint: Outdev has changed");
233  if(rInf.GetVsh())
234  const_cast<SwTextPaintInfo&>(rInf).SetOut(rInf.GetVsh()->GetOut());
235  }
236 }
237 
239 {
240  if(!m_pContact->GetAnchorFrame())
241  {
242  // No direct positioning of the drawing object is needed
243  m_pContact->ConnectToLayout();
244  }
245 }
246 
251  : m_bMax(false)
252  , m_eAlign(sw::LineAlign::NONE)
253 {
256 }
257 
259  : m_pFly(pFly)
260 {
261  SAL_WARN_IF(!pFly, "sw.core", "SwFlyCntPortion::SwFlyCntPortion: no SwFlyInContentFrame!");
262 }
263 
265  : m_pContact(nullptr)
266 {
268  assert(m_pContact);
269 }
270 
271 sw::FlyContentPortion* sw::FlyContentPortion::Create(const SwTextFrame& rFrame, SwFlyInContentFrame* pFly, const Point& rBase, long nLnAscent, long nLnDescent, long nFlyAsc, long nFlyDesc, AsCharFlags nFlags)
272 {
273  auto pNew(new sw::FlyContentPortion(pFly));
274  pNew->SetBase(rFrame, rBase, nLnAscent, nLnDescent, nFlyAsc, nFlyDesc, nFlags | AsCharFlags::UlSpace | AsCharFlags::Init);
275  return pNew;
276 }
277 
278 sw::DrawFlyCntPortion* sw::DrawFlyCntPortion::Create(const SwTextFrame& rFrame, SwFrameFormat const & rFormat, const Point& rBase, long nLnAscent, long nLnDescent, long nFlyAsc, long nFlyDesc, AsCharFlags nFlags)
279 {
280  auto pNew(new DrawFlyCntPortion(rFormat));
281  pNew->SetBase(rFrame, rBase, nLnAscent, nLnDescent, nFlyAsc, nFlyDesc, nFlags | AsCharFlags::UlSpace | AsCharFlags::Init);
282  return pNew;
283 }
284 
287 
289 {
290  return m_pFly->GetVirtDrawObj();
291 }
292 
294 {
295  SdrObject* pSdrObj;
296  // Determine drawing object ('master' or 'virtual') by frame
297  pSdrObj = m_pContact->GetDrawObjectByAnchorFrame(rFrame);
298  if(!pSdrObj)
299  {
300  SAL_WARN("sw.core", "SwFlyCntPortion::SetBase(..) - No drawing object found by <GetDrawContact()->GetDrawObjectByAnchorFrame( rFrame )>");
301  pSdrObj = m_pContact->GetMaster();
302  }
303 
304  // Call <SwAnchoredDrawObject::MakeObjPos()> to assure that flag at
305  // the <DrawFrameFormat> and at the <SwAnchoredDrawObject> instance are
306  // correctly set
307  if(pSdrObj)
308  m_pContact->GetAnchoredObj(pSdrObj)->MakeObjPos();
309  return pSdrObj;
310 }
311 
318 void SwFlyCntPortion::SetBase( const SwTextFrame& rFrame, const Point &rBase,
319  long nLnAscent, long nLnDescent,
320  long nFlyAsc, long nFlyDesc,
321  AsCharFlags nFlags )
322 {
323  // Use new class to position object
324  // Determine drawing object
325  SdrObject* pSdrObj = GetSdrObj(rFrame);
326  if (!pSdrObj)
327  return;
328 
329  // position object
331  *pSdrObj,
332  rBase, nFlags,
333  nLnAscent, nLnDescent, nFlyAsc, nFlyDesc );
334 
335  // Scope of local variable <aObjPosInProgress>
336  {
337  SwObjPositioningInProgress aObjPosInProgress( *pSdrObj );
338  aObjPositioning.CalcPosition();
339  }
340 
341  SwFrameFormat* pShape = FindFrameFormat(pSdrObj);
342  const SwFormatAnchor& rAnchor(pShape->GetAnchor());
343  if (rAnchor.GetAnchorId() == RndStdIds::FLY_AS_CHAR)
344  {
345  // This is an inline draw shape, see if it has a textbox.
347  if (pTextBox)
348  {
349  // It has, so look up its text rectangle, and adjust the position
350  // of the textbox accordingly.
351  // Both rectangles are absolute, SwFormatHori/VertOrient's position
352  // is relative to the print area of the anchor text frame.
353  tools::Rectangle aTextRectangle = SwTextBoxHelper::getTextRectangle(pShape);
354 
355  SwFormatHoriOrient aHori(pTextBox->GetHoriOrient());
357  sal_Int32 nLeft = aTextRectangle.getX() - rFrame.getFrameArea().Left()
358  - rFrame.getFramePrintArea().Left();
359  aHori.SetPos(nLeft);
360 
361  SwFormatVertOrient aVert(pTextBox->GetVertOrient());
363  sal_Int32 const nTop = aTextRectangle.getY() - rFrame.getFrameArea().Top()
364  - rFrame.getFramePrintArea().Top();
365  aVert.SetPos(nTop);
366 
367  pTextBox->LockModify();
368  pTextBox->SetFormatAttr(aHori);
369  pTextBox->SetFormatAttr(aVert);
370  pTextBox->UnlockModify();
371  }
372  }
373 
374  SetAlign( aObjPositioning.GetLineAlignment() );
375 
376  m_aRef = aObjPositioning.GetAnchorPos();
377  if( nFlags & AsCharFlags::Rotate )
378  SvXSize( aObjPositioning.GetObjBoundRectInclSpacing().SSize() );
379  else
380  SvLSize( aObjPositioning.GetObjBoundRectInclSpacing().SSize() );
381  if( Height() )
382  {
383  // GetRelPosY returns the relative position to baseline (if 0, the
384  // upper border of the FlyCnt if on the baseline of a line)
385  SwTwips nRelPos = aObjPositioning.GetRelPosY();
386  if ( nRelPos < 0 )
387  {
388  nAscent = static_cast<sal_uInt16>(-nRelPos);
389  if( nAscent > Height() )
390  Height( nAscent );
391  }
392  else
393  {
394  nAscent = 0;
395  Height( Height() + static_cast<sal_uInt16>(nRelPos) );
396  }
397  }
398  else
399  {
400  Height( 1 );
401  nAscent = 0;
402  }
403 }
404 
405 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
vcl::RenderContext * GetOut() const
Definition: viewsh.hxx:341
const SwVirtFlyDrawObj * GetVirtDrawObj() const
Definition: fly.cxx:2711
Represents the visualization of a paragraph.
Definition: txtfrm.hxx:149
SwViewShell * GetVsh()
Definition: inftxt.hxx:228
sal_Int32 nIndex
virtual void Paint(const SwTextPaintInfo &rInf) const override
Definition: porfly.cxx:200
const SwSortedObjs * GetDrawObjs() const
Definition: frame.hxx:545
Marks a position in the document model.
Definition: pam.hxx:35
static FlyContentPortion * Create(const SwTextFrame &rFrame, SwFlyInContentFrame *pFly, const Point &rBase, long nAscent, long nDescent, long nFlyAsc, long nFlyDesc, AsCharFlags nFlags)
Definition: porfly.cxx:271
void SetBlankWidth(const sal_uInt16 nNew)
Definition: porfly.hxx:38
const SwFormatVertOrient & GetVertOrient(bool=true) const
Definition: fmtornt.hxx:106
void SwitchHorizontalToVertical(SwRect &rRect) const
Calculates the coordinates of a rectangle when switching from horizontal to vertical layout...
Definition: txtfrm.cxx:471
void SetFixWidth(const sal_uInt16 nNew)
Definition: porglue.hxx:38
virtual bool Format(SwTextFormatInfo &rInf) override
Definition: porfly.cxx:50
const SwRect & getFramePrintArea() const
Definition: frame.hxx:178
SwTabPortion * GetLastTab()
Definition: inftxt.hxx:621
void MoveFlyInCnt(SwTextFrame *pNew, TextFrameIndex nStart, TextFrameIndex nEnd)
Rewires FlyInContentFrame, if nEnd > Index >= nStart.
Definition: porfly.cxx:148
ComplexTextLayoutFlags GetLayoutMode() const
void SetLen(TextFrameIndex const nLen)
Definition: porlin.hxx:75
long SwTwips
Definition: swtypes.hxx:49
sal_uInt16 RealWidth() const
Definition: inftxt.hxx:555
Dialog to specify the properties of date form field.
Helper class for notify that positioning of an anchored object is in progress.
sal_uInt16 GetFix() const
Definition: porglue.hxx:56
Of course Writer needs its own rectangles.
Definition: swrect.hxx:35
virtual void PaintSwFrame(vcl::RenderContext &rRenderContext, SwRect const &, SwPrintData const *const pPrintData=nullptr) const override
Definition: paintfrm.cxx:3902
long getY() const
SwPosSize GetTextSize(OutputDevice *pOut, const SwScriptInfo *pSI, const OUString &rText, TextFrameIndex nIdx, TextFrameIndex nLen) const
Definition: inftxt.cxx:384
static SwFrameFormat * getOtherTextBoxFormat(const SwFrameFormat *pFormat, sal_uInt16 nType)
If we have an associated TextFrame, then return that.
virtual bool Format(SwTextFormatInfo &rInf) override
Definition: porfly.cxx:97
SwTextAttr const * NextAttr(SwTextNode const **ppNode=nullptr)
Definition: txtfrm.cxx:85
void SetFly()
Definition: porlay.hxx:280
SwRect & Intersection_(const SwRect &rRect)
Definition: swrect.cxx:80
wrapper class for the positioning of Writer fly frames and drawing objects
void AppendFly(SwFlyFrame *pNew)
Definition: fly.cxx:2118
void Top(const long nTop)
Definition: swrect.hxx:203
NONE
void SetHoriOrient(sal_Int16 eNew)
Definition: fmtornt.hxx:89
void RemoveDrawObj(SwAnchoredObject &_rToRemoveObj)
Definition: fly.cxx:2257
bool IsBreakPortion() const
Definition: porlin.hxx:114
const SwRect & getFrameArea() const
Definition: frame.hxx:177
virtual SdrObject * GetSdrObj(const SwTextFrame &) override
Definition: porfly.cxx:293
virtual ~FlyContentPortion() override
Definition: porfly.cxx:286
sal_Unicode GetChar(TextFrameIndex const nPos) const
Definition: inftxt.hxx:247
SwDrawContact * m_pContact
Definition: porfly.hxx:79
SwFrameFormat * FindFrameFormat(SdrObject *pObj)
The Get reverse way: seeks the format to the specified object.
Definition: dcontact.cxx:120
long getX() const
Style of a layout element.
Definition: frmfmt.hxx:57
virtual ~DrawFlyCntPortion() override
Definition: porfly.cxx:285
TextFrameIndex MapModelToViewPos(SwPosition const &rPos) const
Definition: txtfrm.cxx:1256
void SetBase(const SwTextFrame &rFrame, const Point &rBase, long nLnAscent, long nLnDescent, long nFlyAscent, long nFlyDescent, AsCharFlags nFlags)
After setting the RefPoints, the ascent needs to be recalculated because it is dependent on RelPos...
Definition: porfly.cxx:318
TextFrameIndex nLineLength
Definition: porlin.hxx:56
void RemoveFly(SwFlyFrame *pToRemove)
Definition: fly.cxx:2136
const SwFormatAnchor & GetAnchor(bool=true) const
Definition: fmtanchr.hxx:81
int i
void SetVertOrient(sal_Int16 eNew)
Definition: fmtornt.hxx:56
RndStdIds GetAnchorId() const
Definition: fmtanchr.hxx:65
vcl::RenderContext * GetOut()
Definition: inftxt.hxx:231
const SwFormatHoriOrient & GetHoriOrient(bool=true) const
Definition: fmtornt.hxx:108
size_t size() const
Definition: sortedobjs.cxx:42
const SwPosition * GetContentAnchor() const
Definition: fmtanchr.hxx:67
SwParaPortion * GetParaPortion()
Definition: inftxt.hxx:128
void SetWhichPor(const PortionType nNew)
Definition: porlin.hxx:94
bool IsCompletePaint() const
Definition: frame.hxx:581
virtual void Paint(const SwTextPaintInfo &rInf) const override
Definition: porfly.cxx:238
FlyAnchors.
Definition: fmtanchr.hxx:34
bool IsKernPortion() const
Definition: porlin.hxx:132
void UnlockModify()
Definition: calbck.hxx:214
sal_uInt16 Width() const
Definition: inftxt.hxx:534
void LockModify()
Definition: calbck.hxx:213
TextFrameIndex GetIdx() const
Definition: inftxt.hxx:278
void SSize(const Size &rNew)
Definition: swrect.hxx:177
void SetFly(SwFlyPortion *pNew)
Definition: inftxt.hxx:616
SwTextFrame * GetTextFrame()
Definition: inftxt.hxx:291
const OUString & GetText() const
Definition: inftxt.hxx:246
void Truncate()
Definition: porlin.hxx:196
virtual bool SetFormatAttr(const SfxPoolItem &rAttr)
Definition: format.cxx:458
SwTwips X() const
Definition: inftxt.hxx:385
void SwitchLTRtoRTL(SwRect &rRect) const
Calculates the coordinates of a rectangle when switching from LTR to RTL layout.
Definition: txtfrm.cxx:681
Base class for anything that can be part of a line in the Writer layout.
Definition: porlin.hxx:50
void Left(const long nLeft)
Definition: swrect.hxx:194
HFONT SelectFont(HDC hDC, HFONT hFont)
virtual SwFrameFormat & GetFrameFormat()=0
#define SAL_WARN_IF(condition, area, stream)
#define RES_DRAWFRMFMT
Definition: hintids.hxx:372
virtual void Paint(const SwTextPaintInfo &rInf) const override
class SwFlyPortion => we expect a frame-locale SwRect!
Definition: porfly.cxx:46
SwLinePortion * GetRest()
Definition: inftxt.hxx:582
bool IsErgoSumPortion() const
Definition: porlin.hxx:115
bool IsRightToLeft() const
Definition: frame.hxx:965
TextFrameIndex CalcFlyPos(SwFrameFormat const *pSearch)
Calculates the position of FlyInContentFrames.
Definition: porfly.cxx:182
sal_uInt16 Width() const
Definition: possiz.hxx:46
static tools::Rectangle getTextRectangle(SwFrameFormat *pShape, bool bAbsolute=true)
Return the textbox rectangle of a draw shape (in twips).
SwFlyCntPortion()
Use the dimensions of pFly->OutRect()
Definition: porfly.cxx:250
SwLinePortion * GetLast()
Definition: inftxt.hxx:567
#define RES_TXTATR_FLYCNT
Definition: hintids.hxx:245
static bool IsPaint(SdrObject *pObj, const SwViewShell *pSh)
Definition: paintfrm.cxx:3796
virtual void CallSwClientNotify(const SfxHint &rHint) const override
Definition: calbck.cxx:376
static DrawFlyCntPortion * Create(const SwTextFrame &rFrame, SwFrameFormat const &rFormat, const Point &rBase, long nAsc, long nDescent, long nFlyAsc, long nFlyDesc, AsCharFlags nFlags)
Definition: porfly.cxx:278
void AppendDrawObj(SwAnchoredObject &_rNewObj)
Definition: fly.cxx:2176
void SetAscent(const sal_uInt16 nNewAsc)
Definition: porlin.hxx:79
FlyContentPortion(SwFlyInContentFrame *pFly)
Definition: porfly.cxx:258
bool IsVertical() const
Definition: frame.hxx:951
virtual SdrObject * GetSdrObj(const SwTextFrame &) override
Definition: porfly.cxx:288
void SetNewLine(const bool bNew)
Definition: inftxt.hxx:585
#define SAL_WARN(area, stream)
const SwRect & GetPaintRect() const
Definition: inftxt.hxx:438
SwFlyInContentFrame * m_pFly
Definition: porfly.hxx:67
virtual void FormatEOL(SwTextFormatInfo &rInf)
Definition: porlin.cxx:268
sal_uInt16 PrtWidth() const
Definition: porlin.hxx:81
DrawFlyCntPortion(SwFrameFormat const &rFormat)
Definition: porfly.cxx:264
SwFlyPortion * GetFly()
Definition: inftxt.hxx:615
bool IsOver(const SwRect &rRect) const
Definition: swrect.cxx:127
SwViewShell * GetCurrShell() const
Definition: rootfrm.hxx:204
o3tl::strong_int< sal_Int32, struct Tag_TextFrameIndex > TextFrameIndex
Denotes a character index in a text frame at a layout level, after extent mapping from a text node at...
class for collecting anchored objects
Definition: sortedobjs.hxx:48
virtual void FormatEOL(SwTextFormatInfo &rInf) override
Definition: txttab.cxx:310
virtual void CalcPosition() override
calculate position for object position
const sal_Int32 COMPLETE_STRING
Definition: swtypes.hxx:61
SwRootFrame * getRootFrame()
Definition: frame.hxx:659