<Swing Dev> [9] Review Request JDK-8147648 [hidpi] multiresolution image: wrong resolution variant is used as icon in the Unity panel

Semyon Sadetsky semyon.sadetsky at oracle.com
Thu Jul 21 08:49:45 UTC 2016


Hello Rajeev,

The taskbar icon is ok now.

I change the resolution variants from the test a bit:

                 final BaseMultiResolutionImage IMG = new 
BaseMultiResolutionImage(
                         new BufferedImage[]{generateImage(4, 
Color.RED), generateImage(10, Color.BLUE)});

And the icon I see in the taskbar and in the button is blue. It seems to 
me the first resolution variant (red) is more appropriate in this case 
because its size is closer to the spot. I'm not sure if this is an issue.

I have an extra question to you and Alexander.
Most native apps on Linux set an array of icons with _NET_WM_ICON. 
Usually they are [16x16, 32x32, 64x64].
So, desktop environment may select icon of appropriate size.
In this fix we are preselecting icon of a specific size in the app and 
send it to WM.
Why not to send array of the resolution variants images and let the 
desktop environment to select the appropriate one, like native apps do?


--Semyon

On 19.07.2016 23:26, Rajeev Chamyal wrote:
>
> Hello Semyon,
>
> Please review the updated webrev.
>
> http://cr.openjdk.java.net/~rchamyal/8147648/webrev.03/ 
> <http://cr.openjdk.java.net/%7Erchamyal/8147648/webrev.03/>
>
> Regards,
>
> Rajeev Chamyal
>
> *From:*Semyon Sadetsky
> *Sent:* 14 July 2016 16:58
> *To:* Rajeev Chamyal; swing-dev at openjdk.java.net; Sergey Bylokhov; 
> Alexander Scherbatiy
> *Subject:* Re: <Swing Dev>[9] Review Request JDK-8147648 [hidpi] 
> multiresolution image: wrong resolution variant is used as icon in the 
> Unity panel
>
> Hi Rajeev,
>
> I have added 1px border to the icon in your test:
>
>     private static BufferedImage generateImage(int scale, Color c) {
>         int x = SZ * scale;
>         BufferedImage img = new BufferedImage(x, x, 
> BufferedImage.TYPE_INT_RGB);
>         Graphics g = img.getGraphics();
>         if (g != null) {
>             g.setColor(c);
>             g.fillRect(0, 0, x, x);
>             g.setColor(Color.YELLOW);
>             g.drawRect(0, 0, x-1, x-1);
>         }
>         return img;
>     }
>
> It seems the icon in the taskbar is not correct for UI scale > 1.
>
> By the way, graphics object should be disposed using g.dispose() when 
> it is not needed anymore.
>
> --Semyon
>
> On 14.07.2016 10:08, Rajeev Chamyal wrote:
>
>     Hello All,
>
>     Gentle reminder. Please review the updated webrev.
>
>     http://cr.openjdk.java.net/~rchamyal/8147648/webrev.02/
>     <http://cr.openjdk.java.net/%7Erchamyal/8147648/webrev.02/>
>
>     Update: simplified the test.
>
>     Regards,
>
>     Rajeev Chamyal
>
>     *From:*Alexandr Scherbatiy
>     *Sent:* 22 June 2016 15:46
>     *To:* Rajeev Chamyal; Sergey Bylokhov; swing-dev at openjdk.java.net
>     <mailto:swing-dev at openjdk.java.net>
>     *Subject:* Re: <Swing Dev>[9] Review Request JDK-8147648 [hidpi]
>     multiresolution image: wrong resolution variant is used as icon in
>     the Unity panel
>
>     The fix looks good to me.
>
>     Thanks,
>     Alexandr.
>
>     On 6/22/2016 10:49 AM, Rajeev Chamyal wrote:
>
>         Hello Alexandr,
>
>         Thanks for the review. I have updated webrev as per comments.
>
>         http://cr.openjdk.java.net/~rchamyal/8147648/webrev.01/
>         <http://cr.openjdk.java.net/%7Erchamyal/8147648/webrev.01/>
>
>         Regards,
>
>         Rajeev Chamyal
>
>         *From:*Alexandr Scherbatiy
>         *Sent:* 21 June 2016 17:37
>         *To:* Rajeev Chamyal; Sergey Bylokhov;
>         swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
>         *Subject:* Re: <Swing Dev>[9] Review Request JDK-8147648
>         [hidpi] multiresolution image: wrong resolution variant is
>         used as icon in the Unity panel
>
>         On 6/21/2016 12:16 PM, Rajeev Chamyal wrote:
>
>             Hello All,
>
>             Please review the following webrev.
>
>             Webrev:
>             http://cr.openjdk.java.net/~rchamyal/8147648/webrev.00/
>             <http://cr.openjdk.java.net/%7Erchamyal/8147648/webrev.00/>
>
>             Bug: https://bugs.openjdk.java.net/browse/JDK-8147648
>
>             Issue: Wrong resolution variant is used as icon in the
>             Unity panel.
>
>             Cause: The screen transforms are not applied to find the
>             correct resolution variant image in current implementation.
>
>             Fix: Applied the screen transforms to graphics object.
>
>
>          222         int scaleX = (int)tx.getScaleX();
>          223         int scaleY = (int)tx.getScaleY();
>          224         DataBufferInt buffer = new DataBufferInt(scaleX *
>         width * scaleY * height);
>
>           The fix is in the shared code and the scale factor can have
>         floating point value on Windows. (for example 1.5).
>           It is better to round the final width and height after
>         scaling them.
>
>           Thanks,
>           Alexandr.
>
>             Regards,
>
>             Rajeev Chamyal
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20160721/fa515bdf/attachment.html>


More information about the swing-dev mailing list