Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related) - #8114

Merged
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils
Jan 24, 2025
Merged

Add ImageUtilities methods to help migrating away from "new ImageIcon" (SVG icon related)#8114
eirikbakke merged 2 commits into
apache:masterfrom
eirikbakke:pr-moreimageutils

Conversation

@eirikbakke

@eirikbakkeeirikbakke commented Jan 5, 2025

Copy link
Copy Markdown
Contributor

Background: To ensure that SVG icons are loaded and drawn at full resolution, direct use of ImageIcon constructors should be avoided in the NetBeans codebase. The ImageIcon instances returned from methods in ImageUtilities, by contrast, are instances of a special subclass of ImageIcon that support vector graphics painting.

During work to remove uses of "new ImageIcon" constructors in the codebase (including #8109), I see that a few new utility methods would be useful in ImageUtilities. This PR proposes adding the following methods to ImageUtilities:

  • loadIcon(String,boolean) works like loadIconImage(String,boolean) but returns only a plain Icon (not IconImage). This would help discourage use of IconImage in the future.
  • loadIcon(String) is equivalent to loadIcon(String,false)
  • toImageIcon(Icon) helps cases where an existing API requires an ImageIcon to be returned, but where we only have an Icon.
  • loadImage(URL) helps migrate away from uses of Toolkit.getDefaultToolkit().createImage(), which has similar problems as "new ImageIcon".

This PR also contains, in a separate commit, migration away from the Toolkit.getDefaultToolkit().createImage() method, using the new loadImage(URL) method. This makes, for instance, the "lightbulb" icons in the editor gutter show up properly with their new SVG icons:

image

@eirikbakkeeirikbakke added API Change [ci] enable extra API related tests Platform [ci] enable platform tests (platform/*) UI User Interface labels Jan 5, 2025
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@eirikbakke

eirikbakke commented Jan 6, 2025

Copy link
Copy Markdown
ContributorAuthor

There is one more method I could add which might be useful, which is a mergeIcons(Icon,Icon,int,int) which works like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image. It could simplify some of the cases in #8109.

@mbienmbien added the Code cleanup Label for cleanup done on the Netbeans IDE label Jan 7, 2025
@eirikbakke
eirikbakkeforce-pushed the pr-moreimageutils branch 3 times, most recently from 4ffa602 to 04ca39cCompareJanuary 7, 2025 14:00
@eirikbakke

eirikbakke commented Jan 7, 2025

Copy link
Copy Markdown
ContributorAuthor

I pushed a revision to the two commits in this PR. Changes since your previous review:

  • Change the new loadImage(URL) to loadImage(URI). Update call sites accordingly in the second commit.
  • Clean up the Javadoc in ImageUtilities to avoid repeating the explanation of resource path loading semantics (substitution of dark mode suffixes and SVG images) for every similar method. Some other Javadoc edits for grammar, consistency etc.
  • Add the ImageUtilities.mergeIcons(Icon,Icon,int,int) method (like mergeImages(Image,Image,int,int) but takes and returns Icon instances instead of Image) as well, for future use.

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

(Latest push was just a rebase on master.)

@mbienmbien left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me. Please check the comment I added.

Comment threadplatform/openide.util.ui/src/org/openide/util/ImageUtilities.java Outdated
@mbienmbien added this to the NB25 milestone Jan 15, 2025
@mbien

Copy link
Copy Markdown
Member

don't forget to squash, looks like this could be 1-2 commits.

…ding methods used throughout the codebase easier. (Additive API change.)
Edit Javadoc to avoid repeating semantics that are common to many methods. Some other Javadoc cleanup.
…mageUtilities.loadImage(URI), to make SVG icons work in these cases.
@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

Squashed so that two commits remain: The API change in isolation, and the call sites that make use of it.

@eirikbakke
eirikbakke merged commit 3fa8212 into apache:masterJan 24, 2025
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Jan 25, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
@mbien

Copy link
Copy Markdown
Member

i give it a 75% chance that someone will complain that the light bulbs are too large - but I think i like them after running RC1 for ~2 days :)

@eirikbakke

Copy link
Copy Markdown
ContributorAuthor

@mbien Yeah the old ones were scaled down a bit relative to the lightbulb-only icon. I might adjust it the next time I do a round of editing on these.

image

@mbien

Copy link
Copy Markdown
Member

its fine - they are now using LEDs and were no longer available in the same size

eirikbakke added a commit to eirikbakke/incubator-netbeans that referenced this pull request Feb 24, 2025
This is a follow-up on apache#8114 and apache#8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
eirikbakke added a commit that referenced this pull request Feb 24, 2025
This is a follow-up on #8114 and #8109 . To render at full HiDPI resolution, Icon/Image instances must be created via the methods in ImageUtilities rather than, in particular, the constructors of ImageIcon.
This PR, combined with the previously mentioned PRs, handles most of the remaining cases.
Specifically:
* Search for 'new ImageIcon(' and rewrite each case to use ImageUtilities to load icons instead.
* Search for 'instanceof ImageIcon' and generalize to 'instanceof Icon' when appropriate.
* Search for 'getLookAndFeel*getDisabledIcon' and switch to ImageUtilities.createDisabledIcon.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

API Change[ci] enable extra API related testsCode cleanupLabel for cleanup done on the Netbeans IDEPlatform[ci] enable platform tests (platform/*)UIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The icon for running a test method is not displayed correctly in the dark editor theme

3 participants

@eirikbakke@mbien@neilcsmith-net