<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
Mon Jul 25 07:43:12 UTC 2016
The fix looks good to me.
Thanks,
Alexandr.
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.
>
> 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;
> 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/20160725/d3168198/attachment.html>
More information about the swing-dev
mailing list