diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2017-12-21 18:02:13 +0100 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2018-01-01 21:52:56 +0100 |
commit | a7e6e4b220089a2d8a58ff10393d598a8b796fa5 (patch) | |
tree | 0db698d0ce1dfa010b2a133e2ab76a0c5ac04be7 /editeng | |
parent | f31ccd18f1b142f8c851e7e219f8bc18b157bc52 (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>
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/source/editeng/impedit2.cxx | 7 | ||||
-rw-r--r-- | editeng/source/editeng/impedit3.cxx | 38 |
2 files changed, 28 insertions, 17 deletions
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index 138e429a70f7..8f2336c21b3b 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -3643,11 +3643,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 3c990f25cb71..a0fb2db2a8ff 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -1442,24 +1442,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 ); + } } } |