cui/source/tabpages/border.cxx | 12 +++---- include/vcl/fieldvalues.hxx | 14 +------- sw/source/ui/frmdlg/column.cxx | 8 ++--- sw/source/ui/misc/pgfnote.cxx | 8 ++--- vcl/source/control/field.cxx | 65 +++++++++++------------------------------ 5 files changed, 36 insertions(+), 71 deletions(-)
New commits: commit 5eccc8085190a7c2b04848108b95b69cb0319022 Author: Mike Kaganski <[email protected]> AuthorDate: Sun Oct 19 14:29:14 2025 +0500 Commit: Mike Kaganski <[email protected]> CommitDate: Sun Oct 19 16:10:09 2025 +0200 Drop the last vcl::ConvertDoubleValue backward-compatibility functions Use vcl::ConvertValue instead. For that, introduce a variant of ConvertValue that takes FieldUnit as input unit. Name it to reflect how it treats digits. Change-Id: I714335240f2f32c6010548bef27ada1f5869b658 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192664 Tested-by: Jenkins Reviewed-by: Mike Kaganski <[email protected]> diff --git a/cui/source/tabpages/border.cxx b/cui/source/tabpages/border.cxx index 60f187064fb4..234cfb226a27 100644 --- a/cui/source/tabpages/border.cxx +++ b/cui/source/tabpages/border.cxx @@ -1286,10 +1286,10 @@ IMPL_LINK_NOARG(SvxBorderTabPage, ModifyWidthMFHdl_Impl, weld::MetricSpinButton& else m_xLineWidthMF->set_min(5, FieldUnit::NONE); - nVal = static_cast<sal_Int64>(vcl::ConvertDoubleValue( + nVal = vcl::ConvertAndUnscaleValue( nVal, m_xLineWidthMF->get_digits(), - FieldUnit::POINT, MapUnit::MapTwip )); + FieldUnit::POINT, FieldUnit::TWIP ); m_xLbLineStyle->SetWidth( nVal ); m_aFrameSel.SetStyleToSelection( nVal, @@ -1306,11 +1306,11 @@ IMPL_LINK_NOARG(SvxBorderTabPage, SelStyleHdl_Impl, SvtLineListBox&, void) else m_xLineWidthMF->set_min(5, FieldUnit::NONE); - nOldWidth = static_cast<sal_Int64>(vcl::ConvertDoubleValue( + nOldWidth = vcl::ConvertAndUnscaleValue( nOldWidth, m_xLineWidthMF->get_digits(), FieldUnit::POINT, - MapUnit::MapTwip)); + FieldUnit::TWIP); const sal_Int64 nOldMinWidth = lcl_GetMinLineWidth(m_aFrameSel.getCurrentStyleLineStyle()); const sal_Int64 nNewMinWidth = lcl_GetMinLineWidth(m_xLbLineStyle->GetSelectEntryStyle()); @@ -1574,8 +1574,8 @@ void SvxBorderTabPage::FillLineListBox_Impl() } sal_Int64 nVal = m_xLineWidthMF->get_value(FieldUnit::NONE); - nVal = static_cast<sal_Int64>(vcl::ConvertDoubleValue(nVal, m_xLineWidthMF->get_digits(), - m_xLineWidthMF->get_unit(), MapUnit::MapTwip)); + nVal = vcl::ConvertAndUnscaleValue(nVal, m_xLineWidthMF->get_digits(), + m_xLineWidthMF->get_unit(), FieldUnit::TWIP); m_xLbLineStyle->SetWidth( nVal ); } diff --git a/include/vcl/fieldvalues.hxx b/include/vcl/fieldvalues.hxx index fcbf4038a9e7..c0f4fe089ad8 100644 --- a/include/vcl/fieldvalues.hxx +++ b/include/vcl/fieldvalues.hxx @@ -44,17 +44,9 @@ VCL_DLLPUBLIC sal_Int64 ConvertValue(sal_Int64 nValue, sal_Int64 mnBaseValue, sa FieldUnit eInUnit, FieldUnit eOutUnit); VCL_DLLPUBLIC sal_Int64 ConvertValue(sal_Int64 nValue, sal_uInt16 nDecDigits, MapUnit eInUnit, FieldUnit eOutUnit); - -// for backwards compatibility -// caution: conversion to double loses precision -VCL_DLLPUBLIC double ConvertDoubleValue(double nValue, sal_uInt16 nDecDigits, FieldUnit eInUnit, - MapUnit eOutUnit); - -inline double ConvertDoubleValue(sal_Int64 nValue, sal_uInt16 nDecDigits, FieldUnit eInUnit, - MapUnit eOutUnit) -{ - return ConvertDoubleValue(static_cast<double>(nValue), nDecDigits, eInUnit, eOutUnit); -} +// nValue is already scaled to nDecDigits; the result is unscaled +VCL_DLLPUBLIC sal_Int64 ConvertAndUnscaleValue(sal_Int64 nValue, sal_uInt16 nDecDigits, + FieldUnit eInUnit, FieldUnit eOutUnit); } #endif // INCLUDED_VCL_FIELDVALUES_HXX diff --git a/sw/source/ui/frmdlg/column.cxx b/sw/source/ui/frmdlg/column.cxx index d56aab406615..ed703b5c1cf2 100644 --- a/sw/source/ui/frmdlg/column.cxx +++ b/sw/source/ui/frmdlg/column.cxx @@ -487,10 +487,10 @@ SwColumnPage::SwColumnPage(weld::Container* pPage, weld::DialogController* pCont SvxBorderLineStyle::DASHED ); sal_Int64 nLineWidth = m_xLineWidthEdit->get_value(FieldUnit::POINT); - nLineWidth = static_cast<tools::Long>(vcl::ConvertDoubleValue( + nLineWidth = vcl::ConvertAndUnscaleValue( nLineWidth, m_xLineWidthEdit->get_digits(), - FieldUnit::POINT, MapUnit::MapTwip )); + FieldUnit::POINT, FieldUnit::TWIP ); m_xLineTypeDLB->SetWidth(nLineWidth); m_xLineColorDLB->SelectEntry(COL_BLACK); } @@ -683,10 +683,10 @@ IMPL_LINK_NOARG( SwColumnPage, UpdateColMgr, weld::MetricSpinButton&, void ) m_xLineColorLbl->set_sensitive(bEnable); sal_Int64 nLineWidth = m_xLineWidthEdit->get_value(FieldUnit::PERCENT); - nLineWidth = static_cast<tools::Long>(vcl::ConvertDoubleValue( + nLineWidth = vcl::ConvertAndUnscaleValue( nLineWidth, m_xLineWidthEdit->get_digits(), - m_xLineWidthEdit->get_unit(), MapUnit::MapTwip )); + m_xLineWidthEdit->get_unit(), FieldUnit::TWIP ); if( !bEnable ) m_xColMgr->SetNoLine(); else diff --git a/sw/source/ui/misc/pgfnote.cxx b/sw/source/ui/misc/pgfnote.cxx index b81652ed2371..dfea0c0607e2 100644 --- a/sw/source/ui/misc/pgfnote.cxx +++ b/sw/source/ui/misc/pgfnote.cxx @@ -82,10 +82,10 @@ IMPL_LINK_NOARG(SwFootNotePage, HeightModify, weld::MetricSpinButton&, void) IMPL_LINK_NOARG(SwFootNotePage, LineWidthChanged_Impl, weld::MetricSpinButton&, void) { sal_Int64 nVal = m_xLineWidthEdit->get_value(FieldUnit::NONE); - nVal = static_cast<sal_Int64>(vcl::ConvertDoubleValue( + nVal = vcl::ConvertAndUnscaleValue( nVal, m_xLineWidthEdit->get_digits(), - m_xLineWidthEdit->get_unit(), MapUnit::MapTwip )); + m_xLineWidthEdit->get_unit(), FieldUnit::TWIP ); m_xLineTypeBox->SetWidth(nVal); } @@ -263,10 +263,10 @@ bool SwFootNotePage::FillItemSet(SfxItemSet *rSet) // Separator width sal_Int64 nWidth = m_xLineWidthEdit->get_value(FieldUnit::NONE); - nWidth = static_cast<tools::Long>(vcl::ConvertDoubleValue( + nWidth = vcl::ConvertAndUnscaleValue( nWidth, m_xLineWidthEdit->get_digits(), - m_xLineWidthEdit->get_unit(), MapUnit::MapTwip )); + m_xLineWidthEdit->get_unit(), FieldUnit::TWIP ); rFootnoteInfo.SetLineWidth( nWidth ); // Separator color diff --git a/vcl/source/control/field.cxx b/vcl/source/control/field.cxx index 1f510ae838c9..e5e6ff414660 100644 --- a/vcl/source/control/field.cxx +++ b/vcl/source/control/field.cxx @@ -1086,15 +1086,10 @@ namespace vcl namespace { -bool checkConversionUnits(MapUnit eInUnit, FieldUnit eOutUnit) +bool checkConversionUnits(FieldUnit eInUnit, FieldUnit eOutUnit) { - return eOutUnit != FieldUnit::PERCENT - && eOutUnit != FieldUnit::CUSTOM - && eOutUnit != FieldUnit::NONE - && eInUnit != MapUnit::MapPixel - && eInUnit != MapUnit::MapSysFont - && eInUnit != MapUnit::MapAppFont - && eInUnit != MapUnit::MapRelative; + return FieldToO3tlLength(eInUnit, o3tl::Length::invalid) != o3tl::Length::invalid + && FieldToO3tlLength(eOutUnit, o3tl::Length::invalid) != o3tl::Length::invalid; } double convertValue( double nValue, tools::Long nDigits, FieldUnit eInUnit, FieldUnit eOutUnit ) @@ -1125,15 +1120,15 @@ namespace vcl sal_Int64 ConvertValue( sal_Int64 nValue, sal_uInt16 nDigits, MapUnit eInUnit, FieldUnit eOutUnit ) { - if ( !checkConversionUnits(eInUnit, eOutUnit) ) + tools::Long nDecDigits = nDigits; + FieldUnit eFieldUnit = ImplMap2FieldUnit( eInUnit, nDecDigits ); + + if ( !checkConversionUnits(eFieldUnit, eOutUnit) ) { OSL_FAIL( "invalid parameters" ); return nValue; } - tools::Long nDecDigits = nDigits; - FieldUnit eFieldUnit = ImplMap2FieldUnit( eInUnit, nDecDigits ); - // Avoid sal_Int64 <-> double conversion issues if possible: if (eFieldUnit == eOutUnit && nDigits == 0) { @@ -1145,47 +1140,25 @@ namespace vcl convertValue( nValue, nDecDigits, eFieldUnit, eOutUnit ) ) ); } - double ConvertDoubleValue(double nValue, sal_uInt16 nDigits, - FieldUnit eInUnit, MapUnit eOutUnit) - { - if ( eInUnit == FieldUnit::PERCENT || - eInUnit == FieldUnit::CUSTOM || - eInUnit == FieldUnit::NONE || - eInUnit == FieldUnit::DEGREE || - eInUnit == FieldUnit::SECOND || - eInUnit == FieldUnit::MILLISECOND || - eInUnit == FieldUnit::PIXEL || - eInUnit == FieldUnit::FONT_EM || - eInUnit == FieldUnit::FONT_CJK_ADVANCE || - eOutUnit == MapUnit::MapPixel || - eOutUnit == MapUnit::MapSysFont || - eOutUnit == MapUnit::MapAppFont || - eOutUnit == MapUnit::MapRelative ) + // nValue is already scaled to nDecDigits; the result is unscaled + sal_Int64 ConvertAndUnscaleValue(sal_Int64 nValue, sal_uInt16 nDigits, FieldUnit eInUnit, + FieldUnit eOutUnit) + { + if (!checkConversionUnits(eInUnit, eOutUnit)) { - OSL_FAIL( "invalid parameters" ); + SAL_WARN("vcl", "invalid parameters"); return nValue; } - tools::Long nDecDigits = nDigits; - FieldUnit eFieldUnit = ImplMap2FieldUnit( eOutUnit, nDecDigits ); - - if ( nDecDigits < 0 ) - { - nValue *= ImplPower10(-nDecDigits); - } - else + // Avoid sal_Int64 <-> double conversion issues if possible: + if (eInUnit == eOutUnit && nDigits == 0) { - nValue /= ImplPower10(nDecDigits); + return nValue; } - if ( eFieldUnit != eInUnit ) - { - const o3tl::Length eFrom = FieldToO3tlLength(eInUnit, o3tl::Length::invalid); - const o3tl::Length eTo = FieldToO3tlLength(eFieldUnit, o3tl::Length::invalid); - if (eFrom != o3tl::Length::invalid && eTo != o3tl::Length::invalid) - nValue = o3tl::convert(nValue, eFrom, eTo); - } - return nValue; + return static_cast<sal_Int64>( + nonValueDoubleToValueDouble( + convertValue( nValue, -static_cast<tools::Long>(nDigits), eInUnit, eOutUnit ) ) ); } }
