summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2014-10-29 23:50:21 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-11-02 15:20:30 +0000
commit7ca9c060155b79a037861a972843a70b8a518c4f (patch)
tree7da22d0569e77ea774d788a3b625973ca5f6a0dc
parent33c132baca3a2089551226167d27bdc3f9a67907 (diff)
fdo#79602: sw: fix text formatting of proportional line space < 100%
SwTxtFormatter::CalcRealHeight(): Apply the special treatment of < 100% line space shrinking the Height() of the line only to the first line in a paragraph; the subsequent ones are shrunk again (to the square of the desired proportion) 30 lines later. Also set the Ascent of the line, as the wrong base-line causes the lower part of the line to be clipped. (regression from 42532d42bfcdb12df86376cda009e8e315a82153) (cherry picked from commit 4e223fab04279c3583689e69fa1342966e81de36) Conflicts: sw/source/core/text/itrform2.cxx Change-Id: I0424396263293deaa318c80eedc2237cdb01b22b Reviewed-on: https://gerrit.libreoffice.org/12156 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r--sw/source/core/text/itrform2.cxx18
1 files changed, 13 insertions, 5 deletions
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index 2738b9b88363..4880013a7e4c 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -1741,24 +1741,30 @@ void SwTxtFormatter::CalcRealHeight( bool bNewLine )
switch( pSpace->GetLineSpaceRule() )
{
case SVX_LINE_SPACE_AUTO:
- if (pSpace->GetInterLineSpaceRule()==SVX_INTER_LINE_SPACE_PROP) {
+ // shrink first line of paragraph too on spacing < 100%
+ if (IsParaLine() &&
+ pSpace->GetInterLineSpaceRule() == SVX_INTER_LINE_SPACE_PROP)
+ {
long nTmp = pSpace->GetPropLineSpace();
+ // Word will render < 50% too but it's just not readable
+ if( nTmp < 50 )
+ nTmp = nTmp ? 50 : 100;
if (nTmp<100) { // code adaped from fixed line height
nTmp *= nLineHeight;
nTmp /= 100;
if( !nTmp )
++nTmp;
nLineHeight = (KSHORT)nTmp;
- /*
- //@TODO figure out how WW maps ascent and descent
- //in case of prop line spacing <100%
KSHORT nAsc = ( 4 * nLineHeight ) / 5; // 80%
+#if 0
+ // could do clipping here (like Word does)
+ // but at 0.5 its unreadable either way...
if( nAsc < pCurr->GetAscent() ||
nLineHeight - nAsc < pCurr->Height() -
pCurr->GetAscent() )
pCurr->SetClipping( true );
+#endif
pCurr->SetAscent( nAsc );
- */
pCurr->Height( nLineHeight );
pInf->GetParaPortion()->SetFixLineHeight();
}
@@ -1784,6 +1790,8 @@ void SwTxtFormatter::CalcRealHeight( bool bNewLine )
break;
default: OSL_FAIL( ": unknown LineSpaceRule" );
}
+ // Note: for the _first_ line the line spacing of the previous
+ // paragraph is applied in SwFlowFrm::CalcUpperSpace()
if( !IsParaLine() )
switch( pSpace->GetInterLineSpaceRule() )
{