diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2012-07-04 17:46:44 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-07-05 09:53:13 +0200 |
commit | 2c37b5ba27d5289b3ec5c0ad3273cdb7d7fa9848 (patch) | |
tree | d3797ca1bcd72f7f7c2b68645945b52f0027944f | |
parent | c395f40ee81aa6419dc5ff8d0b6c7ea46a807038 (diff) |
fdo#43556 round pos&dim of report controls & sections to nearest 10^-4m
Change-Id: I3fa331d246160935f4feed21de69f9ec0c2e9994
Signed-off-by: Miklos Vajna <vmiklos@suse.cz>
-rw-r--r-- | reportdesign/source/ui/inspection/GeometryHandler.cxx | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/reportdesign/source/ui/inspection/GeometryHandler.cxx b/reportdesign/source/ui/inspection/GeometryHandler.cxx index fe765ca001d9..a3d32cde9086 100644 --- a/reportdesign/source/ui/inspection/GeometryHandler.cxx +++ b/reportdesign/source/ui/inspection/GeometryHandler.cxx @@ -129,6 +129,7 @@ namespace rptui //........................................................................ using namespace ::com::sun::star; +namespace{ // comparing two property instances struct PropertyCompare : public ::std::binary_function< beans::Property, ::rtl::OUString , bool > { @@ -196,6 +197,22 @@ void lcl_convertFormulaTo(const uno::Any& _aPropertyValue,uno::Any& _rControlVal _rControlValue <<= aFormula.getUndecoratedContent(); } } + +// return value rounded to the nearest multiple of base +// if equidistant of two multiples, round up (for positive numbers) +// T is assumed to be an integer type +template <typename T, T base> T lcl_round(T value) +{ + OSL_ENSURE(value >= 0, "lcl_round: positive numbers only please"); + const T threshold = (base % 2 == 0) ? (base/2) : (base/2 + 1); + const T rest = value % base; + if ( rest >= threshold ) + return value + (base - rest); + else + return value - rest; +} + +} // anonymous namespace // ----------------------------------------------------------------------------- bool GeometryHandler::impl_isDataField(const ::rtl::OUString& _sName) const { @@ -635,6 +652,8 @@ void SAL_CALL GeometryHandler::setPropertyValue(const ::rtl::OUString & Property { sal_Int32 nNewValue = 0; Value >>= nNewValue; + OSL_ENSURE(nNewValue >= 0, "A position/dimension should not be negative!"); + nNewValue = lcl_round<sal_Int32, 10>(nNewValue); awt::Point aAwtPoint = xSourceReportComponent->getPosition(); awt::Size aAwtSize = xSourceReportComponent->getSize(); if ( nId == PROPERTY_ID_POSITIONX ) |