[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-2d-dev
Subject: Re: [OpenJDK 2D-Dev] [8] Request for review: 8004859 Graphics.getClipBounds/getClip return differenc
From: Sergey Bylokhov <Sergey.Bylokhov () oracle ! com>
Date: 2013-06-26 12:07:01
Message-ID: 51CAD965.4050402 () oracle ! com
[Download RAW message or body]
Hello.
No volunteers to review the fix?
Thanks.
On 10.06.2013 16:49, Sergey Bylokhov wrote:
> Hello.
> Additional note is that this fix is targeted to 7u40.
>
> On 06.06.2013 22:38, Sergey Bylokhov wrote:
> > HI, Jim.
> > Can you review the updated version of the fix:
> > http://cr.openjdk.java.net/~serb/8004859/webrev.03
> > I decided to implement an option, where transformed graphics
> > (identity, translated, scaled) returns equivalent clip. For this in
> > the transformShape() we preserve orientation of Rectangle, and in the
> > getClipBounds() we do not lose this information because we use
> > getBounds2D() instead of getBounds(). Note that I have simplified
> > getClipBounds() from the previous version:
> > http://cr.openjdk.java.net/~serb/8004859/webrev.02/src/share/classes/sun/java2d/SunGraphics2D.java.sdiff.html \
> >
> > Also there is no additional check for empty rectangles.
> > > The original code in getClipBounds would end up returning a "new
> > > Rectangle()" if the clip was an empty rectangle due to the way that
> > > "Rectangle2D/Path2D.getBounds()" works. You now use
> > > setFrame(getBounds2D()) which will attempt to preserve the dimensions
> > > of empty clips. So, the "preserve the size of an empty clip" support
> > > is new.
> > Yes it is new in case of Rectangle2D, but now it works in the same
> > way as for Rectangle.
> >
> > On 23.04.2013 1:11, Jim Graham wrote:
> > > I think if empty (un)transforms to something else that is also
> > > classified as empty naturally without having to special case it or
> > > test it then returning the "transformed empty thing" is a fine
> > > return value.
> > >
> > > But, if it comes down to "Eeek, it was empty so I need to calculate
> > > a specifically similar empty thing to return" then I feel that the
> > > test should just result in "return new Rectangle()". No use pulling
> > > hair out to make a "more useful non-answer" unless it falls out of
> > > the calculations for free - as in "unless it avoids even having to
> > > check for the exceptional condition in the first place". In the
> > > cases I reviewed I seem to recall that we were doing the tests
> > > anyway (or we were doing equally complex tests in order to normalize
> > > the answer even if we never explicitly tested for "isEmpty()") so it
> > > would make the code much less problematic to just weed the empty
> > > answers out early.
> > >
> > > As far as "are any Developers expecting a usefully non-degenerate
> > > empty answer" then I don't think so...
> > >
> > > ...jim
> > >
> > > On 4/18/13 6:24 AM, Sergey Bylokhov wrote:
> > > > Hello Jim.
> > > >
> > > > On 1/17/13 4:56 AM, Jim Graham wrote:
> > > > > The original code in getClipBounds would end up returning a "new
> > > > > Rectangle()" if the clip was an empty rectangle due to the way that
> > > > > "Rectangle2D/Path2D.getBounds()" works. You now use
> > > > > setFrame(getBounds2D()) which will attempt to preserve the dimensions
> > > > > of empty clips. So, the "preserve the size of an empty clip" support
> > > > > is new.
> > > > >
> > > > > I then mentioned that we don't need to go out of our way to preserve
> > > > > the dimensions of an empty clip, but you seem to be saying that we
> > > > > don't want to change this behavior - but your new code represents the
> > > > > break with existing behaviors, no?
> > > > I returned to this problem and studied it a little more deeply.
> > > > Description.
> > > > Assume we set clip=Rectangle[100, 100,-100,-100] for sg2d with a
> > > > different transform.
> > > > 1 identity/translate (default mode for non-retina): getClip () will
> > > > return Rectangle[100, 100,-100,-100].
> > > > 2 scale (default mode for retina): getClip() will return
> > > > Rectangle[0,0,100,100] <- bug and it should be fixed.
> > > > 3 generic: getClip will return Rectangle[0,0,0,0], because we
> > > > convert
> > > > Rectangle to the Shape through RectIterator, which ignores the
> > > > negative
> > > > width and height. Note that x and y were not preserved only if w and
> > > > h<0, but if w = h =0, then x and y will be preserved.
> > > >
> > > > In an original fix I made case 2 like case 1, so from the point of
> > > > view
> > > > of users there was no difference in case of retina display.
> > > > But now I have doubts and I think that all cases shall work equally
> > > > like
> > > > in case 3.
> > > > What do you think?
> > > >
> > > > >
> > > > > ...jim
> > > >
> > > >
> > >
> >
> >
>
>
--
Best regards, Sergey.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic