<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 15:12:07 UTC 2016


On 7/21/2016 5:25 PM, Rajeev Chamyal wrote:
>
> Hello Semyon,
>
> The resolution variant image returned is based on the implementation 
> of BaseMultiResolutionImage::getResolutionVariant API.
>
> Current implementation of 
> BaseMultiResolutionImage::getResolutionVariant returns a resolution 
> variant image which has width and height greater than or equal to the 
> passed width and height.
>
   There is a known issue on it:
     JDK-8148619 Select the closest resolution variant in 
BaseMultiResolutionImage
       https://bugs.openjdk.java.net/browse/JDK-8148619

   Thanks,
   Alexandr.
>
> In the case you have suggested dimensions of RED and BLUE images are 
> 32 and  80 respectively.
>
> Width and height passed to getResolutionVariant is 64  i.e. scaled 
> width and height of base image(RED) (GDK_SCALE=2) and blue image is 
> getting returned.
>
> The width and height passed to this  API is that of base image not of 
> the spot.
>
> Applications can control this behaviour by overriding this API in 
> derived classes.
>
> Regards,
>
> Rajeev Chamyal
>
> *From:*Alexandr Scherbatiy
> *Sent:* 21 July 2016 15:09
> *To:* Semyon Sadetsky; Rajeev Chamyal; swing-dev at openjdk.java.net; 
> Sergey Bylokhov
> *Subject:* Re: <Swing Dev>[9] Review Request JDK-8147648 [hidpi] 
> multiresolution image: wrong resolution variant is used as icon in the 
> Unity panel
>
> 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 
> <http://cr.openjdk.java.net/%7Ealexsch/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/
>         <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
>         <mailto: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/518423fb/attachment.html>


More information about the swing-dev mailing list