diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2024-04-12 09:16:12 +0100 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2024-04-13 01:19:00 +0200 |
commit | 6e3ed71f906c3571a6b6efb5335c26807b566a42 (patch) | |
tree | f3630c4fe9ba19eae267ca8909c1111aa8720956 /oox | |
parent | d490efe410a54f1860578728027d1ec0439f0ba9 (diff) |
Use o3tl::convert in oox
Change-Id: I1cbc299e7e64eae48f0f6c896a8160bbe6e19c97
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165938
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/drawingml/drawingmltypes.cxx | 12 | ||||
-rw-r--r-- | oox/source/export/drawingml.cxx | 18 |
2 files changed, 18 insertions, 12 deletions
diff --git a/oox/source/drawingml/drawingmltypes.cxx b/oox/source/drawingml/drawingmltypes.cxx index 30fed83f4391..04668c6b9a72 100644 --- a/oox/source/drawingml/drawingmltypes.cxx +++ b/oox/source/drawingml/drawingmltypes.cxx @@ -92,22 +92,20 @@ float GetTextSize( std::u16string_view sValue ) return fRet; } -/** converts the ST_TextSpacingPoint to 1/100mm */ +/** converts the ST_TextSpacingPoint (1/100pt) to 1/100mm */ sal_Int32 GetTextSpacingPoint( std::u16string_view sValue ) { sal_Int32 nRet; - if( ::sax::Converter::convertNumber( nRet, sValue, (SAL_MIN_INT32 + 360) / 254, (SAL_MAX_INT32 - 360) / 254 ) ) + if( ::sax::Converter::convertNumber( nRet, sValue ) ) nRet = GetTextSpacingPoint( nRet ); return nRet; } sal_Int32 GetTextSpacingPoint(sal_Int32 nValue) { - if (nValue > 0) - nValue = (nValue * 254 + 360); - else if (nValue < 0) - nValue = (nValue * 254 - 360); - return nValue / 720; + constexpr auto mdFromPt = o3tl::getConversionMulDiv(o3tl::Length::pt, o3tl::Length::mm100); + constexpr o3tl::detail::m_and_d md(mdFromPt.first, mdFromPt.second * 100); + return o3tl::convertNarrowing<sal_Int32, md.m, md.d>(nValue); } float GetFontHeight( sal_Int32 nHeight ) diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 92aa84438e62..d14fd037f237 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -167,6 +167,14 @@ const char* g_aPredefinedClrNames[] = { "hlink", "folHlink", }; + +/** converts 1/100mm to the ST_TextSpacingPoint (1/100pt) */ +sal_Int64 toTextSpacingPoint(sal_Int64 mm100) +{ + constexpr auto mdToPt = o3tl::getConversionMulDiv(o3tl::Length::mm100, o3tl::Length::pt); + constexpr o3tl::detail::m_and_d md(mdToPt.first * 100, mdToPt.second); + return o3tl::convert(mm100, md.m, md.d); +} } namespace oox::drawingml { @@ -2491,7 +2499,7 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool * therefore to get original value CharKerning need to be convert. * https://opengrok.libreoffice.org/xref/core/oox/source/drawingml/drawingmltypes.cxx#95 **/ - nCharKerning = ((nCharKerning * 720)-360) / 254; + nCharKerning = toTextSpacingPoint(nCharKerning); if ((bComplex && GetProperty(rXPropSet, "CharWeightComplex")) || GetProperty(rXPropSet, "CharWeight")) @@ -3445,7 +3453,7 @@ void DrawingML::WriteLinespacing(const LineSpacing& rSpacing, float fFirstCharHe XML_val, OString::number(static_cast<sal_Int32>(rSpacing.Height)*1000)); } else if (rSpacing.Mode == LineSpacingMode::MINIMUM - && fFirstCharHeight > static_cast<float>(rSpacing.Height) * 0.001 * 72.0 / 2.54) + && fFirstCharHeight > o3tl::convert(rSpacing.Height, o3tl::Length::mm100, o3tl::Length::pt)) { // 100% proportional line spacing = single line spacing mpFS->singleElementNS(XML_a, XML_spcPct, XML_val, @@ -3454,7 +3462,7 @@ void DrawingML::WriteLinespacing(const LineSpacing& rSpacing, float fFirstCharHe else { mpFS->singleElementNS( XML_a, XML_spcPts, - XML_val, OString::number(std::lround(rSpacing.Height / 25.4 * 72))); + XML_val, OString::number(toTextSpacingPoint(rSpacing.Height))); } } @@ -3582,7 +3590,7 @@ bool DrawingML::WriteParagraphProperties(const Reference<XTextContent>& rParagra mpFS->startElementNS(XML_a, XML_spcBef); { mpFS->singleElementNS( XML_a, XML_spcPts, - XML_val, OString::number(std::lround(nParaTopMargin / 25.4 * 72))); + XML_val, OString::number(toTextSpacingPoint(nParaTopMargin))); } mpFS->endElementNS( XML_a, XML_spcBef ); } @@ -3592,7 +3600,7 @@ bool DrawingML::WriteParagraphProperties(const Reference<XTextContent>& rParagra mpFS->startElementNS(XML_a, XML_spcAft); { mpFS->singleElementNS( XML_a, XML_spcPts, - XML_val, OString::number(std::lround(nParaBottomMargin / 25.4 * 72))); + XML_val, OString::number(toTextSpacingPoint(nParaBottomMargin))); } mpFS->endElementNS( XML_a, XML_spcAft ); } |