editeng/source/uno/unoipset.cxx | 12 ++-- include/tools/UnitConversion.hxx | 15 +++++ include/tools/helpers.hxx | 34 ------------ oox/source/drawingml/textparagraphpropertiescontext.cxx | 7 +- sc/qa/unit/helper/qahelper.cxx | 5 + sc/qa/unit/subsequent_filters-test.cxx | 7 +- sc/qa/unit/ucalc.cxx | 9 +-- sc/source/core/data/drwlayer.cxx | 45 ++++++++-------- sc/source/core/data/patattr.cxx | 14 ++-- sc/source/core/tool/docoptio.cxx | 4 - sc/source/filter/excel/xetable.cxx | 6 +- sc/source/filter/excel/xistyle.cxx | 3 - sc/source/filter/oox/stylesbuffer.cxx | 3 - sc/source/filter/oox/worksheethelper.cxx | 7 +- sc/source/ui/unoobj/cellsuno.cxx | 18 +++--- sc/source/ui/unoobj/defltuno.cxx | 4 - sc/source/ui/unoobj/docuno.cxx | 20 +++---- sc/source/ui/unoobj/styleuno.cxx | 8 +- sc/source/ui/view/cellsh3.cxx | 21 +++---- sc/source/ui/view/drawview.cxx | 13 ++-- sc/source/ui/view/tabvwsh2.cxx | 5 + svx/source/table/tablertfexporter.cxx | 3 - svx/source/table/tablertfimporter.cxx | 3 - svx/source/unodraw/unoshape.cxx | 9 +-- sw/qa/core/objectpositioning/objectpositioning.cxx | 4 - sw/qa/extras/ooxmlexport/ooxmlexport6.cxx | 12 ++-- sw/qa/extras/ooxmlexport/ooxmlexport7.cxx | 2 sw/source/core/doc/textboxhelper.cxx | 7 +- sw/source/filter/ww8/wrtw8esh.cxx | 5 + sw/source/filter/xml/xmlimp.cxx | 2 xmloff/source/transform/TransformerBase.cxx | 13 +--- 31 files changed, 155 insertions(+), 165 deletions(-)
New commits: commit d7e5fa3bd8f4240665f13994589f5e72d362c097 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Fri Feb 5 09:36:59 2021 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri Feb 5 17:04:00 2021 +0100 Make sanitiseMm100ToTwip simpler and more correct The result's absolute value is always smaller than n. Returning an uncorrected value taken from reversing multiplication and division order when intermediate value would overflow is better than arbitrary constant. Also further deduplicate Twips <-> 100th-mm conversion, and make sure they all are in a single header. Using conversion implementation that handles negatives correctly improves accuracy, as seen in unit tests; e.g. in testPictureEffectPreservation (the original doc had "dir" equal to "8100000", while we tested that it was "8076614" after roundtrip). Change-Id: Icd027af6238a9f45f916f53f8684506cc959e696 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110433 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/editeng/source/uno/unoipset.cxx b/editeng/source/uno/unoipset.cxx index 417e62d771e0..fc70a623d0ef 100644 --- a/editeng/source/uno/unoipset.cxx +++ b/editeng/source/uno/unoipset.cxx @@ -19,7 +19,7 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <svl/itemprop.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <editeng/unoipset.hxx> #include <svl/itempool.hxx> #include <svl/solar.hrc> @@ -271,19 +271,19 @@ void SvxUnoConvertToMM( const MapUnit eSourceMapUnit, uno::Any & rMetric ) throw switch( rMetric.getValueTypeClass() ) { case uno::TypeClass_BYTE: - rMetric <<= static_cast<sal_Int8>(TwipsToHMM(*o3tl::forceAccess<sal_Int8>(rMetric))); + rMetric <<= static_cast<sal_Int8>(convertTwipToMm100(*o3tl::forceAccess<sal_Int8>(rMetric))); break; case uno::TypeClass_SHORT: - rMetric <<= static_cast<sal_Int16>(TwipsToHMM(*o3tl::forceAccess<sal_Int16>(rMetric))); + rMetric <<= static_cast<sal_Int16>(convertTwipToMm100(*o3tl::forceAccess<sal_Int16>(rMetric))); break; case uno::TypeClass_UNSIGNED_SHORT: - rMetric <<= static_cast<sal_uInt16>(TwipsToHMM(*o3tl::forceAccess<sal_uInt16>(rMetric))); + rMetric <<= static_cast<sal_uInt16>(convertTwipToMm100(*o3tl::forceAccess<sal_uInt16>(rMetric))); break; case uno::TypeClass_LONG: - rMetric <<= static_cast<sal_Int32>(TwipsToHMM(*o3tl::forceAccess<sal_Int32>(rMetric))); + rMetric <<= static_cast<sal_Int32>(convertTwipToMm100(*o3tl::forceAccess<sal_Int32>(rMetric))); break; case uno::TypeClass_UNSIGNED_LONG: - rMetric <<= static_cast<sal_uInt32>(TwipsToHMM(*o3tl::forceAccess<sal_uInt32>(rMetric))); + rMetric <<= static_cast<sal_uInt32>(convertTwipToMm100(*o3tl::forceAccess<sal_uInt32>(rMetric))); break; default: SAL_WARN("editeng", "AW: Missing unit translation to 100th mm, " << OString::number(static_cast<sal_Int32>(rMetric.getValueTypeClass()))); diff --git a/include/tools/UnitConversion.hxx b/include/tools/UnitConversion.hxx index e78ef315b432..57f8e39119f0 100644 --- a/include/tools/UnitConversion.hxx +++ b/include/tools/UnitConversion.hxx @@ -11,17 +11,32 @@ #pragma once #include <sal/types.h> +#include <cassert> +#include <limits> constexpr sal_Int64 convertTwipToMm100(sal_Int64 n) { + assert(n < std::numeric_limits<sal_Int64>::max() / 127 + && n > std::numeric_limits<sal_Int64>::min() / 127); return (n >= 0) ? (n * 127 + 36) / 72 : (n * 127 - 36) / 72; } constexpr sal_Int64 convertMm100ToTwip(sal_Int64 n) { + assert(n < std::numeric_limits<sal_Int64>::max() / 72 + && n > std::numeric_limits<sal_Int64>::min() / 72); return (n >= 0) ? (n * 72 + 63) / 127 : (n * 72 - 63) / 127; } +constexpr sal_Int64 sanitiseMm100ToTwip(sal_Int64 n) +{ + if (n >= std::numeric_limits<sal_Int64>::max() / 72 + || n <= std::numeric_limits<sal_Int64>::min() / 72) + return n / 127 * 72; // do without correction; can not overflow here + else + return convertMm100ToTwip(n); +} + constexpr sal_Int64 convertPointToTwip(sal_Int64 nNumber) { return nNumber * 20; } constexpr sal_Int64 convertPointToMm100(sal_Int64 nNumber) diff --git a/include/tools/helpers.hxx b/include/tools/helpers.hxx index 381ecb206d18..abce49b3d469 100644 --- a/include/tools/helpers.hxx +++ b/include/tools/helpers.hxx @@ -98,38 +98,4 @@ template <typename T> [[nodiscard]] inline T NormAngle360(T angle) return angle; } -/** Convert 100th-mm to twips - - A twip is 1/20 of a point, one inch is equal to 72 points, and - one inch is 2,540 100th-mm. - - Thus: - twips = n * 72 / 2,540 / 20 - = n * 72 / 127 - - Adding 63 (half of 127) fixes truncation issues in int arithmetic. - - This formula is (n>=0) ? (n*72+63) / 127 : (n*72-63) / 127 - */ -inline sal_Int64 sanitiseMm100ToTwip(sal_Int64 n) -{ - if (n >= 0) - { - if (o3tl::checked_multiply<sal_Int64>(n, 72, n) || o3tl::checked_add<sal_Int64>(n, 63, n)) - n = SAL_MAX_INT64; - } - else - { - if (o3tl::checked_multiply<sal_Int64>(n, 72, n) || o3tl::checked_sub<sal_Int64>(n, 63, n)) - n = SAL_MIN_INT64; - } - return n / 127; // 127 is 2,540 100th-mm divided by 20pts -} - -/** -* Convert Twips <-> 100th-mm -*/ -inline constexpr sal_Int64 TwipsToHMM(sal_Int64 nTwips) { return (nTwips * 127 + 36) / 72; } -inline constexpr sal_Int64 HMMToTwips(sal_Int64 nHMM) { return (nHMM * 72 + 63) / 127; } - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/source/drawingml/textparagraphpropertiescontext.cxx b/oox/source/drawingml/textparagraphpropertiescontext.cxx index 6aa8fef0cd04..e7e77da8564f 100644 --- a/oox/source/drawingml/textparagraphpropertiescontext.cxx +++ b/oox/source/drawingml/textparagraphpropertiescontext.cxx @@ -29,6 +29,7 @@ #include <svx/unopage.hxx> #include <sal/log.hxx> #include <tools/diagnose_ex.h> +#include <tools/UnitConversion.hxx> #include <drawingml/colorchoicecontext.hxx> #include <drawingml/misccontexts.hxx> @@ -305,7 +306,7 @@ ContextHandlerRef TextParagraphPropertiesContext::onCreateContext( sal_Int32 aEl { TextSpacing& rSpacing = mrTextParagraphProperties.getParaTopMargin(); rSpacing.nUnit = TextSpacing::Unit::Points; - rSpacing.nValue = TwipsToHMM(oBefore.get()); + rSpacing.nValue = convertTwipToMm100(oBefore.get()); rSpacing.bHasValue = true; } else @@ -329,7 +330,7 @@ ContextHandlerRef TextParagraphPropertiesContext::onCreateContext( sal_Int32 aEl { TextSpacing& rSpacing = mrTextParagraphProperties.getParaBottomMargin(); rSpacing.nUnit = TextSpacing::Unit::Points; - rSpacing.nValue = TwipsToHMM(oAfter.get()); + rSpacing.nValue = convertTwipToMm100(oAfter.get()); rSpacing.bHasValue = true; } else @@ -359,7 +360,7 @@ ContextHandlerRef TextParagraphPropertiesContext::onCreateContext( sal_Int32 aEl else { rLineSpacing.nUnit = TextSpacing::Unit::Points; - rLineSpacing.nValue = TwipsToHMM(oLineSpacing.get()); + rLineSpacing.nValue = convertTwipToMm100(oLineSpacing.get()); } rLineSpacing.bHasValue = true; } diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx index aa691d53a754..ed13b7058786 100644 --- a/sc/qa/unit/helper/qahelper.cxx +++ b/sc/qa/unit/helper/qahelper.cxx @@ -19,6 +19,7 @@ #include <formulacell.hxx> #include <svx/svdpage.hxx> #include <svx/svdoole2.hxx> +#include <tools/UnitConversion.hxx> #include <tools/urlobj.hxx> #include <editeng/brushitem.hxx> #include <editeng/justifyitem.hxx> @@ -797,12 +798,12 @@ void ScBootstrapFixture::miscRowHeightsTest( TestParam const * aTestValues, unsi SCTAB nTab = aTestValues[ index ].pData[ i ].nTab; int nExpectedHeight = aTestValues[ index ].pData[ i ].nExpectedHeight; if ( nExpectedHeight == -1 ) - nExpectedHeight = TwipsToHMM( ScGlobal::GetStandardRowHeight() ); + nExpectedHeight = convertTwipToMm100(ScGlobal::GetStandardRowHeight()); bool bCheckOpt = ( ( aTestValues[ index ].pData[ i ].nCheck & CHECK_OPTIMAL ) == CHECK_OPTIMAL ); for ( ; nRow <= nEndRow; ++nRow ) { SAL_INFO( "sc.qa", " checking row " << nRow << " for height " << nExpectedHeight ); - int nHeight = TwipsToHMM( rDoc.GetRowHeight(nRow, nTab, false) ); + int nHeight = convertTwipToMm100(rDoc.GetRowHeight(nRow, nTab, false)); if ( bCheckOpt ) { bool bOpt = !(rDoc.GetRowFlags( nRow, nTab ) & CRFlags::ManualSize); diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index a8e62602713b..75d6e806f950 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -81,6 +81,7 @@ #include <com/sun/star/text/textfield/Type.hpp> #include <comphelper/scopeguard.hxx> +#include <tools/UnitConversion.hxx> #include <unotools/syslocaleoptions.hxx> #include "helper/qahelper.hxx" #include "helper/shared_test_impl.hxx" @@ -3093,7 +3094,7 @@ void ScFiltersTest::testOptimalHeightReset() ScDocument& rDoc = xDocSh->GetDocument(); // open document in read/write mode ( otherwise optimal height stuff won't // be triggered ) *and* you can't delete cell contents. - int nHeight = TwipsToHMM ( rDoc.GetRowHeight(nRow, nTab, false) ); + int nHeight = convertTwipToMm100(rDoc.GetRowHeight(nRow, nTab, false)); CPPUNIT_ASSERT_EQUAL(1236, nHeight); ScDocFunc &rFunc = xDocSh->GetDocFunc(); @@ -3106,14 +3107,14 @@ void ScFiltersTest::testOptimalHeightReset() CPPUNIT_ASSERT_MESSAGE("DeleteContents failed", bRet); // get the new height of A1 - nHeight = TwipsToHMM( rDoc.GetRowHeight(nRow, nTab, false) ); + nHeight = convertTwipToMm100(rDoc.GetRowHeight(nRow, nTab, false)); // set optimal height for empty row 2 std::vector<sc::ColRowSpan> aRowArr(1, sc::ColRowSpan(2,2)); rFunc.SetWidthOrHeight(false, aRowArr, nTab, SC_SIZE_OPTIMAL, 0, true, true); // retrieve optimal height - int nOptimalHeight = TwipsToHMM( rDoc.GetRowHeight(aRowArr[0].mnStart, nTab, false) ); + int nOptimalHeight = convertTwipToMm100(rDoc.GetRowHeight(aRowArr[0].mnStart, nTab, false)); // check if the new height of A1 ( after delete ) is now the optimal height of an empty cell CPPUNIT_ASSERT_EQUAL(nOptimalHeight, nHeight ); diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 28533ea54e43..25b276fe7b87 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -84,6 +84,7 @@ #include <svx/svdocapt.hxx> #include <svl/srchitem.hxx> #include <svl/sharedstringpool.hxx> +#include <tools/UnitConversion.hxx> #include <unotools/collatorwrapper.hxx> #include <sfx2/docfile.hxx> @@ -5703,10 +5704,10 @@ void Test::testAnchoredRotatedShape() CPPUNIT_ASSERT_MESSAGE("must have a draw layer", pDrawLayer != nullptr); SdrPage* pPage = pDrawLayer->GetPage(0); CPPUNIT_ASSERT_MESSAGE("must have a draw page", pPage != nullptr); - m_pDoc->SetRowHeightRange( 0, MAXROW, 0, HMMToTwips( 1000 ) ); + m_pDoc->SetRowHeightRange(0, MAXROW, 0, convertMm100ToTwip(1000)); constexpr tools::Long TOLERANCE = 30; //30 hmm for ( SCCOL nCol = 0; nCol < MAXCOL; ++nCol ) - m_pDoc->SetColWidth( nCol, 0, HMMToTwips( 1000 ) ); + m_pDoc->SetColWidth(nCol, 0, convertMm100ToTwip(1000)); { //Add a rect tools::Rectangle aRect( 4000, 5000, 10000, 7000 ); @@ -5738,9 +5739,9 @@ void Test::testAnchoredRotatedShape() m_pDoc->SetDrawPageSize(0); // increase row 5 by 2000 hmm - m_pDoc->SetRowHeight( 5, 0, HMMToTwips( 3000 ) ); + m_pDoc->SetRowHeight(5, 0, convertMm100ToTwip(3000)); // increase col 6 by 1000 hmm - m_pDoc->SetColWidth( 6, 0, HMMToTwips( 2000 ) ); + m_pDoc->SetColWidth(6, 0, convertMm100ToTwip(2000)); aRotRect.setWidth( aRotRect.GetWidth() + 1000 ); aRotRect.setHeight( aRotRect.GetHeight() + 2000 ); diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx index 6142cc35fb60..63d4cb8518d2 100644 --- a/sc/source/core/data/drwlayer.cxx +++ b/sc/source/core/data/drwlayer.cxx @@ -52,6 +52,7 @@ #include <vcl/svapp.hxx> #include <vcl/settings.hxx> #include <tools/globname.hxx> +#include <tools/UnitConversion.hxx> #include <basegfx/polygon/b2dpolygon.hxx> #include <basegfx/polygon/b2dpolygontools.hxx> @@ -207,10 +208,10 @@ ScTabSizeChangedHint::~ScTabSizeChangedHint() static void lcl_ReverseTwipsToMM( tools::Rectangle& rRect ) { - rRect.SetLeft( HMMToTwips( rRect.Left() ) ); - rRect.SetRight( HMMToTwips( rRect.Right() ) ); - rRect.SetTop( HMMToTwips( rRect.Top()) ); - rRect.SetBottom( HMMToTwips(rRect.Bottom()) ); + rRect.SetLeft(convertMm100ToTwip(rRect.Left())); + rRect.SetRight(convertMm100ToTwip(rRect.Right())); + rRect.SetTop(convertMm100ToTwip(rRect.Top())); + rRect.SetBottom(convertMm100ToTwip(rRect.Bottom())); } static ScRange lcl_getClipRangeFromClipDoc(ScDocument* pClipDoc, SCTAB nClipTab) @@ -753,8 +754,8 @@ void ScDrawLayer::ResizeLastRectFromAnchor(const SdrObject* pObj, ScDrawObjData& SCTAB nTab2 = rData.maEnd.Tab(); Point aPos(pDoc->GetColOffset(nCol1, nTab1, /*bHiddenAsZero*/true), pDoc->GetRowOffset(nRow1, nTab1, /*bHiddenAsZero*/true)); - aPos.setX(TwipsToHMM(aPos.X())); - aPos.setY(TwipsToHMM(aPos.Y())); + aPos.setX(convertTwipToMm100(aPos.X())); + aPos.setY(convertTwipToMm100(aPos.Y())); aPos += lcl_calcAvailableDiff(*pDoc, nCol1, nRow1, nTab1, rData.maStartOffset); // this sets the needed changed position (translation) @@ -773,8 +774,8 @@ void ScDrawLayer::ResizeLastRectFromAnchor(const SdrObject* pObj, ScDrawObjData& { Point aEnd(pDoc->GetColOffset(nCol2, nTab2, /*bHiddenAsZero*/true), pDoc->GetRowOffset(nRow2, nTab2, /*bHiddenAsZero*/true)); - aEnd.setX(TwipsToHMM(aEnd.X())); - aEnd.setY(TwipsToHMM(aEnd.Y())); + aEnd.setX(convertTwipToMm100(aEnd.X())); + aEnd.setY(convertTwipToMm100(aEnd.Y())); aEnd += lcl_calcAvailableDiff(*pDoc, nCol2, nRow2, nTab2, rData.maEndOffset); aRect = tools::Rectangle(aPos, aEnd); @@ -1083,8 +1084,8 @@ void ScDrawLayer::RecalcPos( SdrObject* pObj, ScDrawObjData& rData, bool bNegati aPos.AdjustX(pDoc->GetColWidth( nCol1, nTab1 ) / 4 ); if (!pDoc->RowHidden(nRow1, nTab1, nullptr, &nLastRow)) aPos.AdjustY(pDoc->GetRowHeight( nRow1, nTab1 ) / 2 ); - aPos.setX(TwipsToHMM( aPos.X() )); - aPos.setY(TwipsToHMM( aPos.Y() )); + aPos.setX(convertTwipToMm100(aPos.X())); + aPos.setY(convertTwipToMm100(aPos.Y())); Point aStartPos = aPos; if ( bNegativePage ) aStartPos.setX( -aStartPos.X() ); // don't modify aPos - used below @@ -1121,8 +1122,8 @@ void ScDrawLayer::RecalcPos( SdrObject* pObj, ScDrawObjData& rData, bool bNegati aPos.AdjustX(pDoc->GetColWidth( nCol2, nTab2 ) / 4 ); if (!pDoc->RowHidden(nRow2, nTab2, nullptr, &nLastRow)) aPos.AdjustY(pDoc->GetRowHeight( nRow2, nTab2 ) / 2 ); - aPos.setX(TwipsToHMM( aPos.X() )); - aPos.setY(TwipsToHMM( aPos.Y() )); + aPos.setX(convertTwipToMm100(aPos.X())); + aPos.setY(convertTwipToMm100(aPos.Y())); Point aEndPos = aPos; if ( bNegativePage ) aEndPos.setX( -aEndPos.X() ); // don't modify aPos - used below @@ -1268,16 +1269,16 @@ bool ScDrawLayer::GetPrintArea( ScRange& rRange, bool bSetHor, bool bSetVer ) co SCCOL nEndCol = rRange.aEnd.Col(); for (i=nStartCol; i<=nEndCol; i++) nEndX += pDoc->GetColWidth(i,nTab); - nStartX = TwipsToHMM( nStartX ); - nEndX = TwipsToHMM( nEndX ); + nStartX = convertTwipToMm100(nStartX); + nEndX = convertTwipToMm100(nEndX); } if (!bSetVer) { nStartY = pDoc->GetRowHeight( 0, rRange.aStart.Row()-1, nTab); nEndY = nStartY + pDoc->GetRowHeight( rRange.aStart.Row(), rRange.aEnd.Row(), nTab); - nStartY = TwipsToHMM( nStartY ); - nEndY = TwipsToHMM( nEndY ); + nStartY = convertTwipToMm100(nStartY); + nEndY = convertTwipToMm100(nEndY); } if ( bNegativePage ) @@ -1336,8 +1337,8 @@ bool ScDrawLayer::GetPrintArea( ScRange& rRange, bool bSetHor, bool bSetVer ) co if (bSetHor) { - nStartX = HMMToTwips( nStartX ); - nEndX = HMMToTwips( nEndX ); + nStartX = convertMm100ToTwip(nStartX); + nEndX = convertMm100ToTwip(nEndX); tools::Long nWidth; nWidth = 0; @@ -1373,8 +1374,8 @@ bool ScDrawLayer::GetPrintArea( ScRange& rRange, bool bSetHor, bool bSetVer ) co if (bSetVer) { - nStartY = HMMToTwips( nStartY ); - nEndY = HMMToTwips( nEndY ); + nStartY = convertMm100ToTwip(nStartY); + nEndY = convertMm100ToTwip(nEndY); SCROW nRow = pDoc->GetRowForHeight( nTab, nStartY); rRange.aStart.SetRow( nRow>0 ? (nRow-1) : 0); nRow = pDoc->GetRowForHeight( nTab, nEndY); @@ -1495,10 +1496,10 @@ bool ScDrawLayer::HasObjectsInRows( SCTAB nTab, SCROW nStartRow, SCROW nEndRow ) { aTestRect.SetBottom( aTestRect.Top() ); aTestRect.AdjustBottom(pDoc->GetRowHeight( nStartRow, nEndRow, nTab) ); - aTestRect.SetBottom(TwipsToHMM( aTestRect.Bottom() )); + aTestRect.SetBottom(convertTwipToMm100(aTestRect.Bottom())); } - aTestRect.SetTop(TwipsToHMM( aTestRect.Top() )); + aTestRect.SetTop(convertTwipToMm100(aTestRect.Top())); aTestRect.SetLeft( 0 ); aTestRect.SetRight( MAXMM ); diff --git a/sc/source/core/data/patattr.cxx b/sc/source/core/data/patattr.cxx index 8db02dcda632..548eb6ef1f91 100644 --- a/sc/source/core/data/patattr.cxx +++ b/sc/source/core/data/patattr.cxx @@ -49,7 +49,7 @@ #include <svl/zforlist.hxx> #include <vcl/outdev.hxx> #include <tools/fract.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <osl/diagnose.h> #include <attrib.hxx> @@ -710,9 +710,9 @@ void ScPatternAttr::FillToEditItemSet( SfxItemSet& rEditSet, const SfxItemSet& r // Expect to be compatible to LogicToLogic, ie. 2540/1440 = 127/72, and round - tools::Long nHeight = TwipsToHMM(nTHeight); - tools::Long nCjkHeight = TwipsToHMM(nCjkTHeight); - tools::Long nCtlHeight = TwipsToHMM(nCtlTHeight); + tools::Long nHeight = convertTwipToMm100(nTHeight); + tools::Long nCjkHeight = convertTwipToMm100(nCjkTHeight); + tools::Long nCtlHeight = convertTwipToMm100(nCtlTHeight); // put items into EditEngine ItemSet @@ -792,13 +792,13 @@ void ScPatternAttr::GetFromEditItemSet( SfxItemSet& rDestSet, const SfxItemSet& rDestSet.Put( *static_cast<const SvxFontItem*>(pItem), ATTR_CTL_FONT ); if (rEditSet.GetItemState(EE_CHAR_FONTHEIGHT,true,&pItem) == SfxItemState::SET) - rDestSet.Put( SvxFontHeightItem( HMMToTwips( static_cast<const SvxFontHeightItem*>(pItem)->GetHeight() ), + rDestSet.Put( SvxFontHeightItem( convertMm100ToTwip( static_cast<const SvxFontHeightItem*>(pItem)->GetHeight() ), 100, ATTR_FONT_HEIGHT ) ); if (rEditSet.GetItemState(EE_CHAR_FONTHEIGHT_CJK,true,&pItem) == SfxItemState::SET) - rDestSet.Put( SvxFontHeightItem( HMMToTwips( static_cast<const SvxFontHeightItem*>(pItem)->GetHeight() ), + rDestSet.Put( SvxFontHeightItem( convertMm100ToTwip( static_cast<const SvxFontHeightItem*>(pItem)->GetHeight() ), 100, ATTR_CJK_FONT_HEIGHT ) ); if (rEditSet.GetItemState(EE_CHAR_FONTHEIGHT_CTL,true,&pItem) == SfxItemState::SET) - rDestSet.Put( SvxFontHeightItem( HMMToTwips( static_cast<const SvxFontHeightItem*>(pItem)->GetHeight() ), + rDestSet.Put( SvxFontHeightItem( convertMm100ToTwip( static_cast<const SvxFontHeightItem*>(pItem)->GetHeight() ), 100, ATTR_CTL_FONT_HEIGHT ) ); if (rEditSet.GetItemState(EE_CHAR_WEIGHT,true,&pItem) == SfxItemState::SET) diff --git a/sc/source/core/tool/docoptio.cxx b/sc/source/core/tool/docoptio.cxx index d70d2eb80d1f..631581375bce 100644 --- a/sc/source/core/tool/docoptio.cxx +++ b/sc/source/core/tool/docoptio.cxx @@ -18,7 +18,7 @@ */ #include <svl/zforlist.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <osl/diagnose.h> #include <com/sun/star/uno/Any.hxx> @@ -272,7 +272,7 @@ ScDocCfg::ScDocCfg() : case SCDOCLAYOUTOPT_TABSTOP: // TabDistance in ScDocOptions is in twips if (pValues[nProp] >>= nIntVal) - SetTabDistance( static_cast<sal_uInt16>(HMMToTwips( nIntVal )) ); + SetTabDistance(static_cast<sal_uInt16>(convertMm100ToTwip(nIntVal))); break; } } diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx index 6596ea369060..32b6f4220370 100644 --- a/sc/source/filter/excel/xetable.cxx +++ b/sc/source/filter/excel/xetable.cxx @@ -25,7 +25,7 @@ #include <scitems.hxx> #include <svl/intitem.hxx> #include <svl/stritem.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <editeng/flditem.hxx> #include <document.hxx> #include <dociter.hxx> @@ -1632,7 +1632,7 @@ XclExpColinfo::XclExpColinfo( const XclExpRoot& rRoot, // column width. If column is hidden then we should return real value (not zero) sal_uInt16 nScWidth = rDoc.GetColWidth( nScCol, nScTab, false ); mnWidth = XclTools::GetXclColumnWidth( nScWidth, GetCharWidth() ); - mnScWidth = TwipsToHMM( nScWidth ); + mnScWidth = convertTwipToMm100(nScWidth); // column flags ::set_flag( mnFlags, EXC_COLINFO_HIDDEN, rDoc.ColHidden(nScCol, nScTab) ); @@ -1689,7 +1689,7 @@ void XclExpColinfo::WriteBody( XclExpStream& rStrm ) void XclExpColinfo::SaveXml( XclExpXmlStream& rStrm ) { - const double nExcelColumnWidth = mnScWidth / static_cast< double >( TwipsToHMM( GetCharWidth() ) ); + const double nExcelColumnWidth = mnScWidth / static_cast< double >( convertTwipToMm100( GetCharWidth() ) ); // tdf#101363 In MS specification the output value is set with double precision after delimiter: // =Truncate(({width in pixels} - 5)/{Maximum Digit Width} * 100 + 0.5)/100 diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx index e92e868afca5..995219fc710a 100644 --- a/sc/source/filter/excel/xistyle.cxx +++ b/sc/source/filter/excel/xistyle.cxx @@ -46,6 +46,7 @@ #include <editeng/editids.hrc> #include <sal/macros.h> #include <sal/log.hxx> +#include <tools/UnitConversion.hxx> #include <vcl/fontcharmap.hxx> #include <vcl/outdev.hxx> #include <document.hxx> @@ -355,7 +356,7 @@ void XclImpFont::FillToItemSet( SfxItemSet& rItemSet, XclFontItemType eType, boo { sal_Int32 nHeight = maData.mnHeight; if( bEE && (eType != XclFontItemType::HeaderFooter) ) // do not convert header/footer height - nHeight = (nHeight * 127 + 36) / EXC_POINTS_PER_INCH; // 1 in == 72 pt + nHeight = convertTwipToMm100(nHeight); SvxFontHeightItem aHeightItem( nHeight, 100, ATTR_FONT_HEIGHT ); PUTITEM( aHeightItem, ATTR_FONT_HEIGHT, EE_CHAR_FONTHEIGHT ); diff --git a/sc/source/filter/oox/stylesbuffer.cxx b/sc/source/filter/oox/stylesbuffer.cxx index 153948cd0422..7834d5e5a058 100644 --- a/sc/source/filter/oox/stylesbuffer.cxx +++ b/sc/source/filter/oox/stylesbuffer.cxx @@ -55,6 +55,7 @@ #include <editeng/brushitem.hxx> #include <svx/rotmodit.hxx> #include <tools/fontenum.hxx> +#include <tools/UnitConversion.hxx> #include <vcl/unohelp.hxx> #include <rtl/tencinfo.h> #include <rtl/ustrbuf.hxx> @@ -902,7 +903,7 @@ void Font::fillToItemSet( SfxItemSet& rItemSet, bool bEditEngineText, bool bSkip sal_Int32 nHeight = maApiData.maDesc.Height; // do we use XclFontItemType::HeaderFooter ( or is it just relevant for the binary filter ) if( bEditEngineText/* && (eType != XclFontItemType::HeaderFooter) */) // do not convert header/footer height - nHeight = (nHeight * 127 + 36) / EXC_POINTS_PER_INCH; // 1 in == 72 pt + nHeight = convertTwipToMm100(nHeight); SvxFontHeightItem aHeightItem( nHeight, 100, ATTR_FONT_HEIGHT ); ScfTools::PutItem( rItemSet, aHeightItem, bEditEngineText ? static_cast<sal_uInt16>(EE_CHAR_FONTHEIGHT) : ATTR_FONT_HEIGHT, bSkipPoolDefs ); ScfTools::PutItem( rItemSet, aHeightItem, bEditEngineText ? static_cast<sal_uInt16>(EE_CHAR_FONTHEIGHT_CJK) : ATTR_CJK_FONT_HEIGHT, bSkipPoolDefs ); diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx index 737a9a432709..fe30d788b623 100644 --- a/sc/source/filter/oox/worksheethelper.cxx +++ b/sc/source/filter/oox/worksheethelper.cxx @@ -73,7 +73,7 @@ #include <editeng/eeitem.hxx> #include <editeng/editobj.hxx> #include <editeng/flditem.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> namespace oox::xls { @@ -1187,7 +1187,7 @@ void WorksheetGlobals::convertColumns( OutlineLevelVec& orColLevels, { for( SCCOL nCol = nStartCol; nCol <= nEndCol; ++nCol ) { - rDoc.SetColWidthOnly( nCol, nTab, static_cast<sal_uInt16>(HMMToTwips( nWidth )) ); + rDoc.SetColWidthOnly(nCol, nTab, static_cast<sal_uInt16>(convertMm100ToTwip(nWidth))); } } @@ -1240,7 +1240,8 @@ void WorksheetGlobals::convertRows( OutlineLevelVec& orRowLevels, { /* always import the row height, ensures better layout */ ScDocument& rDoc = getScDocument(); - rDoc.SetRowHeightOnly( nStartRow, nEndRow, nTab, static_cast<sal_uInt16>(HMMToTwips(nHeight)) ); + rDoc.SetRowHeightOnly(nStartRow, nEndRow, nTab, + static_cast<sal_uInt16>(convertMm100ToTwip(nHeight))); if(rModel.mbCustomHeight) rDoc.SetManualHeight( nStartRow, nEndRow, nTab, true ); } diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index f332a27d1b93..5f22480879e3 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -44,7 +44,7 @@ #include <cppuhelper/supportsservice.hxx> #include <float.h> #include <tools/diagnose_ex.h> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <com/sun/star/awt/XBitmap.hpp> #include <com/sun/star/util/CellProtection.hpp> @@ -968,7 +968,7 @@ template<typename TableBorderType> void lcl_fillBoxItems( SvxBoxItem& rOuter, SvxBoxInfoItem& rInner, const TableBorderType& rBorder ) { ::editeng::SvxBorderLine aLine; - rOuter.SetAllDistances(static_cast<sal_uInt16>(HMMToTwips(rBorder.Distance))); + rOuter.SetAllDistances(static_cast<sal_uInt16>(convertMm100ToTwip(rBorder.Distance))); rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.TopLine ), SvxBoxItemLine::TOP ); rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.BottomLine ), SvxBoxItemLine::BOTTOM ); rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.LeftLine ), SvxBoxItemLine::LEFT ); @@ -1954,7 +1954,7 @@ uno::Any SAL_CALL ScCellRangesBase::getPropertyDefault( const OUString& aPropert aAny <<= static_cast<sal_Int32>( static_cast<const SfxUInt32Item&>(rSet.Get(pEntry->nWID)).GetValue() ); break; case ATTR_INDENT: - aAny <<= static_cast<sal_Int16>( TwipsToHMM(static_cast<const ScIndentItem&>( + aAny <<= static_cast<sal_Int16>( convertTwipToMm100(static_cast<const ScIndentItem&>( rSet.Get(pEntry->nWID)).GetValue()) ); break; default: @@ -2092,7 +2092,7 @@ static void lcl_SetCellProperty( const SfxItemPropertySimpleEntry& rEntry, const if ( !(rValue >>= nIntVal) ) throw lang::IllegalArgumentException(); - rSet.Put( ScIndentItem( static_cast<sal_uInt16>(HMMToTwips(nIntVal)) ) ); + rSet.Put(ScIndentItem(static_cast<sal_uInt16>(convertMm100ToTwip(nIntVal)))); } break; @@ -2405,7 +2405,7 @@ void ScCellRangesBase::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pE } break; case ATTR_INDENT: - rAny <<= static_cast<sal_Int16>( TwipsToHMM(static_cast<const ScIndentItem&>( + rAny <<= static_cast<sal_Int16>( convertTwipToMm100(static_cast<const ScIndentItem&>( pDataSet->Get(pEntry->nWID)).GetValue()) ); break; case ATTR_STACKED: @@ -8412,7 +8412,7 @@ void ScTableColumnObj::SetOnePropertyValue(const SfxItemPropertySimpleEntry* pEn if ( aValue >>= nNewWidth ) { // property is 1/100mm, column width is twips - nNewWidth = HMMToTwips(nNewWidth); + nNewWidth = convertMm100ToTwip(nNewWidth); rFunc.SetWidthOrHeight( true, aColArr, nTab, SC_SIZE_ORIGINAL, static_cast<sal_uInt16>(nNewWidth), true, true); } @@ -8464,7 +8464,7 @@ void ScTableColumnObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pE // for hidden column, return original height sal_uInt16 nWidth = rDoc.GetOriginalWidth( nCol, nTab ); // property is 1/100mm, column width is twips - nWidth = static_cast<sal_uInt16>(TwipsToHMM(nWidth)); + nWidth = static_cast<sal_uInt16>(convertTwipToMm100(nWidth)); rAny <<= static_cast<sal_Int32>(nWidth); } else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) @@ -8549,7 +8549,7 @@ void ScTableRowObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntr if ( aValue >>= nNewHeight ) { // property is 1/100mm, row height is twips - nNewHeight = HMMToTwips(nNewHeight); + nNewHeight = convertMm100ToTwip(nNewHeight); rFunc.SetWidthOrHeight( false, aRowArr, nTab, SC_SIZE_ORIGINAL, static_cast<sal_uInt16>(nNewHeight), true, true); } @@ -8610,7 +8610,7 @@ void ScTableRowObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntr // for hidden row, return original height sal_uInt16 nHeight = rDoc.GetOriginalHeight( nRow, nTab ); // property is 1/100mm, row height is twips - nHeight = static_cast<sal_uInt16>(TwipsToHMM(nHeight)); + nHeight = static_cast<sal_uInt16>(convertTwipToMm100(nHeight)); rAny <<= static_cast<sal_Int32>(nHeight); } else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) diff --git a/sc/source/ui/unoobj/defltuno.cxx b/sc/source/ui/unoobj/defltuno.cxx index 923178244dbc..22a98d6bd3eb 100644 --- a/sc/source/ui/unoobj/defltuno.cxx +++ b/sc/source/ui/unoobj/defltuno.cxx @@ -20,7 +20,7 @@ #include <editeng/memberids.h> #include <svl/hint.hxx> #include <svl/itemprop.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <vcl/svapp.hxx> #include <i18nlangtag/languagetag.hxx> @@ -144,7 +144,7 @@ void SAL_CALL ScDocDefaultsObj::setPropertyValue( sal_Int32 nValue = 0; if (aValue >>= nValue) { - aDocOpt.SetTabDistance(static_cast<sal_uInt16>(HMMToTwips(nValue))); + aDocOpt.SetTabDistance(static_cast<sal_uInt16>(convertMm100ToTwip(nValue))); rDoc.SetDocOptions(aDocOpt); } } diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 47d1e1f85bf2..6af98b387a1b 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -1799,8 +1799,8 @@ uno::Sequence<beans::PropertyValue> SAL_CALL ScModelObj::getRenderer( sal_Int32 SCTAB const nCurTab = 0; //! use current sheet from view? ScPrintFunc aDefaultFunc( pDocShell, pDocShell->GetPrinter(), nCurTab ); Size aTwips = aDefaultFunc.GetPageSize(); - aPageSize.Width = TwipsToHMM( aTwips.Width()); - aPageSize.Height = TwipsToHMM( aTwips.Height()); + aPageSize.Width = convertTwipToMm100(aTwips.Width()); + aPageSize.Height = convertTwipToMm100(aTwips.Height()); } uno::Sequence<beans::PropertyValue> aSequence( comphelper::InitPropertySequence({ @@ -1946,8 +1946,8 @@ uno::Sequence<beans::PropertyValue> SAL_CALL ScModelObj::getRenderer( sal_Int32 pPrintFunc->GetPrintState(*m_pPrintState, true); } - aPageSize.Width = TwipsToHMM( aTwips.Width()); - aPageSize.Height = TwipsToHMM( aTwips.Height()); + aPageSize.Width = convertTwipToMm100(aTwips.Width()); + aPageSize.Height = convertTwipToMm100(aTwips.Height()); } tools::Long nPropCount = bWasCellRange ? 5 : 4; @@ -4103,7 +4103,7 @@ void SAL_CALL ScTableColumnsObj::setPropertyValue( sal_Int32 nNewWidth = 0; if ( aValue >>= nNewWidth ) rFunc.SetWidthOrHeight( - true, aColArr, nTab, SC_SIZE_ORIGINAL, static_cast<sal_uInt16>(HMMToTwips(nNewWidth)), true, true); + true, aColArr, nTab, SC_SIZE_ORIGINAL, static_cast<sal_uInt16>(convertMm100ToTwip(nNewWidth)), true, true); } else if ( aPropertyName == SC_UNONAME_CELLVIS ) { @@ -4147,7 +4147,7 @@ uno::Any SAL_CALL ScTableColumnsObj::getPropertyValue( const OUString& aProperty { // for hidden column, return original height sal_uInt16 nWidth = rDoc.GetOriginalWidth( nStartCol, nTab ); - aAny <<= static_cast<sal_Int32>(TwipsToHMM(nWidth)); + aAny <<= static_cast<sal_Int32>(convertTwipToMm100(nWidth)); } else if ( aPropertyName == SC_UNONAME_CELLVIS ) { @@ -4318,7 +4318,7 @@ void SAL_CALL ScTableRowsObj::setPropertyValue( // TODO: It's probably cleaner to use a different property name // for this. - rDoc.SetRowHeightOnly( nStartRow, nEndRow, nTab, static_cast<sal_uInt16>(HMMToTwips(nNewHeight)) ); + rDoc.SetRowHeightOnly( nStartRow, nEndRow, nTab, static_cast<sal_uInt16>(convertMm100ToTwip(nNewHeight)) ); } else { @@ -4341,12 +4341,12 @@ void SAL_CALL ScTableRowsObj::setPropertyValue( // TODO: This is a band-aid fix. Eventually we need to // re-work ods' style import to get it to set styles to // ScDocument directly. - rDoc.SetRowHeightOnly( nStartRow, nEndRow, nTab, static_cast<sal_uInt16>(HMMToTwips(nNewHeight)) ); + rDoc.SetRowHeightOnly( nStartRow, nEndRow, nTab, static_cast<sal_uInt16>(convertMm100ToTwip(nNewHeight)) ); rDoc.SetManualHeight( nStartRow, nEndRow, nTab, true ); } else rFunc.SetWidthOrHeight( - false, aRowArr, nTab, SC_SIZE_ORIGINAL, static_cast<sal_uInt16>(HMMToTwips(nNewHeight)), true, true); + false, aRowArr, nTab, SC_SIZE_ORIGINAL, static_cast<sal_uInt16>(convertMm100ToTwip(nNewHeight)), true, true); } } else if ( aPropertyName == SC_UNONAME_CELLVIS ) @@ -4409,7 +4409,7 @@ uno::Any SAL_CALL ScTableRowsObj::getPropertyValue( const OUString& aPropertyNam { // for hidden row, return original height sal_uInt16 nHeight = rDoc.GetOriginalHeight( nStartRow, nTab ); - aAny <<= static_cast<sal_Int32>(TwipsToHMM(nHeight)); + aAny <<= static_cast<sal_Int32>(convertTwipToMm100(nHeight)); } else if ( aPropertyName == SC_UNONAME_CELLVIS ) { diff --git a/sc/source/ui/unoobj/styleuno.cxx b/sc/source/ui/unoobj/styleuno.cxx index 55c317f81901..81cf3a048067 100644 --- a/sc/source/ui/unoobj/styleuno.cxx +++ b/sc/source/ui/unoobj/styleuno.cxx @@ -37,7 +37,7 @@ #include <svl/intitem.hxx> #include <svl/zformat.hxx> #include <tools/fract.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <osl/diagnose.h> #include <com/sun/star/table/BorderLine.hpp> @@ -1254,7 +1254,7 @@ uno::Any ScStyleObj::getPropertyDefault_Impl( std::u16string_view aPropertyName aAny <<= sal_Int32( static_cast<const SfxUInt32Item&>(pItemSet->Get(nWhich)).GetValue() ); break; case ATTR_INDENT: - aAny <<= sal_Int16( TwipsToHMM(static_cast<const ScIndentItem&>( + aAny <<= sal_Int16( convertTwipToMm100(static_cast<const ScIndentItem&>( pItemSet->Get(nWhich)).GetValue()) ); break; case ATTR_PAGE_SCALE: @@ -1537,7 +1537,7 @@ void ScStyleObj::setPropertyValue_Impl( std::u16string_view rPropertyName, const { sal_Int16 nVal = 0; *pValue >>= nVal; - rSet.Put(ScIndentItem(static_cast<sal_uInt16>(HMMToTwips(nVal)))); + rSet.Put(ScIndentItem(static_cast<sal_uInt16>(convertMm100ToTwip(nVal)))); } break; case ATTR_ROTATE_VALUE: @@ -1804,7 +1804,7 @@ uno::Any ScStyleObj::getPropertyValue_Impl( std::u16string_view aPropertyName ) } break; case ATTR_INDENT: - aAny <<= sal_Int16( TwipsToHMM(static_cast<const ScIndentItem&>( + aAny <<= sal_Int16( convertTwipToMm100(static_cast<const ScIndentItem&>( pItemSet->Get(nWhich)).GetValue()) ); break; case ATTR_STACKED: diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx index 040b01178f62..c809c79fce60 100644 --- a/sc/source/ui/view/cellsh3.cxx +++ b/sc/source/ui/view/cellsh3.cxx @@ -26,6 +26,7 @@ #include <sfx2/dispatch.hxx> #include <sfx2/request.hxx> #include <svl/stritem.hxx> +#include <tools/UnitConversion.hxx> #include <vcl/svapp.hxx> #include <vcl/weld.hxx> #include <globstr.hrc> @@ -675,15 +676,15 @@ void ScCellShell::Execute( SfxRequest& rReq ) aRanges.emplace_back(nRow, nRow); } - pTabViewShell->SetWidthOrHeight(false, aRanges, SC_SIZE_DIRECT, HMMToTwips(nHeight)); + pTabViewShell->SetWidthOrHeight(false, aRanges, SC_SIZE_DIRECT, convertMm100ToTwip(nHeight)); } else if ( pReqArgs && pReqArgs->HasItem( FID_ROW_HEIGHT, &pHeight ) ) { nHeight = static_cast<const SfxUInt16Item*>(pHeight)->GetValue(); - // #101390#; the value of the macro is in HMM so use HMMToTwips to convert + // #101390#; the value of the macro is in HMM so use convertMm100ToTwip to convert pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_DIRECT, - sal::static_int_cast<sal_uInt16>( HMMToTwips(nHeight) ) ); + sal::static_int_cast<sal_uInt16>(convertMm100ToTwip(nHeight))); if( ! rReq.IsAPI() ) rReq.Done(); } @@ -720,9 +721,9 @@ void ScCellShell::Execute( SfxRequest& rReq ) { const SfxUInt16Item& rUInt16Item = static_cast<const SfxUInt16Item&>(pReqArgs->Get( FID_ROW_OPT_HEIGHT )); - // #101390#; the value of the macro is in HMM so use HMMToTwips to convert + // #101390#; the value of the macro is in HMM so use convertMm100ToTwip to convert pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_OPTIMAL, - sal::static_int_cast<sal_uInt16>( HMMToTwips(rUInt16Item.GetValue()) ) ); + sal::static_int_cast<sal_uInt16>( convertMm100ToTwip(rUInt16Item.GetValue()) ) ); ScGlobal::nLastRowHeightExtra = rUInt16Item.GetValue(); if( ! rReq.IsAPI() ) @@ -774,15 +775,15 @@ void ScCellShell::Execute( SfxRequest& rReq ) aRanges.emplace_back(nColumn, nColumn); } - pTabViewShell->SetWidthOrHeight(true, aRanges, SC_SIZE_DIRECT, HMMToTwips(nWidth)); + pTabViewShell->SetWidthOrHeight(true, aRanges, SC_SIZE_DIRECT, convertMm100ToTwip(nWidth)); } else if ( pReqArgs && pReqArgs->HasItem( FID_COL_WIDTH, &pWidth ) ) { nWidth = static_cast<const SfxUInt16Item*>(pWidth)->GetValue(); - // #101390#; the value of the macro is in HMM so use HMMToTwips to convert + // #101390#; the value of the macro is in HMM so use convertMm100ToTwip to convert pTabViewShell->SetMarkedWidthOrHeight( true, SC_SIZE_DIRECT, - sal::static_int_cast<sal_uInt16>( HMMToTwips(nWidth) ) ); + sal::static_int_cast<sal_uInt16>(convertMm100ToTwip(nWidth))); if( ! rReq.IsAPI() ) rReq.Done(); } @@ -817,9 +818,9 @@ void ScCellShell::Execute( SfxRequest& rReq ) { const SfxUInt16Item& rUInt16Item = static_cast<const SfxUInt16Item&>(pReqArgs->Get( FID_COL_OPT_WIDTH )); - // #101390#; the value of the macro is in HMM so use HMMToTwips to convert + // #101390#; the value of the macro is in HMM so use convertMm100ToTwip to convert pTabViewShell->SetMarkedWidthOrHeight( true, SC_SIZE_OPTIMAL, - sal::static_int_cast<sal_uInt16>( HMMToTwips(rUInt16Item.GetValue()) ) ); + sal::static_int_cast<sal_uInt16>( convertMm100ToTwip(rUInt16Item.GetValue()) ) ); ScGlobal::nLastColWidthExtra = rUInt16Item.GetValue(); if( ! rReq.IsAPI() ) diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx index bb6d3834cdc4..a1efca1748e4 100644 --- a/sc/source/ui/view/drawview.cxx +++ b/sc/source/ui/view/drawview.cxx @@ -41,6 +41,7 @@ #include <svx/sdr/contact/viewobjectcontact.hxx> #include <svx/sdr/contact/viewcontact.hxx> #include <svx/sdrpagewindow.hxx> +#include <tools/UnitConversion.hxx> #include <drawview.hxx> #include <global.hxx> @@ -958,8 +959,8 @@ void ScDrawView::SyncForGrid( SdrObject* pObj ) MapMode aDrawMode = pGridWin->GetDrawMapMode(); // find pos anchor position Point aOldPos( rDoc.GetColOffset( aOldStt.Col(), aOldStt.Tab() ), rDoc.GetRowOffset( aOldStt.Row(), aOldStt.Tab() ) ); - aOldPos.setX( TwipsToHMM( aOldPos.X() ) ); - aOldPos.setY( TwipsToHMM( aOldPos.Y() ) ); + aOldPos.setX(convertTwipToMm100(aOldPos.X())); + aOldPos.setY(convertTwipToMm100(aOldPos.Y())); // find position of same point on the screen ( e.g. grid ) Point aCurPos = pViewData->GetScrPos( aOldStt.Col(), aOldStt.Row(), eWhich, true ); Point aCurPosHmm = pGridWin->PixelToLogic(aCurPos, aDrawMode ); @@ -1035,8 +1036,8 @@ bool ScDrawView::calculateGridOffsetForSdrObject( // find pos anchor position Point aOldPos(rDoc.GetColOffset(aOldStt.Col(), aOldStt.Tab()), rDoc.GetRowOffset(aOldStt.Row(), aOldStt.Tab())); - aOldPos.setX(TwipsToHMM(aOldPos.X())); - aOldPos.setY(TwipsToHMM(aOldPos.Y())); + aOldPos.setX(convertTwipToMm100(aOldPos.X())); + aOldPos.setY(convertTwipToMm100(aOldPos.Y())); // find position of same point on the screen ( e.g. grid ) ScSplitPos eWhich(pViewData->GetActivePart()); @@ -1083,8 +1084,8 @@ bool ScDrawView::calculateGridOffsetForB2DRange( // find pos anchor position Point aOldPos(rDoc.GetColOffset(aOldStt.Col(), aOldStt.Tab()), rDoc.GetRowOffset(aOldStt.Row(), aOldStt.Tab())); - aOldPos.setX(TwipsToHMM(aOldPos.X())); - aOldPos.setY(TwipsToHMM(aOldPos.Y())); + aOldPos.setX(convertTwipToMm100(aOldPos.X())); + aOldPos.setY(convertTwipToMm100(aOldPos.Y())); // find position of same point on the screen ( e.g. grid ) ScSplitPos eWhich(pViewData->GetActivePart()); diff --git a/sc/source/ui/view/tabvwsh2.cxx b/sc/source/ui/view/tabvwsh2.cxx index a2e5f43c9d56..f213c5b822ef 100644 --- a/sc/source/ui/view/tabvwsh2.cxx +++ b/sc/source/ui/view/tabvwsh2.cxx @@ -24,6 +24,7 @@ #include <unotools/moduleoptions.hxx> #include <svl/languageoptions.hxx> #include <sfx2/dispatch.hxx> +#include <tools/UnitConversion.hxx> #include <tabvwsh.hxx> #include <drawview.hxx> @@ -337,8 +338,8 @@ void ScTabViewShell::ExecDraw(SfxRequest& rReq) comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs)) aInsertPos = rViewData.GetPrintTwipsPosFromTileTwips(aInsertPos); - aInsertPos.setX(TwipsToHMM(aInsertPos.X())); - aInsertPos.setY(TwipsToHMM(aInsertPos.Y())); + aInsertPos.setX(convertTwipToMm100(aInsertPos.X())); + aInsertPos.setY(convertTwipToMm100(aInsertPos.Y())); aInsertPos.AdjustX( -sal_Int32(nDefaultObjectSizeWidth / 2) ); aInsertPos.AdjustY( -sal_Int32(nDefaultObjectSizeHeight / 2) ); diff --git a/svx/source/table/tablertfexporter.cxx b/svx/source/table/tablertfexporter.cxx index f3cde67471b5..135693ea67b0 100644 --- a/svx/source/table/tablertfexporter.cxx +++ b/svx/source/table/tablertfexporter.cxx @@ -25,6 +25,7 @@ #include <tools/diagnose_ex.h> #include <tools/stream.hxx> +#include <tools/UnitConversion.hxx> #include <svtools/rtfkeywd.hxx> #include <svtools/rtfout.hxx> @@ -95,7 +96,7 @@ void SdrTableRtfExporter::Write() Reference< XPropertySet > xSet( xColumns->getByIndex(nCol), UNO_QUERY_THROW ); sal_Int32 nWidth = 0; xSet->getPropertyValue( gsSize ) >>= nWidth; - nPos += HMMToTwips( nWidth ); + nPos += convertMm100ToTwip(nWidth); aColumnStart.push_back( nPos ); } catch( Exception& ) diff --git a/svx/source/table/tablertfimporter.cxx b/svx/source/table/tablertfimporter.cxx index cdf25aa67306..74e127b03f91 100644 --- a/svx/source/table/tablertfimporter.cxx +++ b/svx/source/table/tablertfimporter.cxx @@ -25,6 +25,7 @@ #include <com/sun/star/table/XMergeableCellRange.hpp> #include <tools/stream.hxx> +#include <tools/UnitConversion.hxx> #include <svtools/rtftoken.h> #include <svx/svdetc.hxx> @@ -429,7 +430,7 @@ void SdrTableRTFParser::ProcToken( RtfImportInfo* pInfo ) maDefaultList.push_back( pDefault ); - const sal_Int32 nSize = TwipsToHMM( pInfo->nTokenValue ); + const sal_Int32 nSize = convertTwipToMm100(pInfo->nTokenValue); if ( nSize > mnLastEdge ) InsertColumnEdge( nSize ); diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index 74f71049db2d..c44d3e62daa6 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -55,6 +55,7 @@ #include <svx/svdpool.hxx> #include <tools/stream.hxx> #include <tools/gen.hxx> +#include <tools/UnitConversion.hxx> #include <svx/svdoedge.hxx> #include <svx/svdocapt.hxx> #include <svx/obj3d.hxx> @@ -464,8 +465,8 @@ void SvxShape::ForceMetricToItemPoolMetric(Pair& rPoint) const throw() { case MapUnit::MapTwip : { - rPoint.A() = HMMToTwips(rPoint.A()); - rPoint.B() = HMMToTwips(rPoint.B()); + rPoint.A() = convertMm100ToTwip(rPoint.A()); + rPoint.B() = convertMm100ToTwip(rPoint.B()); break; } default: @@ -548,8 +549,8 @@ void SvxShape::ForceMetricTo100th_mm(Pair& rPoint) const throw() { case MapUnit::MapTwip : { - rPoint.A() = TwipsToHMM(rPoint.A()); - rPoint.B() = TwipsToHMM(rPoint.B()); + rPoint.A() = convertTwipToMm100(rPoint.A()); + rPoint.B() = convertTwipToMm100(rPoint.B()); break; } default: diff --git a/sw/qa/core/objectpositioning/objectpositioning.cxx b/sw/qa/core/objectpositioning/objectpositioning.cxx index 2a35a41f1ec2..7b9a3eca2831 100644 --- a/sw/qa/core/objectpositioning/objectpositioning.cxx +++ b/sw/qa/core/objectpositioning/objectpositioning.cxx @@ -67,10 +67,10 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertPosFromBottom) sal_Int32 nAnchoredBottom = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "bottom").toInt32(); // Without the accompanying fix in place, this test would have failed with: - // - Expected: 564 + // - Expected: 565 // - Actual : 9035 // i.e. the vertical position was from-top, not from-bottom. - CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(564), nBodyBottom - nAnchoredBottom); + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(565), nBodyBottom - nAnchoredBottom); } CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertAlignBottomMargin) diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx index a2391cbe31b3..72dc978a4c8e 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx @@ -360,17 +360,17 @@ DECLARE_OOXMLEXPORT_TEST(testDMLGroupShapeChildPosition, "dml-groupshape-childpo uno::Reference<drawing::XShapes> xGroup(getShape(1), uno::UNO_QUERY); uno::Reference<drawing::XShape> xChildGroup(xGroup->getByIndex(1), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? -2120 : -2122), xChildGroup->getPosition().X); - CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? 11336 : 11333), xChildGroup->getPosition().Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2123), xChildGroup->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? 11333 : 11331), xChildGroup->getPosition().Y); xGroup.set(xChildGroup, uno::UNO_QUERY); xChildGroup.set(xGroup->getByIndex(0), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? -1856 : -1858), xChildGroup->getPosition().X); - CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? 11336 : 11333), xChildGroup->getPosition().Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-1859), xChildGroup->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? 11333 : 11331), xChildGroup->getPosition().Y); xChildGroup.set(xGroup->getByIndex(1), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? -2120 : -2122), xChildGroup->getPosition().X); - CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? 14026 : 14023), xChildGroup->getPosition().Y); + CPPUNIT_ASSERT_EQUAL(sal_Int32(-2123), xChildGroup->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(mbExported ? 14023 : 14021), xChildGroup->getPosition().Y); } DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testDMLGradientFillTheme, "dml-gradientfill-theme.docx") diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx index 2e8c2c45aa42..e9d8ebd64fd7 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx @@ -443,7 +443,7 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testPictureEffectPreservation, "picture-effe // second picture: shadow and reflection effects assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/" "wp:anchor/a:graphic/a:graphicData/pic:pic/pic:spPr/a:effectLst/a:outerShdw", - "dir", "8076614"); + "dir", "8100000"); assertXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r/mc:AlternateContent/mc:Choice/w:drawing/" "wp:anchor/a:graphic/a:graphicData/pic:pic/pic:spPr/a:effectLst/a:outerShdw/a:srgbClr", "val", "000000"); diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index 94f0d5abac78..37b612034d44 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -862,15 +862,16 @@ void SwTextBoxHelper::syncProperty(SwFrameFormat* pShape, sal_uInt16 nWID, sal_u if (aValue >>= nValue) { if (bAdjustX) - nValue += TwipsToHMM(aRect.getX()); + nValue += convertTwipToMm100(aRect.getX()); else if (bAdjustY) - nValue += TwipsToHMM(aRect.getY()); + nValue += convertTwipToMm100(aRect.getY()); aValue <<= nValue; } } else if (bAdjustSize) { - awt::Size aSize(TwipsToHMM(aRect.getWidth()), TwipsToHMM(aRect.getHeight())); + awt::Size aSize(convertTwipToMm100(aRect.getWidth()), + convertTwipToMm100(aRect.getHeight())); aValue <<= aSize; } } diff --git a/sw/source/filter/ww8/wrtw8esh.cxx b/sw/source/filter/ww8/wrtw8esh.cxx index e6d75e7ceeba..bee858964b4e 100644 --- a/sw/source/filter/ww8/wrtw8esh.cxx +++ b/sw/source/filter/ww8/wrtw8esh.cxx @@ -90,6 +90,7 @@ #include <o3tl/enumrange.hxx> #include <o3tl/enumarray.hxx> #include <sfx2/docfile.hxx> +#include <tools/UnitConversion.hxx> #include <algorithm> @@ -3041,8 +3042,8 @@ void SwMSConvertControls::ExportControl(WW8Export &rWW8Wrt, const SdrUnoObj& rFo tools::Rectangle aRect = rFormObj.GetLogicRect(); aRect.SetPos(Point(0,0)); awt::Size aSize; - aSize.Width = TwipsToHMM(aRect.Right()); - aSize.Height = TwipsToHMM(aRect.Bottom()); + aSize.Width = convertTwipToMm100(aRect.Right()); + aSize.Height = convertTwipToMm100(aRect.Bottom()); //Open the ObjectPool tools::SvRef<SotStorage> xObjPool = rWW8Wrt.GetWriter().GetStorage().OpenSotStorage(SL::aObjectPool); diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx index cd5f2b18f115..e3ecbeac0d7e 100644 --- a/sw/source/filter/xml/xmlimp.cxx +++ b/sw/source/filter/xml/xmlimp.cxx @@ -64,7 +64,7 @@ #include <xmloff/xmluconv.hxx> #include <unotools/saveopt.hxx> #include <unotools/streamwrap.hxx> -#include <tools/helpers.hxx> +#include <tools/UnitConversion.hxx> #include <tools/diagnose_ex.h> #include <vcl/svapp.hxx> diff --git a/xmloff/source/transform/TransformerBase.cxx b/xmloff/source/transform/TransformerBase.cxx index c55e29562558..fd59d2c8bb96 100644 --- a/xmloff/source/transform/TransformerBase.cxx +++ b/xmloff/source/transform/TransformerBase.cxx @@ -20,6 +20,7 @@ #include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> +#include <tools/UnitConversion.hxx> #include <osl/diagnose.h> #include <com/sun/star/i18n/CharacterClassification.hpp> #include <com/sun/star/i18n/UnicodeType.hpp> @@ -557,11 +558,7 @@ XMLMutableAttributeList *XMLTransformerBase::ProcessAttrList( if (::sax::Converter::convertMeasure(nMeasure, aAttrValue)) { - - // #i13778#,#i36248# apply correct twip-to-1/100mm - nMeasure = static_cast<sal_Int32>( nMeasure >= 0 - ? ((nMeasure*127+36)/72) - : ((nMeasure*127-36)/72) ); + nMeasure = static_cast<sal_Int32>(convertTwipToMm100(nMeasure)); OUStringBuffer aBuffer; ::sax::Converter::convertMeasure(aBuffer, @@ -725,11 +722,7 @@ XMLMutableAttributeList *XMLTransformerBase::ProcessAttrList( if (::sax::Converter::convertMeasure(nMeasure, aAttrValue)) { - - // #i13778#,#i36248#/ apply correct 1/100mm-to-twip conversion - nMeasure = static_cast<sal_Int32>( nMeasure >= 0 - ? ((nMeasure*72+63)/127) - : ((nMeasure*72-63)/127) ); + nMeasure = static_cast<sal_Int32>(convertMm100ToTwip(nMeasure)); OUStringBuffer aBuffer; ::sax::Converter::convertMeasure( aBuffer, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits