[OpenJDK 2D-Dev] [8] Request for review: 8004859 Graphics.getClipBounds/getClip return difference nonequivalent bounds, depending from transform.

Jim Graham james.graham at oracle.com
Thu Dec 20 09:49:22 UTC 2012

More to the point, if you substitute a 0x0 clip when an incoming clip is 
an empty rectangle then it will always be empty under any kind of 
transform.  This could be done by performing a "max(w,0);max(h,0);" 
operation on the incoming data.  Once a clip is accepted as non-empty, 
then I think the current code will adequately deal with flipped 
transforms, won't it?


On 12/19/2012 8:47 PM, Jim Graham wrote:
> Hi Sergey,
> This is all a lot more complicated than I think it needs to be.  Why not
> just detect incoming empty rectangles and force an empty composite clip
> in that case?  No heuristics necessary...
>              ...jim
> On 12/15/2012 9:26 AM, Sergey Bylokhov wrote:
>> Hi, Jim.
>> Could you please review the updated version of the fix:
>> http://cr.openjdk.java.net/~serb/8004859/webrev.01
>> 14.12.2012 0:40, Jim Graham wrote:
>>> This fix breaks other behavior.
>>> You need to use setFrameFromDiagonal on the results of the transform
>>> because a flip or rotation can cause the transformed points to be
>>> unordered and setFFD will sort them as they need to be.  It is the
>>> incoming rectangle that needs to be checked for being empty, not the
>>> results of the transform.
>> In the new version I restore coordinates relation, if it were changed
>> during transform.
>> Swap needed:
>>   - If the user provide incorrect rectangle and after transformation we
>> get correct rectangle.
>>   - If the user provide correct rectangle and after transformation we
>> get incorrect rectangle.
>>> The case that will fail with this fix is setting the clip to a valid
>>> rectangle in a coordinate system that is rotated by a multiple of 90
>>> degrees or is flipped horizontally or vertically. Those cases will
>>> result in an empty clip, but the clip was not empty coming in...
>>>             ...jim
>>> On 12/13/2012 3:08 AM, Sergey Bylokhov wrote:
>>>> Hello,
>>>> Please review the fix for jdk 8.
>>>> Change description:
>>>> 1 transformShape now symmetric to untransformShape()
>>>> (setFrameFromDiagonal was removed).
>>>> 2 getClipBounds now always uses getBounds2D which does not return empty
>>>> Rectangle if the userclip has negative width or height.
>>>> Note that if the userclip has negative width or height, our real
>>>> graphic
>>>> clip will be empty/no-area. This wasn't true before the fix for the
>>>> scaled graphics.
>>>> Bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8004859
>>>> Webrev can be found at:
>>>> http://cr.openjdk.java.net/~serb/8004859/webrev.00

More information about the 2d-dev mailing list