make more use of DynCastSwVirtFlyDrawObj

we have it, might as well use it

Change-Id: I68ffd56710880a4397f33dd22c78dbc567727078
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198905
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit 3d3326a8ff11ace588467b6d76ea826353b6d1e2)
Reviewed-on: https://gerrit.collaboraoffice.com/c/core/+/362
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Noel Grandin <noel.grandin@collabora.com>
diff --git a/sw/qa/core/layout/flycnt.cxx b/sw/qa/core/layout/flycnt.cxx
index 0142464..90066cb 100644
--- a/sw/qa/core/layout/flycnt.cxx
+++ b/sw/qa/core/layout/flycnt.cxx
@@ -723,7 +723,7 @@
     // Then make sure the first row is selected:
     const SdrMarkList& rMarkList = pWrtShell->GetDrawView()->GetMarkedObjectList();
     SdrObject* pSelectedObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
-    auto pSelectedVirtObj = dynamic_cast<SwVirtFlyDrawObj*>(pSelectedObj);
+    auto pSelectedVirtObj = DynCastSwVirtFlyDrawObj(pSelectedObj);
     auto pSelected = static_cast<SwFlyAtContentFrame*>(pSelectedVirtObj->GetFlyFrame());
     // Without the accompanying fix in place, this test would have failed with:
     // - Expected: 5
diff --git a/sw/source/core/access/accfrmobj.cxx b/sw/source/core/access/accfrmobj.cxx
index 1a11c84..0561e7d 100644
--- a/sw/source/core/access/accfrmobj.cxx
+++ b/sw/source/core/access/accfrmobj.cxx
@@ -98,7 +98,7 @@
 void SwAccessibleChild::Init( const SdrObject* pDrawObj )
 {
     mpDrawObj = pDrawObj;
-    const SwVirtFlyDrawObj* pFlyDrawObj = dynamic_cast<const SwVirtFlyDrawObj*>(mpDrawObj);
+    const SwVirtFlyDrawObj* pFlyDrawObj = DynCastSwVirtFlyDrawObj(mpDrawObj);
     mpFrame = pFlyDrawObj ? pFlyDrawObj->GetFlyFrame() : nullptr;
     mpWindow = nullptr;
 }
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index e2537a1..f35b0a9 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -168,7 +168,7 @@
     const SdrObject* pObj = pSdrHint->GetObject();
     if (pObj &&
            ( dynamic_cast< const SwFlyDrawObj* >(pObj) ||
-             dynamic_cast< const SwVirtFlyDrawObj* >(pObj) ||
+             DynCastSwVirtFlyDrawObj(pObj) ||
              pObj->GetObjIdentifier() == SdrObjKind::NewFrame ) )
     {
         return;
diff --git a/sw/source/core/doc/docdraw.cxx b/sw/source/core/doc/docdraw.cxx
index acfe543..1b9197e 100644
--- a/sw/source/core/doc/docdraw.cxx
+++ b/sw/source/core/doc/docdraw.cxx
@@ -460,7 +460,7 @@
         if( 1 == rMrkList.GetMarkCount() )
         {
             SdrObject *pObj = rMrkList.GetMark( 0 )->GetMarkedSdrObj();
-            if( auto pDrawObj = dynamic_cast<SwVirtFlyDrawObj*>( pObj) )
+            if( auto pDrawObj = DynCastSwVirtFlyDrawObj( pObj) )
             {
                 SwFlyFrameFormat* pFrameFormat = pDrawObj->GetFlyFrame()->GetFormat();
                 if( pFrameFormat )
@@ -474,7 +474,7 @@
         for( size_t i = 0; i < rMrkList.GetMarkCount(); ++i )
         {
             SdrObject *pObj = rMrkList.GetMark( i )->GetMarkedSdrObj();
-            if( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) ==  nullptr )
+            if( DynCastSwVirtFlyDrawObj( pObj) ==  nullptr )
             {
                 if (SwDrawContact* pC = static_cast<SwDrawContact*>(GetUserCall(pObj)))
                 {
@@ -638,7 +638,7 @@
             while( aIter.IsMore() )
             {
                 SdrObject* pObj( aIter.Next() );
-                if ( !dynamic_cast<SwVirtFlyDrawObj*>(pObj) &&
+                if ( !DynCastSwVirtFlyDrawObj(pObj) &&
                      !dynamic_cast<SwFlyDrawObj*>(pObj) )
                 {
                     bExistsDrawObjs = true;
@@ -663,7 +663,7 @@
             while( aIter.IsMore() )
             {
                 SdrObject* pObj( aIter.Next() );
-                if ( !dynamic_cast<SwVirtFlyDrawObj*>(pObj) &&
+                if ( !DynCastSwVirtFlyDrawObj(pObj) &&
                      !dynamic_cast<SwFlyDrawObj*>(pObj) )
                 {
                     SwDrawContact* pDrawContact =
diff --git a/sw/source/core/doc/docfly.cxx b/sw/source/core/doc/docfly.cxx
index e901dcf..90c8954 100644
--- a/sw/source/core/doc/docfly.cxx
+++ b/sw/source/core/doc/docfly.cxx
@@ -755,7 +755,7 @@
     for ( size_t i = 0; i < _rMrkList.GetMarkCount(); ++i )
     {
         SdrObject* pObj = _rMrkList.GetMark( i )->GetMarkedSdrObj();
-        if ( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) ==  nullptr )
+        if ( DynCastSwVirtFlyDrawObj( pObj) ==  nullptr )
         {
             SwDrawContact* pContact = static_cast<SwDrawContact*>(GetUserCall(pObj));
 
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index 30b650e..0188baa 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -140,7 +140,7 @@
     // For drawing objects: set layer of cloned object to invisible layer
     SdrLayerID nLayerIdForClone = rObj.GetLayer();
     if ( dynamic_cast<const SwFlyDrawObj*>( pObj.get() ) ==  nullptr &&
-         dynamic_cast<const SwVirtFlyDrawObj*>( pObj.get() ) ==  nullptr &&
+         DynCastSwVirtFlyDrawObj( pObj.get() ) ==  nullptr &&
          pObj->GetObjIdentifier() != SdrObjKind::NewFrame )
     {
         if ( getIDocumentDrawModelAccess().IsVisibleLayerId( nLayerIdForClone ) )
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index 880bdd0..0faa473 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -120,7 +120,7 @@
 */
 SwFrameFormat *FindFrameFormat( SdrObject *pObj )
 {
-    if (SwVirtFlyDrawObj* pFlyDrawObj = dynamic_cast<SwVirtFlyDrawObj*>(pObj))
+    if (SwVirtFlyDrawObj* pFlyDrawObj = DynCastSwVirtFlyDrawObj(pObj))
        return pFlyDrawObj->GetFormat();
 
     if (SwContact* pContact = GetUserCall(pObj))
@@ -559,7 +559,7 @@
 const SwAnchoredObject* SwFlyDrawContact::GetAnchoredObj(const SdrObject* pSdrObj) const
 {
     assert(pSdrObj);
-    assert(dynamic_cast<const SwVirtFlyDrawObj*>(pSdrObj) != nullptr);
+    assert(DynCastSwVirtFlyDrawObj(pSdrObj) != nullptr);
     assert(GetUserCall(pSdrObj) == this &&
         "<SwFlyDrawContact::GetAnchoredObj(..)> - provided object doesn't belong to this contact");
 
@@ -586,7 +586,7 @@
  */
 void SwFlyDrawContact::MoveObjToVisibleLayer( SdrObject* _pDrawObj )
 {
-    assert(dynamic_cast<const SwVirtFlyDrawObj*>(_pDrawObj) != nullptr);
+    assert(DynCastSwVirtFlyDrawObj(_pDrawObj) != nullptr);
 
     if ( GetFormat()->getIDocumentDrawModelAccess().IsVisibleLayerId( _pDrawObj->GetLayer() ) )
     {
@@ -626,7 +626,7 @@
  */
 void SwFlyDrawContact::MoveObjToInvisibleLayer( SdrObject* _pDrawObj )
 {
-    assert(dynamic_cast<const SwVirtFlyDrawObj*>(_pDrawObj) != nullptr);
+    assert(DynCastSwVirtFlyDrawObj(_pDrawObj) != nullptr);
 
     if ( !GetFormat()->getIDocumentDrawModelAccess().IsVisibleLayerId( _pDrawObj->GetLayer() ) )
     {
diff --git a/sw/source/core/draw/dpage.cxx b/sw/source/core/draw/dpage.cxx
index e238496..971e22b 100644
--- a/sw/source/core/draw/dpage.cxx
+++ b/sw/source/core/draw/dpage.cxx
@@ -158,7 +158,7 @@
 
         SdrPageView* pPV;
         SdrObject* pObj = pView->PickObj(aPos, 0, pPV, SdrSearchOptions::PICKMACRO);
-        SwVirtFlyDrawObj* pDrawObj = dynamic_cast<SwVirtFlyDrawObj*>(pObj);
+        SwVirtFlyDrawObj* pDrawObj = DynCastSwVirtFlyDrawObj(pObj);
         OUString sText;
         tools::Rectangle aPixRect;
         bool bTooltip = false;
diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx
index 95dc653..01ca316 100644
--- a/sw/source/core/draw/dview.cxx
+++ b/sw/source/core/draw/dview.cxx
@@ -84,7 +84,7 @@
 
 static const SwFrame *lcl_FindAnchor( const SdrObject *pObj, bool bAll )
 {
-    const SwVirtFlyDrawObj *pVirt = dynamic_cast< const SwVirtFlyDrawObj *>( pObj );
+    const SwVirtFlyDrawObj *pVirt = DynCastSwVirtFlyDrawObj( pObj );
     if ( pVirt )
     {
         if ( bAll || !pVirt->GetFlyFrame()->IsFlyInContentFrame() )
@@ -149,7 +149,7 @@
         // detect if object is selected) are no longer valid.
         // The standard primitive hit-test for SwVirtFlyDrawObj now is the outer bound. The old
         // implementation reduced this excluding the inner bound when the object was not selected.
-        SwVirtFlyDrawObj* pSwVirtFlyDrawObj = dynamic_cast< SwVirtFlyDrawObj* >(pRetval);
+        SwVirtFlyDrawObj* pSwVirtFlyDrawObj = DynCastSwVirtFlyDrawObj(pRetval);
 
         if(pSwVirtFlyDrawObj)
         {
@@ -646,7 +646,7 @@
                 aMovedChildObjs.push_back( pTmpObj );
                 // adjustments for accessibility API
 #if !ENABLE_WASM_STRIP_ACCESSIBILITY
-                if ( auto pFlyDrawObj = dynamic_cast<SwVirtFlyDrawObj *>( pTmpObj ) )
+                if ( auto pFlyDrawObj = DynCastSwVirtFlyDrawObj( pTmpObj ) )
                 {
                     const SwFlyFrame *pTmpFlyFrame = pFlyDrawObj->GetFlyFrame();
                     m_rImp.DisposeAccessibleFrame( pTmpFlyFrame );
@@ -713,7 +713,7 @@
     //current anchor. Search only if we currently drag.
     const SwFrame* pAnch = nullptr;
     tools::Rectangle aMyRect;
-    auto pFlyDrawObj = dynamic_cast<SwVirtFlyDrawObj *>( pObj );
+    auto pFlyDrawObj = DynCastSwVirtFlyDrawObj( pObj );
     if ( pFlyDrawObj )
     {
         pAnch = pFlyDrawObj->GetFlyFrame()->GetAnchorFrame();
@@ -862,7 +862,7 @@
     {
         const SdrObject *pObj = rMrkList.GetMark( i )->GetMarkedSdrObj();
         const SwFrame *pFrame = nullptr;
-        if ( auto pVirtFlyDrawObj = dynamic_cast< const SwVirtFlyDrawObj *>( pObj ) )
+        if ( auto pVirtFlyDrawObj = DynCastSwVirtFlyDrawObj( pObj ) )
         {
             const SwFlyFrame *pFly = pVirtFlyDrawObj->GetFlyFrame();
             if ( pFly  )
diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx
index 870b59a..0ac7c9b 100644
--- a/sw/source/core/frmedt/fecopy.cxx
+++ b/sw/source/core/frmedt/fecopy.cxx
@@ -1274,7 +1274,7 @@
     if( rMrkList.GetMarkCount() )
     {
         if( rMrkList.GetMarkCount() == 1 &&
-            dynamic_cast< const SwVirtFlyDrawObj* >(rMrkList.GetMark( 0 )->GetMarkedSdrObj()) != nullptr )
+            DynCastSwVirtFlyDrawObj(rMrkList.GetMark( 0 )->GetMarkedSdrObj()) != nullptr )
         {
             // select frame
             if( CNT_GRF == GetCntType() )
@@ -1424,7 +1424,7 @@
         SdrObject* pOldObj = pView->GetMarkedObjectList().GetMark( 0 )->GetMarkedSdrObj();
         assert(pOldObj);
 
-        if( SwPasteSdr::SetAttr == nAction && dynamic_cast<const SwVirtFlyDrawObj*>( pOldObj) !=  nullptr )
+        if( SwPasteSdr::SetAttr == nAction && DynCastSwVirtFlyDrawObj( pOldObj) !=  nullptr )
             nAction = SwPasteSdr::Replace;
 
         switch( nAction )
@@ -1433,7 +1433,7 @@
             {
                 const SwFrameFormat* pFormat(nullptr);
                 const SwFrame* pAnchor(nullptr);
-                if( dynamic_cast<const SwVirtFlyDrawObj*>( pOldObj) !=  nullptr )
+                if( DynCastSwVirtFlyDrawObj( pOldObj) !=  nullptr )
                 {
                     pFormat = FindFrameFormat( pOldObj );
 
@@ -1470,7 +1470,7 @@
                 else
                     pNewObj->SetLayer( pOldObj->GetLayer() );
 
-                if( dynamic_cast<const SwVirtFlyDrawObj*>( pOldObj) !=  nullptr )
+                if( DynCastSwVirtFlyDrawObj( pOldObj) !=  nullptr )
                 {
                     // store attributes, then set SdrObject
                     SfxItemSetFixed<RES_SURROUND, RES_ANCHOR> aFrameSet( mxDoc->GetAttrPool() );
diff --git a/sw/source/core/frmedt/fefly1.cxx b/sw/source/core/frmedt/fefly1.cxx
index 9f0e3b9..b024a8c 100644
--- a/sw/source/core/frmedt/fefly1.cxx
+++ b/sw/source/core/frmedt/fefly1.cxx
@@ -343,7 +343,7 @@
 
         SdrObject *pO = rMrkList.GetMark( 0 )->GetMarkedSdrObj();
 
-        SwVirtFlyDrawObj *pFlyObj = dynamic_cast<SwVirtFlyDrawObj*>(pO);
+        SwVirtFlyDrawObj *pFlyObj = DynCastSwVirtFlyDrawObj(pO);
 
         return pFlyObj ? pFlyObj->GetFlyFrame() : nullptr;
     }
@@ -394,7 +394,7 @@
     if( pFormat && RndStdIds::FLY_AT_FLY == pFormat->GetAnchor().GetAnchorId() )
     {
         const SwFrame* pFly;
-        if (SwVirtFlyDrawObj* pFlyObj = dynamic_cast<SwVirtFlyDrawObj *>(pObj))
+        if (SwVirtFlyDrawObj* pFlyObj = DynCastSwVirtFlyDrawObj(pObj))
         {
             pFly = pFlyObj->GetFlyFrame()->GetAnchorFrame();
         }
@@ -507,7 +507,7 @@
     if ( RndStdIds::FLY_AS_CHAR == nAnchorId )
         return aRet;
 
-    bool bFlyFrame = dynamic_cast<SwVirtFlyDrawObj *>(pObj) != nullptr;
+    bool bFlyFrame = DynCastSwVirtFlyDrawObj(pObj) != nullptr;
 
     bool bTextBox = false;
     if (pFormat->Which() == RES_DRAWFRMFMT)
@@ -1629,7 +1629,7 @@
     pDView->SetHitTolerancePixel( 2 );
 
     SdrObject* pObj = pDView->PickObj(rPt, pDView->getHitTolLog(), pPV, SdrSearchOptions::PICKMACRO);
-    SwVirtFlyDrawObj* pFlyObj = dynamic_cast<SwVirtFlyDrawObj*>(pObj);
+    SwVirtFlyDrawObj* pFlyObj = DynCastSwVirtFlyDrawObj(pObj);
     if (pFlyObj)
     {
         SwFlyFrame *pFly = pFlyObj->GetFlyFrame();
@@ -1697,7 +1697,7 @@
     SwDrawView *pDView = const_cast<SwDrawView*>(Imp()->GetDrawView());
 
     SdrObject* pObj = pDView->PickObj(rPt, pDView->getHitTolLog(), pPV);
-    SwVirtFlyDrawObj* pFlyObj = dynamic_cast<SwVirtFlyDrawObj*>(pObj);
+    SwVirtFlyDrawObj* pFlyObj = DynCastSwVirtFlyDrawObj(pObj);
     if (pFlyObj)
     {
         SwFlyFrame *pFly = pFlyObj->GetFlyFrame();
@@ -1744,7 +1744,7 @@
         if (pObj)
         {
            // first check it:
-            if (SwVirtFlyDrawObj* pFlyObj = dynamic_cast<SwVirtFlyDrawObj*>(pObj))
+            if (SwVirtFlyDrawObj* pFlyObj = DynCastSwVirtFlyDrawObj(pObj))
                 pRet = pFlyObj->GetFormat();
             else if ( pObj->GetUserCall() ) //not for group objects
                 pRet = static_cast<SwDrawContact*>(pObj->GetUserCall())->GetFormat();
@@ -1809,7 +1809,7 @@
             }
         }
     }
-    else if (const SwVirtFlyDrawObj *pFlyObj = dynamic_cast<const SwVirtFlyDrawObj*>(pInvestigatedObj))
+    else if (const SwVirtFlyDrawObj *pFlyObj = DynCastSwVirtFlyDrawObj(pInvestigatedObj))
     {
         const SwFlyFrame *pFly = pFlyObj->GetFlyFrame();
         const SwFrame* pLower = pFly->Lower();
@@ -1923,7 +1923,7 @@
     aFrameSet.Set( pFormat->GetAttrSet() );
 
     // set size and position?
-    if( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) == nullptr )
+    if( DynCastSwVirtFlyDrawObj( pObj) == nullptr )
     {
         // then let's do it:
         const tools::Rectangle &rBound = pObj->GetSnapRect();
diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx
index c330c3a..82e9afa 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -117,7 +117,7 @@
     if ( pLst && pLst->GetMarkCount() == 1 )
     {
         SdrObject *pO = pLst->GetMark( 0 )->GetMarkedSdrObj();
-        if (SwVirtFlyDrawObj* pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pO))
+        if (SwVirtFlyDrawObj* pVirtO = DynCastSwVirtFlyDrawObj(pO))
             return pVirtO->GetFlyFrame();
     }
     return nullptr;
@@ -308,7 +308,7 @@
         for ( size_t i = 0; i < rMrkList.GetMarkCount(); ++i )
         {
             SdrObject *pTmpObj = rMrkList.GetMark( i )->GetMarkedSdrObj();
-            bool bForget = dynamic_cast<const SwVirtFlyDrawObj*>( pTmpObj) !=  nullptr;
+            bool bForget = DynCastSwVirtFlyDrawObj( pTmpObj) !=  nullptr;
             if( bForget )
             {
                 pDView->UnmarkAll();
@@ -441,7 +441,7 @@
 
     SwFrame* pOld;
     SwFlyFrame* pFly = nullptr;
-    if (SwVirtFlyDrawObj* pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pObj))
+    if (SwVirtFlyDrawObj* pVirtO = DynCastSwVirtFlyDrawObj(pObj))
     {
         pFly = pVirtO->GetFlyFrame();
         pOld = pFly->AnchorFrame();
@@ -771,7 +771,7 @@
         for ( size_t i = 0; i < rMarkList.GetMarkCount(); ++i )
         {
             SdrObject *pTmpObj = rMarkList.GetMark( i )->GetMarkedSdrObj();
-            bool bForget = dynamic_cast<const SwVirtFlyDrawObj*>( pTmpObj) !=  nullptr;
+            bool bForget = DynCastSwVirtFlyDrawObj( pTmpObj) !=  nullptr;
             if( bForget )
             {
                 pView->UnmarkAll();
@@ -916,7 +916,7 @@
         sal_Int16 aHori = text::HoriOrientation::NONE;
         SwRect aRect;
         SdrObject *pO = pLst->GetMark( j )->GetMarkedSdrObj();
-        if (SwVirtFlyDrawObj* pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pO))
+        if (SwVirtFlyDrawObj* pVirtO = DynCastSwVirtFlyDrawObj(pO))
         {
             SwFlyFrame *pFly = pVirtO->GetFlyFrame();
 
@@ -1165,7 +1165,7 @@
         {
             pObj->SetLayer( nLayerId );
             InvalidateWindows( SwRect( pObj->GetCurrentBoundRect() ) );
-            if (SwVirtFlyDrawObj* pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pObj))
+            if (SwVirtFlyDrawObj* pVirtO = DynCastSwVirtFlyDrawObj(pObj))
             {
                 SwFormat *pFormat = pVirtO->GetFlyFrame()->GetFormat();
                 SvxOpaqueItem aOpa( pFormat->GetOpaque() );
@@ -1226,7 +1226,7 @@
 
         if(1 == rList.GetMarkCount())
         {
-            const SwVirtFlyDrawObj* pVirtFlyDraw(dynamic_cast< const SwVirtFlyDrawObj* >(rList.GetMark(0)->GetMarkedSdrObj()));
+            const SwVirtFlyDrawObj* pVirtFlyDraw(DynCastSwVirtFlyDrawObj(rList.GetMark(0)->GetMarkedSdrObj()));
 
             if(nullptr != pVirtFlyDraw)
             {
@@ -1454,7 +1454,7 @@
                 {
                     SdrObject *pCandidate = it->get();
 
-                    SwVirtFlyDrawObj* pDrawObj = dynamic_cast<SwVirtFlyDrawObj*>(pCandidate);
+                    SwVirtFlyDrawObj* pDrawObj = DynCastSwVirtFlyDrawObj(pCandidate);
                     if (pDrawObj && pDrawObj->GetCurrentBoundRect().Contains(rPt))
                     {
                         bRet = false;
@@ -1591,7 +1591,7 @@
         if ( rMrkList.GetMarkCount() )
         {
             const SdrObject* pStartObj = rMrkList.GetMark(0)->GetMarkedSdrObj();
-            if( auto pVirtFlyDrawObj = dynamic_cast<const SwVirtFlyDrawObj*>( pStartObj) )
+            if( auto pVirtFlyDrawObj = DynCastSwVirtFlyDrawObj( pStartObj) )
                 aPos = pVirtFlyDrawObj->GetFlyFrame()->getFrameArea().Pos();
             else
                 aPos = pStartObj->GetSnapRect().TopLeft();
@@ -1625,7 +1625,7 @@
         while ( aObjIter.IsMore() )
         {
             SdrObject* pObj = aObjIter.Next();
-            SwVirtFlyDrawObj *pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pObj);
+            SwVirtFlyDrawObj *pVirtO = DynCastSwVirtFlyDrawObj(pObj);
             if( ( bNoFly && pVirtO ) ||
                 ( bNoDraw && !pVirtO ) ||
                 // Ignore TextBoxes of draw shapes here, so that
@@ -1678,7 +1678,7 @@
                 while ( aTmpIter.IsMore() )
                 {
                     SdrObject* pTmpObj = aTmpIter.Next();
-                    pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pTmpObj);
+                    pVirtO = DynCastSwVirtFlyDrawObj(pTmpObj);
                     if( ( bNoFly && pVirtO ) || ( bNoDraw && !pVirtO ) )
                         continue;
                     if (pVirtO)
@@ -1751,7 +1751,7 @@
         return false;
     }
 
-    const SwVirtFlyDrawObj *pVirtO = dynamic_cast<const SwVirtFlyDrawObj*>(pBest);
+    const SwVirtFlyDrawObj *pVirtO = DynCastSwVirtFlyDrawObj(pBest);
     if (pVirtO)
     {
         const SwRect& rFrame = pVirtO->GetFlyFrame()->getFrameArea();
@@ -2284,7 +2284,7 @@
                 while (i < rMrkList.GetMarkCount())
                 {
                     SdrObject *pObj = rMrkList.GetMark( i )->GetMarkedSdrObj();
-                    if( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) !=  nullptr )
+                    if( DynCastSwVirtFlyDrawObj( pObj) !=  nullptr )
                     {
                         if ( !bShowHdl )
                         {
@@ -2330,7 +2330,7 @@
         for ( size_t i = 0; i < rMrkList.GetMarkCount(); ++i )
         {
             SdrObject *pObj = rMrkList.GetMark( i )->GetMarkedSdrObj();
-            if ( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) != nullptr )
+            if ( DynCastSwVirtFlyDrawObj( pObj) != nullptr )
             {
                 nRet = RndStdIds::UNKNOWN;
                 break;
@@ -2512,7 +2512,7 @@
             if ( bIsGroupAllowed )
             {
                 const SwFrame* pAnchorFrame = nullptr;
-                if ( auto pVirtFlyDrawObj = dynamic_cast<const SwVirtFlyDrawObj*>( pObj) )
+                if ( auto pVirtFlyDrawObj = DynCastSwVirtFlyDrawObj( pObj) )
                 {
                     const SwFlyFrame* pFlyFrame = pVirtFlyDrawObj->GetFlyFrame();
                     if ( pFlyFrame )
@@ -2710,7 +2710,7 @@
                 nChk |= ( pObj->IsMoveProtect() ? FlyProtectFlags::Pos : FlyProtectFlags::NONE ) |
                         ( pObj->IsResizeProtect()? FlyProtectFlags::Size : FlyProtectFlags::NONE );
 
-                if (SwVirtFlyDrawObj* pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pObj))
+                if (SwVirtFlyDrawObj* pVirtO = DynCastSwVirtFlyDrawObj(pObj))
                 {
                     SwFlyFrame *pFly = pVirtO->GetFlyFrame();
                     if ( (FlyProtectFlags::Content & eType) && pFly->GetFormat()->GetProtect().IsContentProtected() )
@@ -2744,7 +2744,7 @@
                     return eType;
             }
             const SwFrame* pAnch;
-            if (SwVirtFlyDrawObj* pVirtO = dynamic_cast<SwVirtFlyDrawObj*>(pObj))
+            if (SwVirtFlyDrawObj* pVirtO = DynCastSwVirtFlyDrawObj(pObj))
                 pAnch = pVirtO->GetFlyFrame()->GetAnchorFrame();
             else
             {
@@ -2890,7 +2890,7 @@
         const auto nOld = pDView->GetHitTolerancePixel();
         pDView->SetHitTolerancePixel( 0 );
         SdrObject* pObj = pDView->PickObj(rPt, pDView->getHitTolLog(), pPView, SdrSearchOptions::PICKMARKABLE);
-        SwVirtFlyDrawObj* pDrawObj = dynamic_cast<SwVirtFlyDrawObj*>(pObj);
+        SwVirtFlyDrawObj* pDrawObj = DynCastSwVirtFlyDrawObj(pObj);
         if (pDrawObj)
         {
             SwFlyFrame *pFly = pDrawObj->GetFlyFrame();
@@ -3259,8 +3259,8 @@
             // get selected object
             const SdrObject *pSdrObj = pMrkList->GetMark( 0 )->GetMarkedSdrObj();
             // check, if selected object is a shape (drawing object)
-            OSL_ENSURE( dynamic_cast<const SwVirtFlyDrawObj*>( pSdrObj) ==  nullptr, "wrong usage of SwFEShell::GetShapeBackground - selected object is not a drawing object!");
-            if ( dynamic_cast<const SwVirtFlyDrawObj*>( pSdrObj) ==  nullptr )
+            OSL_ENSURE( DynCastSwVirtFlyDrawObj( pSdrObj) ==  nullptr, "wrong usage of SwFEShell::GetShapeBackground - selected object is not a drawing object!");
+            if ( DynCastSwVirtFlyDrawObj( pSdrObj) ==  nullptr )
             {
                 if (SwDrawContact* pDrawContact = static_cast<SwDrawContact*>(GetUserCall(pSdrObj)))
                 {
@@ -3311,8 +3311,8 @@
     const SdrObject *pSdrObj = rMrkList.GetMark(0)->GetMarkedSdrObj();
 
     // check, if selected object is a shape (drawing object)
-    OSL_ENSURE(dynamic_cast<const SwVirtFlyDrawObj*>(pSdrObj) == nullptr, "wrong usage of SwFEShell::GetShapeBackground - selected object is not a drawing object!");
-    if (dynamic_cast<const SwVirtFlyDrawObj*>(pSdrObj) != nullptr)
+    OSL_ENSURE(DynCastSwVirtFlyDrawObj(pSdrObj) == nullptr, "wrong usage of SwFEShell::GetShapeBackground - selected object is not a drawing object!");
+    if (DynCastSwVirtFlyDrawObj(pSdrObj) != nullptr)
         return false;
 
     // determine page frame of the frame the shape is anchored.
diff --git a/sw/source/core/frmedt/fews.cxx b/sw/source/core/frmedt/fews.cxx
index 55d0942..d5b26fe 100644
--- a/sw/source/core/frmedt/fews.cxx
+++ b/sw/source/core/frmedt/fews.cxx
@@ -503,7 +503,7 @@
             {
                 SdrObject* pDrawObj = aDrawObjs.back();
                 assert(pDrawObj);
-                if ( dynamic_cast<const SwVirtFlyDrawObj*>( pDrawObj) ==  nullptr &&
+                if ( DynCastSwVirtFlyDrawObj( pDrawObj) ==  nullptr &&
                      dynamic_cast<const SwFlyDrawObj*>( pDrawObj) ==  nullptr )
                 {
                     SwFlyFrameFormat *pFormat =
@@ -1338,7 +1338,7 @@
         }
 
         if ( !bEnvironment )
-            if ( auto pVirtFly = dynamic_cast<const SwVirtFlyDrawObj*>( pObj) )
+            if ( auto pVirtFly = DynCastSwVirtFlyDrawObj( pObj) )
                 pRef = pVirtFly->GetFlyFrame();
 
         bVert = pRef->IsVertical();
diff --git a/sw/source/core/inc/dflyobj.hxx b/sw/source/core/inc/dflyobj.hxx
index 9a9b034..c733f41 100644
--- a/sw/source/core/inc/dflyobj.hxx
+++ b/sw/source/core/inc/dflyobj.hxx
@@ -154,7 +154,7 @@
 };
 
 // this serves a similar function to the DynCast* functions in include/svx/svdobj.hxx
-SwVirtFlyDrawObj* DynCastSwVirtFlyDrawObj(SdrObject*);
+SW_DLLPUBLIC SwVirtFlyDrawObj* DynCastSwVirtFlyDrawObj(SdrObject*);
 inline const SwVirtFlyDrawObj* DynCastSwVirtFlyDrawObj(const SdrObject* p) { return DynCastSwVirtFlyDrawObj(const_cast<SdrObject*>(p)); }
 
 #endif
diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx
index ad70a24..4f07843 100644
--- a/sw/source/core/layout/flylay.cxx
+++ b/sw/source/core/layout/flylay.cxx
@@ -1219,7 +1219,7 @@
 bool CalcClipRect( const SdrObject *pSdrObj, SwRect &rRect, bool bMove )
 {
     bool bRet = true;
-    if ( auto pVirtFlyDrawObj = dynamic_cast<const SwVirtFlyDrawObj*>(pSdrObj) )
+    if ( auto pVirtFlyDrawObj = DynCastSwVirtFlyDrawObj(pSdrObj) )
     {
         const SwFlyFrame* pFly = pVirtFlyDrawObj->GetFlyFrame();
         const bool bFollowTextFlow = pFly->GetFormat()->GetFollowTextFlow().GetValue();
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index 96b6dcf..388a5cb 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -2740,7 +2740,7 @@
     for (SwAnchoredObject* i : *pObjs)
     {
         const SdrObject* pObj = i->GetDrawObj();
-        if ( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) ==  nullptr )
+        if ( DynCastSwVirtFlyDrawObj( pObj) ==  nullptr )
             continue;
         sal_uInt32 nTmp = pObj->GetOrdNumDirect();
         if ( nTmp >= nTopOrd )
@@ -2764,7 +2764,7 @@
             for (SwAnchoredObject* i : *pObjs)
             {
                 const SdrObject* pObj = i->GetDrawObj();
-                if ( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) ==  nullptr )
+                if ( DynCastSwVirtFlyDrawObj( pObj) ==  nullptr )
                     continue;
                 sal_uInt32 nTmp = pObj->GetOrdNumDirect();
                 if ( nTmp < nBotOrd )
@@ -2822,7 +2822,7 @@
     for (SwAnchoredObject* i : *pObjs)
     {
         const SdrObject* pObj = i->GetDrawObj();
-        if ( dynamic_cast<const SwVirtFlyDrawObj*>( pObj) ==  nullptr )
+        if ( DynCastSwVirtFlyDrawObj( pObj) ==  nullptr )
             continue;
         sal_uInt32 nTmp = pObj->GetOrdNumDirect();
         if ( nTmp < nCurOrd && nTmp >= nOrd )
@@ -3443,7 +3443,7 @@
     SwLayoutFrame* pArea;
     SwFlyFrame *pFlyFrame = nullptr;
     SwFrame* pAnchor;
-    if( auto pVirtFlyDrawObj = dynamic_cast<const SwVirtFlyDrawObj*>( pObj) )
+    if( auto pVirtFlyDrawObj = DynCastSwVirtFlyDrawObj( pObj) )
     {
         pFlyFrame = const_cast<SwVirtFlyDrawObj*>(pVirtFlyDrawObj)->GetFlyFrame();
         pAnchor = pFlyFrame->AnchorFrame();
@@ -3647,7 +3647,7 @@
 {
     Point aPos;
     const SwFrame* pFrame;
-    if (const SwVirtFlyDrawObj *pFlyDrawObj = dynamic_cast<const SwVirtFlyDrawObj*>(pObj))
+    if (const SwVirtFlyDrawObj *pFlyDrawObj = DynCastSwVirtFlyDrawObj(pObj))
     {
         const SwFlyFrame* pFly = pFlyDrawObj->GetFlyFrame();
         pFrame = pFly->GetAnchorFrame();
diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx
index 335aa17..3e76636 100644
--- a/sw/source/core/layout/layact.cxx
+++ b/sw/source/core/layout/layact.cxx
@@ -119,7 +119,7 @@
 
     for ( size_t i = 0; i < rObjs.size() && !aTmp.empty(); ++i )
     {
-        SwVirtFlyDrawObj *pVirtFly = dynamic_cast<SwVirtFlyDrawObj*>(rObjs[i]->DrawObj());
+        SwVirtFlyDrawObj *pVirtFly = DynCastSwVirtFlyDrawObj(rObjs[i]->DrawObj());
         if ( !pVirtFly )
             continue;
 
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index 68d6a11..7412f24 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -4109,7 +4109,7 @@
 
     if ( (!rSh.GetViewOptions()->IsDraw()
              && (dynamic_cast<SdrUnoObj*>(pObj) || dynamic_cast<SdrAttrObj*>(pObj) || dynamic_cast<SwFlyDrawObj*>(pObj)))
-        || (!rSh.GetViewOptions()->IsGraphic() && dynamic_cast<SwVirtFlyDrawObj*>(pObj)) )
+        || (!rSh.GetViewOptions()->IsGraphic() && DynCastSwVirtFlyDrawObj(pObj)) )
     {
         SwRect rBoundRect = GetBoundRectOfAnchoredObj( pObj );
         lcl_PaintReplacement(rBoundRect, rSh);
@@ -4131,7 +4131,7 @@
         {
             bPaint = false;
         }
-        if ( auto pFlyDraw = dynamic_cast<SwVirtFlyDrawObj *>( pObj ) )
+        if ( auto pFlyDraw = DynCastSwVirtFlyDrawObj( pObj ) )
         {
             SwFlyFrame *pFly = pFlyDraw->GetFlyFrame();
             if ( gProp.pSFlyOnlyDraw && gProp.pSFlyOnlyDraw == pFly )
diff --git a/sw/source/core/objectpositioning/anchoredobjectposition.cxx b/sw/source/core/objectpositioning/anchoredobjectposition.cxx
index a834836..1724018 100644
--- a/sw/source/core/objectpositioning/anchoredobjectposition.cxx
+++ b/sw/source/core/objectpositioning/anchoredobjectposition.cxx
@@ -60,7 +60,7 @@
 #if OSL_DEBUG_LEVEL > 0
     // assert, if object isn't of expected type
     const bool bObjOfExceptedType =
-            dynamic_cast<const SwVirtFlyDrawObj*>( &mrDrawObj) !=  nullptr || // object representing fly frame
+            DynCastSwVirtFlyDrawObj( &mrDrawObj) !=  nullptr || // object representing fly frame
             dynamic_cast<const SwDrawVirtObj*>( &mrDrawObj) !=  nullptr    || // 'virtual' drawing object
             ( dynamic_cast<const SdrVirtObj*>( &mrDrawObj) ==  nullptr &&    // 'master' drawing object
               dynamic_cast<const SwFlyDrawObj*>( &mrDrawObj) ==  nullptr );  // - indirectly checked
@@ -80,7 +80,7 @@
 {
     // determine, if object represents a fly frame
     {
-        mbIsObjFly = dynamic_cast<const SwVirtFlyDrawObj*>( &mrDrawObj) !=  nullptr;
+        mbIsObjFly = DynCastSwVirtFlyDrawObj( &mrDrawObj) !=  nullptr;
     }
 
     // determine contact object
diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx
index d0033e9..43550c9b 100644
--- a/sw/source/core/text/txtfly.cxx
+++ b/sw/source/core/text/txtfly.cxx
@@ -222,7 +222,7 @@
         ::basegfx::B2DPolyPolygon aPolyPolygon;
         std::optional<::basegfx::B2DPolyPolygon> pPolyPolygon;
 
-        if ( auto pVirtFlyDrawObj = dynamic_cast< const SwVirtFlyDrawObj *>( pObj ) )
+        if ( auto pVirtFlyDrawObj = DynCastSwVirtFlyDrawObj( pObj ) )
         {
             // GetContour() causes the graphic to be loaded, which may cause
             // the graphic to change its size, call ClrObject()
diff --git a/sw/source/core/unocore/unodraw.cxx b/sw/source/core/unocore/unodraw.cxx
index 1c8b436..29b761b 100644
--- a/sw/source/core/unocore/unodraw.cxx
+++ b/sw/source/core/unocore/unodraw.cxx
@@ -318,7 +318,7 @@
 {
     assert(pObj);
     uno::Reference< drawing::XShape >  xRet;
-    if(dynamic_cast<const SwVirtFlyDrawObj*>( pObj) !=  nullptr || pObj->GetObjInventor() == SdrInventor::Swg)
+    if(DynCastSwVirtFlyDrawObj( pObj) !=  nullptr || pObj->GetObjInventor() == SdrInventor::Swg)
     {
         SwFlyDrawContact* pFlyContact = static_cast<SwFlyDrawContact*>(pObj->GetUserCall());
         if(pFlyContact)
diff --git a/sw/source/core/view/vdraw.cxx b/sw/source/core/view/vdraw.cxx
index c7764bd..d0abe0f 100644
--- a/sw/source/core/view/vdraw.cxx
+++ b/sw/source/core/view/vdraw.cxx
@@ -207,7 +207,7 @@
     std::vector<SdrObject*> aCandidatesToMove;
     for (const rtl::Reference<SdrObject>& pObj : *pPage)
     {
-        if( dynamic_cast<const SwVirtFlyDrawObj*>( pObj.get()) ==  nullptr )
+        if( DynCastSwVirtFlyDrawObj( pObj.get()) ==  nullptr )
         {
             // Objects not anchored to the frame, do not need to be adjusted
             const SwContact *pCont = GetUserCall(pObj.get());