[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-2d-dev
Subject: Re: [OpenJDK 2D-Dev] RFR: 8182043: Access to Windows Large Icons
From: Alexey Ivanov <aivanov () openjdk ! java ! net>
Date: 2020-10-08 22:43:23
Message-ID: j6-IdWKuJNRBs7fRdEqlI6Ht5VkFQxMezy0qk2mlj7g=.0d379bf1-f2dd-4d1b-8e12-849dd7579f88 () github ! com
[Download RAW message or body]
On Mon, 28 Sep 2020 15:20:33 GMT, Alexander Zuev <kizune@openjdk.org> wrote:
> Moving review from Mercurial. See \
> https://mail.openjdk.java.net/pipermail/awt-dev/2020-August/016078.html for \
> previous iteration.
src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp line 986:
> 984: hIcon = hIconLow;
> 985: } else {
> 986: fn_DestroyIcon((HICON)hIconLow);
I wonder why you extract two icons, you never use both. This adds a delay: only one \
of the extracted icons is ever used. If the idea is to limit the size by 16, then \
min(16, size) passed as the icon size would do the trick.
Each time we use this function, we request two icons but we never use both of them.
Suggestion:
if (size < 24) {
size = 16;
}
hres = pIcon->Extract(szBuf, index, &hIcon, NULL, size);
And `hIconLow` can be removed.
src/java.desktop/share/classes/javax/swing/filechooser/FileSystemView.java line 263:
> 261: * a system file browser for the requested size.
> 262: *
> 263: * The default implementation gets information from the
Suggestion:
* <p>The default implementation gets information from the
src/java.desktop/share/classes/javax/swing/filechooser/FileSystemView.java line 264:
> 262: *
> 263: * The default implementation gets information from the
> 264: * <code>ShellFolder</code> class. Whenever possible the icon
Suggestion:
* <code>ShellFolder</code> class. Whenever possible, the icon
Do we continue using `<code>` elements? I thought that `{@code}` is the preferred way \
to markup class names.
src/java.desktop/share/classes/javax/swing/filechooser/FileSystemView.java line 269:
> 267: * magnification factors.
> 268: *
> 269: * Example: <pre>
Suggestion:
* <p>Example: <pre>
src/java.desktop/share/classes/sun/awt/shell/ShellFolder.java line 207:
> 205: * Returns the icon of the specified size used to display this shell \
> folder.
> 206: *
> 207: * @param size size of the icon > 0(Valid range: 1 to 256)
Suggestion:
* @param size size of the icon > 0 (Valid range: 1 to 256)
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java line 1035:
> 1033: new BufferedImage(iconSize, iconSize, \
> BufferedImage.TYPE_INT_ARGB);
> 1034: img.setRGB(0, 0, iconSize, iconSize, iconBits, 0, iconSize);
> 1035: return img;
There are cases where the size of the buffered image is different from the requested \
size. It could affect the layout because it breaks the assumption that the returned \
image has the requested size but it may be larger.
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java line 1105:
> 1103: bothIcons.put(getLargeIcon? \
> SMALL_ICON_SIZE : LARGE_ICON_SIZE, newIcon2);
> 1104: newIcon = new \
> MultiResolutionIconImage(getLargeIcon ? LARGE_ICON_SIZE
> 1105: : SMALL_ICON_SIZE, bothIcons);
I propose to refactor this code into a separate method which always fetches small and \
large icon and puts into a corresponding cache.
However, I still think there's not much value in getting smaller icon size in \
addition to larger one. Or does it provide an alternative image for the case where \
the system scaling is 200% and the window is moved to a monitor with scaling of 100%?
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java line 1163:
> 1161:
> 1162: multiResolutionIcon.put(s, newIcon);
> 1163: if (size < 8 || size > 256) {
Suggestion:
if (size < MIN_QUALITY_ICON || size > MAX_QUALITY_ICON) {
src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java line \
414:
> 412: if (i >= 0) {
> 413: return Win32ShellFolder2.getShell32Icon(i,
> 414: key.startsWith("shell32LargeIcon ")?LARGE_ICON_SIZE : \
> SMALL_ICON_SIZE);
Suggestion:
key.startsWith("shell32LargeIcon ") ? LARGE_ICON_SIZE : \
SMALL_ICON_SIZE);
test/jdk/javax/swing/JFileChooser/FileSystemView/SystemIconTest.java line 69:
> 67: }
> 68: }
> 69: }
Does it make sense to check that the icon is a multi-resolution image with the \
expected sizes?
-------------
PR: https://git.openjdk.java.net/jdk/pull/380
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic