[OpenJDK 2D-Dev]  Request for review: 8004859 Graphics.getClipBounds/getClip return difference nonequivalent bounds, depending from transform.
james.graham at oracle.com
Thu Dec 20 04:47:30 UTC 2012
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...
On 12/15/2012 9:26 AM, Sergey Bylokhov wrote:
> Hi, Jim.
> Could you please review the updated version of the fix:
> 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...
>> On 12/13/2012 3:08 AM, Sergey Bylokhov wrote:
>>> 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:
More information about the 2d-dev