summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/source/core/text/itrpaint.cxx3
-rw-r--r--sw/source/core/text/porlay.cxx12
-rw-r--r--sw/source/core/text/porlay.hxx6
-rw-r--r--sw/source/core/text/porrst.cxx6
-rw-r--r--sw/source/core/text/porrst.hxx5
-rw-r--r--sw/source/core/text/redlnitr.cxx10
-rw-r--r--sw/source/core/text/redlnitr.hxx2
7 files changed, 36 insertions, 8 deletions
diff --git a/sw/source/core/text/itrpaint.cxx b/sw/source/core/text/itrpaint.cxx
index 6c3e7a2e4eeb..b00507c907c8 100644
--- a/sw/source/core/text/itrpaint.cxx
+++ b/sw/source/core/text/itrpaint.cxx
@@ -427,7 +427,8 @@ void SwTextPainter::DrawTextLine( const SwRect &rPaint, SwSaveClip &rClip,
GetInfo().GetOpt().IsParagraph() && !GetTextFrame()->GetFollow() &&
GetInfo().GetIdx() >= TextFrameIndex(GetInfo().GetText().getLength()))
{
- const SwTmpEndPortion aEnd( *pEndTempl );
+ const SwTmpEndPortion aEnd( *pEndTempl, m_pCurr->HasRedlineEnd(),
+ m_pCurr->HasRedlineEndDel() );
GetFnt()->ChgPhysFnt( GetInfo().GetVsh(), *pOut );
if ( bAdjustBaseLine )
diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx
index bb3fb103260f..69a7c39b5dc2 100644
--- a/sw/source/core/text/porlay.cxx
+++ b/sw/source/core/text/porlay.cxx
@@ -605,10 +605,19 @@ void SwLineLayout::CalcLine( SwTextFormatter &rLine, SwTextFormatInfo &rInf )
if( bHasRedline )
{
OUString sRedlineText;
+ bool bHasRedlineEnd, bHasRedlineEndDel;
bHasRedline = rLine.GetRedln()->CheckLine(start.first->GetIndex(), start.second,
- end.first->GetIndex(), end.second, sRedlineText );
+ end.first->GetIndex(), end.second, sRedlineText, bHasRedlineEnd, bHasRedlineEndDel );
if( bHasRedline )
+ {
SetRedlineText( sRedlineText );
+ if( bHasRedlineEnd )
+ {
+ SetRedlineEnd( bHasRedlineEnd );
+ if( bHasRedlineEndDel )
+ SetRedlineEndDel( bHasRedlineEndDel );
+ }
+ }
}
SetRedline( bHasRedline );
}
@@ -670,6 +679,7 @@ void SwLineLayout::ResetFlags()
{
m_bFormatAdj = m_bDummy = m_bEndHyph = m_bMidHyph = m_bFly
= m_bRest = m_bBlinking = m_bClipping = m_bContent = m_bRedline
+ = m_bRedlineEnd = m_bRedlineEndDel
= m_bForcedLeftMargin = m_bHanging = false;
}
diff --git a/sw/source/core/text/porlay.hxx b/sw/source/core/text/porlay.hxx
index 255337d583c1..39e50d28ba94 100644
--- a/sw/source/core/text/porlay.hxx
+++ b/sw/source/core/text/porlay.hxx
@@ -93,6 +93,8 @@ private:
bool m_bClipping : 1; // Clipping needed for exact line height
bool m_bContent : 1; // Text for line numbering
bool m_bRedline : 1; // The Redlining
+ bool m_bRedlineEnd: 1; // Redlining for paragraph mark: tracked change at the end
+ bool m_bRedlineEndDel : 1; // Redlining for paragraph mark: tracked deletion at the end
bool m_bForcedLeftMargin : 1; // Left adjustment moved by the Fly
bool m_bHanging : 1; // Contains a hanging portion in the margin
bool m_bUnderscore : 1;
@@ -130,6 +132,10 @@ public:
bool HasContent() const { return m_bContent; }
void SetRedline( const bool bNew ) { m_bRedline = bNew; }
bool HasRedline() const { return m_bRedline; }
+ void SetRedlineEnd( const bool bNew ) { m_bRedlineEnd = bNew; }
+ bool HasRedlineEnd() const { return m_bRedlineEnd; }
+ void SetRedlineEndDel( const bool bNew ) { m_bRedlineEndDel = bNew; }
+ bool HasRedlineEndDel() const { return m_bRedlineEndDel; }
void SetRedlineText ( const OUString& sText ) { m_sRedlineText = sText; }
const OUString* GetRedlineText() const { return &m_sRedlineText; }
void SetForcedLeftMargin() { m_bForcedLeftMargin = true; }
diff --git a/sw/source/core/text/porrst.cxx b/sw/source/core/text/porrst.cxx
index a304958613a7..58cf0cf3f3e3 100644
--- a/sw/source/core/text/porrst.cxx
+++ b/sw/source/core/text/porrst.cxx
@@ -46,7 +46,9 @@
#include <crsrsh.hxx>
-SwTmpEndPortion::SwTmpEndPortion( const SwLinePortion &rPortion )
+SwTmpEndPortion::SwTmpEndPortion( const SwLinePortion &rPortion,
+ const bool bCh, const bool bDel ) :
+ bChanged( bCh ), bDeleted( bDel )
{
Height( rPortion.Height() );
SetAscent( rPortion.GetAscent() );
@@ -62,6 +64,8 @@ void SwTmpEndPortion::Paint( const SwTextPaintInfo &rInf ) const
SwFont aFont(*pOldFnt);
aFont.SetColor(NON_PRINTING_CHARACTER_COLOR);
+ aFont.SetStrikeout( bDeleted ? STRIKEOUT_SINGLE : STRIKEOUT_NONE );
+ aFont.SetUnderline( (bChanged && !bDeleted) ? LINESTYLE_SINGLE : LINESTYLE_NONE );
const_cast<SwTextPaintInfo&>(rInf).SetFont(&aFont);
// draw the pilcrow
diff --git a/sw/source/core/text/porrst.hxx b/sw/source/core/text/porrst.hxx
index 7c716be8dba5..8e05750c8e2d 100644
--- a/sw/source/core/text/porrst.hxx
+++ b/sw/source/core/text/porrst.hxx
@@ -40,8 +40,11 @@ class SwTextFormatInfo;
class SwTmpEndPortion : public SwLinePortion
{
+ bool bChanged;
+ bool bDeleted;
+
public:
- explicit SwTmpEndPortion( const SwLinePortion &rPortion );
+ explicit SwTmpEndPortion( const SwLinePortion &rPortion, const bool bChanged, const bool bDel );
virtual void Paint( const SwTextPaintInfo &rInf ) const override;
};
diff --git a/sw/source/core/text/redlnitr.cxx b/sw/source/core/text/redlnitr.cxx
index 03b67b9b4784..b05df68a90a8 100644
--- a/sw/source/core/text/redlnitr.cxx
+++ b/sw/source/core/text/redlnitr.cxx
@@ -804,7 +804,8 @@ bool SwRedlineItr::ChkSpecialUnderline_() const
bool SwRedlineItr::CheckLine(
sal_uLong const nStartNode, sal_Int32 const nChkStart,
- sal_uLong const nEndNode, sal_Int32 nChkEnd, OUString& rRedlineText)
+ sal_uLong const nEndNode, sal_Int32 nChkEnd, OUString& rRedlineText,
+ bool& bRedlineEnd, bool& bRedlineEndDel)
{
// note: previously this would return true in the (!m_bShow && m_pExt)
// case, but surely that was a bug?
@@ -816,7 +817,7 @@ bool SwRedlineItr::CheckLine(
sal_Int32 nOldStart = m_nStart;
sal_Int32 nOldEnd = m_nEnd;
SwRedlineTable::size_type const nOldAct = m_nAct;
- bool bRet = false;
+ bool bRet = bRedlineEnd = bRedlineEndDel = false;
for (m_nAct = m_nFirst; m_nAct < m_rDoc.getIDocumentRedlineAccess().GetRedlineTable().size(); ++m_nAct)
{
@@ -828,10 +829,13 @@ bool SwRedlineItr::CheckLine(
if (nChkStart <= m_nEnd && (nChkEnd > m_nStart || COMPLETE_STRING == m_nEnd))
{
bRet = true;
+ if ( COMPLETE_STRING == m_nEnd )
+ bRedlineEnd = true;
if ( pRedline->GetType() == RedlineType::Delete )
{
rRedlineText = const_cast<SwRangeRedline*>(pRedline)->GetDescr(/*bSimplified=*/true);
- break;
+ if ( COMPLETE_STRING == m_nEnd )
+ bRedlineEndDel = true;
}
}
}
diff --git a/sw/source/core/text/redlnitr.hxx b/sw/source/core/text/redlnitr.hxx
index 715fa9ed7e33..ab242b245d08 100644
--- a/sw/source/core/text/redlnitr.hxx
+++ b/sw/source/core/text/redlnitr.hxx
@@ -119,7 +119,7 @@ public:
bool ChkSpecialUnderline() const
{ return IsOn() && ChkSpecialUnderline_(); }
bool CheckLine(sal_uLong nStartNode, sal_Int32 nChkStart, sal_uLong nEndNode,
- sal_Int32 nChkEnd, OUString& rRedlineText);
+ sal_Int32 nChkEnd, OUString& rRedlineText, bool& bRedlineEnd, bool& bRedlineEndDel);
bool LeaveExtend(SwFont& rFnt, sal_uLong const nNode, sal_Int32 const nNew)
{ return m_pExt->Leave(rFnt, nNode, nNew); }
bool ExtOn() {