<AWT Dev>  Review request for 8011059 [macosx] Make JDK demos look perfect on retina displays
Sergey.Bylokhov at oracle.com
Wed Nov 13 11:44:39 PST 2013
On 13.11.2013 23:25, Sergey Bylokhov wrote:
>>>> - The logic in using the transform is also a bit murky. I think if
>>>> you set the scale on a retina display to exactly 1/2 it would use the
>>>> HiDPI version even though the scale was 1:1. Since I support not
>>>> examining the transform there, I'm going to present this as another
>>>> reason why we should just base it on devScale, but the logic could be
>>>> fixed if we really plan to use the transform here.
>>> It also allow to the user to use a transform and a hint and force the
>>> images to draw the scaled version even to the BufferedImage fo ex.
>>> can be useful in case of sequential drawing of BI-> BI->retina.
>> I think you misunderstood me here. I'm not saying anything about the
>> BI->BI->retina case. I'm saying that even on pure retina your logic
>> chooses the wrong scale because of mistakes made in examining the
>> transform state type.
> No I understood. But a transform of the sg2d already include devScale.
> This part of the fix was changed from version to version. We could use
> devScale only, or a transform if it is scaled, or an any transform. If
> nobody objects, we could use any type of transform.
> My point about BI1-BI2-retina is that the user cannot control
> devScale, and so cannot force BI1 to use scaled version. But if we
> take into account current transform of the SG2D, then user can control
> that via transform and hint.
I just realize that hint is not necessary now and can be skip it,
because we use instanceof anyway(img instanceof MultiResolutionImage).
>> If devScale is 2, but the transform is a scale then the scales used
>> to compute the resolution image will be based solely on the
>> transform. If devScale is 2, but the transform is identity, then the
>> scales used to compute the resolution image should be 1.0 because
>> that is the actual scale being applied to the image, but the logic
>> will use 2 (i.e. the devScale) instead because of bad handling of the
>> Also, in the case of TRANSFORM_GENERIC just the devScale is used even
>> if they scale it down to .001.
>> You probably need to only use the transform if you are going to use
>> it at all and you need to use it for all transformState values (there
>> may be optimizations based on the transformState, but the most
>> complete transform type should not fall through to a default, neither
>> should the translate-only states).
Best regards, Sergey.
More information about the awt-dev