summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2024-04-12 09:16:12 +0100
committerMike Kaganski <mike.kaganski@collabora.com>2024-04-13 01:19:00 +0200
commit6e3ed71f906c3571a6b6efb5335c26807b566a42 (patch)
treef3630c4fe9ba19eae267ca8909c1111aa8720956 /oox
parentd490efe410a54f1860578728027d1ec0439f0ba9 (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.cxx12
-rw-r--r--oox/source/export/drawingml.cxx18
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 );
}