[Libreoffice-commits] .: reportdesign/source

Lionel Elie Mamane lmamane at kemper.freedesktop.org
Wed Jul 4 08:50:31 PDT 2012


 reportdesign/source/ui/inspection/GeometryHandler.cxx |   19 ++++++++++++++++++
 1 file changed, 19 insertions(+)

New commits:
commit 8dd6a23b6b44902d1c1ae4e24360463ffcf1015d
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jul 4 17:46:44 2012 +0200

    fdo#43556 round pos&dim of report controls & sections to nearest 10^-4m
    
    Change-Id: I3fa331d246160935f4feed21de69f9ec0c2e9994

diff --git a/reportdesign/source/ui/inspection/GeometryHandler.cxx b/reportdesign/source/ui/inspection/GeometryHandler.cxx
index b20c628..2f8dc63 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 )


More information about the Libreoffice-commits mailing list