[Libreoffice-commits] core.git: sw/source
Mark Hung (via logerrit)
logerrit at kemper.freedesktop.org
Tue Aug 20 12:17:47 UTC 2019
sw/source/core/text/itrform2.cxx | 26 ++++++++------------------
sw/source/core/text/itrform2.hxx | 2 +-
2 files changed, 9 insertions(+), 19 deletions(-)
New commits:
commit 56e95f8e20b20680d025f3ecbeb4cc5306085b1e
Author: Mark Hung <marklh9 at gmail.com>
AuthorDate: Sat Aug 10 13:28:45 2019 +0800
Commit: Mark Hung <marklh9 at gmail.com>
CommitDate: Tue Aug 20 14:16:55 2019 +0200
tdf#126353 merge character borders on layout portions.
Layout portions / para portions may have portion length.
So merging them is valid and there's no need to check
them at all. Invoke MergeCharacterBorder in InsertPortion
to handle border merging consistently.
Change-Id: I3669bcbb1d658e1df74d338d6cf062e5f07faf4d
Reviewed-on: https://gerrit.libreoffice.org/77366
Tested-by: Jenkins
Reviewed-by: Mark Hung <marklh9 at gmail.com>
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index 8047c2565906..72d3363e800b 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -298,14 +298,16 @@ SwLinePortion *SwTextFormatter::Underflow( SwTextFormatInfo &rInf )
}
void SwTextFormatter::InsertPortion( SwTextFormatInfo &rInf,
- SwLinePortion *pPor ) const
+ SwLinePortion *pPor )
{
+ SwLinePortion *pLast = nullptr;
// The new portion is inserted, but everything's different for
// LineLayout...
if( pPor == m_pCurr )
{
if ( m_pCurr->GetNextPortion() )
{
+ pLast = pPor;
pPor = m_pCurr->GetNextPortion();
}
@@ -315,7 +317,7 @@ void SwTextFormatter::InsertPortion( SwTextFormatInfo &rInf,
}
else
{
- SwLinePortion *pLast = rInf.GetLast();
+ pLast = rInf.GetLast();
if( pLast->GetNextPortion() )
{
while( pLast->GetNextPortion() )
@@ -337,8 +339,12 @@ void SwTextFormatter::InsertPortion( SwTextFormatInfo &rInf,
rInf.SetLast( pPor );
while( pPor )
{
+ if (!pPor->IsDropPortion())
+ MergeCharacterBorder(*pPor, pLast, rInf);
+
pPor->Move( rInf );
rInf.SetLast( pPor );
+ pLast = pPor;
pPor = pPor->GetNextPortion();
}
}
@@ -479,7 +485,6 @@ void SwTextFormatter::BuildPortions( SwTextFormatInfo &rInf )
new SwKernPortion( *rInf.GetLast(), nLstHeight,
pLast->InFieldGrp() && pPor->InFieldGrp() );
rInf.GetLast()->SetNextPortion( nullptr );
- MergeCharacterBorder(*pKrn, rInf.GetLast()->FindLastPortion(), rInf);
InsertPortion( rInf, pKrn );
}
}
@@ -523,11 +528,7 @@ void SwTextFormatter::BuildPortions( SwTextFormatInfo &rInf )
}
if ( pGridKernPortion != pPor )
- {
- SwLinePortion *pLast = rInf.GetLast()? rInf.GetLast()->FindLastPortion():nullptr ;
- MergeCharacterBorder(*pGridKernPortion, pLast , rInf);
InsertPortion( rInf, pGridKernPortion );
- }
}
if( pPor->IsDropPortion() )
@@ -688,17 +689,6 @@ void SwTextFormatter::BuildPortions( SwTextFormatInfo &rInf )
rInf.SetFull( bFull );
- if( !pPor->IsDropPortion() )
- {
- SwLinePortion *pPrev = rInf.GetLast() ? rInf.GetLast()->FindLastPortion() : nullptr;
- for ( SwLinePortion *pNext = pPor ; pNext!= nullptr ; pNext=pNext->GetNextPortion())
- {
- if ( !pNext->IsParaPortion() )
- MergeCharacterBorder(*pNext, pPrev, rInf);
- pPrev = pNext ;
- }
- }
-
// Restportions from fields with multiple lines don't yet have the right ascent
if ( !pPor->GetLen() && !pPor->IsFlyPortion()
&& !pPor->IsGrfNumPortion() && ! pPor->InNumberGrp()
diff --git a/sw/source/core/text/itrform2.hxx b/sw/source/core/text/itrform2.hxx
index 64fc52e80cd6..ff9af549ccd7 100644
--- a/sw/source/core/text/itrform2.hxx
+++ b/sw/source/core/text/itrform2.hxx
@@ -129,7 +129,7 @@ class SwTextFormatter : public SwTextPainter
bool ChkFlyUnderflow( SwTextFormatInfo &rInf ) const;
// Insert portion
- void InsertPortion( SwTextFormatInfo &rInf, SwLinePortion *pPor ) const;
+ void InsertPortion( SwTextFormatInfo &rInf, SwLinePortion *pPor );
// Guess height for the DropPortion
void GuessDropHeight( const sal_uInt16 nLines );
More information about the Libreoffice-commits
mailing list