<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
Fri Jul 22 10:20:54 UTC 2016


On 7/22/2016 1:04 PM, Rajeev Chamyal wrote:

> Hello Semyon,
>
> Below is the bug id.
>
> https://bugs.openjdk.java.net/browse/JDK-8162387
>
Please add [hidpi] prefix to the title. Also link it to the JDK-8147648.

--Semyon
>
> Regards,
>
> Rajeev Chamyal
>
> *From:*Semyon Sadetsky
> *Sent:* 22 July 2016 15:21
> *To:* Rajeev Chamyal; Alexander Scherbatiy; 
> 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/22/2016 12:14 PM, Rajeev Chamyal wrote:
>
>     Hello Semyon,
>
>     Your suggestion regarding _NET_WM_ICON requires some investigation
>     and can be implemented as separate bug.
>
> Ok. Please create this bug.
>
> --Semyon
>
>     Could you please review the webrev.
>
>     http://cr.openjdk.java.net/~rchamyal/8147648/webrev.03/
>     <http://cr.openjdk.java.net/%7Erchamyal/8147648/webrev.03/>
>
>     Regards,
>
>     Rajeev Chamyal
>
>     *From:*Alexandr Scherbatiy
>     *Sent:* 21 July 2016 20:42
>     *To:* Rajeev Chamyal; Semyon Sadetsky; swing-dev at openjdk.java.net
>     <mailto: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 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
>         <mailto: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/20160722/fe8034c6/attachment.html>


More information about the swing-dev mailing list