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 ) ) );
     }
 }
 

Reply via email to