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

Alexandr Scherbatiy alexandr.scherbatiy at oracle.com
Thu Jul 21 09:39:13 UTC 2016


On 7/21/2016 11:49 AM, Semyon Sadetsky wrote:
> 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?
   This sounds as good idea. MultiResolutionImage has the special method 
for this "List<Image> getResolutionVariants()". We do the similar on Mac 
OS X where NSImage with several representations is created from a 
MultiResolutionImage:
http://cr.openjdk.java.net/~alexsch/8028212/webrev.01/src/macosx/classes/sun/lwawt/macosx/CImage.java.udiff.html

  It has sense to try the same approach on Linux.

   Thanks,
   Alexandr.
>
>
> --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/
>>
>> 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/
>>
>>     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
>>     *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/
>>
>>         Regards,
>>
>>         Rajeev Chamyal
>>
>>         *From:*Alexandr Scherbatiy
>>         *Sent:* 21 June 2016 17:37
>>         *To:* Rajeev Chamyal; Sergey Bylokhov; 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/89e9b7fd/attachment.html>


More information about the swing-dev mailing list