31 #include <drawdoc.hxx>
33 #include <viewimp.hxx>
65 #include <com/sun/star/text/WritingMode2.hpp>
76 struct VirtObjAnchoredAtFramePred
86 while(pContentFrame->IsFollow())
91 VirtObjAnchoredAtFramePred(
const SwFrame* pAnchorFrame)
92 : m_pAnchorFrame(FindFrame(pAnchorFrame))
97 return FindFrame(rpDrawVirtObj->GetAnchorFrame()) == m_pAnchorFrame;
104 if(!pObj || !pAnchor)
106 short nWritingDirection =
107 pAnchor->
IsVertical() ? text::WritingMode2::TB_RL :
109 text::WritingMode2::LR_TB;
126 pRetval = pFlyDrawObj->GetFormat();
177 "<::GetUserCall(..)> - wrong type of found object user call." );
188 return ( SdrTextAniKind::Scroll == eTKind
189 || SdrTextAniKind::Alternate == eTKind || SdrTextAniKind::Slide == eTKind );
213 const bool bNotify( !
GetFormat()->getIDocumentDrawModelAccess().IsVisibleLayerId( _pDrawObj->
GetLayer() ) );
239 const bool bNotify(
GetFormat()->getIDocumentDrawModelAccess().IsVisibleLayerId( _pDrawObj->
GetLayer() ) );
268 OSL_FAIL(
"SwDrawContact::MoveObjToLayer(..) - no drawing object!" );
274 OSL_FAIL(
"SwDrawContact::MoveObjToLayer(..) - no drawing frame format!" );
293 if ( dynamic_cast<const SdrObjGroup*>( _pDrawObj) !=
nullptr )
303 nNewLayerId = nToControlLayerId;
310 nNewLayerId = nToHeavenLayerId;
315 _pDrawObj->SdrObject::NbcSetLayer( nNewLayerId );
320 static_cast<SdrObjGroup*
>(_pDrawObj)->GetSubList();
332 if ( nLayerIdOfObj == nFromHellLayerId )
334 _pDrawObj->
SetLayer( nToHellLayerId );
336 else if ( nLayerIdOfObj == nFromHeavenLayerId )
338 _pDrawObj->
SetLayer( nToHeavenLayerId );
340 else if ( nLayerIdOfObj == nFromControlLayerId )
342 _pDrawObj->
SetLayer( nToControlLayerId );
352 std::vector< SwAnchoredObject* > aObjs;
355 while ( !aObjs.empty() )
357 sal_uInt32 nTmpOrdNum = aObjs.back()->GetDrawObj()->GetOrdNum();
359 if ( nTmpOrdNum < nMinOrdNum )
361 nMinOrdNum = nTmpOrdNum;
368 "<SwContact::GetMinOrdNum()> - no order number found." );
375 sal_uInt32 nMaxOrdNum( 0 );
377 std::vector< SwAnchoredObject* > aObjs;
380 while ( !aObjs.empty() )
382 sal_uInt32 nTmpOrdNum = aObjs.back()->GetDrawObj()->GetOrdNum();
384 if ( nTmpOrdNum > nMaxOrdNum )
386 nMaxOrdNum = nTmpOrdNum;
403 bool bRelToTableCell(
false);
423 if (
auto pFindSdrObjectHint = dynamic_cast<const sw::FindSdrObjectHint*>(&rHint))
425 if(!pFindSdrObjectHint->m_rpObject)
426 pFindSdrObjectHint->m_rpObject =
GetMaster();
428 else if (
auto pWW8AnchorConvHint = dynamic_cast<const sw::WW8AnchorConvHint*>(&rHint))
433 std::vector<SwAnchoredObject*> aAnchoredObjs;
435 if(!aAnchoredObjs.empty())
436 pAnchoredObj = aAnchoredObjs.front();
446 if(dynamic_cast<SwAnchoredDrawObject*>(pAnchoredObj) && !pAnchoredObj->
GetAnchorFrame())
448 const bool bFollowTextFlow =
static_cast<const SwFrameFormat&
>(rMod).GetFollowTextFlow().GetValue();
452 rResult.
m_aPos.setX(lcl_GetWW8Pos(pAnchoredObj, bFollowTextFlow, rResult.
m_eHoriConv).getX());
453 rResult.
m_aPos.setY(lcl_GetWW8Pos(pAnchoredObj, bFollowTextFlow, rResult.
m_eVertConv).getY());
486 for(pFlyFrame = aIter.
First(); pFlyFrame; pFlyFrame = aIter.
Next())
488 if(pFlyFrame != pFly)
542 assert(dynamic_cast<const SwVirtFlyDrawObj*>(pSdrObj) !=
nullptr);
544 "<SwFlyDrawContact::GetAnchoredObj(..)> - provided object doesn't belong to this contact");
549 return pRetAnchoredObj;
569 assert(dynamic_cast<const SwVirtFlyDrawObj*>(_pDrawObj) !=
nullptr);
571 if (
GetFormat()->getIDocumentDrawModelAccess().IsVisibleLayerId( _pDrawObj->
GetLayer() ) )
581 if ( !pFlyFrame->
Lower() )
609 assert(dynamic_cast<const SwVirtFlyDrawObj*>(_pDrawObj) !=
nullptr);
611 if ( !
GetFormat()->getIDocumentDrawModelAccess().IsVisibleLayerId( _pDrawObj->
GetLayer() ) )
645 if(
auto pGetZOrdnerHint = dynamic_cast<const sw::GetZOrderHint*>(&rHint))
650 auto pFormat(dynamic_cast<const SwFrameFormat*>(&rMod));
651 if (pFormat && pFormat->Which() ==
RES_FLYFRMFMT && !pFormat->getIDocumentLayoutAccess().GetCurrentViewShell())
662 if (
const SdrObjGroup *pObjGroup = dynamic_cast<const SdrObjGroup*>(pObj))
664 const SdrObjList *pLst = pObjGroup->GetSubList();
680 mbMasterObjCleared( false ),
681 mbDisconnectInProgress( false ),
682 mbUserCallActive( false ),
735 if(dynamic_cast<const SwDrawFrameFormat*>(rpFly))
750 assert(dynamic_cast<const SwDrawVirtObj*>(pSdrObj) !=
nullptr ||
751 dynamic_cast<const SdrVirtObj*>(pSdrObj) ==
nullptr);
754 "<SwDrawContact::GetAnchoredObj(..)> - provided object doesn't belongs to this contact" );
758 if (
auto pVirtObj = dynamic_cast<const SwDrawVirtObj*>(pSdrObj))
760 pRetAnchoredObj = &(pVirtObj->GetAnchoredObj());
764 assert(dynamic_cast<const SdrVirtObj*>(pSdrObj) ==
nullptr);
768 return pRetAnchoredObj;
785 const SwFrame* pAnchorFrame =
nullptr;
795 assert(dynamic_cast<SwDrawVirtObj const*>(_pDrawObj) !=
nullptr);
827 rpDrawVirtObj->RemoveFromWriterLayout();
828 rpDrawVirtObj->RemoveFromDrawingPage();
830 maDrawVirtObjs.clear();
840 const SwFrame* pProposedAnchorFrame = &_rAnchorFrame;
849 pProposedAnchorFrame = pTmpFrame;
853 if ( pMasterObjAnchorFrame && pMasterObjAnchorFrame->
IsContentFrame() )
861 pMasterObjAnchorFrame = pTmpFrame;
864 if ( pMasterObjAnchorFrame && pMasterObjAnchorFrame == pProposedAnchorFrame )
871 VirtObjAnchoredAtFramePred(pProposedAnchorFrame)));
873 pRetDrawObj = ppFoundVirtObj->get();
884 if ( pDrawVirtObj->GetAnchorFrame() )
887 SwPageFrame* pPage = pDrawVirtObj->AnchoredObj().FindPageFrameOfAnchor();
888 if( pOldBoundRect && pPage )
890 SwRect aOldRect( *pOldBoundRect );
891 aOldRect.
Pos() += pDrawVirtObj->GetOffset();
897 SwRect aRect( pDrawVirtObj->GetAnchoredObj().GetObjRectWithSpaces() );
898 if (aRect.HasArea() && pPage)
923 if( _pOldObjRect && pPageFrame )
925 SwRect aOldRect( *_pOldObjRect );
936 if( aNewRect.HasArea() && pPageFrame )
961 if ( pDoc->
IsInDtor() && eType != SdrUserCallType::Delete )
967 bool bHasActions(
true);
976 if ( rShell.Imp()->IsAction() || rShell.Imp()->IsIdleAction() )
988 Changed_( rObj, eType, &rOldBoundRect );
1006 : mpDrawContact( _pDrawContact ),
1007 mbParentUserCallActive( _pDrawContact->mbUserCallActive ),
1008 meParentUserCallEventType( _pDrawContact->meEventTypeOfCurrentUserCall )
1016 if ( mpDrawContact )
1025 mpDrawContact =
nullptr;
1038 bool bTmpAssert(
true );
1045 if ( ( meParentUserCallEventType == SdrUserCallType::Inserted ||
1046 meParentUserCallEventType == SdrUserCallType::Delete ||
1047 meParentUserCallEventType == SdrUserCallType::Resize ) &&
1052 else if ( meParentUserCallEventType == SdrUserCallType::ChildResize &&
1060 OSL_FAIL(
"<SwDrawContact::Changed_(..)> - unknown nested <UserCall> event. This is serious." );
1073 aResizeSet.Put(aSize);
1102 case SdrUserCallType::Delete:
1118 case SdrUserCallType::Inserted:
1122 OSL_FAIL(
"<SwDrawContact::Changed_(..)> - Insert event during disconnection from layout is invalid." );
1134 case SdrUserCallType::Removed:
1143 case SdrUserCallType::ChildInserted :
1144 case SdrUserCallType::ChildRemoved :
1157 if(aCurrentLayer != aControlLayerID && aCurrentLayer != aInvisibleControlLayerID)
1173 case SdrUserCallType::MoveOnly:
1174 case SdrUserCallType::Resize:
1175 case SdrUserCallType::ChildMoveOnly :
1176 case SdrUserCallType::ChildResize :
1177 case SdrUserCallType::ChildChangeAttr :
1178 case SdrUserCallType::ChildDelete :
1186 if(!pAnchoredDrawObj)
1235 switch ( eLayoutDir )
1239 nXPosDiff = aObjRect.Left() - aOldObjRect.
Left();
1240 nYPosDiff = aObjRect.Top() - aOldObjRect.
Top();
1245 nXPosDiff = aOldObjRect.
Right() - aObjRect.Right();
1246 nYPosDiff = aObjRect.Top() - aOldObjRect.
Top();
1251 nXPosDiff = aObjRect.Top() - aOldObjRect.
Top();
1252 nYPosDiff = aOldObjRect.
Right() - aObjRect.Right();
1257 assert(!
"<SwDrawContact::Changed_(..)> - unsupported layout direction");
1263 if ( nYPosDiff != 0 )
1265 if ( rVert.GetRelationOrient() == text::RelOrientation::CHAR ||
1266 rVert.GetRelationOrient() == text::RelOrientation::TEXT_LINE )
1268 nYPosDiff = -nYPosDiff;
1272 rVert.GetRelationOrient() ) );
1276 if ( !bAnchoredAsChar && nXPosDiff != 0 )
1284 ( !bAnchoredAsChar && nXPosDiff != 0 ) )
1293 ->SetLastObjRect( aObjRect.SVRect() );
1295 else if ( aObjRect.SSize() != aOldObjRect.
GetSize() )
1300 if ( bAnchoredAsChar )
1311 else if (eType == SdrUserCallType::Resize)
1321 if (rPageFrame && rPageFrame->isFrameAreaPositionValid())
1336 text::RelOrientation::PAGE_FRAME));
1345 case SdrUserCallType::ChangeAttr:
1360 sal_uInt16 nWhich = _rItem.
Which();
1365 GetItemState(
RES_ANCHOR,
false, reinterpret_cast<const SfxPoolItem**>(&pAnchorFormat) );
1371 return pAnchorFormat;
1379 if (
auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
1384 sal_uInt16 nWhich = pNew ? pNew->
Which() : 0;
1385 if(
const SwFormatAnchor* pNewAnchorFormat = pNew ? lcl_getAnchorFormat(*pNew) :
nullptr)
1402 pOldRect = &aOldRect;
1410 const SwFormatAnchor* pOldAnchorFormat = pLegacyHint->m_pOld ? lcl_getAnchorFormat(*pLegacyHint->m_pOld) :
nullptr;
1411 if(!pOldAnchorFormat || (pOldAnchorFormat->
GetAnchorId() != pNewAnchorFormat->GetAnchorId()))
1420 SAL_WARN(
"sw.core",
"SwDrawContact::Modify: no draw object here?");
1433 bool bUpdateSortedObjsList(
false);
1449 bUpdateSortedObjsList =
true;
1453 auto pChgSet =
static_cast<const SwAttrSetChg*
>(pNew)->GetChgSet();
1454 if(pChgSet->GetItemState(
RES_SURROUND,
false) == SfxItemState::SET ||
1455 pChgSet->GetItemState(
RES_OPAQUE,
false) == SfxItemState::SET ||
1457 bUpdateSortedObjsList =
true;
1461 assert(!
"<SwDraw Contact::Modify(..)> - unhandled attribute?");
1471 else if (
auto pDrawFrameFormatHint = dynamic_cast<const sw::DrawFrameFormatHint*>(&rHint))
1473 switch(pDrawFrameFormatHint->m_eId)
1507 else if (
auto pCheckDrawFrameFormatLayerHint = dynamic_cast<const sw::CheckDrawFrameFormatLayerHint*>(&rHint))
1511 else if (
auto pContactChangedHint = dynamic_cast<const sw::ContactChangedHint*>(&rHint))
1513 if(!*pContactChangedHint->m_ppObject)
1514 *pContactChangedHint->m_ppObject =
GetMaster();
1515 auto pObject = *pContactChangedHint->m_ppObject;
1518 else if (
auto pDrawFormatLayoutCopyHint = dynamic_cast<const sw::DrawFormatLayoutCopyHint*>(&rHint))
1522 &pDrawFormatLayoutCopyHint->m_rDestFormat,
1523 pDrawFormatLayoutCopyHint->m_rDestDoc.CloneSdrObj(
1525 pDrawFormatLayoutCopyHint->m_rDestDoc.IsCopyIsMove() && &pDrawFormatLayoutCopyHint->m_rDestDoc == rFormat.
GetDoc()));
1530 pDrawFormatLayoutCopyHint->m_rDestFormat.PosAttrSet();
1532 else if (
auto pRestoreFlyAnchorHint = dynamic_cast<const sw::RestoreFlyAnchorHint*>(&rHint))
1539 pDrawModel->GetPage(0)->InsertObject(pObj);
1543 else if (
auto pCreatePortionHint = dynamic_cast<const sw::CreatePortionHint*>(&rHint))
1545 if(*pCreatePortionHint->m_ppContact)
1547 *pCreatePortionHint->m_ppContact =
this;
1556 else if (
auto pCollectTextObjectsHint = dynamic_cast<const sw::CollectTextObjectsHint*>(&rHint))
1561 if(dynamic_cast<const SdrObjGroup*>(pSdrO))
1565 while(aListIter.
IsMore())
1569 if(pTextObj && pTextObj->HasText())
1570 pCollectTextObjectsHint->m_rTextObjects.push_back(pTextObj);
1573 else if(
auto pTextObj = const_cast<SdrTextObj*>(dynamic_cast<const SdrTextObj*>(pSdrO)))
1575 if(pTextObj->HasText())
1576 pCollectTextObjectsHint->m_rTextObjects.push_back(pTextObj);
1579 else if (
auto pGetZOrdnerHint = dynamic_cast<const sw::GetZOrderHint*>(&rHint))
1581 auto pFormat(dynamic_cast<const SwFrameFormat*>(&rMod));
1585 else if (
auto pConnectedHint = dynamic_cast<const sw::GetObjectConnectedHint*>(&rHint))
1601 if ( pDrawVirtObj->IsConnected() )
1605 if ( _bUpdateSortedObjsList )
1607 pDrawVirtObj->AnchoredObj().UpdateObjInSortedList();
1616 if ( _bUpdateSortedObjsList )
1627 if ( _bMoveMasterToInvisibleLayer &&
1640 rpVirtDrawObj->RemoveFromWriterLayout();
1641 rpVirtDrawObj->RemoveFromDrawingPage();
1655 pView->MarkObj(
GetMaster(), pView->GetSdrPageView(), true );
1681 RemoveObject(
GetMaster()->GetOrdNum() );
1694 if (
auto pSwDrawVirtObj = dynamic_cast<SwDrawVirtObj*>( _pDrawObj) )
1696 pSwDrawVirtObj->RemoveFromWriterLayout();
1697 pSwDrawVirtObj->RemoveFromDrawingPage();
1709 SwFrame* pNewAnchorFrameOfMaster = pDrawVirtObj->AnchorFrame();
1711 pDrawVirtObj->RemoveFromWriterLayout();
1712 pDrawVirtObj->RemoveFromDrawingPage();
1739 while (pAct && nTextOffset >= pAct->
GetOffset());
1748 OSL_FAIL(
"<SwDrawContact::ConnectToLayout(..)> called during disconnection.");
1756 OSL_FAIL(
"<SwDrawContact::ConnectToLayout(..)> - master drawing object not inserted -> no connect to layout. Please inform od@openoffice.org" );
1772 pAnch = &(pDrawFrameFormat->
GetAnchor());
1777 case RndStdIds::FLY_AT_PAGE:
1786 for ( sal_uInt16
i = 1;
i < nPgNum && pPage; ++
i )
1788 pPage =
static_cast<SwPageFrame*
>(pPage->GetNext());
1801 case RndStdIds::FLY_AT_CHAR:
1802 case RndStdIds::FLY_AT_PARA:
1803 case RndStdIds::FLY_AT_FLY:
1804 case RndStdIds::FLY_AS_CHAR:
1806 if ( pAnch->
GetAnchorId() == RndStdIds::FLY_AS_CHAR )
1818 if ( pAnch->
GetAnchorId() == RndStdIds::FLY_AT_FLY )
1828 for(
auto pFlyFormat : rFormats )
1830 if( pFlyFormat->GetContent().GetContentIdx() &&
1831 rIdx == *(pFlyFormat->GetContent().GetContentIdx()) )
1833 pModify = pFlyFormat;
1856 SwFrame* pAnchorFrameOfMaster =
nullptr;
1870 if (bControlInHF && pAnchorFrameOfMaster)
1874 if (RndStdIds::FLY_AT_FLY == pAnch->
GetAnchorId())
1891 if ((pAnch->
GetAnchorId() == RndStdIds::FLY_AS_CHAR) &&
1895 static_cast<SwTextFrame*>(pFrame),
1899 if ( !pAnchorFrameOfMaster )
1902 pAnchorFrameOfMaster = pFrame;
1909 if ( pAnch->
GetAnchorId() == RndStdIds::FLY_AS_CHAR )
1918 if ( pAnch->
GetAnchorId() == RndStdIds::FLY_AS_CHAR )
1927 assert(!
"Unknown Anchor.");
1964 OSL_FAIL(
"<SwDrawContact::ChkPage()> called during disconnection." );
2017 o_rAnchoredObjs.push_back(const_cast<SwAnchoredDrawObject*>(&
maAnchoredDrawObj));
2020 o_rAnchoredObjs.push_back(&rpDrawVirtObj->AnchoredObj());
2032 class VOCOfDrawVirtObj :
public ViewObjectContactOfSdrObj
2046 VOCOfDrawVirtObj(ObjectContact& rObjectContact, ViewContact& rViewContact)
2047 : ViewObjectContactOfSdrObj(rObjectContact, rViewContact)
2052 class VCOfDrawVirtObj :
public ViewContactOfVirtObj
2060 virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact)
override;
2065 : ViewContactOfVirtObj(rObj)
2086 for(sal_uInt32
a(0);
a < nSubHierarchyCount;
a++)
2102 if(!aNewSequence.empty())
2113 if(!aViewRange.overlaps(aObjectRange))
2116 aNewSequence.clear();
2120 if(!aNewSequence.empty())
2122 rxTarget.
append(aNewSequence);
2132 assert(isPrimitiveVisible(rDisplayInfo));
2136 DisplayInfo aDisplayInfo(rDisplayInfo);
2138 const VCOfDrawVirtObj& rVC =
static_cast< const VCOfDrawVirtObj&
>(GetViewContact());
2139 const SdrObject& rReferencedObject = rVC.GetSwDrawVirtObj().GetReferencedObj();
2144 const Point aLocalOffset(rVC.GetSwDrawVirtObj().GetOffset());
2146 if(aLocalOffset.X() || aLocalOffset.Y())
2148 aOffsetMatrix.
set(0, 2, aLocalOffset.X());
2149 aOffsetMatrix.
set(1, 2, aLocalOffset.Y());
2152 if(dynamic_cast<const SdrObjGroup*>( &rReferencedObject) !=
nullptr)
2170 if(!xRetval.empty())
2180 ViewObjectContact& VCOfDrawVirtObj::CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact)
2182 return *(
new VOCOfDrawVirtObj(rObjectContact, *
this));
2190 return std::make_unique<sdr::contact::VCOfDrawVirtObj>(*this);
2198 maAnchoredDrawObj(),
2199 mrDrawContact(_rDrawContact)
2227 pObj->operator=( *this );
2263 if (
nullptr != pDrawPg )
2376 for(
size_t i=0;
i < cnt; ++
i)
2382 tmpList.
MoveTo(rHdlList);
virtual void Shear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear)
SwFrame * FindFooterOrHeader()
virtual bool HasTextEdit() const
virtual void MakeObjPos()=0
method to determine position for the object and set the position at the object
const SwVirtFlyDrawObj * GetVirtDrawObj() const
Base class of the Writer layout elements.
virtual basegfx::B2DPolyPolygon TakeXorPoly() const
Represents the visualization of a paragraph.
virtual SwRect GetObjRect() const =0
constexpr TypedWhichId< SwFormatSurround > RES_SURROUND(101)
virtual void Shear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
const SwSortedObjs * GetDrawObjs() const
SwAnchoredDrawObject maAnchoredDrawObj
anchored drawing object instance for the 'virtual' drawing object
SdrObject & ReferencedObj()
Marks a position in the document model.
class for the positioning of drawing objects
virtual const tools::Rectangle & GetCurrentBoundRect() const
tools::Rectangle aSnapRect
virtual void Resize(const Point &rRef, const Fraction &xFact, const Fraction &yFact, bool bUnsetRelative=true)
void SetPos(const Point &rPnt)
void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue)
SwDrawContact * mpDrawContact
virtual SwDrawVirtObj * CloneSdrObject(SdrModel &rTargetModel) const override
void SetPoint(const Point &rPnt, sal_uInt32 i)
SdrObjUserCall * pUserCall
virtual const SwRootFrame * GetCurrentLayout() const =0
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact)
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs)
virtual bool Prepare(const PrepareHint ePrep=PrepareHint::Clear, const void *pVoid=nullptr, bool bNotify=true)
virtual SdrLayerID GetInvisibleControlsId() const =0
helper class for method for handling nested events ...
virtual SdrLayerID GetHeavenId() const =0
virtual void Rotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
void RemoveDrawObjFromPage(SwAnchoredObject &_rToRemoveObj)
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear)
virtual ~SwDrawVirtObj() override
SdrObject * GetObj(size_t nNum) const
virtual SdrLayerID GetControlsId() const =0
size_t GetObjCount() const
SwDrawVirtObj(SdrModel &rSdrModel, SdrObject &_rNewObj, SwDrawContact &_rDrawContact)
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
constexpr TypedWhichId< SvxOpaqueItem > RES_OPAQUE(99)
virtual void Move(const Size &rSiz) override
void Pos(const Point &rNew)
virtual void NbcMove(const Size &rSiz) override
IDocumentUndoRedo & GetIDocumentUndoRedo()
const Point & GetPos() const
virtual void SwClientNotify(const SwModify &, const SfxHint &rHint) override
virtual void AddToHdlList(SdrHdlList &rHdlList) const
Of course Writer needs its own rectangles.
Point GetRelPosToChar() const
method to determine position of anchored object relative to anchor character
static void Free(SdrObject *&_rpObject)
virtual SdrObjKind GetObjIdentifier() const
virtual void InsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
SwDrawContact & mrDrawContact
writer-drawing contact object the 'virtual' drawing object is controlled by.
EmbeddedObjectRef * pObject
void Chain(SwFrame *_pAnchor)
The root element of a Writer document layout.
virtual bool HasTextEdit() const override
const SwFrameFormats * GetSpzFrameFormats() const
sdr::contact::ViewContact & GetViewContact() const
void DrawContactDeleted()
virtual Point GetOffset() const override
access to offset
IDocumentDrawModelAccess const & getIDocumentDrawModelAccess() const
virtual const tools::Rectangle & GetSnapRect() const
sal_uInt16 GetPhyPageNum() const
void SetDrawObj(SdrObject &_rDrawObj)
constexpr TypedWhichId< SwFormatVertOrient > RES_VERT_ORIENT(102)
wrapper class for the positioning of Writer fly frames and drawing objects
void RemoveDrawObj(SwAnchoredObject &_rToRemoveObj)
SwDrawVirtObj & operator=(const SwDrawVirtObj &rObj)
constexpr TypedWhichId< SwFormatHoriOrient > RES_HORI_ORIENT(103)
SdrPage * getSdrPageFromSdrObject() const
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix &rMatrix)
Point GetRelPosToPageFrame(const bool _bFollowTextFlow, bool &_obRelToTableCell) const
method to determine position of anchored object relative to page frame
virtual Point GetSnapPoint(sal_uInt32 i) const
WW8AnchorConv m_eVertConv
virtual const tools::Rectangle & GetLogicRect() const override
static bool isTextBox(const SwFrameFormat *pFormat, sal_uInt16 nType)
Is the frame format a text box?
constexpr TypedWhichId< SwAttrSetChg > RES_ATTRSET_CHG(161)
const SdrObject & GetReferencedObj() const
bool mbParentUserCallActive
SwFlyFrame * FindFlyFrame()
void AssertNestedUserCall()
virtual bool IsEnableSetModified() const =0
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
constexpr TypedWhichId< SwFormatWrapInfluenceOnObjPos > RES_WRAP_INFLUENCE_ON_OBJPOS(125)
virtual void Changed(const SdrObject &rObj, SdrUserCallType eType, const tools::Rectangle &rOldBoundRect)
bool IsInConstructor() const
SwTextFrame * GetFollow()
TextFrameIndex GetOffset() const
sal_uInt32 GetOrdNumDirect() const
virtual SdrLayerID GetInvisibleHellId() const =0
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
AW: Need own sdr::contact::ViewContact since AnchorPos from parent is not used but something own (top...
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
void AddToDrawingPage()
connection to drawing layer
virtual void SetLayer(SdrLayerID nLayer)
Point GetRelPosToLine() const
method to determine position of anchored object relative to top of line
TextFrameIndex MapModelToViewPos(SwPosition const &rPos) const
bool IsContentFrame() const
virtual const tools::Rectangle & GetCurrentBoundRect() const override
const SdrObject * GetDrawObj() const
virtual void NbcSetLogicRect(const tools::Rectangle &rRect) override
virtual SdrLayerID GetLayer() const override
void MoveTo(SdrHdlList &rOther)
void SetAssertFlyPages()
Makes sure that all requested page-bound Flys find a Page.
static void GetAnchoredObjects(std::vector< SwAnchoredObject * > &, const SwFormat &rFormat)
virtual void NbcMirror(const Point &rRef1, const Point &rRef2)
SwPageFrame * FindPageFrame()
virtual void SetBoundRectDirty() override
tools::Rectangle aOutRect
void AppendDrawObjToPage(SwAnchoredObject &_rNewObj)
const SwFrame * Lower() const
SwContentNode * GetContentNode()
const SdrPage * GetPage(sal_uInt16 nPgNum) const
void ActionChanged() const
virtual const SwDrawModel * GetDrawModel() const =0
Draw Model and id accessors.
const SwRect & GetObjRectWithSpaces() const
method to determine object area inclusive its spacing
virtual basegfx::B2DPolyPolygon TakeContour() const
void UpdateObjInSortedList()
method to update anchored object in the lists
SdrModel & getSdrModelFromSdrObject() const
void transform(const basegfx::B2DHomMatrix &rMatrix)
sal_uInt32 GetOrdNum() const
IDocumentState const & getIDocumentState() const
virtual void append(const Primitive2DReference &) override
virtual void SetLogicRect(const tools::Rectangle &rRect)
Marks a node in the document model.
virtual void Move(const Size &rSiz)
ring_container GetRingContainer()
virtual void InvalidateObjPos()=0
method to invalidate position of the anchored object
virtual void SetRelativePos(const Point &rPnt)
void SetUserCall(SdrObjUserCall *pUser)
virtual const tools::Rectangle & GetLastBoundRect() const override
A page of the document layout.
virtual SdrObject * RemoveObject(size_t nObjNum)
void notifyShapePropertyChange(const svx::ShapeProperty _eProperty) const
bool SetFlyFrameAttr(SwFrameFormat &rFlyFormat, SfxItemSet &rSet)
SwFrame * GetAnchorFrameContainingAnchPos()
determine anchor frame containing the anchor position
virtual void Mirror(const Point &rRef1, const Point &rRef2)
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
constexpr TypedWhichId< SwPtrMsgPoolItem > RES_REMOVE_UNO_OBJECT(179)
virtual SdrInventor GetObjInventor() const
virtual SdrLayerID GetHellId() const =0
virtual SdrLayerID GetLayer() const
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
virtual void RecalcBoundRect() override
All overridden methods which need to use the offset.
virtual void RecalcSnapRect() override
static void AddExistingShapeToFormat(SdrObject const &_rObj)
std::optional< tools::Rectangle > const & GetLastObjRect() const
virtual void SetLogicRect(const tools::Rectangle &rRect) override
size_t GetHdlCount() const
SdrHdl * GetHdl(size_t nNum) const
css::uno::Reference< css::graphic::XPrimitive2D > Primitive2DReference
virtual Point GetSnapPoint(sal_uInt32 i) const override
virtual SwFrameFormat & GetFrameFormat() override
virtual void SetLayer(SdrLayerID nLayer) override
tools::Rectangle SVRect() const
sal_Int32 GetDenominator() const
virtual SdrObject * ReplaceObject(SdrObject *pNewObj, size_t nObjNum)
virtual const tools::Rectangle & GetSnapRect() const override
general base class for all free-flowing frames
virtual void NbcSetSnapRect(const tools::Rectangle &rRect)
SwPageFrame * FindPageFrameOfAnchor()
method to determine the page frame, on which the 'anchor' of the given anchored object is...
#define SAL_WARN_IF(condition, area, stream)
virtual SdrLayerID GetInvisibleHeavenId() const =0
SwTextFrame * FindMaster() const
virtual const SwViewShell * GetCurrentViewShell() const =0
Returns the layout set at the document.
SwPageFrame * GetPageFrame()
virtual void NbcSetLogicRect(const tools::Rectangle &rRect)
void ClrContourCache(const SdrObject *pObj)
void SetOrdNum(sal_uInt32 nNum)
virtual void Mirror(const Point &rRef1, const Point &rRef2) override
virtual void NbcMove(const Size &rSiz)
void SetPageFrame(SwPageFrame *_pNewPageFrame)
bool NotYetPositioned() const
virtual void NbcSetLayer(SdrLayerID nLayer) override
Point GetRelPosToAnchorFrame() const
method to determine position of anchored object relative to anchor frame
void RemoveFromDrawingPage()
new class for re-direct methods calls at a 'virtual' drawing object to its referenced object...
bool IsRightToLeft() const
const SwModify * GetRegisteredIn() const
virtual void Resize(const Point &rRef, const Fraction &xFact, const Fraction &yFact, bool bUnsetRelative=true) override
void InvalidateObjRectWithSpaces() const
sal_Int32 GetNumerator() const
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
constexpr TypedWhichId< SvxLRSpaceItem > RES_LR_SPACE(91)
constexpr TypedWhichId< SwDrawFrameFormat > RES_DRAWFRMFMT(157)
virtual ::basegfx::B2DPolyPolygon TakeXorPoly() const override
virtual void Rotate(const Point &rRef, Degree100 nAngle, double sn, double cs)
constexpr TypedWhichId< SwFlyFrameFormat > RES_FLYFRMFMT(154)
SdrObject * getParentSdrObjectFromSdrObject() const
virtual void SetRectsDirty(bool bNotMyself=false, bool bRecursive=true)
void AppendDrawObj(SwAnchoredObject &_rNewObj)
virtual ::basegfx::B2DPolyPolygon TakeContour() const override
void RemoveFromWriterLayout()
SdrUserCallType meParentUserCallEventType
virtual void SetSnapRect(const tools::Rectangle &rRect)
static void syncFlyFrameAttr(SwFrameFormat &rShape, SfxItemSet const &rSet)
Similar to syncProperty(), but used by the internal API (e.g. for UI purposes).
virtual void SetEnableSetModified(bool bEnableSetModified)=0
const SwFrame * GetAnchorFrame() const
SwModify * GetRegisteredInNonConst() const
#define SAL_WARN(area, stream)
virtual void NbcSetAnchorPos(const Point &rPnt)
bool IsNestedUserCall() const
virtual SdrObject * SetObjectOrdNum(size_t nOldObjNum, size_t nNewObjNum)
virtual void SetContextWritingMode(const sal_Int16 _nContextWritingMode)
virtual void SetSnapRect(const tools::Rectangle &rRect) override
virtual const tools::Rectangle & GetLogicRect() const
NestedUserCallHdl(SwDrawContact *_pDrawContact, SdrUserCallType _eEventType)
void StartAllAction()
Set up Start-/EndAction for all Shells on an as high as possible (Shell section) level.
virtual void NbcSetAnchorPos(const Point &rPnt) override
SdrVirtObj & operator=(const SdrVirtObj &rObj)
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
const SwFrame * GetAnchorFrame() const
void ResetLayoutProcessBools()
B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
constexpr TypedWhichId< SwFormatFollowTextFlow > RES_FOLLOW_TEXT_FLOW(123)
void EndAllAction(bool bVirDev=false)
WW8AnchorConv m_eHoriConv
virtual void NbcSetPoint(const Point &rPnt, sal_uInt32 i) override
SwRootFrame * GetLayout() const
bool IsPositioningInProgress() const
is positioning of anchored object in progress
virtual Point GetPoint(sal_uInt32 i) const
SdrObjUserCall * GetUserCall() const
virtual Point GetPoint(sal_uInt32 i) const override
SwContentNode * GoNext(SwNodeIndex *) const
constexpr TypedWhichId< SvxULSpaceItem > RES_UL_SPACE(92)
void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle &rBoundRect) const
SwAnchoredObject & AnchoredObj()
bool IsCallbackActionEnabled() const
constexpr TypedWhichId< SwFormatAnchor > RES_ANCHOR(104)
const SwAttrPool & GetAttrPool() const
bool IsConnected() const
is 'virtual' drawing object connected to writer layout and / to drawing layer.
virtual void NbcSetLayer(SdrLayerID nLayer)