From kde-commits Thu Oct 07 15:42:15 2010 From: Maks Orlovich Date: Thu, 07 Oct 2010 15:42:15 +0000 To: kde-commits Subject: KDE/kdelibs/khtml/css Message-Id: <20101007154215.C5230AC892 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=128646617420658 SVN commit 1183493 by orlovich: Fix rounding issues with border sizes BUG: 252280 M +1 -5 css_valueimpl.cpp M +10 -0 css_valueimpl.h M +1 -1 cssstyleselector.cpp --- trunk/KDE/kdelibs/khtml/css/css_valueimpl.cpp #1183492:1183493 @@ -1052,11 +1052,7 @@ int CSSPrimitiveValueImpl::computeLength( khtml::RenderStyle *style, int logicalDpiY) { - double result = computeLengthFloat( style, logicalDpiY ); - // This conversion is imprecise, often resulting in values of, e.g., 44.99998. We - // need to go ahead and round if we're really close to the next integer value. - int intResult = (int)(result + (result < 0 ? -0.01 : +0.01)); - return intResult; + return snapValue( computeLengthFloat( style, logicalDpiY ) ); } double CSSPrimitiveValueImpl::computeLengthFloat( khtml::RenderStyle *style, int logicalDpiY) --- trunk/KDE/kdelibs/khtml/css/css_valueimpl.h #1183492:1183493 @@ -222,6 +222,16 @@ double computeLengthFloat( khtml::RenderStyle *style, int logicalDpiY); + /* + * rounds a computer value into integer as appropriate. This takes + * care of the various 4.9999999999 type cases + */ + static int snapValue( double result ) { + // Conversions are imprecise, often resulting in values of, e.g., 44.99998. We + // need to go ahead and round if we're really close to the next integer value. + return (int)(result + (result < 0 ? -0.01 : +0.01)); + } + // Retrieves an explicit resolution from the CSSValue if it contains one. // This is specific to the CSS3 Media Queries module's resolution feature. int getDPIResolution() const; --- trunk/KDE/kdelibs/khtml/css/cssstyleselector.cpp #1183492:1183493 @@ -3073,7 +3073,7 @@ case CSS_VAL_INVALID: { double widthd = primitiveValue->computeLengthFloat(style, logicalDpiY); - width = (int)widthd; + width = CSSPrimitiveValueImpl::snapValue(widthd); // somewhat resemble Mozilla's granularity // this makes border-width: 0.5pt borders visible if (width == 0 && widthd >= 0.025) width++;