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

László Németh (via logerrit) logerrit at kemper.freedesktop.org
Tue Jun 8 07:14:47 UTC 2021


 sw/qa/extras/uiwriter/uiwriter2.cxx |    7 +++++++
 sw/source/core/inc/flyfrm.hxx       |    3 +++
 sw/source/core/layout/fly.cxx       |    3 ++-
 sw/source/core/layout/paintfrm.cxx  |    4 ++--
 sw/source/core/text/porlay.cxx      |   11 +++++++----
 5 files changed, 21 insertions(+), 7 deletions(-)

New commits:
commit 76dc21860ce185bd5495adde8858d2f23284c78e
Author:     László Németh <nemeth at numbertext.org>
AuthorDate: Mon Jun 7 15:07:16 2021 +0200
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Tue Jun 8 09:14:06 2021 +0200

    tdf#142128 sw: set author-color strikethrough for deleted images
    
    anchored to character during change tracking instead of
    using always the same NON_PRINTING_CHARACTER_COLOR blue one.
    
    Follow-up to commit 1610eeef6f2312616fe5d3535475f27f7896bef8
    "tdf#142196 sw: crossing out images anchored to character".
    
    Change-Id: I267a492dc6bb75327fb96ccdb51b784d00ba7a41
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116785
    Tested-by: László Németh <nemeth at numbertext.org>
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index c87d0bdd19a9..ef40b19641ab 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -2513,6 +2513,13 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf142196)
     // vertical "changed line" indicator before the paragraph line)
     assertXPath(pXmlDoc, "//line", 3);
 
+    // check line color
+    assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/linecolor", 1);
+    // tdf#142128 This was NON_PRINTING_CHARACTER_COLOR (#268bd2)
+    assertXPath(
+        pXmlDoc,
+        "/metafile/push[1]/push[1]/push[1]/push[3]/push[1]/push[1]/linecolor[@color='#268bd2']", 0);
+
     // reject deletion of the image
     IDocumentRedlineAccess& rIDRA(pDoc->getIDocumentRedlineAccess());
     rIDRA.AcceptAllRedline(false);
diff --git a/sw/source/core/inc/flyfrm.hxx b/sw/source/core/inc/flyfrm.hxx
index 399bbbe913fe..47017e71e50e 100644
--- a/sw/source/core/inc/flyfrm.hxx
+++ b/sw/source/core/inc/flyfrm.hxx
@@ -131,6 +131,7 @@ protected:
     bool m_bLayout :1;       ///< RndStdIds::FLY_AT_PAGE, RndStdIds::FLY_AT_FLY, at page or at frame
     bool m_bAutoPosition :1; ///< RndStdIds::FLY_AT_CHAR, anchored at character
     bool m_bDeleted :1;      ///< Anchored to a tracked deletion
+    size_t m_nAuthor;        ///< Redline author index for colored crossing out
 
     friend class SwNoTextFrame; // is allowed to call NotifyBackground
 
@@ -217,6 +218,8 @@ public:
     bool IsFlyAtContentFrame() const { return m_bAtCnt; }
     bool IsDeleted() const { return m_bDeleted; }
     void SetDeleted(bool bDeleted) { m_bDeleted = bDeleted; }
+    void SetAuthor( size_t nAuthor ) { m_nAuthor = nAuthor; }
+    size_t GetAuthor() const { return m_nAuthor; }
 
     bool IsNotifyBack() const { return m_bNotifyBack; }
     void SetNotifyBack()      { m_bNotifyBack = true; }
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index bf01c3b1dc7a..8181bd623d39 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -87,7 +87,8 @@ SwFlyFrame::SwFlyFrame( SwFlyFrameFormat *pFormat, SwFrame* pSib, SwFrame *pAnch
     m_bAtCnt( false ),
     m_bLayout( false ),
     m_bAutoPosition( false ),
-    m_bDeleted (false ),
+    m_bDeleted( false ),
+    m_nAuthor( std::string::npos ),
     m_bValidContentPos( false )
 {
     mnFrameType = SwFrameType::Fly;
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index 4a9eb647bbd6..f5cb3c50ad1c 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -4222,11 +4222,11 @@ void SwFlyFrame::PaintSwFrame(vcl::RenderContext& rRenderContext, SwRect const&
     PaintDecorators();
 
     // crossing out for tracked deletion
-    if ( IsDeleted() )
+    if ( GetAuthor() != std::string::npos && IsDeleted() )
     {
         tools::Long startX = aRect.Left(  ), endX = aRect.Right();
         tools::Long startY = aRect.Top(  ),  endY = aRect.Bottom();
-        rRenderContext.SetLineColor(NON_PRINTING_CHARACTER_COLOR);
+        rRenderContext.SetLineColor( SwPostItMgr::GetColorAnchor(GetAuthor()) );
         rRenderContext.DrawLine(Point(startX, startY), Point(endX, endY));
         rRenderContext.DrawLine(Point(startX, endY), Point(endX, startY));
     }
diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx
index 9a162b6993d7..f0a3a4e00eee 100644
--- a/sw/source/core/text/porlay.cxx
+++ b/sw/source/core/text/porlay.cxx
@@ -670,20 +670,23 @@ void SwLineLayout::CalcLine( SwTextFormatter &rLine, SwTextFormatInfo &rInf )
                         if ( auto pFly = dynamic_cast<SwFlyFrame *>( pAnchoredObj ) )
                         {
                             bool bDeleted = false;
+                            size_t nAuthor = std::string::npos;
                             const SwFormatAnchor& rAnchor = pAnchoredObj->GetFrameFormat().GetAnchor();
                             if ( rAnchor.GetAnchorId() == RndStdIds::FLY_AT_CHAR )
                             {
                                 SwPosition aAnchor = *rAnchor.GetContentAnchor();
-                                const SwPaM aPam(aAnchor, aAnchor);
-                                if ( rIDRA.HasRedline( aPam, RedlineType::Delete,
-                                        /*bStartOrEndInRange=*/false) )
+                                SwRedlineTable::size_type n = 0;
+                                const SwRangeRedline* pFnd =
+                                        rIDRA.GetRedlineTable().FindAtPosition( aAnchor, n );
+                                if ( pFnd && RedlineType::Delete == pFnd->GetType() )
                                 {
                                     bDeleted = true;
+                                    nAuthor = pFnd->GetAuthor();
                                 }
                             }
                             pFly->SetDeleted(bDeleted);
+                            pFly->SetAuthor(nAuthor);
                         }
-
                     }
                 }
             }


More information about the Libreoffice-commits mailing list