diff options
author | Justin Luth <justin_luth@sil.org> | 2020-03-14 14:45:39 +0300 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2020-04-03 10:04:56 +0200 |
commit | 0f29d36aa9e6ac7d0914a6e1749c16ecec216904 (patch) | |
tree | 1d4fe8dde667d5caffad571a88a5322aacb91b81 /editeng/source/editeng/impedit4.cxx | |
parent | 730c5317a968f4e99d4d2d28499b1d6204a07285 (diff) |
tdf#80194 autoEsc: use fontmetrics in calculation
This replaces the previous 7.0 patch in
commit 2940d1905b921d9909b08b1e32014d3c44474ef0
where the following is still true:
THIS WILL CHANGE THE POSITION OF EDITENG SUBSCRIPTS
AND SUPERSCRIPTS IN EXISTING DOCUMENTS!
That is because they were very poorly placed
before - using a formula that is very different
from how Writer does it. Everyone in the bug reports
indicates that Writer does it good, but Impress
does it really bad. (tdf#89849, tdf#63083).
Instead of using the previous patch's 80%/20%
generalization, copy Writer's use of the actual
ascent and descent of the font to determine
the best position for the subscript or superscript.
Change-Id: I0f10f6174b0709f3bc3b9acdc54b7b1fd59c5ee2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90489
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Justin Luth <justin_luth@sil.org>
Diffstat (limited to 'editeng/source/editeng/impedit4.cxx')
-rw-r--r-- | editeng/source/editeng/impedit4.cxx | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index 25d7ecc0aa8a..050eed8667f4 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -69,6 +69,7 @@ #include <unotools/textsearch.hxx> #include <comphelper/processfactory.hxx> #include <vcl/help.hxx> +#include <vcl/metric.hxx> #include <svtools/rtfkeywd.hxx> #include <editeng/edtdlg.hxx> @@ -928,14 +929,23 @@ void ImpEditEngine::WriteItemAsRTF( const SfxPoolItem& rItem, SvStream& rOutput, sal_uInt16 const nProp = static_cast<const SvxEscapementItem&>(rItem).GetProportionalHeight(); sal_uInt16 nProp100 = nProp*100; // For SWG-Token Prop in 100th percent. short nEsc = static_cast<const SvxEscapementItem&>(rItem).GetEsc(); + const FontMetric& rFontMetric = GetRefDevice()->GetFontMetric(); + double fFontHeight = rFontMetric.GetAscent() + rFontMetric.GetDescent(); + double fAutoAscent = .8; + double fAutoDescent = .2; + if ( fFontHeight ) + { + fAutoAscent = rFontMetric.GetAscent() / fFontHeight; + fAutoDescent = rFontMetric.GetDescent() / fFontHeight; + } if ( nEsc == DFLT_ESC_AUTO_SUPER ) { - nEsc = .8 * (100 - nProp); + nEsc = fAutoAscent * (100 - nProp); nProp100++; // A 1 afterwards means 'automatic'. } else if ( nEsc == DFLT_ESC_AUTO_SUB ) { - nEsc = .2 * -(100 - nProp); + nEsc = fAutoDescent * -(100 - nProp); nProp100++; } // SWG: |