summaryrefslogtreecommitdiff
path: root/editeng
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2017-12-21 18:02:13 +0100
committerAndras Timar <andras.timar@collabora.com>2018-01-17 14:22:29 +0100
commitfb1083dfee7dcbc1d29cff30d3b83a9b4af84988 (patch)
tree37af88b571664c2a349e9c41cc27da18373f130d /editeng
parent74e55fb50291778e48423ac7e949df6d2a55df2e (diff)
tdf#114628 correct line spacing for impress
* use line spacing also for the first line * correct spacing in case of > 100% proportional spacing * impedit2.cxx only code readability change Change-Id: I24832e7dc2fa8cfbb2f9cdfe7062eaaaa63f1729 Reviewed-on: https://gerrit.libreoffice.org/46925 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Szymon Kłos <szymon.klos@collabora.com> Tested-by: Szymon Kłos <szymon.klos@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/47571 Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'editeng')
-rw-r--r--editeng/source/editeng/impedit2.cxx7
-rw-r--r--editeng/source/editeng/impedit3.cxx38
2 files changed, 28 insertions, 17 deletions
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index 0cfb9ea38d07..c4448c40c55d 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -3591,11 +3591,12 @@ Range ImpEditEngine::GetInvalidYOffsets( ParaPortion* pPortion )
aRange.Max() += rL.GetHeight();
}
- if( ( rLSItem.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Prop ) && rLSItem.GetPropLineSpace() &&
- ( rLSItem.GetPropLineSpace() < 100 ) )
+ sal_uInt16 nPropLineSpace = rLSItem.GetPropLineSpace();
+ if ( ( rLSItem.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Prop )
+ && nPropLineSpace && ( nPropLineSpace < 100 ) )
{
const EditLine& rL = pPortion->GetLines()[nFirstInvalid];
- long n = rL.GetTxtHeight() * ( 100L - rLSItem.GetPropLineSpace() );
+ long n = rL.GetTxtHeight() * ( 100L - nPropLineSpace );
n /= 100;
aRange.Min() -= n;
aRange.Max() += n;
diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx
index 8f1d96933783..4bf113d34374 100644
--- a/editeng/source/editeng/impedit3.cxx
+++ b/editeng/source/editeng/impedit3.cxx
@@ -1398,24 +1398,34 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY )
}
else if ( rLSItem.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Prop )
{
- if ( nPara || pLine->GetStartPortion() ) // Not the very first line
+ // There are documents with PropLineSpace 0, why?
+ // (cmc: re above question :-) such documents can be seen by importing a .ppt
+ if ( rLSItem.GetPropLineSpace() && ( rLSItem.GetPropLineSpace() < 100 ) )
{
- // There are documents with PropLineSpace 0, why?
- // (cmc: re above question :-) such documents can be seen by importing a .ppt
- if ( rLSItem.GetPropLineSpace() && ( rLSItem.GetPropLineSpace() != 100 ) )
+ // Adapted code from sw/source/core/text/itrform2.cxx
+ sal_uInt16 nPropLineSpace = rLSItem.GetPropLineSpace();
+ sal_uInt16 nAscent = pLine->GetMaxAscent();
+ sal_uInt16 nNewAscent = pLine->GetTxtHeight() * nPropLineSpace / 100 * 4 / 5; // 80%
+ if ( !nAscent || nAscent > nNewAscent )
{
- sal_uInt16 nTxtHeight = pLine->GetHeight();
- sal_Int32 nH = nTxtHeight;
- nH *= rLSItem.GetPropLineSpace();
- nH /= 100;
- // The Ascent has to be adjusted for the difference:
- long nDiff = pLine->GetHeight() - nH;
- if ( nDiff > pLine->GetMaxAscent() )
- nDiff = pLine->GetMaxAscent();
- pLine->SetMaxAscent( (sal_uInt16)(pLine->GetMaxAscent() - nDiff) );
- pLine->SetHeight( (sal_uInt16)nH, nTxtHeight );
+ sal_uInt16 nHeight = pLine->GetHeight() * nPropLineSpace / 100;
+ pLine->SetHeight( nHeight, pLine->GetTxtHeight() );
+ pLine->SetMaxAscent( nNewAscent );
}
}
+ else if ( rLSItem.GetPropLineSpace() && ( rLSItem.GetPropLineSpace() != 100 ) )
+ {
+ sal_uInt16 nTxtHeight = pLine->GetHeight();
+ sal_Int32 nH = nTxtHeight;
+ nH *= rLSItem.GetPropLineSpace();
+ nH /= 100;
+ // The Ascent has to be adjusted for the difference:
+ long nDiff = pLine->GetHeight() - nH;
+ if ( nDiff > pLine->GetMaxAscent() )
+ nDiff = pLine->GetMaxAscent();
+ pLine->SetMaxAscent( (sal_uInt16)( pLine->GetMaxAscent() - nDiff ) * 4 / 5 ); // 80%
+ pLine->SetHeight( (sal_uInt16)nH, nTxtHeight );
+ }
}
}