lotuswordpro/inc/lwpoverride.hxx                      |    6 
 lotuswordpro/inc/lwptools.hxx                         |   35 +---
 lotuswordpro/source/filter/lwpborderstuff.cxx         |    8 -
 lotuswordpro/source/filter/lwpbulletstylemgr.cxx      |    4 
 lotuswordpro/source/filter/lwpdrawobj.cxx             |  144 +++++++++---------
 lotuswordpro/source/filter/lwpframelayout.cxx         |   13 -
 lotuswordpro/source/filter/lwpgrfobj.cxx              |   20 +-
 lotuswordpro/source/filter/lwplayout.cxx              |    6 
 lotuswordpro/source/filter/lwplaypiece.hxx            |    2 
 lotuswordpro/source/filter/lwplnopts.cxx              |    2 
 lotuswordpro/source/filter/lwpmargins.hxx             |    8 -
 lotuswordpro/source/filter/lwpoleobject.cxx           |    8 -
 lotuswordpro/source/filter/lwppagelayout.cxx          |    8 -
 lotuswordpro/source/filter/lwpparastyle.cxx           |   18 +-
 lotuswordpro/source/filter/lwprowlayout.cxx           |    4 
 lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx |   32 ++--
 lotuswordpro/source/filter/lwpshadow.hxx              |    4 
 lotuswordpro/source/filter/lwptable.hxx               |    4 
 lotuswordpro/source/filter/lwptablelayout.cxx         |    4 
 lotuswordpro/source/filter/lwptablelayout.hxx         |    2 
 lotuswordpro/source/filter/lwpverdocument.cxx         |    2 
 21 files changed, 166 insertions(+), 168 deletions(-)

New commits:
commit fce1fb034d282dc6e0434bf16c49d5f602d813bd
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Sat Apr 13 21:57:01 2024 +0500
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Sun Apr 14 06:57:06 2024 +0200

    Use more o3tl::convert in lotuswordpro
    
    Change-Id: I7ec74dc105f846307f5bf3d3c8cedcc4aebb64a4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166058
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/lotuswordpro/inc/lwpoverride.hxx b/lotuswordpro/inc/lwpoverride.hxx
index 036492e518d1..688ef9747e65 100644
--- a/lotuswordpro/inc/lwpoverride.hxx
+++ b/lotuswordpro/inc/lwpoverride.hxx
@@ -438,18 +438,18 @@ inline double LwpIndentOverride::GetFirst() const
     sal_Int32 nRes;
     if (o3tl::checked_sub(m_nFirst, m_nRest, nRes))
         throw std::range_error("bad len");
-    return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(nRes));
+    return LwpTools::ConvertFromUnits(nRes);
 }
 inline double LwpIndentOverride::GetLeft() const
 {
     sal_Int32 nRes;
     if (o3tl::checked_add(m_nAll, m_nRest, nRes))
         throw std::range_error("bad len");
-    return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(nRes));
+    return LwpTools::ConvertFromUnits(nRes);
 }
 inline double LwpIndentOverride::GetRight() const
 {
-    return LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nRight));
+    return LwpTools::ConvertFromUnits(m_nRight);
 }
 
 class LwpBackgroundStuff;
diff --git a/lotuswordpro/inc/lwptools.hxx b/lotuswordpro/inc/lwptools.hxx
index 753a9bacdd06..398abb2ea578 100644
--- a/lotuswordpro/inc/lwptools.hxx
+++ b/lotuswordpro/inc/lwptools.hxx
@@ -67,19 +67,11 @@
 #include "localtime.hxx"
 #include "xfilter/xfdatestyle.hxx"
 #include "xfilter/xftimestyle.hxx"
+#include <o3tl/unit_conversion.hxx>
 #include <rtl/textenc.h>
 #include <stdexcept>
 #include <string_view>
 
-// 01/19/2005
-const sal_uInt32 UNITS_PER_INCH = 65536L * 72L;
-const double CM_PER_INCH = 2.54;
-//end
-
-const double POINTS_PER_INCH = 72.27;
-const double TWIPS_PER_POINT = 20.0;
-const double TWIPS_PER_INCH = TWIPS_PER_POINT * POINTS_PER_INCH;
-const double TWIPS_PER_CM = TWIPS_PER_INCH/CM_PER_INCH;
 /**
  * @brief   tool class (unicode, conversion) for lwp filter.
 */
@@ -91,9 +83,8 @@ public:
         OUString& str, sal_uInt16 strlen,  rtl_TextEncoding aEncoding );
     static bool IsUnicodePacked(LwpObjectStream* pObjStrm, sal_uInt16 len);
 
-    inline static double ConvertFromUnits(sal_Int32 nUnits);
-    inline static double ConvertToMetric(double fInch);
-    inline static double ConvertFromUnitsToMetric(sal_Int32 nUnits);
+    inline static double ConvertFromUnits(double nUnits); // to cm
+    inline static double ConvertFromTwips(double nTwips); // to cm
 
     inline static bool IsOddNumber(sal_uInt16 nNumber);
     inline static bool IsEvenNumber(sal_uInt16 nNumber);
@@ -106,18 +97,20 @@ public:
     static std::unique_ptr<XFTimeStyle> GetSystemTimeStyle();
 };
 
-inline double LwpTools::ConvertFromUnits(sal_Int32 nUnits)
-{
-    return static_cast<double>(nUnits)/UNITS_PER_INCH;
-}
-inline double LwpTools::ConvertToMetric(double fInch)
+// Convert from "units" to centimeters
+inline double LwpTools::ConvertFromUnits(double nUnits)
 {
-    return fInch*CM_PER_INCH;
+    constexpr sal_uInt32 UNITS_PER_INCH = 65536 * 72;
+    constexpr auto mdFromIn = o3tl::getConversionMulDiv(o3tl::Length::in, 
o3tl::Length::cm);
+    constexpr o3tl::detail::m_and_d md(mdFromIn.first, mdFromIn.second * 
UNITS_PER_INCH);
+    return o3tl::convert(nUnits, md.m, md.d);
 }
-inline double LwpTools::ConvertFromUnitsToMetric(sal_Int32 nUnits)
+// Convert from twips to centimeters, using definition of point = 72.27 in
+inline double LwpTools::ConvertFromTwips(double nTwips)
 {
-    double fInch = ConvertFromUnits(nUnits);
-    return ConvertToMetric(fInch);
+    constexpr auto mdFromIn = o3tl::getConversionMulDiv(o3tl::Length::in, 
o3tl::Length::cm);
+    constexpr o3tl::detail::m_and_d md(mdFromIn.first * 100, mdFromIn.second * 
7227 * 20);
+    return o3tl::convert(nTwips, md.m, md.d);
 }
 inline bool LwpTools::IsOddNumber(sal_uInt16 nNumber)
 {
diff --git a/lotuswordpro/source/filter/lwpborderstuff.cxx 
b/lotuswordpro/source/filter/lwpborderstuff.cxx
index d3aebcdabdb7..cce81e61fc26 100644
--- a/lotuswordpro/source/filter/lwpborderstuff.cxx
+++ b/lotuswordpro/source/filter/lwpborderstuff.cxx
@@ -198,13 +198,13 @@ float   LwpBorderStuff::GetSideWidth(sal_uInt16 side)
     switch(side)
     {
     case LEFT:
-        return 
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthLeft));
+        return LwpTools::ConvertFromUnits(m_nWidthLeft);
     case RIGHT:
-        return 
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthRight));
+        return LwpTools::ConvertFromUnits(m_nWidthRight);
     case TOP:
-        return 
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthTop));
+        return LwpTools::ConvertFromUnits(m_nWidthTop);
     case BOTTOM:
-        return 
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(m_nWidthBottom));
+        return LwpTools::ConvertFromUnits(m_nWidthBottom);
     }
     // FIXME: this is needed to avoid warning: control reaches end of non-void 
function
     //        a better solution would be to enum value for the parameter side
diff --git a/lotuswordpro/source/filter/lwpbulletstylemgr.cxx 
b/lotuswordpro/source/filter/lwpbulletstylemgr.cxx
index edb6910714cc..9a9bca7fec36 100644
--- a/lotuswordpro/source/filter/lwpbulletstylemgr.cxx
+++ b/lotuswordpro/source/filter/lwpbulletstylemgr.cxx
@@ -163,12 +163,12 @@ OUString LwpBulletStyleMgr::RegisterBulletStyle(LwpPara* 
pPara, const LwpBulletO
             if (pIndent->GetMRest() > 0) /* note: used to be 0.001, no idea 
why */
             {
                 pListStyle->SetListPosition(nC, 0.0,
-                    
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(pIndent->GetMRest())), 
0.0, eAlign);
+                    LwpTools::ConvertFromUnits(pIndent->GetMRest()), 0.0, 
eAlign);
             }
             else
             {
                 pListStyle->SetListPosition(nC, 0.0,
-                    0.0, 
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(pIndent->GetMFirst())), 
eAlign);
+                    0.0, LwpTools::ConvertFromUnits(pIndent->GetMFirst()), 
eAlign);
             }
         }
 
diff --git a/lotuswordpro/source/filter/lwpdrawobj.cxx 
b/lotuswordpro/source/filter/lwpdrawobj.cxx
index 5b704c1d5065..4e2f9e1387df 100644
--- a/lotuswordpro/source/filter/lwpdrawobj.cxx
+++ b/lotuswordpro/source/filter/lwpdrawobj.cxx
@@ -256,7 +256,7 @@ void LwpDrawObj::SetLineStyle(XFDrawStyle* pStyle, 
sal_uInt8 nWidth, sal_uInt8 n
     }
 
     // line width
-    double fWidth = static_cast<double>(nWidth)/TWIPS_PER_CM;
+    double fWidth = LwpTools::ConvertFromTwips(nWidth);
 
     // line color
     XFColor aXFColor(rColor.nR, rColor.nG, rColor.nB);
@@ -280,10 +280,11 @@ void LwpDrawObj::SetPosition(XFFrame* pObj)
         fScaleY = m_pTransData->fScaleY;
     }
 
-    pObj->SetPosition(static_cast<double>(m_aObjHeader.nLeft)/TWIPS_PER_CM * 
fScaleX+ fOffsetX,
-        static_cast<double>(m_aObjHeader.nTop)/TWIPS_PER_CM * fScaleY + 
fOffsetY,
-        
static_cast<double>(m_aObjHeader.nRight-m_aObjHeader.nLeft)/TWIPS_PER_CM * 
fScaleX,
-        
static_cast<double>(m_aObjHeader.nBottom-m_aObjHeader.nTop)/TWIPS_PER_CM * 
fScaleY);
+    pObj->SetPosition(
+        LwpTools::ConvertFromTwips(m_aObjHeader.nLeft) * fScaleX + fOffsetX,
+        LwpTools::ConvertFromTwips(m_aObjHeader.nTop) * fScaleY + fOffsetY,
+        LwpTools::ConvertFromTwips(m_aObjHeader.nRight-m_aObjHeader.nLeft) * 
fScaleX,
+        LwpTools::ConvertFromTwips(m_aObjHeader.nBottom-m_aObjHeader.nTop) * 
fScaleY);
 }
 
 /**
@@ -311,9 +312,10 @@ void LwpDrawObj::SetArrowHead(XFDrawStyle* 
pOpenedObjStyle, sal_uInt8 nArrowFlag
     // arrowhead flag of an object's end side
     sal_uInt8 nRightArrow = (nArrowFlag & 0xF0) >> 4;
 
-    double fWidth_inch = static_cast<double>(nLineWidth)/TWIPS_PER_CM;
+    // FIXME: this can't be correct: converting something to cm, then treating 
it as inches
+    double fWidth_inch = LwpTools::ConvertFromTwips(nLineWidth);
     double fArrowSize_inch = fWidth_inch + 0.08;
-    double fArrowSize = fArrowSize_inch * CM_PER_INCH;
+    double fArrowSize = o3tl::convert(fArrowSize_inch, o3tl::Length::in, 
o3tl::Length::cm);
 
     if (nLeftArrow)
     {
@@ -452,10 +454,10 @@ OUString LwpDrawLine::RegisterStyle()
 rtl::Reference<XFFrame> LwpDrawLine::CreateDrawObj(const OUString& rStyleName )
 {
     rtl::Reference<XFDrawPath> xLine(new XFDrawPath());
-    xLine->MoveTo(XFPoint(static_cast<double>(m_aLineRec.nStartX)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-        static_cast<double>(m_aLineRec.nStartY)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
-    xLine->LineTo(XFPoint(static_cast<double>(m_aLineRec.nEndX)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-        static_cast<double>(m_aLineRec.nEndY)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+    xLine->MoveTo(XFPoint(LwpTools::ConvertFromTwips(m_aLineRec.nStartX) * 
m_pTransData->fScaleX,
+                          LwpTools::ConvertFromTwips(m_aLineRec.nStartY) * 
m_pTransData->fScaleY));
+    xLine->LineTo(XFPoint(LwpTools::ConvertFromTwips(m_aLineRec.nEndX) * 
m_pTransData->fScaleX,
+                          LwpTools::ConvertFromTwips(m_aLineRec.nEndY) * 
m_pTransData->fScaleY));
     SetPosition(xLine.get());
 
     xLine->SetStyleName(rStyleName);
@@ -466,8 +468,10 @@ rtl::Reference<XFFrame> LwpDrawLine::CreateDrawObj(const 
OUString& rStyleName )
 rtl::Reference<XFFrame> LwpDrawLine::CreateStandardDrawObj(const  OUString& 
rStyleName)
 {
     rtl::Reference<XFDrawLine> xLine(new XFDrawLine());
-    
xLine->SetStartPoint(static_cast<double>(m_aLineRec.nStartX)/TWIPS_PER_CM,static_cast<double>(m_aLineRec.nStartY)/TWIPS_PER_CM);
-    
xLine->SetEndPoint(static_cast<double>(m_aLineRec.nEndX)/TWIPS_PER_CM,static_cast<double>(m_aLineRec.nEndY)/TWIPS_PER_CM);
+    xLine->SetStartPoint(LwpTools::ConvertFromTwips(m_aLineRec.nStartX),
+                         LwpTools::ConvertFromTwips(m_aLineRec.nStartY));
+    xLine->SetEndPoint(LwpTools::ConvertFromTwips(m_aLineRec.nEndX),
+                       LwpTools::ConvertFromTwips(m_aLineRec.nEndY));
 
     xLine->SetStyleName(rStyleName);
     return xLine;
@@ -529,12 +533,12 @@ OUString LwpDrawPolyLine::RegisterStyle()
 rtl::Reference<XFFrame> LwpDrawPolyLine::CreateDrawObj(const OUString& 
rStyleName )
 {
     rtl::Reference<XFDrawPath> xPolyline(new XFDrawPath());
-    xPolyline->MoveTo(XFPoint(static_cast<double>(m_pVector[0].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-            static_cast<double>(m_pVector[0].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+    xPolyline->MoveTo(XFPoint(LwpTools::ConvertFromTwips(m_pVector[0].x) * 
m_pTransData->fScaleX,
+                              LwpTools::ConvertFromTwips(m_pVector[0].y) * 
m_pTransData->fScaleY));
     for (sal_uInt16 nC = 1; nC < m_aPolyLineRec.nNumPoints; nC++)
     {
-        
xPolyline->LineTo(XFPoint(static_cast<double>(m_pVector[nC].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-            static_cast<double>(m_pVector[nC].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+        xPolyline->LineTo(XFPoint(LwpTools::ConvertFromTwips(m_pVector[nC].x) 
* m_pTransData->fScaleX,
+                                  LwpTools::ConvertFromTwips(m_pVector[nC].y) 
* m_pTransData->fScaleY));
     }
     SetPosition(xPolyline.get());
 
@@ -548,8 +552,8 @@ rtl::Reference<XFFrame> 
LwpDrawPolyLine::CreateStandardDrawObj(const  OUString&
     rtl::Reference<XFDrawPolyline> xPolyline(new XFDrawPolyline());
     for (sal_uInt16 nC = 0; nC < m_aPolyLineRec.nNumPoints; nC++)
     {
-        xPolyline->AddPoint(static_cast<double>(m_pVector[nC].x)/TWIPS_PER_CM,
-            static_cast<double>(m_pVector[nC].y)/TWIPS_PER_CM);
+        xPolyline->AddPoint(LwpTools::ConvertFromTwips(m_pVector[nC].x),
+                            LwpTools::ConvertFromTwips(m_pVector[nC].y));
     }
 
     xPolyline->SetStyleName(rStyleName);
@@ -609,12 +613,12 @@ OUString LwpDrawPolygon::RegisterStyle()
 rtl::Reference<XFFrame> LwpDrawPolygon::CreateDrawObj(const OUString& 
rStyleName)
 {
     rtl::Reference<XFDrawPath> xPolygon(new XFDrawPath());
-    xPolygon->MoveTo(XFPoint(static_cast<double>(m_pVector[0].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-            static_cast<double>(m_pVector[0].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+    xPolygon->MoveTo(XFPoint(LwpTools::ConvertFromTwips(m_pVector[0].x) * 
m_pTransData->fScaleX,
+                             LwpTools::ConvertFromTwips(m_pVector[0].y) * 
m_pTransData->fScaleY));
     for (sal_uInt16 nC = 1; nC < m_nNumPoints; nC++)
     {
-        
xPolygon->LineTo(XFPoint(static_cast<double>(m_pVector[nC].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-            static_cast<double>(m_pVector[nC].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+        xPolygon->LineTo(XFPoint(LwpTools::ConvertFromTwips(m_pVector[nC].x) * 
m_pTransData->fScaleX,
+                                 LwpTools::ConvertFromTwips(m_pVector[nC].y) * 
m_pTransData->fScaleY));
     }
     xPolygon->ClosePath();
     SetPosition(xPolygon.get());
@@ -628,8 +632,8 @@ rtl::Reference<XFFrame> 
LwpDrawPolygon::CreateStandardDrawObj(const  OUString& r
     rtl::Reference<XFDrawPolygon> xPolygon(new XFDrawPolygon());
     for (sal_uInt16 nC = 0; nC < m_nNumPoints; nC++)
     {
-        xPolygon->AddPoint(static_cast<double>(m_pVector[nC].x)/TWIPS_PER_CM,
-            static_cast<double>(m_pVector[nC].y)/TWIPS_PER_CM);
+        xPolygon->AddPoint(LwpTools::ConvertFromTwips(m_pVector[nC].x),
+                           LwpTools::ConvertFromTwips(m_pVector[nC].y));
     }
 
     xPolygon->SetStyleName(rStyleName);
@@ -695,15 +699,15 @@ rtl::Reference<XFFrame> 
LwpDrawRectangle::CreateDrawObj(const OUString& rStyleNa
     else
     {
         rtl::Reference<XFDrawPath> xRect(new XFDrawPath());
-        xRect->MoveTo(XFPoint(static_cast<double>(m_aVector[0].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-            static_cast<double>(m_aVector[0].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+        xRect->MoveTo(XFPoint(LwpTools::ConvertFromTwips(m_aVector[0].x) * 
m_pTransData->fScaleX,
+                              LwpTools::ConvertFromTwips(m_aVector[0].y) * 
m_pTransData->fScaleY));
         for (sal_uInt8 nC = 1; nC < 4; nC++)
         {
-            
xRect->LineTo(XFPoint(static_cast<double>(m_aVector[nC].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-                static_cast<double>(m_aVector[nC].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+            xRect->LineTo(XFPoint(LwpTools::ConvertFromTwips(m_aVector[nC].x) 
* m_pTransData->fScaleX,
+                                  LwpTools::ConvertFromTwips(m_aVector[nC].y) 
* m_pTransData->fScaleY));
         }
-        xRect->LineTo(XFPoint(static_cast<double>(m_aVector[0].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-                static_cast<double>(m_aVector[0].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+        xRect->LineTo(XFPoint(LwpTools::ConvertFromTwips(m_aVector[0].x) * 
m_pTransData->fScaleX,
+                              LwpTools::ConvertFromTwips(m_aVector[0].y) * 
m_pTransData->fScaleY));
         xRect->ClosePath();
         SetPosition(xRect.get());
 
@@ -716,38 +720,38 @@ rtl::Reference<XFFrame> 
LwpDrawRectangle::CreateDrawObj(const OUString& rStyleNa
 XFFrame* LwpDrawRectangle::CreateRoundedRect(const OUString& rStyleName)
 {
     XFDrawPath* pRoundedRect = new XFDrawPath();
-    
pRoundedRect->MoveTo(XFPoint(static_cast<double>(m_aVector[0].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-    static_cast<double>(m_aVector[0].y)/TWIPS_PER_CM * m_pTransData->fScaleY));
+    pRoundedRect->MoveTo(XFPoint(LwpTools::ConvertFromTwips(m_aVector[0].x) * 
m_pTransData->fScaleX,
+                                 LwpTools::ConvertFromTwips(m_aVector[0].y) * 
m_pTransData->fScaleY));
 
     sal_uInt8 nPtIndex = 1;
     for (sal_uInt8 nC = 0; nC < 7; nC++)
     {
         if (nC%2 == 0)
         {
-            XFPoint 
aCtrl1(static_cast<double>(m_aVector[nPtIndex].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-                static_cast<double>(m_aVector[nPtIndex].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+            XFPoint aCtrl1(LwpTools::ConvertFromTwips(m_aVector[nPtIndex].x) * 
m_pTransData->fScaleX,
+                           LwpTools::ConvertFromTwips(m_aVector[nPtIndex].y) * 
m_pTransData->fScaleY);
             nPtIndex++;
-            XFPoint 
aCtrl2(static_cast<double>(m_aVector[nPtIndex].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-                static_cast<double>(m_aVector[nPtIndex].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+            XFPoint aCtrl2(LwpTools::ConvertFromTwips(m_aVector[nPtIndex].x) * 
m_pTransData->fScaleX,
+                           LwpTools::ConvertFromTwips(m_aVector[nPtIndex].y) * 
m_pTransData->fScaleY);
             nPtIndex++;
-            XFPoint 
aDest(static_cast<double>(m_aVector[nPtIndex].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-                static_cast<double>(m_aVector[nPtIndex].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+            XFPoint aDest(LwpTools::ConvertFromTwips(m_aVector[nPtIndex].x) * 
m_pTransData->fScaleX,
+                          LwpTools::ConvertFromTwips(m_aVector[nPtIndex].y) * 
m_pTransData->fScaleY);
             nPtIndex++;
 
             pRoundedRect->CurveTo(aDest, aCtrl1, aCtrl2);
         }
         else
         {
-            XFPoint 
aDest(static_cast<double>(m_aVector[nPtIndex].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-                static_cast<double>(m_aVector[nPtIndex].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+            XFPoint aDest(LwpTools::ConvertFromTwips(m_aVector[nPtIndex].x) * 
m_pTransData->fScaleX,
+                          LwpTools::ConvertFromTwips(m_aVector[nPtIndex].y) * 
m_pTransData->fScaleY);
             nPtIndex++;
 
             pRoundedRect->LineTo(aDest);
         }
     }
 
-    
pRoundedRect->LineTo(XFPoint(static_cast<double>(m_aVector[0].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-                static_cast<double>(m_aVector[0].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+    pRoundedRect->LineTo(XFPoint(LwpTools::ConvertFromTwips(m_aVector[0].x) * 
m_pTransData->fScaleX,
+                                 LwpTools::ConvertFromTwips(m_aVector[0].y) * 
m_pTransData->fScaleY));
     pRoundedRect->ClosePath();
     SetPosition(pRoundedRect);
 
@@ -792,9 +796,9 @@ rtl::Reference<XFFrame> 
LwpDrawRectangle::CreateStandardDrawObj(const  OUString&
         fWidth = aOriginalRect.GetWidth();
         fHeight = aOriginalRect.GetHeight();
 
-        xRect->SetStartPoint(XFPoint(fStartX/TWIPS_PER_CM + 
m_pTransData->fOffsetX,
-            fStartY/TWIPS_PER_CM + m_pTransData->fOffsetY));
-        xRect->SetSize(fWidth/TWIPS_PER_CM, fHeight/TWIPS_PER_CM);
+        xRect->SetStartPoint(XFPoint(LwpTools::ConvertFromTwips(fStartX) + 
m_pTransData->fOffsetX,
+                                     LwpTools::ConvertFromTwips(fStartY) + 
m_pTransData->fOffsetY));
+        xRect->SetSize(LwpTools::ConvertFromTwips(fWidth), 
LwpTools::ConvertFromTwips(fHeight));
 
         if (aSdwRect.IsRectRotated())
         {
@@ -848,19 +852,19 @@ OUString LwpDrawEllipse::RegisterStyle()
 rtl::Reference<XFFrame> LwpDrawEllipse::CreateDrawObj(const OUString& 
rStyleName )
 {
     rtl::Reference<XFDrawPath> xEllipse(new XFDrawPath());
-    xEllipse->MoveTo(XFPoint(static_cast<double>(m_aVector[0].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[0].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
+    xEllipse->MoveTo(XFPoint(LwpTools::ConvertFromTwips(m_aVector[0].x) * 
m_pTransData->fScaleX,
+                             LwpTools::ConvertFromTwips(m_aVector[0].y) * 
m_pTransData->fScaleY));
     sal_uInt8 nPtIndex = 1;
     for (sal_uInt8 nC = 0; nC < 4; nC++)
     {
-        XFPoint aCtrl1(static_cast<double>(m_aVector[nPtIndex].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[nPtIndex].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+        XFPoint aCtrl1(LwpTools::ConvertFromTwips(m_aVector[nPtIndex].x) * 
m_pTransData->fScaleX,
+                       LwpTools::ConvertFromTwips(m_aVector[nPtIndex].y) * 
m_pTransData->fScaleY);
         nPtIndex++;
-        XFPoint aCtrl2(static_cast<double>(m_aVector[nPtIndex].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[nPtIndex].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+        XFPoint aCtrl2(LwpTools::ConvertFromTwips(m_aVector[nPtIndex].x) * 
m_pTransData->fScaleX,
+                       LwpTools::ConvertFromTwips(m_aVector[nPtIndex].y) * 
m_pTransData->fScaleY);
         nPtIndex++;
-        XFPoint aDest(static_cast<double>(m_aVector[nPtIndex].x)/TWIPS_PER_CM 
* m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[nPtIndex].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+        XFPoint aDest(LwpTools::ConvertFromTwips(m_aVector[nPtIndex].x) * 
m_pTransData->fScaleX,
+                      LwpTools::ConvertFromTwips(m_aVector[nPtIndex].y) * 
m_pTransData->fScaleY);
         nPtIndex++;
 
         xEllipse->CurveTo(aDest, aCtrl1, aCtrl2);
@@ -927,14 +931,14 @@ OUString LwpDrawArc::RegisterStyle()
 rtl::Reference<XFFrame> LwpDrawArc::CreateDrawObj(const OUString& rStyleName )
 {
     rtl::Reference<XFDrawPath> xArc(new XFDrawPath());
-    xArc->MoveTo(XFPoint(static_cast<double>(m_aVector[0].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[0].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY));
-    XFPoint aDest(static_cast<double>(m_aVector[3].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[3].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
-    XFPoint aCtl1(static_cast<double>(m_aVector[1].x)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[1].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
-    XFPoint aCtl2(static_cast<double>(m_aVector[2].x)/TWIPS_PER_CM* 
m_pTransData->fScaleX,
-        static_cast<double>(m_aVector[2].y)/TWIPS_PER_CM * 
m_pTransData->fScaleY);
+    xArc->MoveTo(XFPoint(LwpTools::ConvertFromTwips(m_aVector[0].x) * 
m_pTransData->fScaleX,
+                         LwpTools::ConvertFromTwips(m_aVector[0].y) * 
m_pTransData->fScaleY));
+    XFPoint aDest(LwpTools::ConvertFromTwips(m_aVector[3].x) * 
m_pTransData->fScaleX,
+                  LwpTools::ConvertFromTwips(m_aVector[3].y) * 
m_pTransData->fScaleY);
+    XFPoint aCtl1(LwpTools::ConvertFromTwips(m_aVector[1].x) * 
m_pTransData->fScaleX,
+                  LwpTools::ConvertFromTwips(m_aVector[1].y) * 
m_pTransData->fScaleY);
+    XFPoint aCtl2(LwpTools::ConvertFromTwips(m_aVector[2].x) * 
m_pTransData->fScaleX,
+                  LwpTools::ConvertFromTwips(m_aVector[2].y) * 
m_pTransData->fScaleY);
     xArc->CurveTo(aDest, aCtl1, aCtl2);
 
     SetPosition(xArc.get());
@@ -1145,8 +1149,8 @@ void LwpDrawTextArt::CreateFWPath(XFDrawPath* pPath)
     sal_Int16 nX, nY;
     nX = (m_aTextArtRec.aPath[0].aPts[0].x + m_aTextArtRec.aPath[1].aPts[0].x) 
/ 2;
     nY = (m_aTextArtRec.aPath[0].aPts[0].y + m_aTextArtRec.aPath[1].aPts[0].y) 
/ 2;
-    XFPoint aStart(static_cast<double>(nX)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-        static_cast<double>(nY)/TWIPS_PER_CM * m_pTransData->fScaleY);
+    XFPoint aStart(LwpTools::ConvertFromTwips(nX) * m_pTransData->fScaleX,
+                   LwpTools::ConvertFromTwips(nY) * m_pTransData->fScaleY);
     pPath->MoveTo(aStart);
 
     sal_uInt8 nPtIndex = 1;
@@ -1154,20 +1158,20 @@ void LwpDrawTextArt::CreateFWPath(XFDrawPath* pPath)
     {
         nX = (m_aTextArtRec.aPath[0].aPts.at(nPtIndex).x + 
m_aTextArtRec.aPath[1].aPts.at(nPtIndex).x) / 2;
         nY = (m_aTextArtRec.aPath[0].aPts.at(nPtIndex).y + 
m_aTextArtRec.aPath[1].aPts.at(nPtIndex).y) / 2;
-        XFPoint aCtrl1(static_cast<double>(nX)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-            static_cast<double>(nY)/TWIPS_PER_CM * m_pTransData->fScaleY);
+        XFPoint aCtrl1(LwpTools::ConvertFromTwips(nX) * m_pTransData->fScaleX,
+                       LwpTools::ConvertFromTwips(nY) * m_pTransData->fScaleY);
 
         nPtIndex++;
         nX = (m_aTextArtRec.aPath[0].aPts.at(nPtIndex).x + 
m_aTextArtRec.aPath[1].aPts.at(nPtIndex).x) / 2;
         nY = (m_aTextArtRec.aPath[0].aPts.at(nPtIndex).y + 
m_aTextArtRec.aPath[1].aPts.at(nPtIndex).y) / 2;
-        XFPoint aCtrl2(static_cast<double>(nX)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-            static_cast<double>(nY)/TWIPS_PER_CM * m_pTransData->fScaleY);
+        XFPoint aCtrl2(LwpTools::ConvertFromTwips(nX) * m_pTransData->fScaleX,
+                       LwpTools::ConvertFromTwips(nY) * m_pTransData->fScaleY);
 
         nPtIndex++;
         nX = (m_aTextArtRec.aPath[0].aPts.at(nPtIndex).x + 
m_aTextArtRec.aPath[1].aPts.at(nPtIndex).x) / 2;
         nY = (m_aTextArtRec.aPath[0].aPts.at(nPtIndex).y + 
m_aTextArtRec.aPath[1].aPts.at(nPtIndex).y) / 2;
-        XFPoint aDest(static_cast<double>(nX)/TWIPS_PER_CM * 
m_pTransData->fScaleX,
-            static_cast<double>(nY)/TWIPS_PER_CM * m_pTransData->fScaleY);
+        XFPoint aDest(LwpTools::ConvertFromTwips(nX) * m_pTransData->fScaleX,
+                      LwpTools::ConvertFromTwips(nY) * m_pTransData->fScaleY);
 
         pPath->CurveTo(aDest, aCtrl1, aCtrl2);
     }
diff --git a/lotuswordpro/source/filter/lwpframelayout.cxx 
b/lotuswordpro/source/filter/lwpframelayout.cxx
index 7c983b01aace..4cb6efb677be 100644
--- a/lotuswordpro/source/filter/lwpframelayout.cxx
+++ b/lotuswordpro/source/filter/lwpframelayout.cxx
@@ -594,8 +594,8 @@ void LwpFrame::ParseAnchorType(XFFrame* pXFFrame)
     if (pLayoutGeo)
     {
         LwpPoint aPoint = pLayoutGeo->GetOrigin();
-        fXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX());
-        fYOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetY());
+        fXOffset = LwpTools::ConvertFromUnits(aPoint.GetX());
+        fYOffset = LwpTools::ConvertFromUnits(aPoint.GetY());
     }
     //set anchor type
     eAnchor = enumXFAnchorNone;
@@ -670,7 +670,7 @@ void LwpFrame::ParseAnchorType(XFFrame* pXFFrame)
                 //experiential value
                 fYOffset = -(m_pLayout->GetGeometryHeight()
                              + 2 * m_pLayout->GetExtMarginsValue(MARGIN_BOTTOM)
-                             - LwpTools::ConvertFromUnitsToMetric(nOffset));
+                             - LwpTools::ConvertFromUnits(nOffset));
             }
             break;
         }
@@ -690,7 +690,8 @@ void LwpFrame::ParseAnchorType(XFFrame* pXFFrame)
             rtl::Reference<XFFont> pFont = m_pLayout->GetFont();
             if (pFont.is())
             {
-                offset = static_cast<double>(pFont->GetFontSize()) * 
CM_PER_INCH / POINTS_PER_INCH;
+                offset = o3tl::convert<double>(pFont->GetFontSize(), 
o3tl::Length::pt,
+                                               o3tl::Length::cm);
             }
             fYOffset = offset - fYOffset;
             break;
@@ -716,7 +717,7 @@ bool LwpFrame::IsLeftWider()
     if (!pParent)
         return false;
     LwpPoint aPoint = m_pLayout->GetOrigin();
-    double fXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX());
+    double fXOffset = LwpTools::ConvertFromUnits(aPoint.GetX());
     double fWidth = m_pLayout->GetWidth();
     double fWrapLeft = m_pLayout->GetExtMarginsValue(MARGIN_LEFT);
     double fWrapRight = m_pLayout->GetExtMarginsValue(MARGIN_RIGHT);
@@ -944,7 +945,7 @@ double LwpFrameLayout::GetMaxWidth()
     if (pParent)
     {
         LwpPoint aPoint = GetOrigin();
-        double fXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX());
+        double fXOffset = LwpTools::ConvertFromUnits(aPoint.GetX());
         double fWrapRight = GetExtMarginsValue(MARGIN_RIGHT);
 
         //Get parent layout width
diff --git a/lotuswordpro/source/filter/lwpgrfobj.cxx 
b/lotuswordpro/source/filter/lwpgrfobj.cxx
index 202e662ae02f..066e3eec24f8 100644
--- a/lotuswordpro/source/filter/lwpgrfobj.cxx
+++ b/lotuswordpro/source/filter/lwpgrfobj.cxx
@@ -424,8 +424,8 @@ void LwpGraphicObject::CreateGrafObject()
         LwpLayoutGeometry* pFrameGeo = pMyFrameLayout->GetGeometry();
 
         // original image size
-        double fOrgGrafWidth = static_cast<double>(m_Cache.Width)/TWIPS_PER_CM;
-        double fOrgGrafHeight = 
static_cast<double>(m_Cache.Height)/TWIPS_PER_CM;
+        double fOrgGrafWidth = LwpTools::ConvertFromTwips(m_Cache.Width);
+        double fOrgGrafHeight = LwpTools::ConvertFromTwips(m_Cache.Height);
 
         // get margin values
         double fLeftMargin = pMyFrameLayout->GetMarginsValue(MARGIN_LEFT);
@@ -439,8 +439,8 @@ void LwpGraphicObject::CreateGrafObject()
                 throw o3tl::divide_by_zero();
 
             // frame size
-            double fFrameWidth = 
LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetWidth());
-            double fFrameHeight = 
LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetHeight());
+            double fFrameWidth = 
LwpTools::ConvertFromUnits(pFrameGeo->GetWidth());
+            double fFrameHeight = 
LwpTools::ConvertFromUnits(pFrameGeo->GetHeight());
 
             // calculate the displayed size of the frame
             double fDisFrameWidth = fFrameWidth - (fLeftMargin+fRightMargin);
@@ -454,8 +454,8 @@ void LwpGraphicObject::CreateGrafObject()
             sal_uInt16 nScalemode = pMyScale->GetScaleMode();
             if (nScalemode & LwpLayoutScale::CUSTOM)
             {
-                fSclGrafWidth = 
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth());
-                fSclGrafHeight = 
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight());
+                fSclGrafWidth = 
LwpTools::ConvertFromUnits(pMyScale->GetScaleWidth());
+                fSclGrafHeight = 
LwpTools::ConvertFromUnits(pMyScale->GetScaleHeight());
             }
             else if (nScalemode & LwpLayoutScale::PERCENTAGE)
             {
@@ -544,8 +544,8 @@ void LwpGraphicObject::CreateGrafObject()
 
                 // get image position offset
                 LwpPoint& rOffset = pMyScale->GetOffset();
-                double fOffsetX = 
LwpTools::ConvertFromUnitsToMetric(rOffset.GetX());
-                double fOffsetY = 
LwpTools::ConvertFromUnitsToMetric(rOffset.GetY());
+                double fOffsetX = LwpTools::ConvertFromUnits(rOffset.GetX());
+                double fOffsetY = LwpTools::ConvertFromUnits(rOffset.GetY());
 
                 struct LwpRect
                 {
@@ -686,8 +686,8 @@ void LwpGraphicObject::XFConvertEquation(XFContentContainer 
* pCont)
 void LwpGraphicObject::GetGrafOrgSize(double & rWidth, double & rHeight)
 {
     // original image size
-    rWidth = static_cast<double>(m_Cache.Width)/TWIPS_PER_CM;
-    rHeight = static_cast<double>(m_Cache.Height)/TWIPS_PER_CM;
+    rWidth = LwpTools::ConvertFromTwips(m_Cache.Width);
+    rHeight = LwpTools::ConvertFromTwips(m_Cache.Height);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/lotuswordpro/source/filter/lwplayout.cxx 
b/lotuswordpro/source/filter/lwplayout.cxx
index bc71d3324405..a0230a62aba2 100644
--- a/lotuswordpro/source/filter/lwplayout.cxx
+++ b/lotuswordpro/source/filter/lwplayout.cxx
@@ -131,7 +131,7 @@ double LwpVirtualLayout::GetColGap(sal_uInt16 /*nIndex*/)
 {
     //return DEFAULTGAPSIZE;
     //return LwpTools::ConvertToMetric(0.17);//DEFAULTGAPSIZE=0.17
-    return LwpTools::ConvertToMetric(0.17);
+    return o3tl::convert(0.17, o3tl::Length::in, o3tl::Length::cm);
 }
 
 /**
@@ -662,7 +662,7 @@ double LwpMiddleLayout::GetGeometryHeight()
     LwpLayoutGeometry* pGeo = GetGeometry();
     if (pGeo)
     {
-        return LwpTools::ConvertFromUnitsToMetric(pGeo->GetHeight());
+        return LwpTools::ConvertFromUnits(pGeo->GetHeight());
     }
     else
         return -1;
@@ -677,7 +677,7 @@ double LwpMiddleLayout::GetGeometryWidth()
     LwpLayoutGeometry* pGeo = GetGeometry();
     if (pGeo)
     {
-        return LwpTools::ConvertFromUnitsToMetric(pGeo->GetWidth());
+        return LwpTools::ConvertFromUnits(pGeo->GetWidth());
     }
     else
         return -1;
diff --git a/lotuswordpro/source/filter/lwplaypiece.hxx 
b/lotuswordpro/source/filter/lwplaypiece.hxx
index e05910041241..3e5080915d0d 100644
--- a/lotuswordpro/source/filter/lwplaypiece.hxx
+++ b/lotuswordpro/source/filter/lwplaypiece.hxx
@@ -217,7 +217,7 @@ class LwpColumnInfo
 public:
     LwpColumnInfo();
     void Read(LwpObjectStream* pStrm);
-    double GetGap() { return LwpTools::ConvertFromUnitsToMetric(m_nGap); }
+    double GetGap() { return LwpTools::ConvertFromUnits(m_nGap); }
 
 private:
     sal_Int32 m_nWidth;
diff --git a/lotuswordpro/source/filter/lwplnopts.cxx 
b/lotuswordpro/source/filter/lwplnopts.cxx
index 566db68b37c6..de7824892fe8 100644
--- a/lotuswordpro/source/filter/lwplnopts.cxx
+++ b/lotuswordpro/source/filter/lwplnopts.cxx
@@ -78,7 +78,7 @@ void LwpLineNumberOptions::RegisterStyle()
         return;
     XFLineNumberConfig* pLineNumber = new XFLineNumberConfig;
     pLineNumber->SetNumberPosition(enumXFLineNumberLeft);
-    
pLineNumber->SetNumberOffset(LwpTools::ConvertFromUnitsToMetric(m_nDistance));
+    pLineNumber->SetNumberOffset(LwpTools::ConvertFromUnits(m_nDistance));
     pLineNumber->SetNumberIncrement(m_nSeparator);
     if (m_nFlags & LN_RESETEACHPAGE)
         pLineNumber->SetRestartOnPage();
diff --git a/lotuswordpro/source/filter/lwpmargins.hxx 
b/lotuswordpro/source/filter/lwpmargins.hxx
index 7095b3b81f20..2a5f49fb5b2f 100644
--- a/lotuswordpro/source/filter/lwpmargins.hxx
+++ b/lotuswordpro/source/filter/lwpmargins.hxx
@@ -91,13 +91,13 @@ inline double LwpMargins::GetMarginsValue(sal_uInt8 
nWhichSide)
     switch (nWhichSide)
     {
     case MARGIN_LEFT://left
-        return LwpTools::ConvertFromUnitsToMetric(m_nLeft);
+        return LwpTools::ConvertFromUnits(m_nLeft);
     case MARGIN_RIGHT://right
-        return LwpTools::ConvertFromUnitsToMetric(m_nRight);
+        return LwpTools::ConvertFromUnits(m_nRight);
     case MARGIN_TOP://top
-        return LwpTools::ConvertFromUnitsToMetric(m_nTop);
+        return LwpTools::ConvertFromUnits(m_nTop);
     case MARGIN_BOTTOM://bottom
-        return LwpTools::ConvertFromUnitsToMetric(m_nBottom);
+        return LwpTools::ConvertFromUnits(m_nBottom);
     }
     // FIXME: this is needed to avoid warning: control reaches end of non-void 
function
     //        a better solution would be to enum value for the parameter side
diff --git a/lotuswordpro/source/filter/lwpoleobject.cxx 
b/lotuswordpro/source/filter/lwpoleobject.cxx
index 10712e294a56..0530a7bedcd9 100644
--- a/lotuswordpro/source/filter/lwpoleobject.cxx
+++ b/lotuswordpro/source/filter/lwpoleobject.cxx
@@ -122,8 +122,8 @@ void LwpGraphicOleObject::GetGrafScaledSize(double& fWidth, 
double& fHeight)
         if (pMyScale && pFrameGeo)
         {
             // frame size
-            double fFrameWidth = 
LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetWidth());
-            double fFrameHeight = 
LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetHeight());
+            double fFrameWidth = 
LwpTools::ConvertFromUnits(pFrameGeo->GetWidth());
+            double fFrameHeight = 
LwpTools::ConvertFromUnits(pFrameGeo->GetHeight());
 
             // calculate the displayed size of the frame
             double fDisFrameWidth = fFrameWidth - (fLeftMargin + fRightMargin);
@@ -133,8 +133,8 @@ void LwpGraphicOleObject::GetGrafScaledSize(double& fWidth, 
double& fHeight)
             sal_uInt16 nScalemode = pMyScale->GetScaleMode();
             if (nScalemode & LwpLayoutScale::CUSTOM)
             {
-                fSclGrafWidth = 
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth());
-                fSclGrafHeight = 
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight());
+                fSclGrafWidth = 
LwpTools::ConvertFromUnits(pMyScale->GetScaleWidth());
+                fSclGrafHeight = 
LwpTools::ConvertFromUnits(pMyScale->GetScaleHeight());
             }
             else if (nScalemode & LwpLayoutScale::PERCENTAGE)
             {
diff --git a/lotuswordpro/source/filter/lwppagelayout.cxx 
b/lotuswordpro/source/filter/lwppagelayout.cxx
index 69e25d0299bc..e2505d30f70d 100644
--- a/lotuswordpro/source/filter/lwppagelayout.cxx
+++ b/lotuswordpro/source/filter/lwppagelayout.cxx
@@ -281,12 +281,12 @@ void LwpPageLayout::ParseFootNoteSeparator(XFPageMaster* 
pm1)
             throw o3tl::divide_by_zero();
 
         nLengthPercent = static_cast<sal_uInt32>(
-            100 * LwpTools::ConvertFromUnitsToMetric(rFootnoteSep.GetLength()) 
/ fMarginWidth);
+            100 * LwpTools::ConvertFromUnits(rFootnoteSep.GetLength()) / 
fMarginWidth);
         if (nLengthPercent > 100)
             nLengthPercent = 100;
     }
-    double fAbove = 
LwpTools::ConvertFromUnitsToMetric(rFootnoteSep.GetAbove());
-    double fBelow = 
LwpTools::ConvertFromUnitsToMetric(rFootnoteSep.GetBelow());
+    double fAbove = LwpTools::ConvertFromUnits(rFootnoteSep.GetAbove());
+    double fBelow = LwpTools::ConvertFromUnits(rFootnoteSep.GetBelow());
     LwpColor aColor = rFootnoteSep.GetTopBorderColor();
     enumXFAlignType eAlignType = enumXFAlignStart;
     if (rFootnoteSep.GetIndent() > 0)
@@ -297,7 +297,7 @@ void LwpPageLayout::ParseFootNoteSeparator(XFPageMaster* 
pm1)
 
         //SODC don't support indent
         sal_uInt32 nIndentPercent = static_cast<sal_uInt32>(
-            100 * LwpTools::ConvertFromUnitsToMetric(rFootnoteSep.GetIndent()) 
/ fMarginWidth);
+            100 * LwpTools::ConvertFromUnits(rFootnoteSep.GetIndent()) / 
fMarginWidth);
         if (nIndentPercent + nLengthPercent >= 100)
             eAlignType = enumXFAlignEnd;
     }
diff --git a/lotuswordpro/source/filter/lwpparastyle.cxx 
b/lotuswordpro/source/filter/lwpparastyle.cxx
index fdec20bc31a3..486f3e1e496a 100644
--- a/lotuswordpro/source/filter/lwpparastyle.cxx
+++ b/lotuswordpro/source/filter/lwpparastyle.cxx
@@ -435,8 +435,8 @@ void LwpParaStyle::ApplyIndent(LwpPara* pPara, XFParaStyle* 
pParaStyle, const Lw
         {
             
pTotalIndent->SetMAll(o3tl::saturating_add(pParentIndent->GetMAll(), 
pTotalIndent->GetMAll()));
             
pTotalIndent->SetMRight(o3tl::saturating_add(pParentIndent->GetMRight(), 
pTotalIndent->GetMRight()));
-            
pParaStyle->SetMargins(LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(
-                pTotalIndent->GetMAll())), pTotalIndent->GetRight());
+            pParaStyle->SetMargins(LwpTools::ConvertFromUnits(
+                pTotalIndent->GetMAll()), pTotalIndent->GetRight());
             pPara->SetIndent(pTotalIndent.release());
             return;
         }
@@ -461,8 +461,8 @@ void LwpParaStyle::ApplyIndent(LwpPara* pPara, XFParaStyle* 
pParaStyle, const Lw
         pTotalIndent.reset(pIndent->clone());
         if (pPara && pPara->GetBulletFlag())
         {
-            pParaStyle->SetMargins(LwpTools::ConvertToMetric(
-                LwpTools::ConvertFromUnits(pIndent->GetMAll())), 
pIndent->GetRight());
+            pParaStyle->SetMargins(
+                LwpTools::ConvertFromUnits(pIndent->GetMAll()), 
pIndent->GetRight());
             pPara->SetIndent(pTotalIndent.release());
             return;
         }
@@ -500,14 +500,14 @@ void LwpParaStyle::ApplySpacing(LwpPara* pPara, 
XFParaStyle* pParaStyle, LwpSpac
     case LwpSpacingCommonOverride::SPACING_LEADING:
     {
     xftype = enumLHSpace;
-    height = LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(amount));
+    height = LwpTools::ConvertFromUnits(amount);
     pParaStyle->SetLineHeight(xftype,height);
     }
         break;
     case LwpSpacingCommonOverride::SPACING_CUSTOM:
     {
         xftype = enumLHHeight;
-        height =  
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount)));
+        height = LwpTools::ConvertFromUnits(multiple / 65536.0 * amount);
         pParaStyle->SetLineHeight(xftype,height);
     }
         break;
@@ -528,7 +528,7 @@ void LwpParaStyle::ApplySpacing(LwpPara* pPara, 
XFParaStyle* pParaStyle, LwpSpac
     case LwpSpacingCommonOverride::SPACING_LEADING:
         break;
     case LwpSpacingCommonOverride::SPACING_CUSTOM:
-        above_val =  
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount)));
+        above_val = LwpTools::ConvertFromUnits(multiple / 65536.0 * amount);
         break;
     case LwpSpacingCommonOverride::SPACING_NONE:
         break;
@@ -545,7 +545,7 @@ void LwpParaStyle::ApplySpacing(LwpPara* pPara, 
XFParaStyle* pParaStyle, LwpSpac
     case LwpSpacingCommonOverride::SPACING_LEADING:
         break;
     case LwpSpacingCommonOverride::SPACING_CUSTOM:
-        below_val =  
LwpTools::ConvertToMetric(LwpTools::ConvertFromUnits(sal_Int32(float(multiple)/65536L*amount)));
+        below_val = LwpTools::ConvertFromUnits(multiple / 65536.0 * amount);
         break;
     case LwpSpacingCommonOverride::SPACING_NONE:
         break;
@@ -613,7 +613,7 @@ void LwpParaStyle::ApplyTab(XFParaStyle *pParaStyle, 
LwpTabOverride *pTabOverRid
         //get position
         sal_uInt32 nPos = pTab->GetPosition();
         //different feature between SODC and lwp, the tab length must minus 
the margin left of para.
-        double fLen = LwpTools::ConvertFromUnitsToMetric(nPos) - dMarginLeft;
+        double fLen = LwpTools::ConvertFromUnits(nPos) - dMarginLeft;
 
         //get leader type
         sal_Unicode cLeader = 0x00;
diff --git a/lotuswordpro/source/filter/lwprowlayout.cxx 
b/lotuswordpro/source/filter/lwprowlayout.cxx
index d63a06fe9e38..de06c6b98aed 100644
--- a/lotuswordpro/source/filter/lwprowlayout.cxx
+++ b/lotuswordpro/source/filter/lwprowlayout.cxx
@@ -121,11 +121,11 @@ void LwpRowLayout::RegisterStyle()
 
     if (m_nDirection & 0x0030)
     {
-        
pRowStyle->SetMinRowHeight(static_cast<float>(LwpTools::ConvertFromUnitsToMetric(cheight)));
+        pRowStyle->SetMinRowHeight(LwpTools::ConvertFromUnits(cheight));
     }
     else
     {
-        
pRowStyle->SetRowHeight(static_cast<float>(LwpTools::ConvertFromUnitsToMetric(cheight)));
+        pRowStyle->SetRowHeight(LwpTools::ConvertFromUnits(cheight));
     }
     XFStyleManager* pXFStyleManager = 
LwpGlobalMgr::GetInstance()->GetXFStyleManager();
     m_StyleName = 
pXFStyleManager->AddStyle(std::move(pRowStyle)).m_pStyle->GetStyleName();
diff --git a/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx 
b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx
index db51eb39e035..c5aa189c3596 100644
--- a/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx
+++ b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx
@@ -125,21 +125,21 @@ void 
LwpSdwGroupLoaderV0102::BeginDrawObjects(std::vector< rtl::Reference<XFFram
             // original drawing size
             tools::Long nWidth = 0, nHeight = 0;
             m_pGraphicObj->GetGrafOrgSize(nWidth, nHeight);
-            double fGrafOrgWidth = static_cast<double>(nWidth)/TWIPS_PER_CM;
-            double fGrafOrgHeight = static_cast<double>(nHeight)/TWIPS_PER_CM;
+            double fGrafOrgWidth = LwpTools::ConvertFromTwips(nWidth);
+            double fGrafOrgHeight = LwpTools::ConvertFromTwips(nHeight);
 
             // get margin values
             double fLeftMargin = xMyFrameLayout->GetMarginsValue(MARGIN_LEFT);
             double fTopMargin = xMyFrameLayout->GetMarginsValue(MARGIN_TOP);
 
             // frame size
-            double fFrameWidth = 
LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetWidth());
-            double fFrameHeight = 
LwpTools::ConvertFromUnitsToMetric(pFrameGeo->GetHeight());
+            double fFrameWidth = 
LwpTools::ConvertFromUnits(pFrameGeo->GetWidth());
+            double fFrameHeight = 
LwpTools::ConvertFromUnits(pFrameGeo->GetHeight());
 
             // get frame offset
             LwpPoint& rOffset = pMyScale->GetOffset();
-            double fOffsetX = 
LwpTools::ConvertFromUnitsToMetric(rOffset.GetX());
-            double fOffsetY = 
LwpTools::ConvertFromUnitsToMetric(rOffset.GetY());
+            double fOffsetX = LwpTools::ConvertFromUnits(rOffset.GetX());
+            double fOffsetY = LwpTools::ConvertFromUnits(rOffset.GetY());
 
             // get scale mode
             sal_uInt16 nScalemode = pMyScale->GetScaleMode();
@@ -147,9 +147,9 @@ void LwpSdwGroupLoaderV0102::BeginDrawObjects(std::vector< 
rtl::Reference<XFFram
             if (nScalemode & LwpLayoutScale::CUSTOM)
             {
                 m_aTransformData.fScaleX =
-                    
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth()) / fGrafOrgWidth;
+                    LwpTools::ConvertFromUnits(pMyScale->GetScaleWidth()) / 
fGrafOrgWidth;
                 m_aTransformData.fScaleY =
-                    
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight()) / fGrafOrgHeight;
+                    LwpTools::ConvertFromUnits(pMyScale->GetScaleHeight()) / 
fGrafOrgHeight;
             }
             else if (nScalemode & LwpLayoutScale::PERCENTAGE)
             {
@@ -159,11 +159,11 @@ void 
LwpSdwGroupLoaderV0102::BeginDrawObjects(std::vector< rtl::Reference<XFFram
             }
             else if (nScalemode & LwpLayoutScale::FIT_IN_FRAME)
             {
-                double fWidth0 = static_cast<double>(right) / TWIPS_PER_CM;
-                double fHeight0 = static_cast<double>(bottom) / TWIPS_PER_CM;
+                double fWidth0 = LwpTools::ConvertFromTwips(right);
+                double fHeight0 = LwpTools::ConvertFromTwips(bottom);
 
-                double fWidth1 = 
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleWidth());
-                double fHeight1 = 
LwpTools::ConvertFromUnitsToMetric(pMyScale->GetScaleHeight());
+                double fWidth1 = 
LwpTools::ConvertFromUnits(pMyScale->GetScaleWidth());
+                double fHeight1 = 
LwpTools::ConvertFromUnits(pMyScale->GetScaleHeight());
 
                 double fScaleX = fWidth1 / fWidth0;
                 double fScaleY = fHeight1 / fHeight0;
@@ -189,11 +189,11 @@ void 
LwpSdwGroupLoaderV0102::BeginDrawObjects(std::vector< rtl::Reference<XFFram
                     static_cast<tools::Long>(bottom * 
m_aTransformData.fScaleY));
                 Point aCenter = aBoundRect.Center();
 
-                double fNewCenterX = (double(left)/TWIPS_PER_CM + 
fFrameWidth/*-fOffsetX*/) / 2;
-                double fNewCenterY = (double(top)/TWIPS_PER_CM + 
fFrameHeight/*-fOffsetY*/) / 2;
+                double fNewCenterX = (LwpTools::ConvertFromTwips(left) + 
fFrameWidth/*-fOffsetX*/) / 2;
+                double fNewCenterY = (LwpTools::ConvertFromTwips(top) + 
fFrameHeight/*-fOffsetY*/) / 2;
 
-                m_aTransformData.fOffsetX = fNewCenterX - 
static_cast<double>(aCenter.X())/TWIPS_PER_CM;
-                m_aTransformData.fOffsetY = fNewCenterY 
-static_cast<double>(aCenter.Y())/TWIPS_PER_CM;
+                m_aTransformData.fOffsetX = fNewCenterX - 
LwpTools::ConvertFromTwips(aCenter.X());
+                m_aTransformData.fOffsetY = fNewCenterY - 
LwpTools::ConvertFromTwips(aCenter.Y());
             }
             else
             {
diff --git a/lotuswordpro/source/filter/lwpshadow.hxx 
b/lotuswordpro/source/filter/lwpshadow.hxx
index 7e38f78b23ba..d1ee9894029d 100644
--- a/lotuswordpro/source/filter/lwpshadow.hxx
+++ b/lotuswordpro/source/filter/lwpshadow.hxx
@@ -91,12 +91,12 @@ private:
 inline double   LwpShadow::GetOffsetX()
 {
     //  return 0.102;
-    return LwpTools::ConvertFromUnitsToMetric(m_nDirX);
+    return LwpTools::ConvertFromUnits(m_nDirX);
 }
 
 inline double   LwpShadow::GetOffsetY()
 {
-    return LwpTools::ConvertFromUnitsToMetric(m_nDirY);
+    return LwpTools::ConvertFromUnits(m_nDirY);
 }
 
 inline const LwpColor& LwpShadow::GetColor() const
diff --git a/lotuswordpro/source/filter/lwptable.hxx 
b/lotuswordpro/source/filter/lwptable.hxx
index 6139a351c594..68e7eb197e6b 100644
--- a/lotuswordpro/source/filter/lwptable.hxx
+++ b/lotuswordpro/source/filter/lwptable.hxx
@@ -110,8 +110,8 @@ public:
     virtual ~LwpTable() override;
 
     virtual void Parse(IXFStream* pOutputStream) override;
-    double GetWidth() {return LwpTools::ConvertFromUnitsToMetric(m_nWidth);}
-    double GetHeight() {return LwpTools::ConvertFromUnitsToMetric(m_nHeight);}
+    double GetWidth() { return LwpTools::ConvertFromUnits(m_nWidth); }
+    double GetHeight() { return LwpTools::ConvertFromUnits(m_nHeight); }
     LwpObjectID& GetDefaultCellStyle() {return m_DefaultCellStyle;}
     sal_uInt16 GetRow() const {return m_nRow;}
     sal_uInt16 GetColumn() const {return m_nColumn;}
diff --git a/lotuswordpro/source/filter/lwptablelayout.cxx 
b/lotuswordpro/source/filter/lwptablelayout.cxx
index b65bcc178de6..f36a553b16cf 100644
--- a/lotuswordpro/source/filter/lwptablelayout.cxx
+++ b/lotuswordpro/source/filter/lwptablelayout.cxx
@@ -258,7 +258,7 @@ double LwpSuperTableLayout::GetTableWidth()
 
     double dLeft    = GetMarginsValue(MARGIN_LEFT);
     double dRight   = GetMarginsValue(MARGIN_RIGHT);
-    return LwpTools::ConvertFromUnitsToMetric(nWidth)-dLeft-dRight;
+    return LwpTools::ConvertFromUnits(nWidth) - dLeft - dRight;
 
 }
 /**
@@ -342,7 +342,7 @@ void LwpSuperTableLayout::ApplyAlignment(XFTableStyle * 
pTableStyle)
     LwpPoint aPoint;
     if (LwpLayoutGeometry* pGeometry = GetGeometry())
         aPoint = pGeometry->GetOrigin();
-    double dXOffset = LwpTools::ConvertFromUnitsToMetric(aPoint.GetX());
+    double dXOffset = LwpTools::ConvertFromUnits(aPoint.GetX());
 
     // add left padding to alignment distance
     double dLeft = GetMarginsValue(MARGIN_LEFT);
diff --git a/lotuswordpro/source/filter/lwptablelayout.hxx 
b/lotuswordpro/source/filter/lwptablelayout.hxx
index 945d6ca5bce7..f54c82b8e1f9 100644
--- a/lotuswordpro/source/filter/lwptablelayout.hxx
+++ b/lotuswordpro/source/filter/lwptablelayout.hxx
@@ -244,7 +244,7 @@ public:
     virtual ~LwpColumnLayout() override;
     virtual LWP_LAYOUT_TYPE GetLayoutType () override { return 
LWP_COLUMN_LAYOUT;}
     sal_uInt32 GetColumnID() const {return ccolid;}
-    double GetWidth() override {return 
LwpTools::ConvertFromUnitsToMetric(cwidth);}
+    double GetWidth() override { return LwpTools::ConvertFromUnits(cwidth); }
     using LwpVirtualLayout::RegisterStyle;
     void RegisterStyle(double dCalculatedWidth);
     bool IsJustifiable() const {return (( m_nAttributes2 & STYLE2_JUSTIFIABLE) 
!= 0);}
diff --git a/lotuswordpro/source/filter/lwpverdocument.cxx 
b/lotuswordpro/source/filter/lwpverdocument.cxx
index 4a228a7a68ab..801f0f5d2df0 100644
--- a/lotuswordpro/source/filter/lwpverdocument.cxx
+++ b/lotuswordpro/source/filter/lwpverdocument.cxx
@@ -93,7 +93,7 @@ void LwpVerDocument::Read()
 void LwpVerDocument::RegisterStyle()
 {
     std::unique_ptr<XFDefaultParaStyle> pDefault(new XFDefaultParaStyle);
-    double len = static_cast<double>(m_nTabSpacing) / UNITS_PER_INCH * 
CM_PER_INCH;
+    double len = LwpTools::ConvertFromUnits(m_nTabSpacing);
     if (len < 0.001)
     {
         len = 1.27; //0.5 inch

Reply via email to