[Libreoffice-commits] core.git: sw/inc sw/source

Bjoern Michaelsen bjoern.michaelsen at canonical.com
Wed Mar 1 13:18:34 UTC 2017


 sw/inc/dcontact.hxx              |   26 ---------------
 sw/source/core/draw/dcontact.cxx |   65 ++++++++++++++++++---------------------
 2 files changed, 31 insertions(+), 60 deletions(-)

New commits:
commit 7e8bef556184851edd7a716cf3284cd1ae3b3366
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date:   Tue Feb 28 11:12:36 2017 +0100

    move predicates into only using compilation unit
    
    - also refactor and simplify
    
    Change-Id: I0fe0c043b72d7664a0fe27baf13ab029aed41eab
    Reviewed-on: https://gerrit.libreoffice.org/34726
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Björn Michaelsen <bjoern.michaelsen at canonical.com>

diff --git a/sw/inc/dcontact.hxx b/sw/inc/dcontact.hxx
index 468a866..781257d 100644
--- a/sw/inc/dcontact.hxx
+++ b/sw/inc/dcontact.hxx
@@ -337,32 +337,6 @@ class SwDrawContact final : public SwContact
 
         friend class NestedUserCallHdl;
 
-        /** unary function used by <list> iterator to find a disconnected 'virtual'
-         drawing object */
-        struct UsedOrUnusedVirtObjPred
-        {
-            bool mbUsedPred;
-            UsedOrUnusedVirtObjPred( bool _bUsed ) : mbUsedPred( _bUsed ) {};
-            bool operator() ( const std::unique_ptr<SwDrawVirtObj>& _pDrawVirtObj )
-            {
-                if ( mbUsedPred )
-                {
-                    return _pDrawVirtObj->IsConnected();
-                }
-                else
-                {
-                    return !_pDrawVirtObj->IsConnected();
-                }
-            }
-        };
-
-        /** unary function used to find a 'virtual' drawing object anchored at a given frame */
-        struct VirtObjAnchoredAtFramePred
-        {
-            const SwFrame* mpAnchorFrame;
-            VirtObjAnchoredAtFramePred( const SwFrame& _rAnchorFrame );
-            bool operator() ( const std::unique_ptr<SwDrawVirtObj>& _pDrawVirtObj );
-        };
 
         void RemoveAllVirtObjs();
 
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index 6192fd2..107fdad 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -73,6 +73,36 @@
 
 using namespace ::com::sun::star;
 
+namespace
+{
+    /** unary function used to find a disconnected 'virtual' drawing object */
+    struct UsedOrUnusedVirtObjPred
+    {
+        bool m_bUsedPred;
+        UsedOrUnusedVirtObjPred(bool bUsed) : m_bUsedPred(bUsed) {};
+        bool operator()(const std::unique_ptr<SwDrawVirtObj>& pDrawVirtObj)
+                { return pDrawVirtObj->IsConnected() == m_bUsedPred; };
+    };
+
+    /** unary function used to find a 'virtual' drawing object anchored at a given frame */
+    struct VirtObjAnchoredAtFramePred
+    {
+        const SwFrame* m_pAnchorFrame;
+        // #i26791# - compare with master frame
+        static const SwFrame* FindFrame(const SwFrame* pFrame)
+        {
+            if(!pFrame || !pFrame->IsContentFrame())
+                return pFrame;
+            auto pContentFrame = static_cast<const SwContentFrame*>(pFrame);
+            while(pContentFrame->IsFollow())
+                pContentFrame = pContentFrame->FindMaster();
+            return pContentFrame;
+        };
+        VirtObjAnchoredAtFramePred(const SwFrame* pAnchorFrame) : m_pAnchorFrame(FindFrame(pAnchorFrame)) {};
+        bool operator()(const std::unique_ptr<SwDrawVirtObj>& rpDrawVirtObj)
+            { return FindFrame(rpDrawVirtObj->GetAnchorFrame()) == m_pAnchorFrame; };
+    };
+}
 
 void setContextWritingMode(SdrObject* pObj, SwFrame* pAnchor)
 {
@@ -763,39 +793,6 @@ void SwDrawContact::RemoveAllVirtObjs()
     maDrawVirtObjs.clear();
 }
 
-SwDrawContact::VirtObjAnchoredAtFramePred::VirtObjAnchoredAtFramePred(
-                                                const SwFrame& _rAnchorFrame )
-    : mpAnchorFrame( &_rAnchorFrame )
-{
-    if ( mpAnchorFrame->IsContentFrame() )
-    {
-        const SwContentFrame* pTmpFrame =
-                            static_cast<const SwContentFrame*>( mpAnchorFrame );
-        while ( pTmpFrame->IsFollow() )
-        {
-            pTmpFrame = pTmpFrame->FindMaster();
-        }
-        mpAnchorFrame = pTmpFrame;
-    }
-}
-
-// #i26791# - compare with master frame
-bool SwDrawContact::VirtObjAnchoredAtFramePred::operator() ( const std::unique_ptr<SwDrawVirtObj>& _pDrawVirtObj )
-{
-    const SwFrame* pObjAnchorFrame = _pDrawVirtObj->GetAnchorFrame();
-    if ( pObjAnchorFrame && pObjAnchorFrame->IsContentFrame() )
-    {
-        const SwContentFrame* pTmpFrame =
-                            static_cast<const SwContentFrame*>( pObjAnchorFrame );
-        while ( pTmpFrame->IsFollow() )
-        {
-            pTmpFrame = pTmpFrame->FindMaster();
-        }
-        pObjAnchorFrame = pTmpFrame;
-    }
-
-    return ( pObjAnchorFrame == mpAnchorFrame );
-}
 
 /// get drawing object ('master' or 'virtual') by frame.
 SdrObject* SwDrawContact::GetDrawObjectByAnchorFrame( const SwFrame& _rAnchorFrame )
@@ -834,7 +831,7 @@ SdrObject* SwDrawContact::GetDrawObjectByAnchorFrame( const SwFrame& _rAnchorFra
     else
     {
         const auto ppFoundVirtObj(std::find_if(maDrawVirtObjs.begin(), maDrawVirtObjs.end(),
-                VirtObjAnchoredAtFramePred(*pProposedAnchorFrame)));
+                VirtObjAnchoredAtFramePred(pProposedAnchorFrame)));
         if(ppFoundVirtObj != maDrawVirtObjs.end())
             pRetDrawObj = ppFoundVirtObj->get();
     }


More information about the Libreoffice-commits mailing list