sw/source/ui/misc/pggrid.cxx |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

New commits:
commit 875c27dc7975de9b007a215fe1d6f171b4ef090e
Author:     Kevin Suo <suokunl...@126.com>
AuthorDate: Thu Nov 3 23:26:28 2022 +0800
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Nov 9 21:24:29 2022 +0100

    tdf#151544: Page grid: ruby height should be zero when not in square page 
mode
    
    Ruby height is used to show the ruby line in square page mode only (e.g. to 
show the
    Pinyin etc above or below base line). When not in square page mode (i.e., 
when in
    normal mode), the ruby height should be zero.
    
    The code was trying to set the ruby height to zero by using the following:
        m_xRubySizeMF->set_value(0, FieldUnit::TWIP);
    and then pass this to aGridItem.SetRubyHeight in 
SwTextGridPage::PutGridItem.
    However, there seems to be always a conversion loss, thus each line will 
have a tiny
    ruby height, which makes the vertical space not enough to hold the desired 
number
    of lines on the page.
    
    Fix this by setting ruby height to zero directly in 
SwTextGridPage::PutGridItem if
    we are not in square page mode.
    
    Change-Id: I24a74b96c12eb58e46e163e2a9c73b540023ab39
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142243
    Tested-by: Jenkins
    Tested-by: Caolán McNamara <caol...@redhat.com>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sw/source/ui/misc/pggrid.cxx b/sw/source/ui/misc/pggrid.cxx
index db3ade6edb6b..f849f6dcc48a 100644
--- a/sw/source/ui/misc/pggrid.cxx
+++ b/sw/source/ui/misc/pggrid.cxx
@@ -232,7 +232,12 @@ void SwTextGridPage::PutGridItem(SfxItemSet& rSet)
         aGridItem.SetBaseHeight( static_cast< sal_uInt16 >(
             m_bRubyUserValue ? m_nRubyUserValue :
                 
m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP))) );
-        aGridItem.SetRubyHeight( static_cast< sal_uInt16 
>(m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP))) );
+        // Tdf#151544: set ruby height from the value get from UI only when in 
square page mode.
+        // When in normal mode, the ruby height should be zero.
+        if (m_bSquaredMode)
+            
aGridItem.SetRubyHeight(static_cast<sal_uInt16>(m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP))));
+        else
+            aGridItem.SetRubyHeight(0);
         aGridItem.SetBaseWidth( static_cast< sal_uInt16 
>(m_xCharWidthMF->denormalize(m_xCharWidthMF->get_value(FieldUnit::TWIP))) );
         aGridItem.SetRubyTextBelow(m_xRubyBelowCB->get_active());
         aGridItem.SetSquaredMode(m_bSquaredMode);
@@ -385,7 +390,6 @@ IMPL_LINK(SwTextGridPage, CharorLineChangedHdl, 
weld::SpinButton&, rField, void)
             assert(nValue && "div-by-zero");
             auto nHeight = m_aPageSize.Height() / nValue;
             m_xTextSizeMF->set_value(m_xTextSizeMF->normalize(nHeight), 
FieldUnit::TWIP);
-            m_xRubySizeMF->set_value(0, FieldUnit::TWIP);
             SetLinesOrCharsRanges( *m_xLinesRangeFT , 
m_xLinesPerPageNF->get_max() );
 
             m_nRubyUserValue = nHeight;

Reply via email to