<AWT Dev> <Swing Dev> [10] Review request for 8182043: Access to Windows Large Icons

Alexey Ivanov alexey.ivanov at oracle.com
Fri Oct 6 18:42:14 UTC 2017

Hi Semyon, Sergey,

On 30/09/2017 00:08, Semyon Sadetsky wrote:
> On 9/29/2017 3:15 PM, Sergey Bylokhov wrote:
>> On 9/29/17 12:39, Semyon Sadetsky wrote:
>>>>> Why 128 pixels? Windows shell usually provides icons up to 256 
>>>>> pixels, for example there are 256×256 icons for folders and 
>>>>> generic file type.
>>>> It is limitation of our implementation:
>>>> https://bugs.openjdk.java.net/browse/JDK-8151385
>>>> http://mail.openjdk.java.net/pipermail/awt-dev/2016-March/010777.html
>>> Sergey, it is not clear how those links are related to the icon size 
>>> returned by Windows?
>> It was a fix where the MAX_ICON_SIZE=128 was added.
> Actually it limits nothing. We told about the Extract call which may 
> return any size.

Yes, it does. It limits the size of the returned icon to 128×128.
I guess if a larger icon is requested, then we'll get a distorted image.

>>>> As far as I understand the bug above, it is possible that OS 
>>>> returns some other size.
>>> You've probably didn't understand what Alexey meant. The Extract 
>>> call may return any size you request (it does scaling internally if 
>>> there are no suitable image) > But the bug above is about queering 
>>> the fixed size
>>> (small or long) which size is determined by OS shell according to 
>>> the current scale. For those fixed sizes we use SHGetFileInfo not 
>>> the Extract.
>> And every time we will try to make an icon it will be limited to 
>> 128x128. But it is not critical.
>> The issue is that this api, as you said, will depends from some 
>> general "current scale". which is unrelated to the transform of the 
>> screen in java.
>> If the user will want to use FILE_ICON_LARGE, then to work properly 
>> he will need to use this code every time in the the paint():
>> Icon icon = getSystemIcon(file, FILE_ICON_LARGE);
>> Icon hicon = getSystemIcon(file, 
>> icon.getIconWidth()*currentScreenScale);
> This is just wrong. The first line is the correct one for both HiDPI 
> and nonHiDPI. If you want to have icons like in native apps. For 
> custom behavior - please use the second line.

Why is it wrong?
getSystemIcon(file) requests FILE_ICON_SMALL from the OS, then all Java 
has to paint at any DPI scale is 16×16 icon.

Or am I missing anything?


More information about the awt-dev mailing list