[OpenJDK 2D-Dev] [9] Review request for 8160124 SunGraphics2D.hitClip() can give wrong result for floating point scale

Jim Graham james.graham at oracle.com
Tue Aug 2 22:02:27 UTC 2016


On 08/02/2016 10:36 AM, Sergey Bylokhov wrote:
> On 27.07.16 1:56, Jim Graham wrote:
>> Rectangle2D rClip = (Rectangle2D) usrClip;
>> int x0 = (int) Math.ceil(rClip.getMinX() - 0.5);
>> int y0 = (int) Math.ceil(rClip.getMinY() - 0.5);
>> int x1 = (int) Math.ceil(rClip.getMaxX() - 0.5);
>> int x1 = (int) Math.ceil(rClip.getMaxY() - 0.5);
>> clipRegion = devClip.getIntersectionXYXY(x0, y0, x1, y1);
>>
>> Some work and testing should be done to see what happens when any of the
>> min/max/xy coordinates overflow an integer, but that would be the basic
>> gist of what we should be doing in that case in validateCompClip()...
>
> Should we really take care about negative minXY/maxXY here? I assume
> that negative coordinates will be skipped anyway when we interact them
> with devClip. So it seems we can simply cast double to int here?

That might be possible if we were using floor(), but we are using ceil() 
so casting is not a suitable substitute.  I'd still rather see explicit 
floor being used in cases like this that aren't in some sort of 
per-pixel loop, but in either case, when we need a ceil() operation, we 
can't rely on casting anyway...

			...jim



More information about the 2d-dev mailing list