From arapte at openjdk.org Mon Dec 1 08:54:13 2025 From: arapte at openjdk.org (Ambarish Rapte) Date: Mon, 1 Dec 2025 08:54:13 GMT Subject: RFR: 8296653: ComboBox promptText is not displayed when the value is reset [v3] In-Reply-To: <3sUDDeRx4lDjC_zky1Ktckb2Fj6Kmn3YxSt4CbpiBEk=.d0a90b74-b331-4977-9c7d-e7619fceeced@github.com> References: <3sUDDeRx4lDjC_zky1Ktckb2Fj6Kmn3YxSt4CbpiBEk=.d0a90b74-b331-4977-9c7d-e7619fceeced@github.com> Message-ID: <-jo5DEwkUoFhC7pFvp91GbYw6dCOVO5QSsg94Lj-MUk=.bca14e2e-5bd3-4e41-837a-e75257838f2f@github.com> On Fri, 28 Nov 2025 15:50:23 GMT, Ziad El Midaoui wrote: >> The issue occurred because the skin marks the button cell as ?empty? when the value becomes null. >> With the fix clearing the ComboBox value re-shows the prompt text. >> Tested using the code present in the bug. > > Ziad El Midaoui has updated the pull request incrementally with one additional commit since the last revision: > > Fixed test lgtm+.. ------------- Marked as reviewed by arapte (Reviewer). PR Review: https://git.openjdk.org/jfx/pull/1989#pullrequestreview-3523856091 From arapte at openjdk.org Mon Dec 1 10:31:50 2025 From: arapte at openjdk.org (Ambarish Rapte) Date: Mon, 1 Dec 2025 10:31:50 GMT Subject: RFR: 8371855: Time stamps are missing on zip bundles with gradle 9 Message-ID: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> Gradle 9 onwards, the [Archive tasks (Jar, Ear, War, Zip, AbstractArchiveTask) produce reproducible archives by default](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) Under this change, there are two factors that affect our zip files. 1. Files have fixed timestamps (timestamps depends on the archive type). 2. File order in the archive is now deterministic. Especially the timestamp is a concern, the files now have a fixed timestamp i.e. 1 Feb 1980 instead of the creation date. the [gradle upgrading guide](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) provides the solution on how to restore previous behavior. The fix picks 2 necessary flags. Verified that for all files extracted from generated zip files: 1. Timestamp is now not fixed, and reflects the CREATION date. 2. The file permissions are unchanged. ------------- Commit messages: - File timestamp Changes: https://git.openjdk.org/jfx/pull/1993/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1993&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8371855 Stats: 3 lines in 1 file changed: 3 ins; 0 del; 0 mod Patch: https://git.openjdk.org/jfx/pull/1993.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1993/head:pull/1993 PR: https://git.openjdk.org/jfx/pull/1993 From zelmidaoui at openjdk.org Mon Dec 1 11:55:14 2025 From: zelmidaoui at openjdk.org (Ziad El Midaoui) Date: Mon, 1 Dec 2025 11:55:14 GMT Subject: RFR: 8296653: ComboBox promptText is not displayed when the value is reset [v3] In-Reply-To: <3sUDDeRx4lDjC_zky1Ktckb2Fj6Kmn3YxSt4CbpiBEk=.d0a90b74-b331-4977-9c7d-e7619fceeced@github.com> References: <3sUDDeRx4lDjC_zky1Ktckb2Fj6Kmn3YxSt4CbpiBEk=.d0a90b74-b331-4977-9c7d-e7619fceeced@github.com> Message-ID: On Fri, 28 Nov 2025 15:50:23 GMT, Ziad El Midaoui wrote: >> The issue occurred because the skin marks the button cell as ?empty? when the value becomes null. >> With the fix clearing the ComboBox value re-shows the prompt text. >> Tested using the code present in the bug. > > Ziad El Midaoui has updated the pull request incrementally with one additional commit since the last revision: > > Fixed test Thanks for the reviews ------------- PR Comment: https://git.openjdk.org/jfx/pull/1989#issuecomment-3596114947 From zelmidaoui at openjdk.org Mon Dec 1 11:55:15 2025 From: zelmidaoui at openjdk.org (Ziad El Midaoui) Date: Mon, 1 Dec 2025 11:55:15 GMT Subject: Integrated: 8296653: ComboBox promptText is not displayed when the value is reset In-Reply-To: References: Message-ID: <1a8IpDZ5RuQ4ty79TWZTjNxUMSaDu8DfkDwH_pkb8AU=.bf9971bb-5622-4129-b17b-f7f8c5da9678@github.com> On Wed, 26 Nov 2025 16:11:52 GMT, Ziad El Midaoui wrote: > The issue occurred because the skin marks the button cell as ?empty? when the value becomes null. > With the fix clearing the ComboBox value re-shows the prompt text. > Tested using the code present in the bug. This pull request has now been integrated. Changeset: 3043e91b Author: Ziad El Midaoui URL: https://git.openjdk.org/jfx/commit/3043e91b241e0307f01d3376b7549663f6df6f7c Stats: 36 lines in 2 files changed: 36 ins; 0 del; 0 mod 8296653: ComboBox promptText is not displayed when the value is reset Reviewed-by: arapte, mhanl ------------- PR: https://git.openjdk.org/jfx/pull/1989 From zelmidaoui at openjdk.org Mon Dec 1 12:44:06 2025 From: zelmidaoui at openjdk.org (Ziad El Midaoui) Date: Mon, 1 Dec 2025 12:44:06 GMT Subject: RFR: 8330559: Trailing space not rendering correctly in TextFlow in RTL mode In-Reply-To: <3OAXiv2TJygQrlInQuFiqq1RQWkEKKZdgEdD6e4-ma8=.dc7805f8-ef33-41c7-b21f-bf517aaad4cd@github.com> References: <9YBLOcueh9GZKb25W1ntyDE_sC744To-Ts0CxI201L4=.27113211-ce7b-49ce-8406-6b0c9105406e@github.com> <3OAXiv2TJygQrlInQuFiqq1RQWkEKKZdgEdD6e4-ma8=.dc7805f8-ef33-41c7-b21f-bf517aaad4cd@github.com> Message-ID: On Wed, 26 Nov 2025 21:12:58 GMT, Andy Goryachev wrote: > @Ziad-Mid do you think this fix is independent of ([JDK-8318095](https://bugs.openjdk.org/browse/JDK-8318095) I am checking the JDK-8318095 with more tests, but a first thought they look independant to me. I will check both and let you know. > Can this be tested with a JUnit Test? I am working on a JUnit Test for this bug as suggested . ------------- PR Comment: https://git.openjdk.org/jfx/pull/1988#issuecomment-3596360142 From kcr at openjdk.org Mon Dec 1 13:25:05 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 13:25:05 GMT Subject: RFR: 8372453: [macOS] Iconifying owner may not iconify owned window In-Reply-To: References: Message-ID: On Wed, 26 Nov 2025 21:35:08 GMT, Martin Fox wrote: >> In the macOS glass code an owned window is referred to as a child window and its owner is referred to as the parent. When a parent is iconified the glass code "iconifies" its children which is to say it hides them. Under the right circumstances the children may get ordered back to the front and made visible almost immediately. >> >> Details are in the bug report but when a window is iconified it may trigger the OS to notify every window that its NSScreen has changed (yes, this is weird). This causes reorderChildWindows to be called on the newly iconified parent and the process of re-ordering the child windows can cause hidden windows to be made visible. For some reason the NSScreen strangeness only happens if "System Settings > Desktop & Dock > Minimize windows into application icon" is turned OFF. This is not the first time we've encountered this, see [JDK-8353902](https://bugs.openjdk.org/browse/JDK-8353902) >> >> This PR fixes the problem in two ways. If reorderChildWindows is called on an iconified window it does nothing. If one of the child windows is hidden it is not re-ordered since that might make it visible. > > I've been testing on macOS 15 so maybe Apple fixed this in 26. When I finally make peace with Liquid Glass and install 26 I'll do some additional testing. @beldenfox Would you be willing to backport this to `jfx25u`? If so, navigate to commit 6234c07e0e7ef84145e8a17407bf983ddba13d05 and enter `/backport jfx25u` as a comment and follow the instructions. If you're not able to, I'll get someone else to backport it. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1985#issuecomment-3596529907 From kcr at openjdk.org Mon Dec 1 14:42:54 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 14:42:54 GMT Subject: RFR: 8333146: Move maven publication logic from build.gradle [v6] In-Reply-To: References: Message-ID: On Thu, 27 Nov 2025 11:06:42 GMT, Marius Hanl wrote: > > However, I also note that with this patch, even `gradle all` doesn't create `build/publications`. Consider adding a dependency to either `gradle sdk` or, more likely, `gradle all` so that still creates `build/publications`. > > Thanks for testing! Just so we have a common understanding: Depending on the `all` task seems to be a better choice than `sdk`? I guess because then we are sure that everything did run before, right? Either is fine, but having the `all` task depend on it seems a better choice (the fact that the `sdk` task currently depends on it seems somewhat arbitrary). ------------- PR Comment: https://git.openjdk.org/jfx/pull/1970#issuecomment-3596901343 From jgneff at openjdk.org Mon Dec 1 16:01:49 2025 From: jgneff at openjdk.org (John Neffenger) Date: Mon, 1 Dec 2025 16:01:49 GMT Subject: RFR: 8371855: Time stamps are missing on zip bundles with gradle 9 In-Reply-To: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> References: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> Message-ID: On Mon, 1 Dec 2025 10:27:10 GMT, Ambarish Rapte wrote: > Gradle 9 onwards, the [Archive tasks (Jar, Ear, War, Zip, AbstractArchiveTask) produce reproducible archives by default](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) > > Under this change, there are two factors that affect our zip files. > 1. Files have fixed timestamps (timestamps depends on the archive type). > 2. File order in the archive is now deterministic. > Especially the timestamp is a concern, the files now have a fixed timestamp i.e. 1 Feb 1980 instead of the creation date. > > the [gradle upgrading guide](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) provides the solution on how to restore previous behavior. The fix picks 2 necessary flags. > > Verified that for all files extracted from generated zip files: > 1. Timestamp is now not fixed, and reflects the CREATION date. > 2. The file permissions are unchanged. Why don't we instead start building JavaFX in a reproducible manner? I've been creating reproducible [builds of JavaFX][1] for years now (with the caveat of [this bug][2]). Those builds have over 2,000 active users without any reported problems. I set the following environment variable before calling `gradlew`: # Sets the environment variable for reproducible builds SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) export SOURCE_DATE_EPOCH Doing so now can only help Johan's efforts to replace the Gradle build with its JDK-based alternative. [1]: https://snapcraft.io/openjfx [2]: https://bugs.openjdk.org/browse/JDK-8307082 ------------- PR Comment: https://git.openjdk.org/jfx/pull/1993#issuecomment-3597360213 From kcr at openjdk.org Mon Dec 1 16:38:01 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 16:38:01 GMT Subject: RFR: 8371855: Time stamps are missing on zip bundles with gradle 9 In-Reply-To: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> References: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> Message-ID: On Mon, 1 Dec 2025 10:27:10 GMT, Ambarish Rapte wrote: > Gradle 9 onwards, the [Archive tasks (Jar, Ear, War, Zip, AbstractArchiveTask) produce reproducible archives by default](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) > > Under this change, there are two factors that affect our zip files. > 1. Files have fixed timestamps (timestamps depends on the archive type). > 2. File order in the archive is now deterministic. > Especially the timestamp is a concern, the files now have a fixed timestamp i.e. 1 Feb 1980 instead of the creation date. > > the [gradle upgrading guide](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) provides the solution on how to restore previous behavior. The fix picks 2 necessary flags. > > Verified that for all files extracted from generated zip files: > 1. Timestamp is now not fixed, and reflects the CREATION date. > 2. The file permissions are unchanged. It isn't an either-or. Since we aren't going to require the setting of SOURCE_DATE_EPOCH, we need to fix the timestamps when it isn't set. Separately, it would be a good idea to start using it for our builds. I'll file an RFE to do that. Perhaps it's worth considering for JavaFX 27 (so that we start using it early in the release cycle). > SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) We wouldn't do it exactly as you suggest for a number of reasons, but as part of using it for our build, we would publish the `SOURCE_DATE_EPOCH` that we used. @arapte Have you tested this with `SOURCE_DATE_EPOCH` to ensure no regressions in that mode? Reviewers: @kevinrushforth @tiainen ------------- PR Comment: https://git.openjdk.org/jfx/pull/1993#issuecomment-3597566723 From angorya at openjdk.org Mon Dec 1 17:23:49 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 17:23:49 GMT Subject: RFR: 8372203: Piecewise linear easing function [v9] In-Reply-To: References: Message-ID: On Thu, 27 Nov 2025 12:46:49 GMT, Michael Strau? wrote: >> Implementation of the [linear](https://www.w3.org/TR/css-easing-2/#the-linear-easing-function) easing function, which is now widely supported by all browsers, but still missing in JavaFX. >> >> It allows developers to approximate arbitrary easing functions with linear segments: >> >> >> linear( >> /* Start to 1st bounce */ >> 0, 0.063, 0.25, 0.563, 1 36.4%, >> /* 1st to 2nd bounce */ >> 0.812, 0.75, 0.813, 1 72.7%, >> /* 2nd to 3rd bounce */ >> 0.953, 0.938, 0.953, 1 90.9%, >> /* 3rd bounce to end */ >> 0.984, 1 100% 100% >> ) >> >> >> > > Michael Strau? has updated the pull request incrementally with one additional commit since the last revision: > > review changes Marked as reviewed by angorya (Reviewer). ------------- PR Review: https://git.openjdk.org/jfx/pull/1977#pullrequestreview-3526151437 From lkostyra at openjdk.org Mon Dec 1 17:28:46 2025 From: lkostyra at openjdk.org (Lukasz Kostyra) Date: Mon, 1 Dec 2025 17:28:46 GMT Subject: RFR: 8354943: [Linux] Simplify and update glass gtk backend: window sizing, positioning, and state management issues [v70] In-Reply-To: References: Message-ID: On Tue, 11 Nov 2025 11:49:21 GMT, Thiago Milczarek Sayao wrote: >> This is a continuation to [JDK-8236651](https://bugs.openjdk.org/browse/JDK-8236651) and it aims to stabilize the linux glass gtk backend. >> >> This is a refactor of the Glass GTK implementation, primarily focused on window size, positioning, and state management to resolve numerous issues. >> >> The main change is that GtkWindow (which is a GtkWidget) has been replaced with a direct use of GdkWindow for windows. This makes sense because GTK includes its own rendering pipeline, whereas JavaFX renders directly to the underlying system window (such as the X11 window) via Prism ES2 using GL and GLX. Most GTK window-related calls have equivalent GDK calls. Since GDK serves as an abstraction over the system window and input events, it aligns better with the purposes of Glass. Additionally, using GTK required various workarounds to integrate with Glass, which are no longer necessary when using GDK directly. >> >> It uses a simple C++ Observable to notify the Java side about changes. This approach is more straightforward, as notifications occur at many points and the previous implementation was becoming cluttered. >> >> Previously, there were three separate context classes, two of which were used for Java Web Start and Applets. These have now been unified, as they are no longer required. >> >> Many tests were added to ensure everything is working correctly. I noticed that some tests produced different results depending on the StageStyle, so they now use @ParameterizedTest to vary the StageStyle. >> >> A manual test is also provided. I did not use MonkeyTester for this, as it was quicker to simply run and test manually:`java @build/run.args tests/manual/stage/TestStage.java ` >> >> While this is focused on XWayland, everything works on pure Xorg as well. > > Thiago Milczarek Sayao has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 84 commits: > > - Merge branch 'master' into 8354943 > - Remote assumeTrue for JDK-8364547 > - Merge branch 'master' into 8354943 > - Merge branch 'master' into 8354943 > > # Conflicts: > # modules/javafx.graphics/src/main/native-glass/gtk/glass_window_ime.cpp > - Merge branch 'master' into 8354943 > - Fix copyright header > - Revert "8367898: Skip StageFocusTest on Linux" > > This reverts commit c95cdcdc9cd8b3070e8076ea91234772d6a21331. > - Merge branch 'master' into 8354943 > - Remove unused imports > - - Fix StageOwnershipTest label + minor adjustments > - ... and 74 more: https://git.openjdk.org/jfx/compare/013e55b1...7871e08b Marked as reviewed by lkostyra (Reviewer). ------------- PR Review: https://git.openjdk.org/jfx/pull/1789#pullrequestreview-3526173741 From mfox at openjdk.org Mon Dec 1 18:03:18 2025 From: mfox at openjdk.org (Martin Fox) Date: Mon, 1 Dec 2025 18:03:18 GMT Subject: RFR: 8326428: [Linux] UI scaling factor cannot be fractional when using KDE Message-ID: The standard way to determine the user interface scaling factor on Linux is to consult the reported monitor DPI and divide by 96 (which is also the way it's done on Windows). This allows the scaling factor to vary per-monitor and also achieve fractional values. Before this became the standard the Gnome toolkit communicated the scaling factor using the "GDK_SCALE" environment variable or the "org.gnome.desktop.interface" "scaling-factor" gsetting. These were always integer values (no fractional scaling) and applied to all monitors. They became the de-facto way of communicating the scaling factor and were picked by various toolkits including JavaFX. They are now obsolete within Gnome. JavaFX will compute correct per-monitor scaling factors if GDK_SCALE and "scaling-factor" aren't set. Gnome no longer sets these but unfortunately the KDE desktop does in an attempt to get certain apps to scale (one bug report specifically called out IntelliJ). In KDE for Ubuntu 24 the "scaling-factor" is always set to the floor of the actual scaling factor which is preventing JavaFX from computing fractional scales. Either setting will prevent JavaFX from computing per-monitor scales. This PR changes the priority of the ui scale tests. As always, the JavaFX "glass.gtk.uiScale" setting takes precedence. If that's not set the system uses the scaling computed based on the monitor DPI. It only consults the legacy settings if the reported DPI is 96. Ignoring GDK_SCALE is problematic since there are certainly users who use this as a convenient way to influence JavaFX (if only to work around this bug). If we want to provide an environment variable for them we should create our own and not rely on the legacy variables of other toolkits. ------------- Commit messages: - Prioritize DPI-based scaling factor over legacy global variables Changes: https://git.openjdk.org/jfx/pull/1994/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1994&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8326428 Stats: 20 lines in 1 file changed: 8 ins; 0 del; 12 mod Patch: https://git.openjdk.org/jfx/pull/1994.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1994/head:pull/1994 PR: https://git.openjdk.org/jfx/pull/1994 From mfox at openjdk.org Mon Dec 1 18:56:05 2025 From: mfox at openjdk.org (Martin Fox) Date: Mon, 1 Dec 2025 18:56:05 GMT Subject: [jfx25u] RFR: 8372453: [macOS] Iconifying owner may not iconify owned window Message-ID: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> 8372453: [macOS] Iconifying owner may not iconify owned window ------------- Commit messages: - Backport 6234c07e0e7ef84145e8a17407bf983ddba13d05 Changes: https://git.openjdk.org/jfx25u/pull/38/files Webrev: https://webrevs.openjdk.org/?repo=jfx25u&pr=38&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8372453 Stats: 4 lines in 1 file changed: 1 ins; 0 del; 3 mod Patch: https://git.openjdk.org/jfx25u/pull/38.diff Fetch: git fetch https://git.openjdk.org/jfx25u.git pull/38/head:pull/38 PR: https://git.openjdk.org/jfx25u/pull/38 From kcr at openjdk.org Mon Dec 1 19:05:08 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 19:05:08 GMT Subject: RFR: 8371855: Time stamps are missing on zip bundles with gradle 9 In-Reply-To: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> References: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> Message-ID: On Mon, 1 Dec 2025 10:27:10 GMT, Ambarish Rapte wrote: > Gradle 9 onwards, the [Archive tasks (Jar, Ear, War, Zip, AbstractArchiveTask) produce reproducible archives by default](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) > > Under this change, there are two factors that affect our zip files. > 1. Files have fixed timestamps (timestamps depends on the archive type). > 2. File order in the archive is now deterministic. > Especially the timestamp is a concern, the files now have a fixed timestamp i.e. 1 Feb 1980 instead of the creation date. > > the [gradle upgrading guide](https://docs.gradle.org/current/userguide/upgrading_major_version_9.html#reproducible_archives_by_default) provides the solution on how to restore previous behavior. The fix picks 2 necessary flags. > > Verified that for all files extracted from generated zip files: > 1. Timestamp is now not fixed, and reflects the CREATION date. > 2. The file permissions are unchanged. All testing looks good, including with / without `SOURCE_DATE_EPOCH`. Please confirm that you have done a CI build. ------------- Marked as reviewed by kcr (Lead). PR Review: https://git.openjdk.org/jfx/pull/1993#pullrequestreview-3526547012 From kcr at openjdk.org Mon Dec 1 19:07:04 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 19:07:04 GMT Subject: RFR: 8372761: Prevent degenerate transforms for zero-size Scene/SubScene In-Reply-To: References: Message-ID: On Sun, 30 Nov 2025 03:25:20 GMT, Michael Strau? wrote: > When a `Scene` or `SubScene` has its width or height set to 0, coordinate transformations stop working because the transformation matrix contains NaNs. This is a consequence of divisions by zero in both parallel and perspective projections. > > Even though a 0x0 scene is mathematically degenerate, it is still desirable for coordinate transformation APIs to remain numerically well-behaved and return finite results whenever possible, rather than being poisoned by NaN/Infinity. > > Here is an application that demonstrates the failing coordinate transformations. Click on the buttons to resize the SubScene and observe the console output. After applying the patch in this PR, you should observe that `localToScreen()` no longer returns NaN. > > > public class ZeroSizeSubScene extends Application { > > @Override > public void start(Stage stage) { > var rect = new Rectangle(50, 50, Color.RED); > var subScene = new SubScene(new Group(rect), 100, 100); > subScene.setFill(Color.GRAY); > > // Also try a perspective camera: > // > // var camera = new PerspectiveCamera(); > // camera.setRotate(45); > // camera.setTranslateX(-20); > // camera.setRotationAxis(new Point3D(0, 1, 0)); > // subScene.setCamera(camera); > > class MyButton extends Button { > public MyButton(String text, double width, double height) { > super(text); > setOnAction(_ -> { > var timeline = new Timeline( > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.widthProperty(), width)), > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.heightProperty(), height))); > > timeline.setOnFinished(_ -> { > Point2D p0 = rect.localToScreen(0, 0); > System.out.println("rect.localToScreen(0, 0) = " + p0); > }); > > timeline.play(); > }); > } > } > > VBox.setMargin(subScene, new Insets(0, 0, 20, 0)); > > var root = new VBox(5, > subScene, > new CheckBox("Rotate SubScene") {{ setOnAction(_ -> subScene.setRotate(isSelected() ? 45 : 0)); }}, > new MyButton("Size: 100x100", 100, 100), > new MyButton("Size: 10x10", 10, 10), > new MyButton("Size: 100x0", 100, 0), > new MyButton("Size: 0x100", 0, 100), > new MyButton("Size: 0x0", 0, 0) > ); > > S... I took a quick look and it seems reasonable. I'll let others formally review it, though. Reviewers: @arapte @lukostyra ------------- PR Comment: https://git.openjdk.org/jfx/pull/1992#issuecomment-3598407188 From kcr at openjdk.org Mon Dec 1 19:10:00 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 19:10:00 GMT Subject: RFR: 8326428: [Linux] UI scaling factor cannot be fractional when using KDE In-Reply-To: References: Message-ID: <5R-UH898_zME00Q6aEf4nMkREJw7OsgVnJ_MQfNutS8=.97b3a509-7906-43b2-b520-9c87b7e86582@github.com> On Mon, 1 Dec 2025 17:57:30 GMT, Martin Fox wrote: > The standard way to determine the user interface scaling factor on Linux is to consult the reported monitor DPI and divide by 96 (which is also the way it's done on Windows). This allows the scaling factor to vary per-monitor and also achieve fractional values. > > Before this became the standard the Gnome toolkit communicated the scaling factor using the "GDK_SCALE" environment variable or the "org.gnome.desktop.interface" "scaling-factor" gsetting. These were always integer values (no fractional scaling) and applied to all monitors. They became the de-facto way of communicating the scaling factor and were picked by various toolkits including JavaFX. They are now obsolete within Gnome. > > JavaFX will compute correct per-monitor scaling factors if GDK_SCALE and "scaling-factor" aren't set. Gnome no longer sets these but unfortunately the KDE desktop does in an attempt to get certain apps to scale (one bug report specifically called out IntelliJ). In KDE for Ubuntu 24 the "scaling-factor" is always set to the floor of the actual scaling factor which is preventing JavaFX from computing fractional scales. Either setting will prevent JavaFX from computing per-monitor scales. > > This PR changes the priority of the ui scale tests. As always, the JavaFX "glass.gtk.uiScale" setting takes precedence. If that's not set the system uses the scaling computed based on the monitor DPI. It only consults the legacy settings if the reported DPI is 96. > > Ignoring GDK_SCALE is problematic since there are certainly users who use this as a convenient way to influence JavaFX (if only to work around this bug). If we want to provide an environment variable for them we should create our own and not rely on the legacy variables of other toolkits. Reviewers: @lukostyra @kevinrushforth ------------- PR Comment: https://git.openjdk.org/jfx/pull/1994#issuecomment-3598417881 From angorya at openjdk.org Mon Dec 1 19:15:19 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 19:15:19 GMT Subject: RFR: 8092379: GridPane should not render extra gaps when entire rows or columns are unmanaged [v4] In-Reply-To: References: Message-ID: On Sat, 29 Nov 2025 20:51:38 GMT, John Hendrikx wrote: >> This fixes a long standing bug with `GridPane` where unmanaged nodes would still result in gaps being added between rows/columns even though nothing is rendered there. Take the following grid where dashes and pipes represent the vgaps and hgaps: >> >> | |0| |1| >> |--------|---|---|---| >> |0 |A|||B| >> | |-|||-| >> |1 |C|||D| >> | |-|||-| >> |2 |E|||F| >> >> Now, when both C and D are set to unmanaged (and invisible) the grid will **still** render the gaps: >> >> | |0| |1| >> |--------|---|---|---| >> |0 |A|||B| >> | |-|||-| >> |1 ||||| >> | |-|||-| >> |2 |E|||F| >> >> Instead it should collapse the gap between row 0 and 2: >> >> | |0| |1| >> |--------|---|---|---| >> |0 |A|||B| >> | |-|||-| >> |2 |E|||F| >> >> There are at least two relevant issues in JBS: >> - A request to let the user show and hide rows and columns: https://bugs.openjdk.org/browse/JDK-8136901 >> - This can now be done by setting the relevant row/columns items to unmanaged without having to restructure the grid (assuming the complaint was that otherwise there'd be visible extra gaps for each hidden row) >> - A request for another mode to skip gaps when entire rows/columns are unmanaged: https://bugs.openjdk.org/browse/JDK-8092379 >> - This should not be a mode, but the standard, as unmanaged nodes should not affect the outcome of the grid layout >> >> Screenshots >> >> Simple application which can hide row 3: >> >> image >> >> Correct behavior when row 3 is hidden: >> >> image >> >> Behavior before this fix (note the double gap **and** extra grid line): >> >> image > > John Hendrikx has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision: > > When all nodes starting in a row or column are unmanaged, skip gap Looks good. I've updated the standalone Monkey Tester to add a couple of layout scenarios to the GridPane page. modules/javafx.graphics/src/main/java/javafx/scene/layout/GridPane.java line 2635: > 2633: > 2634: private void setMaxSize(int position, double size) { > 2635: singleSizes[position] = Math.max(singleSizes[position], size); I don't know why github shows this as a change. Unused `setMultiSize()` has been removed which is ok. modules/javafx.graphics/src/main/java/javafx/scene/layout/GridPane.java line 2640: > 2638: private Iterable> multiSizes() { > 2639: if (multiSizes == null) { > 2640: return Collections.emptyList(); unrelated change, and probably gets inlined anyway. ------------- Marked as reviewed by angorya (Reviewer). PR Review: https://git.openjdk.org/jfx/pull/1990#pullrequestreview-3526569032 PR Review Comment: https://git.openjdk.org/jfx/pull/1990#discussion_r2578295713 PR Review Comment: https://git.openjdk.org/jfx/pull/1990#discussion_r2578297744 From angorya at openjdk.org Mon Dec 1 19:16:09 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 19:16:09 GMT Subject: [jfx25u] RFR: 8372453: [macOS] Iconifying owner may not iconify owned window In-Reply-To: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> References: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> Message-ID: <2JQFLnbUFZ26ftis3vWAzv7ceiulqk-zhnlVy6aazvc=.65623e6e-9c58-4b23-8624-99954ef30716@github.com> On Mon, 1 Dec 2025 18:49:05 GMT, Martin Fox wrote: > 8372453: [macOS] Iconifying owner may not iconify owned window Why did macOS x64 GHA build fail? ------------- PR Comment: https://git.openjdk.org/jfx25u/pull/38#issuecomment-3598441307 From mfox at openjdk.org Mon Dec 1 19:31:06 2025 From: mfox at openjdk.org (Martin Fox) Date: Mon, 1 Dec 2025 19:31:06 GMT Subject: [jfx25u] RFR: 8372453: [macOS] Iconifying owner may not iconify owned window In-Reply-To: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> References: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> Message-ID: On Mon, 1 Dec 2025 18:49:05 GMT, Martin Fox wrote: > 8372453: [macOS] Iconifying owner may not iconify owned window Failure seems unrelated to the source change which compiled successfully. > Could not resolve all files for configuration ':swt:compileClasspath'. > Could not resolve :org.eclipse.swt.cocoa.macosx.x86_64_3.124.200.v20231113-1355. ------------- PR Comment: https://git.openjdk.org/jfx25u/pull/38#issuecomment-3598495012 From kcr at openjdk.org Mon Dec 1 19:32:06 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 19:32:06 GMT Subject: RFR: 8372203: Piecewise linear easing function [v9] In-Reply-To: References: Message-ID: On Thu, 27 Nov 2025 12:46:49 GMT, Michael Strau? wrote: >> Implementation of the [linear](https://www.w3.org/TR/css-easing-2/#the-linear-easing-function) easing function, which is now widely supported by all browsers, but still missing in JavaFX. >> >> It allows developers to approximate arbitrary easing functions with linear segments: >> >> >> linear( >> /* Start to 1st bounce */ >> 0, 0.063, 0.25, 0.563, 1 36.4%, >> /* 1st to 2nd bounce */ >> 0.812, 0.75, 0.813, 1 72.7%, >> /* 2nd to 3rd bounce */ >> 0.953, 0.938, 0.953, 1 90.9%, >> /* 3rd bounce to end */ >> 0.984, 1 100% 100% >> ) >> >> >> > > Michael Strau? has updated the pull request incrementally with one additional commit since the last revision: > > review changes Latest doc changes look good. ------------- PR Review: https://git.openjdk.org/jfx/pull/1977#pullrequestreview-3526631435 From kcr at openjdk.org Mon Dec 1 19:50:07 2025 From: kcr at openjdk.org (Kevin Rushforth) Date: Mon, 1 Dec 2025 19:50:07 GMT Subject: [jfx25u] RFR: 8372453: [macOS] Iconifying owner may not iconify owned window In-Reply-To: References: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> Message-ID: On Mon, 1 Dec 2025 19:28:17 GMT, Martin Fox wrote: > Failure seems unrelated to the source change which compiled successfully. > > > Could not resolve all files for configuration ':swt:compileClasspath'. > > Could not resolve :org.eclipse.swt.cocoa.macosx.x86_64_3.124.200.v20231113-1355. Definitely unrelated. I triggered a rerun of the GHA build for sanity testing. @beldenfox Can you request Maintainer approval using the `/approval request` Skara PR command? I'll then approve it. ------------- PR Comment: https://git.openjdk.org/jfx25u/pull/38#issuecomment-3598561760 From andy.goryachev at oracle.com Mon Dec 1 20:10:25 2025 From: andy.goryachev at oracle.com (Andy Goryachev) Date: Mon, 1 Dec 2025 20:10:25 +0000 Subject: Some feature requests/improvement suggestions for the JavaFX Font API In-Reply-To: References: Message-ID: We do care. Presently, there is a number of tickets in JBS complaining about fonts, for example JDK-8344037 Font.loadFont() loads light/thin fonts as fonts with distinct families. JDK-8087799 Unable to choose semibold fonts using CSS font-weight JDK-8310565 [macos]When setting the font family for text, the Regular font is not being used JDK-8209435 [macOS] Text with bold font weight rendered as normal text when TTC font is used JDK-8310663 CSS parser can read all the font related properties, except for some font-family JDK-8088391 javafx.scene.text.Font broken for families with more weights than Regular & Bold; especially on Mac JDK-8190855 The text will be invisible when choosing different fonts of "Noto Sans" type JDK-8176835 [macosx] System font cannot be boldened JDK-8088257 support for both English and native font names JDK-8089128 Font.getFontNames() sometimes returns duplicated font names. JDK-8089450 Inconsistent naming for fonts in the 'Tahoma' family. JDK-8090423 [Font] Support Font Weights other than Bold and Regular, like Light JDK-8090628 Font - add getters for weight and posture JDK-8092264 Support and document use of more fonts variants (There might be more, I just did a quick query) Are there any issues listed below that might be missing from JBS? -andy From: openjfx-dev on behalf of Glavo Date: Friday, November 28, 2025 at 07:10 To: openjfx-dev Subject: Re: Some feature requests/improvement suggestions for the JavaFX Font API Does anyone care about these issues? Glavo On Mon, Jul 21, 2025 at 2:29?AM Glavo > wrote: Hi, We noticed that the Font API had many bugs and inconsistencies, and was missing a lot of functionality. Unfortunately, I don't have enough knowledge in this field to solve them. So I'm making some feature requests/improvement suggestions on this to see if anyone is interested. 1. Unify the meaning of "font family". Currently "font family" has different meanings on different platforms: * On Windows, it usually means the localized name of the font family name (nameID=1); * On Linux, it usually means the non-localized font family name (nameID=1, langID=0x0); * On macOS, it usually means the non-localized typographical family name (nameID=16, langID=0x0). This inconsistency makes the behavior of the program confusing and it is impossible to know what will happen without testing on multiple platforms. I want JavaFX to use the non-localized typographical family name (nameID=16, langID=0x0) on all platforms. The reason is that the font family name (nameID=1) of many fonts actually contains the font style information, and using it makes it difficult for us to select font style. For example, if we want to get JetBrains Mono Bold on Windows, we need to use Font.font("JetBrains Mono", FontWeight.BOLD, 13), but to get JetBrains Mono ExtraBold, we need to use Font.font("JetBrains Mono ExtraBold", FontWeight.NORMAL, 13). This is really frustrating :( Additionally, I encountered a bug on macOS that prevented me from selecting the font weight. I explained this issue in a previous email: https://mail.openjdk.org/pipermail/openjfx-dev/2025-July/055417.html 2. Make Font.font(String) accept both font name and font family name. I wish Font.font(String) could accept more names than just the font family name. As mentioned in the previous section, the current concept of font family names in JavaFX is confusing and often contains font style information. Therefore, it is very difficult to use the Font.font(String) in the correct way. If it would accept a variety of font names, both localized and non-localized, it would be less difficult to use. 3. Add more methods to get font localized names I would like to get these methods in Font class to get the localized name of the font: * static Map getLocalizedFamilyNames(String family) * static String getLocalizedFamilyName(String family, Locale locale) * static String getLocalizedFontNames(Locale locale) * static String getLocalizedFontNames(String family, Locale locale) * Map getLocalizedNames() * String getLocalizedName(Locale locale) * Map getLocalizedFamily() * String getLocalizedFamily(Locale locale) 4. More methods for handling font styles Right now we can only use FontWeight and FontPosture to select a font style when looking up a font, but the only way to get the style from a given Font object is Font::getStyle(), which is very asymmetrical. I would like to get these methods to handle font styles: * static List getStyles(String family) * static Font font(String family, String style) * FontWeight getWeight() * FontPosture getPosture() 5. Support fallback fonts and CSS font list for UI controls 6. Provides a way to control the typographic features of fonts Refer to Flutter's FontFeature class: https://api.flutter.dev/flutter/dart-ui/FontFeature-class.html Glavo -------------- next part -------------- An HTML attachment was scrubbed... URL: From angorya at openjdk.org Mon Dec 1 21:12:17 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 21:12:17 GMT Subject: RFR: 8372761: Prevent degenerate transforms for zero-size Scene/SubScene In-Reply-To: References: Message-ID: On Sun, 30 Nov 2025 03:25:20 GMT, Michael Strau? wrote: > When a `Scene` or `SubScene` has its width or height set to 0, coordinate transformations stop working because the transformation matrix contains NaNs. This is a consequence of divisions by zero in both parallel and perspective projections. > > Even though a 0x0 scene is mathematically degenerate, it is still desirable for coordinate transformation APIs to remain numerically well-behaved and return finite results whenever possible, rather than being poisoned by NaN/Infinity. > > Here is an application that demonstrates the failing coordinate transformations. Click on the buttons to resize the SubScene and observe the console output. After applying the patch in this PR, you should observe that `localToScreen()` no longer returns NaN. > > > public class ZeroSizeSubScene extends Application { > > @Override > public void start(Stage stage) { > var rect = new Rectangle(50, 50, Color.RED); > var subScene = new SubScene(new Group(rect), 100, 100); > subScene.setFill(Color.GRAY); > > // Also try a perspective camera: > // > // var camera = new PerspectiveCamera(); > // camera.setRotate(45); > // camera.setTranslateX(-20); > // camera.setRotationAxis(new Point3D(0, 1, 0)); > // subScene.setCamera(camera); > > class MyButton extends Button { > public MyButton(String text, double width, double height) { > super(text); > setOnAction(_ -> { > var timeline = new Timeline( > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.widthProperty(), width)), > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.heightProperty(), height))); > > timeline.setOnFinished(_ -> { > Point2D p0 = rect.localToScreen(0, 0); > System.out.println("rect.localToScreen(0, 0) = " + p0); > }); > > timeline.play(); > }); > } > } > > VBox.setMargin(subScene, new Insets(0, 0, 20, 0)); > > var root = new VBox(5, > subScene, > new CheckBox("Rotate SubScene") {{ setOnAction(_ -> subScene.setRotate(isSelected() ? 45 : 0)); }}, > new MyButton("Size: 100x100", 100, 100), > new MyButton("Size: 10x10", 10, 10), > new MyButton("Size: 100x0", 100, 0), > new MyButton("Size: 0x100", 0, 100), > new MyButton("Size: 0x0", 0, 0) > ); > > S... modules/javafx.graphics/src/test/java/test/javafx/scene/NodeTest.java line 1626: > 1624: assertEquals(minY, b.getMinY(), 0.0005); > 1625: assertEquals(width, b.getWidth(), 0.0005); > 1626: assertEquals(height, b.getHeight(), 0.0005); maybe we could declare a static constant EPSILON and use it at least in the modified tests? ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1992#discussion_r2578676230 From angorya at openjdk.org Mon Dec 1 21:39:00 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 21:39:00 GMT Subject: RFR: 8372761: Prevent degenerate transforms for zero-size Scene/SubScene In-Reply-To: References: Message-ID: On Sun, 30 Nov 2025 03:25:20 GMT, Michael Strau? wrote: > When a `Scene` or `SubScene` has its width or height set to 0, coordinate transformations stop working because the transformation matrix contains NaNs. This is a consequence of divisions by zero in both parallel and perspective projections. > > Even though a 0x0 scene is mathematically degenerate, it is still desirable for coordinate transformation APIs to remain numerically well-behaved and return finite results whenever possible, rather than being poisoned by NaN/Infinity. > > Here is an application that demonstrates the failing coordinate transformations. Click on the buttons to resize the SubScene and observe the console output. After applying the patch in this PR, you should observe that `localToScreen()` no longer returns NaN. > > > public class ZeroSizeSubScene extends Application { > > @Override > public void start(Stage stage) { > var rect = new Rectangle(50, 50, Color.RED); > var subScene = new SubScene(new Group(rect), 100, 100); > subScene.setFill(Color.GRAY); > > // Also try a perspective camera: > // > // var camera = new PerspectiveCamera(); > // camera.setRotate(45); > // camera.setTranslateX(-20); > // camera.setRotationAxis(new Point3D(0, 1, 0)); > // subScene.setCamera(camera); > > class MyButton extends Button { > public MyButton(String text, double width, double height) { > super(text); > setOnAction(_ -> { > var timeline = new Timeline( > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.widthProperty(), width)), > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.heightProperty(), height))); > > timeline.setOnFinished(_ -> { > Point2D p0 = rect.localToScreen(0, 0); > System.out.println("rect.localToScreen(0, 0) = " + p0); > }); > > timeline.play(); > }); > } > } > > VBox.setMargin(subScene, new Insets(0, 0, 20, 0)); > > var root = new VBox(5, > subScene, > new CheckBox("Rotate SubScene") {{ setOnAction(_ -> subScene.setRotate(isSelected() ? 45 : 0)); }}, > new MyButton("Size: 100x100", 100, 100), > new MyButton("Size: 10x10", 10, 10), > new MyButton("Size: 100x0", 100, 0), > new MyButton("Size: 0x100", 0, 100), > new MyButton("Size: 0x0", 0, 0) > ); > > S... Looks good on macOS. modules/javafx.graphics/src/main/java/javafx/scene/Camera.java line 339: > 337: // and height to ulp(1), guaranteeing non-zero view dimensions while keeping the clamp very small. > 338: // > 339: this.viewWidth = Math.max(Math.ulp(1.0), width); minor suggestion: create a private static function (`safeSize` ?) with the comment explaining why. ------------- Marked as reviewed by angorya (Reviewer). PR Review: https://git.openjdk.org/jfx/pull/1992#pullrequestreview-3527148686 PR Review Comment: https://git.openjdk.org/jfx/pull/1992#discussion_r2578790529 From mstrauss at openjdk.org Mon Dec 1 22:08:27 2025 From: mstrauss at openjdk.org (Michael =?UTF-8?B?U3RyYXXDnw==?=) Date: Mon, 1 Dec 2025 22:08:27 GMT Subject: RFR: 8372761: Prevent degenerate transforms for zero-size Scene/SubScene [v2] In-Reply-To: References: Message-ID: <1Al1iS95zotQhJuoekTf97Ip0oircRcAyvFu5nNnvxo=.51415942-a59f-4076-b744-fa1eb2e5d635@github.com> > When a `Scene` or `SubScene` has its width or height set to 0, coordinate transformations stop working because the transformation matrix contains NaNs. This is a consequence of divisions by zero in both parallel and perspective projections. > > Even though a 0x0 scene is mathematically degenerate, it is still desirable for coordinate transformation APIs to remain numerically well-behaved and return finite results whenever possible, rather than being poisoned by NaN/Infinity. > > Here is an application that demonstrates the failing coordinate transformations. Click on the buttons to resize the SubScene and observe the console output. After applying the patch in this PR, you should observe that `localToScreen()` no longer returns NaN. > > > public class ZeroSizeSubScene extends Application { > > @Override > public void start(Stage stage) { > var rect = new Rectangle(50, 50, Color.RED); > var subScene = new SubScene(new Group(rect), 100, 100); > subScene.setFill(Color.GRAY); > > // Also try a perspective camera: > // > // var camera = new PerspectiveCamera(); > // camera.setRotate(45); > // camera.setTranslateX(-20); > // camera.setRotationAxis(new Point3D(0, 1, 0)); > // subScene.setCamera(camera); > > class MyButton extends Button { > public MyButton(String text, double width, double height) { > super(text); > setOnAction(_ -> { > var timeline = new Timeline( > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.widthProperty(), width)), > new KeyFrame(Duration.seconds(1), new KeyValue(subScene.heightProperty(), height))); > > timeline.setOnFinished(_ -> { > Point2D p0 = rect.localToScreen(0, 0); > System.out.println("rect.localToScreen(0, 0) = " + p0); > }); > > timeline.play(); > }); > } > } > > VBox.setMargin(subScene, new Insets(0, 0, 20, 0)); > > var root = new VBox(5, > subScene, > new CheckBox("Rotate SubScene") {{ setOnAction(_ -> subScene.setRotate(isSelected() ? 45 : 0)); }}, > new MyButton("Size: 100x100", 100, 100), > new MyButton("Size: 10x10", 10, 10), > new MyButton("Size: 100x0", 100, 0), > new MyButton("Size: 0x100", 0, 100), > new MyButton("Size: 0x0", 0, 0) > ); > > S... Michael Strau? has updated the pull request incrementally with one additional commit since the last revision: review comments ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1992/files - new: https://git.openjdk.org/jfx/pull/1992/files/3ca281f5..f7c7a3fd Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1992&range=01 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1992&range=00-01 Stats: 29 lines in 1 file changed: 16 ins; 11 del; 2 mod Patch: https://git.openjdk.org/jfx/pull/1992.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1992/head:pull/1992 PR: https://git.openjdk.org/jfx/pull/1992 From mstrauss at openjdk.org Mon Dec 1 22:08:28 2025 From: mstrauss at openjdk.org (Michael =?UTF-8?B?U3RyYXXDnw==?=) Date: Mon, 1 Dec 2025 22:08:28 GMT Subject: RFR: 8372761: Prevent degenerate transforms for zero-size Scene/SubScene [v2] In-Reply-To: References: Message-ID: On Mon, 1 Dec 2025 21:09:52 GMT, Andy Goryachev wrote: >> Michael Strau? has updated the pull request incrementally with one additional commit since the last revision: >> >> review comments > > modules/javafx.graphics/src/test/java/test/javafx/scene/NodeTest.java line 1626: > >> 1624: assertEquals(minY, b.getMinY(), 0.0005); >> 1625: assertEquals(width, b.getWidth(), 0.0005); >> 1626: assertEquals(height, b.getHeight(), 0.0005); > > maybe we could declare a static constant EPSILON and use it at least in the modified tests? Since there are many different epsilons used in this test class, I'd have to call it something specific like `EPSILON_0005`, and at that point, there's little difference between a numeric literal and a constant field. It's a bit like saying "ONE" instead of "1". ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1992#discussion_r2578887532 From jhendrikx at openjdk.org Mon Dec 1 22:12:06 2025 From: jhendrikx at openjdk.org (John Hendrikx) Date: Mon, 1 Dec 2025 22:12:06 GMT Subject: RFR: 8092379: GridPane should not render extra gaps when entire rows or columns are unmanaged [v4] In-Reply-To: References: Message-ID: On Mon, 1 Dec 2025 19:12:34 GMT, Andy Goryachev wrote: > Looks good. > > I've updated the standalone Monkey Tester to add a couple of layout scenarios to the GridPane page. Thanks, GridPane is quite a useful layout, but if you want to hide a row or column, it is a huge pain currently (unless you use hgap/vgap of 0) as you need to physically renumber your rows/columns to collapse the extra gaps... > modules/javafx.graphics/src/main/java/javafx/scene/layout/GridPane.java line 2635: > >> 2633: >> 2634: private void setMaxSize(int position, double size) { >> 2635: singleSizes[position] = Math.max(singleSizes[position], size); > > I don't know why github shows this as a change. > Unused `setMultiSize()` has been removed which is ok. It's confusing the start of the diff I think :) > modules/javafx.graphics/src/main/java/javafx/scene/layout/GridPane.java line 2640: > >> 2638: private Iterable> multiSizes() { >> 2639: if (multiSizes == null) { >> 2640: return Collections.emptyList(); > > unrelated change, and probably gets inlined anyway. Yeah, could remove, I just made the change because it was giving a raw type warning. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1990#issuecomment-3599174832 PR Review Comment: https://git.openjdk.org/jfx/pull/1990#discussion_r2578892593 PR Review Comment: https://git.openjdk.org/jfx/pull/1990#discussion_r2578893765 From angorya at openjdk.org Mon Dec 1 22:39:03 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 22:39:03 GMT Subject: RFR: 8092379: GridPane should not render extra gaps when entire rows or columns are unmanaged [v4] In-Reply-To: References: Message-ID: On Sat, 29 Nov 2025 20:51:38 GMT, John Hendrikx wrote: >> This fixes a long standing bug with `GridPane` where unmanaged nodes would still result in gaps being added between rows/columns even though nothing is rendered there. Take the following grid where dashes and pipes represent the vgaps and hgaps: >> >> | |0| |1| >> |--------|---|---|---| >> |0 |A|||B| >> | |-|||-| >> |1 |C|||D| >> | |-|||-| >> |2 |E|||F| >> >> Now, when both C and D are set to unmanaged (and invisible) the grid will **still** render the gaps: >> >> | |0| |1| >> |--------|---|---|---| >> |0 |A|||B| >> | |-|||-| >> |1 ||||| >> | |-|||-| >> |2 |E|||F| >> >> Instead it should collapse the gap between row 0 and 2: >> >> | |0| |1| >> |--------|---|---|---| >> |0 |A|||B| >> | |-|||-| >> |2 |E|||F| >> >> There are at least two relevant issues in JBS: >> - A request to let the user show and hide rows and columns: https://bugs.openjdk.org/browse/JDK-8136901 >> - This can now be done by setting the relevant row/columns items to unmanaged without having to restructure the grid (assuming the complaint was that otherwise there'd be visible extra gaps for each hidden row) >> - A request for another mode to skip gaps when entire rows/columns are unmanaged: https://bugs.openjdk.org/browse/JDK-8092379 >> - This should not be a mode, but the standard, as unmanaged nodes should not affect the outcome of the grid layout >> >> Screenshots >> >> Simple application which can hide row 3: >> >> image >> >> Correct behavior when row 3 is hidden: >> >> image >> >> Behavior before this fix (note the double gap **and** extra grid line): >> >> image > > John Hendrikx has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision: > > When all nodes starting in a row or column are unmanaged, skip gap huge pain, yes, that's why I am still working on https://github.com/andy-goryachev/FxDock/blob/master/doc/CPane.md ------------- PR Comment: https://git.openjdk.org/jfx/pull/1990#issuecomment-3599249915 From angorya at openjdk.org Mon Dec 1 22:39:05 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 22:39:05 GMT Subject: RFR: 8092379: GridPane should not render extra gaps when entire rows or columns are unmanaged [v4] In-Reply-To: References: Message-ID: On Mon, 1 Dec 2025 22:08:02 GMT, John Hendrikx wrote: >> modules/javafx.graphics/src/main/java/javafx/scene/layout/GridPane.java line 2640: >> >>> 2638: private Iterable> multiSizes() { >>> 2639: if (multiSizes == null) { >>> 2640: return Collections.emptyList(); >> >> unrelated change, and probably gets inlined anyway. > > Yeah, could remove, I just made the change because it was giving a raw type warning. I turned the raw warnings off, the project has thousands of those... ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1990#discussion_r2578953998 From angorya at openjdk.org Mon Dec 1 22:41:03 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 22:41:03 GMT Subject: RFR: 8372761: Prevent degenerate transforms for zero-size Scene/SubScene [v2] In-Reply-To: <1Al1iS95zotQhJuoekTf97Ip0oircRcAyvFu5nNnvxo=.51415942-a59f-4076-b744-fa1eb2e5d635@github.com> References: <1Al1iS95zotQhJuoekTf97Ip0oircRcAyvFu5nNnvxo=.51415942-a59f-4076-b744-fa1eb2e5d635@github.com> Message-ID: On Mon, 1 Dec 2025 22:08:27 GMT, Michael Strau? wrote: >> When a `Scene` or `SubScene` has its width or height set to 0, coordinate transformations stop working because the transformation matrix contains NaNs. This is a consequence of divisions by zero in both parallel and perspective projections. >> >> Even though a 0x0 scene is mathematically degenerate, it is still desirable for coordinate transformation APIs to remain numerically well-behaved and return finite results whenever possible, rather than being poisoned by NaN/Infinity. >> >> Here is an application that demonstrates the failing coordinate transformations. Click on the buttons to resize the SubScene and observe the console output. After applying the patch in this PR, you should observe that `localToScreen()` no longer returns NaN. >> >> >> public class ZeroSizeSubScene extends Application { >> >> @Override >> public void start(Stage stage) { >> var rect = new Rectangle(50, 50, Color.RED); >> var subScene = new SubScene(new Group(rect), 100, 100); >> subScene.setFill(Color.GRAY); >> >> // Also try a perspective camera: >> // >> // var camera = new PerspectiveCamera(); >> // camera.setRotate(45); >> // camera.setTranslateX(-20); >> // camera.setRotationAxis(new Point3D(0, 1, 0)); >> // subScene.setCamera(camera); >> >> class MyButton extends Button { >> public MyButton(String text, double width, double height) { >> super(text); >> setOnAction(_ -> { >> var timeline = new Timeline( >> new KeyFrame(Duration.seconds(1), new KeyValue(subScene.widthProperty(), width)), >> new KeyFrame(Duration.seconds(1), new KeyValue(subScene.heightProperty(), height))); >> >> timeline.setOnFinished(_ -> { >> Point2D p0 = rect.localToScreen(0, 0); >> System.out.println("rect.localToScreen(0, 0) = " + p0); >> }); >> >> timeline.play(); >> }); >> } >> } >> >> VBox.setMargin(subScene, new Insets(0, 0, 20, 0)); >> >> var root = new VBox(5, >> subScene, >> new CheckBox("Rotate SubScene") {{ setOnAction(_ -> subScene.setRotate(isSelected() ? 45 : 0)); }}, >> new MyButton("Size: 100x100", 100, 100), >> new MyButton("Size: 10x10", 10, 10), >> new MyButton("Size: 100x0", 100, 0), >> ne... > > Michael Strau? has updated the pull request incrementally with one additional commit since the last revision: > > review comments Marked as reviewed by angorya (Reviewer). @lukostyra could you please take a look at this on Windows with fractional scale? ------------- PR Review: https://git.openjdk.org/jfx/pull/1992#pullrequestreview-3527333662 PR Comment: https://git.openjdk.org/jfx/pull/1992#issuecomment-3599261316 From angorya at openjdk.org Mon Dec 1 23:03:29 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Mon, 1 Dec 2025 23:03:29 GMT Subject: [jfx25u] RFR: 8372453: [macOS] Iconifying owner may not iconify owned window In-Reply-To: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> References: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> Message-ID: On Mon, 1 Dec 2025 18:49:05 GMT, Martin Fox wrote: > 8372453: [macOS] Iconifying owner may not iconify owned window I approve of the approval request being approved! :-) -andy Confidential- Oracle Internal From: openjdk[bot] ***@***.***> Date: Monday, December 1, 2025 at 14:55 To: openjdk/jfx25u ***@***.***> Cc: Andy Goryachev ***@***.***>, Comment ***@***.***> Subject: [External] : Re: [openjdk/jfx25u] 8372453: [macOS] Iconifying owner may not iconify owned window (PR #38) [https://avatars.githubusercontent.com/u/41768318?s=20&v=4]openjdk[bot] left a comment (openjdk/jfx25u#38) @kevinrushforth 8372453: The approval request has been approved. ? Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented. ------------- PR Comment: https://git.openjdk.org/jfx25u/pull/38#issuecomment-3599327857 From jhendrikx at openjdk.org Mon Dec 1 23:07:02 2025 From: jhendrikx at openjdk.org (John Hendrikx) Date: Mon, 1 Dec 2025 23:07:02 GMT Subject: RFR: 8092379: GridPane should not render extra gaps when entire rows or columns are unmanaged [v4] In-Reply-To: References: Message-ID: On Mon, 1 Dec 2025 22:34:34 GMT, Andy Goryachev wrote: > huge pain, yes, that's why I am still working on https://github.com/andy-goryachev/FxDock/blob/master/doc/CPane.md :-) I created my own `Flex` layout, which is a combination of HBox + VBox + GridPane. It basically works by looking at how they are nested. If you nest multiple horizontal flexes into a vertical flex: FlexV FlexH [ label , text field ] FlexH [ label , text field ] The above would produce an unaligned mess when the labels are different lengths, just like nesting HBoxes into VBox would. However, the Flex has a property "aligned" that you can set, and it will affect the layout of any nested flexes of the opposite type. In this case, if you give the top FlexV this property, the nested horizontal flexes will automatically align as if they were in a grid. It looks like this in code (in builder form): Panes.vflex("form").aligned().nodes( Panes.hflex().nodes( "Width", FX.spinner().editable().value(parameters.width) ), XPanes.hflex().nodes( "Height", FX.spinner().editable().value(parameters.height) ) ); I actually only use `GridPane` in my samples, as I'm not ready yet to publish `Flex`. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1990#issuecomment-3599330984 From kevin.rushforth at oracle.com Tue Dec 2 00:08:53 2025 From: kevin.rushforth at oracle.com (Kevin Rushforth) Date: Mon, 1 Dec 2025 16:08:53 -0800 Subject: JavaFX 25.0.2 will be closed for fixes on December 8th Message-ID: <5900f17c-1164-41a7-9b07-b589a1e095e5@oracle.com> All, If you have backports that you want to get into jfx25u for JavaFX 25.0.2, please do so by Monday, December 8th. Note that approval from one of the project leads is needed as outlined in this message [1]. Thanks. -- Kevin [1] https://mail.openjdk.org/pipermail/openjfx-dev/2025-July/055496.html From mfox at openjdk.org Tue Dec 2 00:12:02 2025 From: mfox at openjdk.org (Martin Fox) Date: Tue, 2 Dec 2025 00:12:02 GMT Subject: [jfx25u] Integrated: 8372453: [macOS] Iconifying owner may not iconify owned window In-Reply-To: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> References: <3D02Ix1iTJsADVZJaQMnCFliZvEMMI06fhFdv18jtFg=.f7a0191f-1cfe-4fee-8fde-cda849bf13e5@github.com> Message-ID: <2pkdM10tCaO6pvZ_Ry0n-uHMriKdHJHND7TbOP51_wo=.6773f70b-93d4-4079-841a-e226be654d3a@github.com> On Mon, 1 Dec 2025 18:49:05 GMT, Martin Fox wrote: > 8372453: [macOS] Iconifying owner may not iconify owned window This pull request has now been integrated. Changeset: 0dc85f66 Author: Martin Fox URL: https://git.openjdk.org/jfx25u/commit/0dc85f668dadc911c243c13c5e8bba1ec3e0aadb Stats: 4 lines in 1 file changed: 1 ins; 0 del; 3 mod 8372453: [macOS] Iconifying owner may not iconify owned window Backport-of: 6234c07e0e7ef84145e8a17407bf983ddba13d05 ------------- PR: https://git.openjdk.org/jfx25u/pull/38 From alexander.matveev at oracle.com Tue Dec 2 01:55:14 2025 From: alexander.matveev at oracle.com (Alexander Matveev) Date: Tue, 2 Dec 2025 01:55:14 +0000 Subject: Crash on macOS 26 when playing music file In-Reply-To: <15ba729c-cc6e-4d04-b520-95fd2b5ba059@oracle.com> References: <15ba729c-cc6e-4d04-b520-95fd2b5ba059@oracle.com> Message-ID: Hi Christopher and Kevin, I was able to reproduce this issue with FXMediaPlayer and MP3 file when playing via JRT protocol on macOS 26.1 aarch64. Not sure if it is reproducible on x64. Christopher, do you want to file a bug report for it? Or I can file it myself. Thanks, Alexander Confidential- Oracle Internal From: openjfx-dev on behalf of Kevin Rushforth Date: Tuesday, November 25, 2025 at 8:25?AM To: Christopher Schnick , openjfx-dev at openjdk.org Subject: Re: Crash on macOS 26 when playing music file I was able to play that media file with no problem on macOS 26.1 using the tests/manual/media/FXMediaPlayer app in the FX repo. I didn't try with your application. I can see from the hs_err log you attached, that it is crashing in our libjfxmedia_avf library in a callback from CoreFoundation. I was running JDK 25.0.1 and I tried the latest mainline JavaFX (26 ea) as well as JavaFX 25.0.1. Can you confirm the exact versions of JDK 25 and JavaFX 25 you were running? -- Kevin On 11/25/2025 5:07 AM, Christopher Schnick wrote: > Hello, I encountered a reproducible crash when playing a music file > with MediaPlayer. This does not occur on older versions of the app > using an older JDK+JavaFX version on macOS 26. > > It crashes with JDK25 and JavaFX 25 for me. Attached is the crash log. > > I have not tested this in an isolated reproducer, but I don't see how > any of my application logic can influence this. If it does not happen > in an isolated manner, I can investigate what specific changes cause > it to crash. The music file I tested with is from > https://github.com/mkpaz/atlantafx/blob/master/sampler/src/main/resources/atlantafx/sampler/media/Beat%20Thee.mp3 > . The project to reproduce the crash is > https://github.com/xpipe-io/kickstartfx, where you just have to select > the music player and click on play sample. > > Best > Christopher Schnick > > P.S. There is still a message I sent a few days ago in the mailing > list moderation queue because it was larger than the maximum allowed > attachment size > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From duke at openjdk.org Tue Dec 2 03:52:05 2025 From: duke at openjdk.org (notzed) Date: Tue, 2 Dec 2025 03:52:05 GMT Subject: RFR: JDK-8210547 synchronise with OpenGL after the last window is presented [v2] In-Reply-To: References: Message-ID: On Tue, 25 Nov 2025 00:33:41 GMT, notzed wrote: >> As discussed on the mailing list. >> >> OpenGL requires an explicit glFinish() to synchronise with the video refresh. The current usage is incorrect and against the specification. This patch calls glFinish() after all windows have been drawn following a pulse. > > notzed has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision: > > JDK-8210547 synchronise with OpenGL after the last window is presented This is for JDK-8210547. 1929 is separate, it doesn't work for me when you have more than 1 window open. It's effectively just the same as calling glFinish() on every glxSwapBuffers() which just tanks the framerate (and for me whether it uses *SGI or *EXT makes no difference). I suppose I could see if using glXSwapIntervalEXT() makes a difference here. FWIW this is what i'm using to test, it intentionally advances on animation pulses rather than using the the timestamp to visualise spurious pulses. With javafx-25 it goes mental but with the given patch it runs at the right rate but with spurious pulses from the vsyncHint stuff. BEWARE! It uses Robot to take over the mouse, ESC/Q or alt-f4 quits. [Latency.java](https://github.com/user-attachments/files/23870834/Latency.java) ------------- PR Comment: https://git.openjdk.org/jfx/pull/1981#issuecomment-3600058679 From arapte at openjdk.org Tue Dec 2 05:44:00 2025 From: arapte at openjdk.org (Ambarish Rapte) Date: Tue, 2 Dec 2025 05:44:00 GMT Subject: RFR: 8371855: Time stamps are missing on zip bundles with gradle 9 In-Reply-To: References: <7KIUK1vapmVGYyN6MHQXPfNJK7jQ5uU48NrJszHiN-E=.d75883e7-ad80-4069-9bd3-3ec98841babc@github.com> Message-ID: On Mon, 1 Dec 2025 19:02:08 GMT, Kevin Rushforth wrote: > All testing looks good, including with / without SOURCE_DATE_EPOCH. Thanks for testing with `SOURCE_DATE_EPOCH`, I had not done that. > Please confirm that you have done a CI build. Yes Kevin, CI build completed successfully. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1993#issuecomment-3600276369 From crschnick at xpipe.io Tue Dec 2 06:29:24 2025 From: crschnick at xpipe.io (Christopher Schnick) Date: Tue, 2 Dec 2025 07:29:24 +0100 Subject: Crash on macOS 26 when playing music file In-Reply-To: References: <15ba729c-cc6e-4d04-b520-95fd2b5ba059@oracle.com> Message-ID: <0856832e-0237-4c8f-9fd3-a3069a7bc655@xpipe.io> Feel free to file it yourself, that JBS submit form is not fun to use as an external reporter. I want to say that the reproducer project I linked also crashes when running ./gradlew run, so not only with JRT. In that case, the resource file is located in a dependency jar and not in a runtime image. On 02/12/2025 2:55 AM, Alexander Matveev wrote: > Hi Christopher and Kevin, > > I was able to reproduce this issue with FXMediaPlayer and MP3 file > when playing via JRT protocol on macOS 26.1 aarch64. Not sure if it is > reproducible on x64. > > Christopher, do you want to file a bug report for it? Or?I can file it > myself. > > Thanks, > Alexander > > * > > Confidential- Oracle Internal > > From: *openjfx-dev on behalf of Kevin > Rushforth > *Date: *Tuesday, November 25, 2025 at 8:25?AM > *To: *Christopher Schnick , > openjfx-dev at openjdk.org > *Subject: *Re: Crash on macOS 26 when playing music file > > I was able to play that media file with no problem on macOS 26.1 using > the tests/manual/media/FXMediaPlayer app in the FX repo. I didn't try > with your application. > > I can see from the hs_err log you attached, that it is crashing in our > libjfxmedia_avf library in a callback from CoreFoundation. > > I was running JDK 25.0.1 and I tried the latest mainline JavaFX (26 ea) > as well as JavaFX 25.0.1. Can you confirm the exact versions of JDK 25 > and JavaFX 25 you were running? > > -- Kevin > > > On 11/25/2025 5:07 AM, Christopher?Schnick wrote: > > Hello, I encountered a reproducible crash when playing a music file > > with MediaPlayer. This does not occur on older versions of the app > > using an older JDK+JavaFX version on macOS 26. > > > > It crashes with JDK25 and JavaFX 25 for me. Attached is the crash log. > > > > I have not tested this in an isolated reproducer, but I don't see how > > any of my application logic can influence this. If it does not happen > > in an isolated manner, I can investigate what specific changes cause > > it to crash. The music file I tested with is from > > > https://github.com/mkpaz/atlantafx/blob/master/sampler/src/main/resources/atlantafx/sampler/media/Beat%20Thee.mp3 > > . The project to reproduce the crash is > > https://github.com/xpipe-io/kickstartfx, where you just have to select > > the music player and click on play sample. > > > > Best > > Christopher Schnick > > > > P.S. There is still a message I sent a few days ago in the mailing > > list moderation queue because it was larger than the maximum allowed > > attachment size > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lkostyra at openjdk.org Tue Dec 2 11:45:07 2025 From: lkostyra at openjdk.org (Lukasz Kostyra) Date: Tue, 2 Dec 2025 11:45:07 GMT Subject: RFR: JDK-8210547 synchronise with OpenGL after the last window is presented [v2] In-Reply-To: References: Message-ID: On Tue, 2 Dec 2025 03:49:47 GMT, notzed wrote: > I suppose I could see if using glXSwapIntervalEXT() makes a difference here. It might be better to switch to `glXSwapIntervalEXT()` then. It seems to be more consistent across all platforms (ie. works on Intel where the others don't for some reason). I'll be waiting for your updates, and I think we can close #1929 then. Thanks for attaching the test program too, it'll come in handy. Even though these changes are simple, they do go quite deep so we'll need to spend some extra time reviewing and testing them. A couple of formalities as well: - PR title must begin with issue number without `JDK-` and followed by a colon - Text following the issue number must be the same as the JBS issue counterpart So in this case, PR should be named exactly like #1929 for Skara to properly connect it. Last but not least, when you update this branch please don't use `git rebase` and force pushes, as it breaks the review tool and makes it harder for us to iteratively review your changes. If you ever need to catch up to master or to resolve any conflicts, use `git merge` instead. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1981#issuecomment-3601619573 From lkostyra at openjdk.org Tue Dec 2 11:46:07 2025 From: lkostyra at openjdk.org (Lukasz Kostyra) Date: Tue, 2 Dec 2025 11:46:07 GMT Subject: RFR: 8210547: [Linux] Uncontrolled framerate [v2] In-Reply-To: References: Message-ID: <8sF0wHre1zCLU6nZ5VA6yR0ZDFe_jWVTtIk0CHlP0wE=.99794096-00b7-41a9-8477-3cbe9ed82080@github.com> On Sat, 4 Oct 2025 15:19:32 GMT, Thiago Milczarek Sayao wrote: >> As Michael Zucchi pointed out on the mailing list, the high framerate occurs because `glXSwapBuffers() `operates asynchronously. To ensure proper synchronization, you can call `glFinish() `afterward, which blocks until the buffer swap is fully completed. However, when using `glXSwapIntervalSGI`, the swap interval setting applies globally rather than per drawable. In contrast, `glXSwapIntervalEXT` provides per-drawable control, allowing finer-grained vsync behavior. >> >> I don't know if there are scenarios when the unlimited frame rate is needed - if so we should provide a option. >> >> See [https://wikis.khronos.org/opengl/Swap_Interval](https://wikis.khronos.org/opengl/Swap_Interval) >> >> It also selects the correct visual for transparency which needs to be depth = 32 for X11. > > Thiago Milczarek Sayao has updated the pull request incrementally with one additional commit since the last revision: > > Call glXSwapIntervalEXT or glXSwapIntervalSGI if not null As discussed in #1981 that approach is in fact better. I think we can close this PR in favor of the other one. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1929#issuecomment-3601622045 From duke at openjdk.org Tue Dec 2 13:33:46 2025 From: duke at openjdk.org (notzed) Date: Tue, 2 Dec 2025 13:33:46 GMT Subject: RFR: JDK-8210547 synchronise with OpenGL after the last window is presented [v2] In-Reply-To: References: Message-ID: On Tue, 25 Nov 2025 00:33:41 GMT, notzed wrote: >> As discussed on the mailing list. >> >> OpenGL requires an explicit glFinish() to synchronise with the video refresh. The current usage is incorrect and against the specification. This patch calls glFinish() after all windows have been drawn following a pulse. > > notzed has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision: > > JDK-8210547 synchronise with OpenGL after the last window is presented Sorry I made a mistake with the push, Kevin directed me to send an "empty commit" to trigger automation and I couldn't work out how to do that otherwise at the time - until just after I'd done it and it was too late then. I'll look at merging in bits of 1929, sans the visual stuff which seems unrelated. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1981#issuecomment-3602079425 From angorya at openjdk.org Tue Dec 2 15:28:56 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Tue, 2 Dec 2025 15:28:56 GMT Subject: Integrated: 8372298: RichTextArea: missing API: applyParagraphStyle In-Reply-To: References: Message-ID: On Fri, 21 Nov 2025 16:19:07 GMT, Andy Goryachev wrote: > A missing protected method in StyledTextModel prevents from toggling of an individual paragraph attribute. > > This can be tested with he latest Monkey Tester > https://github.com/andy-goryachev-oracle/MonkeyTest > > - select the RichTextArea page > - select the RichTextArea model > - select Control -> Context Menu -> RichTextArea menu > - type in several paragraphs > - select all and apply one paragraph attribute, let's say Paragraph Styles -> Background -> (any non-null) > - select a subset of previously selected paragraphs and apply a second paragraph attribute, let's say Paragraph Styles -> Bullet -> (any non-null) This pull request has now been integrated. Changeset: 6626e013 Author: Andy Goryachev URL: https://git.openjdk.org/jfx/commit/6626e01398717dc2d9eeab4e31c2c9895398fe35 Stats: 95 lines in 8 files changed: 88 ins; 0 del; 7 mod 8372298: RichTextArea: missing API: applyParagraphStyle Reviewed-by: kcr, mstrauss ------------- PR: https://git.openjdk.org/jfx/pull/1980 From mstrauss at openjdk.org Tue Dec 2 16:59:49 2025 From: mstrauss at openjdk.org (Michael =?UTF-8?B?U3RyYXXDnw==?=) Date: Tue, 2 Dec 2025 16:59:49 GMT Subject: RFR: 8370498: Improve how Node detects whether a layout property change requires a new layout pass [v4] In-Reply-To: References: Message-ID: <516DwfEFiKutVJf6ugwCCb_KwcbL3Rv2a3I7nwhocz8=.f80b4b65-99bb-46fe-9673-8bf7bbf38997@github.com> On Mon, 27 Oct 2025 14:44:44 GMT, John Hendrikx wrote: >> This new check is much more accurate to detect whether a parent is currently laying out its children. The previous code almost never worked, resulting in additional unnecessary layouts. > > John Hendrikx has updated the pull request incrementally with one additional commit since the last revision: > > Rename test > The reason I asked about tests and test scenarios is the possibility of regression. Case in point - with this PR, on macOS with an external monitor at scale=1: > > Image > I would second @johanvos in suggesting that the regression is what we should be guarding against, and perhaps expanding the tests. I can reproduce this issue on macOS and two displays with different DPI scale. Dragging the window to the other display has the menus appear with ellipses. Moving the mouse pointer over the menu items does not change that, but clicking on the menus causes a relayout, which fixes the issue. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1945#issuecomment-3603050441 From angorya at openjdk.org Tue Dec 2 17:04:40 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Tue, 2 Dec 2025 17:04:40 GMT Subject: RFR: 8371067: RichTextArea: requestLayout by inline node doesn't reach VFlow [v4] In-Reply-To: References: Message-ID: > Requesting `VFlow` re-layout when signaled by a `Node` embedded in `TextCell`. > > > ### NOTES > > - this PR depends on https://github.com/openjdk/jfx/pull/1974 (resolved) > - the fix can be verified visually using the latest Monkey Tester > > Screenshot 2025-11-17 at 13 43 12 Andy Goryachev has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains nine additional commits since the last revision: - Merge branch 'master' into 8371067.request.layout - updated test - Merge branch 'master' into 8371067.request.layout - add text segment - Merge branch 'master' into 8371067.request.layout - test - request layout - test - fix ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1975/files - new: https://git.openjdk.org/jfx/pull/1975/files/ecd2c0e7..56bcfff7 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1975&range=03 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1975&range=02-03 Stats: 371 lines in 24 files changed: 206 ins; 94 del; 71 mod Patch: https://git.openjdk.org/jfx/pull/1975.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1975/head:pull/1975 PR: https://git.openjdk.org/jfx/pull/1975 From angorya at openjdk.org Tue Dec 2 17:06:55 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Tue, 2 Dec 2025 17:06:55 GMT Subject: RFR: 8371070: RichParagraph enhancements [v4] In-Reply-To: References: Message-ID: > Addressing the user feedback: > > In RichParagraph you have a note to make getSegments() public. It would be helpful if it was. > > > Adding two methods to the `RichParagraph` class: > > - getSegmentCount() > - getSegment(int index) > > Decided against exposing a List since it would require additional allocation. Some of the callers seems to implement special logic when the number of segments is 0 anyway. Andy Goryachev has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains five commits: - Merge branch 'master' into 8371070.enhance - Merge branch 'master' into 8371070.enhance - Merge branch 'master' into 8371070.enhance - test - expose segments ------------- Changes: https://git.openjdk.org/jfx/pull/1966/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1966&range=03 Stats: 215 lines in 7 files changed: 141 ins; 43 del; 31 mod Patch: https://git.openjdk.org/jfx/pull/1966.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1966/head:pull/1966 PR: https://git.openjdk.org/jfx/pull/1966 From angorya at openjdk.org Tue Dec 2 17:10:00 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Tue, 2 Dec 2025 17:10:00 GMT Subject: RFR: 8372438: SimpleViewOnlyStyledModel: non-text paragraphs [v2] In-Reply-To: References: Message-ID: > Fixing a bug in `SimpleViewOnlyStyledModel.lastParagraph()` which breaks adding text segments after a `Region`-based paragraph. > > Test cases: > > @Test > public void addTextAfterRegion() { > SimpleViewOnlyStyledModel m = new SimpleViewOnlyStyledModel(); > m.addParagraph(() -> new Region()); > m.addNodeSegment(() -> new Region()); > assertEquals(2, m.size()); > } > > @Test > public void addTextAfterRegionAfterText() { > SimpleViewOnlyStyledModel m = new SimpleViewOnlyStyledModel(); > m.addNodeSegment(() -> new Region()); > m.addParagraph(() -> new Region()); > m.addSegment("text"); > assertEquals(3, m.size()); > } Andy Goryachev has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains two additional commits since the last revision: - Merge branch 'master' into 8372438.non.text.paragraphs - fix ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1983/files - new: https://git.openjdk.org/jfx/pull/1983/files/fb24deb1..d0f1ee64 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1983&range=01 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1983&range=00-01 Stats: 371 lines in 24 files changed: 206 ins; 94 del; 71 mod Patch: https://git.openjdk.org/jfx/pull/1983.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1983/head:pull/1983 PR: https://git.openjdk.org/jfx/pull/1983 From angorya at openjdk.org Tue Dec 2 17:29:47 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Tue, 2 Dec 2025 17:29:47 GMT Subject: RFR: 8371070: RichParagraph enhancements [v5] In-Reply-To: References: Message-ID: > Addressing the user feedback: > > In RichParagraph you have a note to make getSegments() public. It would be helpful if it was. > > > Adding two methods to the `RichParagraph` class: > > - getSegmentCount() > - getSegment(int index) > > Decided against exposing a List since it would require additional allocation. Some of the callers seems to implement special logic when the number of segments is 0 anyway. Andy Goryachev has updated the pull request incrementally with one additional commit since the last revision: merge ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1966/files - new: https://git.openjdk.org/jfx/pull/1966/files/41c08b8d..b4691640 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1966&range=04 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1966&range=03-04 Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod Patch: https://git.openjdk.org/jfx/pull/1966.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1966/head:pull/1966 PR: https://git.openjdk.org/jfx/pull/1966 From mfox at openjdk.org Tue Dec 2 19:04:27 2025 From: mfox at openjdk.org (Martin Fox) Date: Tue, 2 Dec 2025 19:04:27 GMT Subject: RFR: 8372415: Stage size should match visual window bounds In-Reply-To: References: Message-ID: On Mon, 24 Nov 2025 14:28:47 GMT, Michael Strau? wrote: > On Windows, the `Stage.width` and `Stage.height` correspond to the window size as returned by `GetWindowRect`. > > Up until Windows 10, the size of a window was identical to its visual borders. However, since Windows 10 has introduced thin visual window borders, the window manager adds an invisible border of a few pixels around the window to make it easier to resize the window. Since `GetWindowRect` returns the window size _including_ these invisible borders, the location and size of a `Stage` isn't exactly what we'd expect. > > For example, if we place a `Stage` at `setX(0)` and `setY(0)`, the window appears with a small distance from the screen edge, and the window size extends a few pixels beyond its visual borders (in the following images, the screenshot size corresponds to the window size; note the invisible padding around the edges): > window-size-1 > > What we actually want is to have the visual borders line up with the edges of the screen, and have the window size correspond to the visual borders: > window-size-2 > > The implementation is quite simple: instead of `GetWindowRect`, we use `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)`. This gives us the bounds of the visual window borders. If this function fails, we fall back to `GetWindowRect` (now, I don't know why `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)` would ever fail... maybe an old Windows version in a remote desktop scenario?). I haven't uncovered any problems so far but it took me a while to get my bearings. You're working with two coordinate systems, the one used by JavaFX which doesn't include the invisible border and the one used by Windows which does. The naming convention is confusing since the "extended" rectangle is actually the smaller of the two. It would also be good to see some comments clarifying that `m_insets`, `m_maxSize`, and `m_minSize` are all specified in the JavaFX system. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1982#issuecomment-3603544681 From mstrauss at openjdk.org Tue Dec 2 19:57:06 2025 From: mstrauss at openjdk.org (Michael =?UTF-8?B?U3RyYXXDnw==?=) Date: Tue, 2 Dec 2025 19:57:06 GMT Subject: RFR: 8372415: Stage size should match visual window bounds In-Reply-To: References: Message-ID: On Tue, 2 Dec 2025 19:01:11 GMT, Martin Fox wrote: > I haven't uncovered any problems so far but it took me a while to get my bearings. You're working with two coordinate systems, the one used by JavaFX which doesn't include the invisible border and the one used by Windows which does. The naming convention is confusing since the "extended" rectangle is actually the smaller of the two. It would also be good to see some comments clarifying that `m_insets`, `m_maxSize`, and `m_minSize` are all specified in the JavaFX system. I don?t think it?s quite "two coordinate systems" (JavaFX vs Windows). `Stage.width/height` are intended to include the normal system decorations (title bar + borders), which historically also matches what people mean by "window size": it includes the non-client area, but not purely visual effects like drop shadows. The weirdness on Windows 10+ is that GetWindowRect started including an extra invisible resize border that?s not part of the visible frame, so the window ends up being reported a few pixels larger than it looks. Using `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)` is basically a way to get the visually perceived bounds back. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1982#issuecomment-3603720855 From mfox at openjdk.org Wed Dec 3 00:15:36 2025 From: mfox at openjdk.org (Martin Fox) Date: Wed, 3 Dec 2025 00:15:36 GMT Subject: RFR: 8372415: Stage size should match visual window bounds In-Reply-To: References: Message-ID: <-0HwkGEPXrgB2WD0jLPLfU5h6QEydVLIs4OyuhP--3U=.fdec785b-1386-456e-a975-f0e5dac676ce@github.com> On Mon, 24 Nov 2025 14:28:47 GMT, Michael Strau? wrote: > On Windows, the `Stage.width` and `Stage.height` correspond to the window size as returned by `GetWindowRect`. > > Up until Windows 10, the size of a window was identical to its visual borders. However, since Windows 10 has introduced thin visual window borders, the window manager adds an invisible border of a few pixels around the window to make it easier to resize the window. Since `GetWindowRect` returns the window size _including_ these invisible borders, the location and size of a `Stage` isn't exactly what we'd expect. > > For example, if we place a `Stage` at `setX(0)` and `setY(0)`, the window appears with a small distance from the screen edge, and the window size extends a few pixels beyond its visual borders (in the following images, the screenshot size corresponds to the window size; note the invisible padding around the edges): > window-size-1 > > What we actually want is to have the visual borders line up with the edges of the screen, and have the window size correspond to the visual borders: > window-size-2 > > The implementation is quite simple: instead of `GetWindowRect`, we use `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)`. This gives us the bounds of the visual window borders. If this function fails, we fall back to `GetWindowRect` (now, I don't know why `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)` would ever fail... maybe an old Windows version in a remote desktop scenario?). I was thinking that JavaFX and Windows have different ideas of where the window origin (0, 0) lies; Windows thinks it's at the top left of drop shadow area and JavaFX thinks it's at the top left of the title bar (in this PR). But you're right, what's relevant is that there are two rectangles of different sizes. I still think it could be clearer that, say, `m_insets` applies to the smaller of the two (which is the extended one). ------------- PR Comment: https://git.openjdk.org/jfx/pull/1982#issuecomment-3604471924 From mstrauss at openjdk.org Wed Dec 3 00:48:52 2025 From: mstrauss at openjdk.org (Michael =?UTF-8?B?U3RyYXXDnw==?=) Date: Wed, 3 Dec 2025 00:48:52 GMT Subject: RFR: 8372415: Stage size should match visual window bounds [v2] In-Reply-To: References: Message-ID: > On Windows, the `Stage.width` and `Stage.height` correspond to the window size as returned by `GetWindowRect`. > > Up until Windows 10, the size of a window was identical to its visual borders. However, since Windows 10 has introduced thin visual window borders, the window manager adds an invisible border of a few pixels around the window to make it easier to resize the window. Since `GetWindowRect` returns the window size _including_ these invisible borders, the location and size of a `Stage` isn't exactly what we'd expect. > > For example, if we place a `Stage` at `setX(0)` and `setY(0)`, the window appears with a small distance from the screen edge, and the window size extends a few pixels beyond its visual borders (in the following images, the screenshot size corresponds to the window size; note the invisible padding around the edges): > window-size-1 > > What we actually want is to have the visual borders line up with the edges of the screen, and have the window size correspond to the visual borders: > window-size-2 > > The implementation is quite simple: instead of `GetWindowRect`, we use `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)`. This gives us the bounds of the visual window borders. If this function fails, we fall back to `GetWindowRect` (now, I don't know why `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)` would ever fail... maybe an old Windows version in a remote desktop scenario?). Michael Strau? has updated the pull request incrementally with one additional commit since the last revision: add comments ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1982/files - new: https://git.openjdk.org/jfx/pull/1982/files/164d9b73..defe0df7 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1982&range=01 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1982&range=00-01 Stats: 14 lines in 1 file changed: 9 ins; 4 del; 1 mod Patch: https://git.openjdk.org/jfx/pull/1982.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1982/head:pull/1982 PR: https://git.openjdk.org/jfx/pull/1982 From mstrauss at openjdk.org Wed Dec 3 00:48:53 2025 From: mstrauss at openjdk.org (Michael =?UTF-8?B?U3RyYXXDnw==?=) Date: Wed, 3 Dec 2025 00:48:53 GMT Subject: RFR: 8372415: Stage size should match visual window bounds In-Reply-To: References: Message-ID: On Mon, 24 Nov 2025 14:28:47 GMT, Michael Strau? wrote: > On Windows, the `Stage.width` and `Stage.height` correspond to the window size as returned by `GetWindowRect`. > > Up until Windows 10, the size of a window was identical to its visual borders. However, since Windows 10 has introduced thin visual window borders, the window manager adds an invisible border of a few pixels around the window to make it easier to resize the window. Since `GetWindowRect` returns the window size _including_ these invisible borders, the location and size of a `Stage` isn't exactly what we'd expect. > > For example, if we place a `Stage` at `setX(0)` and `setY(0)`, the window appears with a small distance from the screen edge, and the window size extends a few pixels beyond its visual borders (in the following images, the screenshot size corresponds to the window size; note the invisible padding around the edges): > window-size-1 > > What we actually want is to have the visual borders line up with the edges of the screen, and have the window size correspond to the visual borders: > window-size-2 > > The implementation is quite simple: instead of `GetWindowRect`, we use `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)`. This gives us the bounds of the visual window borders. If this function fails, we fall back to `GetWindowRect` (now, I don't know why `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)` would ever fail... maybe an old Windows version in a remote desktop scenario?). I've added a comment to clarify that `m_minSize`, `m_maxSize`, and `m_insets` are specified with respect to the extended frame bounds. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1982#issuecomment-3604540834 From zelmidaoui at openjdk.org Wed Dec 3 14:32:13 2025 From: zelmidaoui at openjdk.org (Ziad El Midaoui) Date: Wed, 3 Dec 2025 14:32:13 GMT Subject: RFR: 8318095: TextArea/TextFlow: wrong layout in RTL mode Message-ID: Fixed issue with TextArea/TextFlow added a check `isMirrored()` in `PrismTextLayout.setWrapWidth` which makes the text right aligned in RTL. Tested with monkeyTester and the test in the bug ------------- Commit messages: - Fix TextArea/TextFlow alignment right in RTL Changes: https://git.openjdk.org/jfx/pull/1995/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1995&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8318095 Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod Patch: https://git.openjdk.org/jfx/pull/1995.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1995/head:pull/1995 PR: https://git.openjdk.org/jfx/pull/1995 From zelmidaoui at openjdk.org Wed Dec 3 14:32:13 2025 From: zelmidaoui at openjdk.org (Ziad El Midaoui) Date: Wed, 3 Dec 2025 14:32:13 GMT Subject: RFR: 8318095: TextArea/TextFlow: wrong layout in RTL mode In-Reply-To: References: Message-ID: <9mdEmiM2gME2yppSL2ru6ivSI7mnAfaVl_CZtYIqfwM=.cbad938d-493e-47f8-bc15-59144170cf98@github.com> On Wed, 3 Dec 2025 13:33:31 GMT, Ziad El Midaoui wrote: > Fixed issue with TextArea/TextFlow added a check `isMirrored()` in `PrismTextLayout.setWrapWidth` which makes the text right aligned in RTL. > Tested with monkeyTester and the test in the bug Working on a JUnit Test for this bug. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1995#issuecomment-3606886102 From zelmidaoui at openjdk.org Wed Dec 3 14:33:04 2025 From: zelmidaoui at openjdk.org (Ziad El Midaoui) Date: Wed, 3 Dec 2025 14:33:04 GMT Subject: RFR: 8330559: Trailing space not rendering correctly in TextFlow in RTL mode In-Reply-To: References: <9YBLOcueh9GZKb25W1ntyDE_sC744To-Ts0CxI201L4=.27113211-ce7b-49ce-8406-6b0c9105406e@github.com> Message-ID: On Wed, 26 Nov 2025 21:24:25 GMT, Andy Goryachev wrote: >> Fix trailing space present for complex text ( LTR text with RTL text ) Example: "Arabic: ???????" >> Added case to handle complex text in `getPosX` of `TextRun` >> Tested the changes with the code present in the bug. > > Updated reproducer: https://github.com/andy-goryachev-oracle/Test/blob/main/src/goryachev/bugs/TextFlow_ExtraSpace_8330559.java @andy-goryachev-oracle I have provided a fix for [JDK-8318095](https://bugs.openjdk.org/browse/JDK-8318095) in PR [1995](https://github.com/openjdk/jfx/pull/1995). It doesn't impact the changes in this PR as mentioned, you can review it and let me know your suggestions for both PRs ------------- PR Comment: https://git.openjdk.org/jfx/pull/1988#issuecomment-3607145473 From lukasz.kostyra at oracle.com Wed Dec 3 16:54:55 2025 From: lukasz.kostyra at oracle.com (Lukasz Kostyra) Date: Wed, 3 Dec 2025 16:54:55 +0000 Subject: JavaFX Direct3D 12 - Second EA release In-Reply-To: <0b5bcb4c-6a35-4fc2-af52-b6273a319a57@xpipe.io> References: <2f171928-1f91-4dc7-be35-ca447fc5d712@xpipe.io> <0f43b772-c555-4d2f-a522-c4cf048bfeea@xpipe.io> <0b5bcb4c-6a35-4fc2-af52-b6273a319a57@xpipe.io> Message-ID: Hi Christopher, I did not find the way to reproduce this locally, but I found a problem with one of the optimizations that is in the backend. To double check if that is in fact the issue I pushed https://github.com/openjdk/jfx-sandbox/commit/7078d621dc282ab8439800b84b78377dec3eea89 to disable the optimization (it is on by default, disabling it fixes that specific problem on my end) and I?d like to double-check if this is the correct lead. When you have a moment, could you build JFX with that change and run your app with ?-Dprism.d3d12.clearOpts=false? added to the command line? If the problem persists with prism.d3d12.clearOpts set to false I would need some more information on how these labels are rendered to track this down. Thanks, -Lukasz From: Christopher Schnick Sent: Friday, 28 November 2025 13:25 To: Lukasz Kostyra Cc: OpenJFX Subject: [External] : Re: JavaFX Direct3D 12 - Second EA release I did not encounter the vanishing issue anymore with that build, so at least it is usable. However, the font rendering issue still exists for some nodes: [cid:image001.png at 01DC647D.C3E61E40] It is not deterministic, meaning that if I just scroll the scrollpane forward and back, the same text might get rendered correctly. Also, did you see the performance results I posted for my AMD system? Performance was quite bad there, so this is not in a stage where I can test this in production a bit. On 28/11/2025 12:41, Lukasz Kostyra wrote: Hi Christopher, I just pushed a fix for JDK-8371995 onto direct3d12 branch in the sandbox - https://github.com/openjdk/jfx-sandbox/tree/direct3d12 . If you find a moment, could you build JFX from that branch and check if your app works correctly? -Lukasz From: openjfx-dev On Behalf Of Lukasz Kostyra Sent: Monday, 17 November 2025 15:14 To: Christopher Schnick Cc: OpenJFX Subject: RE: Re: JavaFX Direct3D 12 - Second EA release I might?ve found the problem, there is an assertion that triggers when multiple text objects using different fonts are drawn. It could be related (AFAIK Label controls will eventually end up at the same text rendering routines as Text nodes). Assertions are compiled out on Release for performance, so there is a chance it would corrupt the rendering without anything meaningful shown on screen. To track this I just filed https://bugs.openjdk.org/browse/JDK-8371995 . I will check it and let you know when I fix it. On your side It might still be handy to build JFX in DebugNative, to confirm if the triggered assertion is the same and to later confirm if the fix is working for you too. -Lukasz From: Christopher Schnick > Sent: Saturday, 15 November 2025 17:39 To: Lukasz Kostyra > Cc: OpenJFX > Subject: Re: [External] : Re: JavaFX Direct3D 12 - Second EA release Forgot to add, there is nothing out of the ordinary printed in the verbose logs. If I find the time, I can look into compiling a debug build. But the problem should be reproducible somehow when just automatically creating a lot of labels with random styles, sizes, and text. Some of them should break as they did for me. On 15/11/2025 17:34, Christopher Schnick wrote: Ok, so I had more time to debug it. The one weird thing I observed when it was working was that some labels have corrupted text rendering: [cid:image002.png at 01DC647D.C3E61E40] Not all of them, most are fine. There are no differences in terms of style classes etc. between the labels. When scrolling, the rendering sometimes switches between this corrupted and normal state after some delay. After a while I also figured out that text rendering is responsible for the issue of the nodes vanishing: Certain label contents broke the renderer. For example, in my application, the string "Password manager" when assigned to a label broke it and nothing was rendered anymore. I tried to find an easy reproducer but was not able to. It's probably very dependent on all the different style classes that influence the text shape/size/etc. On 13/11/2025 16:30, Lukasz Kostyra wrote: Thanks for checking. It is very possible the D3D12 runtime did not like something, could be related to your specific hardware. D3D12 by now has many extensions which differ depending on hardware and can lift certain restrictions - we already internally had a case where one GPU had some restriction that was not enforced on another GPU and we had to accommodate that. The first step would be to try running D3D12 with ?-Dprism.verbose=true -Dprism.debug=true?. These should print additional logs that might have some extra information. If there?s nothing useful there, next step would be to build JavaFX with -PCONF=DebugNative - this will compile shaders in Debug, add assertions and debug logs to the backend - and then run your app with D3D12 debug layers and GPU debugging enabled by adding ?-Dprsim.d3d12.debugLayers=true -Dprism.d3d12.gpuDebug=true?. Those will slow down the app significantly, but will also tell D3D12 to run additional API use and GPU use checks. If the problem happens during a render loop and debug layers catch it, there is a chance it will cascade into other errors and spam the console output - you can tell D3D12 debug layers to trigger an assertion on first encountered error with ?-Dprism.d3d12.breakOnError=true?. I am running out of time today to check this myself, but if you find something let me know - I?ll try to reproduce the problem myself and we?ll see where we go from there. Good luck! - Lukasz From: Christopher Schnick Sent: Thursday, 13 November 2025 16:11 To: Lukasz Kostyra Cc: openjfx-dev at openjdk.org Subject: [External] : Re: JavaFX Direct3D 12 - Second EA release I just tried to run a project with provided jmods and at some point, certain nodes are just not rendered anymore and the window contents vanish. But they render for a short period of time. There is no exception thrown as far as I can see, so not sure what you need for debugging. For testing, this is the built application with the d3d12 jmods that you can use to attempt to reproduce the problem: https://we.tl/t-DJuX0BeqXm . It is built from these sources: https://github.com/xpipe-io/kickstartfx On 13/11/2025 14:40, Lukasz Kostyra wrote: Hello openjfx-dev, The second Early Access(EA) build of JavaFX with the Windows Direct3D 12 rendering pipeline is now available at: https://jdk.java.net/javafxdirect3d12/ Please test this bundle and share your feedback by: - emailing openjfx-dev at openjdk.java.net or - reporting issues via JBS[https://bugs.openjdk.org/] or at https://bugreport.java.com This is the second EA release. The backend is feature-complete and went through a first optimization pass, but it still requires some more testing on more hardware variants before we can consider it complete. As such, with this release we also would like to call for help with performance testing the backend (more details on that will be sent in a separate email thread). Known issues and pending tasks are captured on JBS and can be accessed using the filter provided on the Direct3D 12 EA page [https://jdk.java.net/javafxdirect3d12/]. Before reporting a new bug, please review the existing issues to avoid duplicates. Important Notes: 1. This is a Windows-specific feature, so only a Windows-specific bundle is provided. 2. The default rendering pipeline is set to d3d12. Use "-Dprism.order=d3d" or "-Dprism.order=sw" to select one of the other pipelines for comparison testing. 3. It is recommended to use JDK 25 or later. 4. At this stage D3D12 backend is feature-complete and went through the first phase of optimization. It is worth noting that, while generally we noticed performance improvements, it might not be on par with D3D backend on every machine combo - we already noted performance being worse on recent NVidia discrete GPUs [https://bugs.openjdk.org/browse/JDK-8370486] and are looking for solutions. 5. Issue behavior may vary across different hardware, so please provide detailed information, such as the output of "java -Dprism.verbose=true" or used hardware, when reporting or discussing issues. 6. Refer: Run HelloWorld using JavaFX SDK [https://openjfx.io/openjfx-docs/#install-javafx] We look forward to your feedback. Regards, Lukasz Confidential- Oracle Internal -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image001.png Type: image/png Size: 18275 bytes Desc: image001.png URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image002.png Type: image/png Size: 57114 bytes Desc: image002.png URL: From mstrauss at openjdk.org Wed Dec 3 17:23:48 2025 From: mstrauss at openjdk.org (Michael =?UTF-8?B?U3RyYXXDnw==?=) Date: Wed, 3 Dec 2025 17:23:48 GMT Subject: RFR: 8373038: Interpolator factories should follow method naming convention Message-ID: <86-PY5KbI9_yE0m1-afDGczK0O7-4bSQj2wzeAhLouo=.9d0b7494-2f9b-405f-ab0b-666e762c159e@github.com> The following interpolator factories don't follow the standard method naming convention: * `Interpolator.SPLINE(double, double, double, double)` * `Interpolator.TANGENT(Duration, double, Duration, double)` * `Interpolator.TANGENT(Duration, double)` * `Interpolator.STEPS(int, StepPosition)` New methods named `ofSpline`, `ofTangent`, and `ofSteps` are added. The existing methods are deprecated (not for removal) in favor of the correctly-named methods. This change is in line with the new `ofLinear` method added with #1977. ------------- Commit messages: - Interpolator factories should follow method naming convention Changes: https://git.openjdk.org/jfx/pull/1996/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1996&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8373038 Stats: 135 lines in 7 files changed: 62 ins; 9 del; 64 mod Patch: https://git.openjdk.org/jfx/pull/1996.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1996/head:pull/1996 PR: https://git.openjdk.org/jfx/pull/1996 From crschnick at xpipe.io Wed Dec 3 17:52:40 2025 From: crschnick at xpipe.io (Christopher Schnick) Date: Wed, 3 Dec 2025 18:52:40 +0100 Subject: JavaFX Direct3D 12 - Second EA release In-Reply-To: References: <2f171928-1f91-4dc7-be35-ca447fc5d712@xpipe.io> <0f43b772-c555-4d2f-a522-c4cf048bfeea@xpipe.io> <0b5bcb4c-6a35-4fc2-af52-b6273a319a57@xpipe.io> Message-ID: This commit fixes the problem when the property is set to false and it shows up again if the property is not set to false On 03/12/2025 5:54 PM, Lukasz Kostyra wrote: > > Hi Christopher, > > I did not find the way to reproduce this locally, but I found a > problem with one of the optimizations that is in the backend. To > double check if that is in fact the issue I pushed > https://github.com/openjdk/jfx-sandbox/commit/7078d621dc282ab8439800b84b78377dec3eea89 > to disable the optimization (it is on by default, disabling it fixes > that specific problem on my end) and I?d like to double-check if this > is the correct lead. > > When you have a moment, could you build JFX with that change and run > your app with ?-Dprism.d3d12.clearOpts=false? added to the command line? > > If the problem persists with prism.d3d12.clearOpts set to false I > would need some more information on how these labels are rendered to > track this down. > > Thanks, > > -Lukasz > > *From:*Christopher Schnick > *Sent:* Friday, 28 November 2025 13:25 > *To:* Lukasz Kostyra > *Cc:* OpenJFX > *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA release > > I did not encounter the vanishing issue anymore with that build, so at > least it is usable. > > However, the font rendering issue still exists for some nodes: > > It is not deterministic, meaning that if I just scroll the scrollpane > forward and back, the same text might get rendered correctly. > > Also, did you see the performance results I posted for my AMD system? > Performance was quite bad there, so this is not in a stage where I can > test this in production a bit. > > On 28/11/2025 12:41, Lukasz Kostyra wrote: > > Hi Christopher, > > I just pushed a fix for JDK-8371995 onto direct3d12 branch in the > sandbox - https://github.com/openjdk/jfx-sandbox/tree/direct3d12 > > . If you find a moment, could you build JFX from that branch and > check if your app works correctly? > > -Lukasz > > *From:*openjfx-dev > *On Behalf Of *Lukasz Kostyra > *Sent:* Monday, 17 November 2025 15:14 > *To:* Christopher Schnick > > *Cc:* OpenJFX > > *Subject:* RE: Re: JavaFX Direct3D 12 - Second EA release > > I might?ve found the problem, there is an assertion that triggers > when multiple text objects using different fonts are drawn. It > could be related (AFAIK Label controls will eventually end up at > the same text rendering routines as Text nodes). Assertions are > compiled out on Release for performance, so there is a chance it > would corrupt the rendering without anything meaningful shown on > screen. > > To track this I just filed > https://bugs.openjdk.org/browse/JDK-8371995 . I will check it and > let you know when I fix it. > > On your side It might still be handy to build JFX in DebugNative, > to confirm if the triggered assertion is the same and to later > confirm if the fix is working for you too. > > -Lukasz > > *From:*Christopher Schnick > *Sent:* Saturday, 15 November 2025 17:39 > *To:* Lukasz Kostyra > *Cc:* OpenJFX > *Subject:* Re: [External] : Re: JavaFX Direct3D 12 - Second EA release > > Forgot to add, there is nothing out of the ordinary printed in the > verbose logs. > > If I find the time, I can look into compiling a debug build. > > But the problem should be reproducible somehow when just > automatically creating a lot of labels with random styles, sizes, > and text. Some of them should break as they did for me. > > On 15/11/2025 17:34, Christopher Schnick wrote: > > Ok, so I had more time to debug it. The one weird thing I > observed when it was working was that some labels have > corrupted text rendering: > > > Not all of them, most are fine. There are no differences in > terms of style classes etc. between the labels. When > scrolling, the rendering sometimes switches between this > corrupted and normal state after some delay. > > After a while I also figured out that text rendering is > responsible for the issue of the nodes vanishing: Certain > label contents broke the renderer. For example, in my > application, the string "Password manager" when assigned to a > label broke it and nothing was rendered anymore. I tried to > find an easy reproducer but was not able to. It's probably > very dependent on all the different style classes that > influence the text shape/size/etc. > > On 13/11/2025 16:30, Lukasz Kostyra wrote: > > Thanks for checking. > > It is very possible the D3D12 runtime did not like > something, could be related to your specific hardware. > D3D12 by now has many extensions which differ depending on > hardware and can lift certain restrictions - we already > internally had a case where one GPU had some restriction > that was not enforced on another GPU and we had to > accommodate that. > > The first step would be to try running D3D12 with > ?-Dprism.verbose=true -Dprism.debug=true?. These should > print additional logs that might have some extra information. > > If there?s nothing useful there, next step would be to > build JavaFX with -PCONF=DebugNative - this will compile > shaders in Debug, add assertions and debug logs to the > backend - and then run your app with D3D12 debug layers > and GPU debugging enabled by adding > ?-Dprsim.d3d12.debugLayers=true > -Dprism.d3d12.gpuDebug=true?. Those will slow down the app > significantly, but will also tell D3D12 to run additional > API use and GPU use checks. > > If the problem happens during a render loop and debug > layers catch it, there is a chance it will cascade into > other errors and spam the console output - you can tell > D3D12 debug layers to trigger an assertion on first > encountered error with ?-Dprism.d3d12.breakOnError=true?. > > I am running out of time today to check this myself, but > if you find something let me know - I?ll try to reproduce > the problem myself and we?ll see where we go from there. > > Good luck! > > - Lukasz > > *From:*Christopher Schnick > > *Sent:* Thursday, 13 November 2025 16:11 > *To:* Lukasz Kostyra > > *Cc:* openjfx-dev at openjdk.org > *Subject:* [External] : Re: JavaFX Direct3D 12 - Second EA > release > > I just tried to run a project with provided jmods and at > some point, certain nodes are just not rendered anymore > and the window contents vanish. But they render for a > short period of time. > > There is no exception thrown as far as I can see, so not > sure what you need for debugging. > > For testing, this is the built application with the d3d12 > jmods that you can use to attempt to reproduce the > problem: https://we.tl/t-DJuX0BeqXm > > . It is built from these sources: > https://github.com/xpipe-io/kickstartfx > > > On 13/11/2025 14:40, Lukasz Kostyra wrote: > > Hello openjfx-dev, > > The second Early Access(EA) build of JavaFX with the > Windows Direct3D 12 rendering pipeline is now > available at: https://jdk.java.net/javafxdirect3d12/ > > > Please test this bundle and share your feedback by: > > - emailing openjfx-dev at openjdk.java.net or > > - reporting issues via JBS[https://bugs.openjdk.org/] > or at https://bugreport.java.com > > > This is the second EA release. The backend is > feature-complete and went through a first optimization > pass, but it still requires some more testing on more > hardware variants before we can consider it complete. > As such, with this release we also would like to call > for help with performance testing the backend (more > details on that will be sent in a separate email thread). > > Known issues and pending tasks are captured on JBS and > can be accessed using the filter provided on the > Direct3D 12 EA page > [https://jdk.java.net/javafxdirect3d12/ > ]. > Before reporting a new bug, please review the existing > issues to avoid duplicates. > > Important Notes: > > 1. This is a Windows-specific feature, so only a > Windows-specific bundle is provided. > > 2. The default rendering pipeline is set to d3d12. Use > "-Dprism.order=d3d" or "-Dprism.order=sw" to select > one of the other pipelines for comparison testing. > > 3. It is recommended to use JDK 25 or later. > > 4. At this stage D3D12 backend is feature-complete and > went through the first phase of optimization. It is > worth noting that, while generally we noticed > performance improvements, it might not be on par with > D3D backend on every machine combo? - we already noted > performance being worse on recent NVidia discrete GPUs > [https://bugs.openjdk.org/browse/JDK-8370486] and are > looking for solutions. > > 5. Issue behavior may vary across different hardware, > so please provide detailed information, such as the > output of "java -Dprism.verbose=true" or used > hardware, when reporting or discussing issues. > > 6. Refer: Run HelloWorld using JavaFX SDK > [https://openjfx.io/openjfx-docs/#install-javafx > ] > > We look forward to your feedback. > > Regards, > > Lukasz > > Confidential- Oracle Internal > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image001.png Type: image/png Size: 18275 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image002.png Type: image/png Size: 57114 bytes Desc: not available URL: From mariushanl at web.de Wed Dec 3 19:31:38 2025 From: mariushanl at web.de (Marius Hanl) Date: Wed, 3 Dec 2025 19:31:38 +0000 Subject: JavaFX Direct3D 12 - Call for performance testing help In-Reply-To: References: Message-ID: An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Laptop_dgpu_RenderPerf_results-d3d12-20251127-221003.csv Type: application/vnd.ms-excel Size: 894 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Laptop_dgpu_RenderPerf_results-d3d-20251127-214034.csv Type: application/vnd.ms-excel Size: 921 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Laptop_igpu_RenderPerf_results-d3d12-20251128-000446.csv Type: application/vnd.ms-excel Size: 906 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Laptop_igpu_RenderPerf_results-d3d-20251127-230229.csv Type: application/vnd.ms-excel Size: 911 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Tower_RenderPerf_results-d3d12-20251129-131458.csv Type: application/vnd.ms-excel Size: 933 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Tower_RenderPerf_results-d3d-20251129-124242.csv Type: application/vnd.ms-excel Size: 949 bytes Desc: not available URL: From zjx001202 at gmail.com Wed Dec 3 20:00:49 2025 From: zjx001202 at gmail.com (Glavo) Date: Thu, 4 Dec 2025 04:00:49 +0800 Subject: WebP and AVIF image support Message-ID: Hi, The image formats supported by JavaFX have not been updated for a very long time. However, more and more content providers are now adopting newer formats such as WebP and AVIF. For example, our application needs to display icons for Minecraft mods, modpacks, and other content sourced from Modrinth, and the vast majority of these icons are in WebP format. To work around this, we currently have to bundle TwelveMonkeys into our program, decode the images to BufferedImage, and then convert them to javafx.scene.image.Image. This approach significantly increases the size of our application, adds considerable performance overhead, does not support animated WebP, and even has a color-shift bug when decoding lossy-compressed WebP images. Is there any possibility that JavaFX will add native support for modern image formats like WebP and AVIF in the future? I noticed that the javafx.web module already depends on libwebp during its build, yet this dependency is not utilized for javafx.scene.image.Image decoding?which is honestly a bit of a shame. We sincerely hope that JavaFX can provide native support for these formats. Glavo -------------- next part -------------- An HTML attachment was scrubbed... URL: From andy.goryachev at oracle.com Wed Dec 3 20:09:36 2025 From: andy.goryachev at oracle.com (Andy Goryachev) Date: Wed, 3 Dec 2025 20:09:36 +0000 Subject: WebP and AVIF image support In-Reply-To: References: Message-ID: And HEIC. -andy From: openjfx-dev on behalf of Glavo Date: Wednesday, December 3, 2025 at 12:01 To: openjfx-dev Subject: WebP and AVIF image support Hi, The image formats supported by JavaFX have not been updated for a very long time. However, more and more content providers are now adopting newer formats such as WebP and AVIF. For example, our application needs to display icons for Minecraft mods, modpacks, and other content sourced from Modrinth, and the vast majority of these icons are in WebP format. To work around this, we currently have to bundle TwelveMonkeys into our program, decode the images to BufferedImage, and then convert them to javafx.scene.image.Image. This approach significantly increases the size of our application, adds considerable performance overhead, does not support animated WebP, and even has a color-shift bug when decoding lossy-compressed WebP images. Is there any possibility that JavaFX will add native support for modern image formats like WebP and AVIF in the future? I noticed that the javafx.web module already depends on libwebp during its build, yet this dependency is not utilized for javafx.scene.image.Image decoding?which is honestly a bit of a shame. We sincerely hope that JavaFX can provide native support for these formats. Glavo -------------- next part -------------- An HTML attachment was scrubbed... URL: From michaelstrau2 at gmail.com Wed Dec 3 20:20:48 2025 From: michaelstrau2 at gmail.com (=?UTF-8?Q?Michael_Strau=C3=9F?=) Date: Wed, 3 Dec 2025 21:20:48 +0100 Subject: WebP and AVIF image support In-Reply-To: References: Message-ID: > For example, our application needs to display icons for Minecraft mods, modpacks, and other content sourced from Modrinth, and the vast majority of these icons are in WebP format. To work around this, we currently have to bundle TwelveMonkeys into our program, decode the images to BufferedImage, and then convert them to javafx.scene.image.Image. This approach significantly increases the size of our application, adds considerable performance overhead, does not support animated WebP, and even has a color-shift bug when decoding lossy-compressed WebP images. > > Is there any possibility that JavaFX will add native support for modern image formats like WebP and AVIF in the future? I noticed that the javafx.web module already depends on libwebp during its build, yet this dependency is not utilized for javafx.scene.image.Image decoding?which is honestly a bit of a shame. We sincerely hope that JavaFX can provide native support for these formats. There's no need for your workaround. If you have TwelveMonkeys bundled with your application, JavaFX can read all of the supported images "natively" without manually converting to BufferedImage first. You just specify the WebP file in the constructor of Image. What's true is that this doesn't work for animated images. From angorya at openjdk.org Wed Dec 3 20:24:34 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Wed, 3 Dec 2025 20:24:34 GMT Subject: RFR: 8373038: Interpolator factories should follow method naming convention In-Reply-To: <86-PY5KbI9_yE0m1-afDGczK0O7-4bSQj2wzeAhLouo=.9d0b7494-2f9b-405f-ab0b-666e762c159e@github.com> References: <86-PY5KbI9_yE0m1-afDGczK0O7-4bSQj2wzeAhLouo=.9d0b7494-2f9b-405f-ab0b-666e762c159e@github.com> Message-ID: On Wed, 3 Dec 2025 17:08:24 GMT, Michael Strau? wrote: > The following interpolator factories don't follow the standard method naming convention: > > * `Interpolator.SPLINE(double, double, double, double)` > * `Interpolator.TANGENT(Duration, double, Duration, double)` > * `Interpolator.TANGENT(Duration, double)` > * `Interpolator.STEPS(int, StepPosition)` > > New methods named `ofSpline`, `ofTangent`, and `ofSteps` are added. The existing methods are deprecated (not for removal) in favor of the correctly-named methods. This change is in line with the new `ofLinear` method added with #1977. This change makes sense from purely esthetic reasons, though it probably won't be noticed by the app developers as they mostly deal with the interpolators via CSS (and there is no change there, as far as I can tell). ------------- PR Comment: https://git.openjdk.org/jfx/pull/1996#issuecomment-3608686492 From kevin.rushforth at oracle.com Wed Dec 3 20:31:48 2025 From: kevin.rushforth at oracle.com (Kevin Rushforth) Date: Wed, 3 Dec 2025 12:31:48 -0800 Subject: WebP and AVIF image support In-Reply-To: References: Message-ID: We don't currently have any plans to add such support, but could consider it if there was enough demand. Now that we have support for using Java2D's ImageIO an application could provide one or use a third-party ImageIO loader for those formats, but that would have similar limitations to those mentioned (it wouldn't support animated images and the application would need to bundle the loader). -- Kevin On 12/3/2025 12:09 PM, Andy Goryachev wrote: > And HEIC. > > -andy > > *From: *openjfx-dev on behalf of Glavo > > *Date: *Wednesday, December 3, 2025 at 12:01 > *To: *openjfx-dev > *Subject: *WebP and AVIF image support > > Hi, > > The image formats supported by JavaFX have not been updated for a very > long time. However, more and more content providers are now adopting > newer formats such as WebP and AVIF. > > For example, our application needs to display icons for Minecraft > mods, modpacks, and other content sourced from Modrinth, and the vast > majority of these icons are in WebP format. To work around this, we > currently have to bundle TwelveMonkeys into our program, decode the > images to BufferedImage, and then convert them to > javafx.scene.image.Image. This approach significantly increases the > size of our application, adds considerable performance overhead, does > not support animated WebP, and even has a color-shift bug when > decoding lossy-compressed WebP images. > > Is there any possibility that JavaFX will add native support for > modern image formats like WebP and AVIF in the future? I noticed that > the javafx.web module already depends on libwebp during its build, yet > this dependency is not utilized for javafx.scene.image.Image > decoding?which is honestly a bit of a shame. We sincerely hope that > JavaFX can provide native support for these formats. > > Glavo > -------------- next part -------------- An HTML attachment was scrubbed... URL: From angorya at openjdk.org Wed Dec 3 22:06:08 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Wed, 3 Dec 2025 22:06:08 GMT Subject: RFR: 8318095: TextArea/TextFlow: wrong layout in RTL mode In-Reply-To: <9mdEmiM2gME2yppSL2ru6ivSI7mnAfaVl_CZtYIqfwM=.cbad938d-493e-47f8-bc15-59144170cf98@github.com> References: <9mdEmiM2gME2yppSL2ru6ivSI7mnAfaVl_CZtYIqfwM=.cbad938d-493e-47f8-bc15-59144170cf98@github.com> Message-ID: On Wed, 3 Dec 2025 13:34:21 GMT, Ziad El Midaoui wrote: >> Fixed issue with TextArea/TextFlow added a check `isMirrored()` in `PrismTextLayout.setWrapWidth` which makes the text right aligned in RTL. >> Tested with monkeyTester and the test in the bug > > Working on a JUnit Test for this bug. @Ziad-Mid this looks much better, almost complete! I would like to ask you to test it not only with TextArea, but also with TextFlow - you can use this reproducer https://github.com/andy-goryachev-oracle/Test/blob/main/src/goryachev/bugs/TextFlow_ExtraSpace_8330559.java Notice how the layout is still not right in some places when the window is resized (the screenshots are from a combined branch of this PR + #1988 but the result is still the same, I think): Screenshot 2025-12-03 at 13 27 21 Screenshot 2025-12-03 at 13 27 29 Also, could you try using the monkey tester and try TextArea/TextFlow (and possibly Text/TextField as well) with RTL as well as mixed text. Please see if you can verify that the layout info is reported correctly, and the shapes are correct. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1995#issuecomment-3609033799 From angorya at openjdk.org Wed Dec 3 23:27:12 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Wed, 3 Dec 2025 23:27:12 GMT Subject: RFR: 8318095: TextArea/TextFlow: wrong layout in RTL mode In-Reply-To: References: Message-ID: On Wed, 3 Dec 2025 13:33:31 GMT, Ziad El Midaoui wrote: > Fixed issue with TextArea/TextFlow added a check `isMirrored()` in `PrismTextLayout.setWrapWidth` which makes the text right aligned in RTL. > Tested with monkeyTester and the test in the bug Another thing you might want to check is whether the LayoutInfo and related APIs (caretShape, etc) report correct information. Using the updated Monkey Tester from https://github.com/andy-goryachev-oracle/MonkeyTest : Screenshot 2025-12-03 at 15 12 24 ------------- PR Comment: https://git.openjdk.org/jfx/pull/1995#issuecomment-3609251395 From alexander.matveev at oracle.com Thu Dec 4 00:00:09 2025 From: alexander.matveev at oracle.com (Alexander Matveev) Date: Thu, 4 Dec 2025 00:00:09 +0000 Subject: Crash on macOS 26 when playing music file In-Reply-To: References: <15ba729c-cc6e-4d04-b520-95fd2b5ba059@oracle.com> Message-ID: Filed a bug for it: https://bugs.openjdk.org/browse/JDK-8373058 Confidential- Oracle Internal From: Alexander Matveev Date: Monday, December 1, 2025 at 5:55?PM To: Kevin Rushforth , Christopher Schnick , openjfx-dev at openjdk.org Subject: Re: Crash on macOS 26 when playing music file Hi Christopher and Kevin, I was able to reproduce this issue with FXMediaPlayer and MP3 file when playing via JRT protocol on macOS 26.1 aarch64. Not sure if it is reproducible on x64. Christopher, do you want to file a bug report for it? Or I can file it myself. Thanks, Alexander From: openjfx-dev on behalf of Kevin Rushforth Date: Tuesday, November 25, 2025 at 8:25?AM To: Christopher Schnick , openjfx-dev at openjdk.org Subject: Re: Crash on macOS 26 when playing music file I was able to play that media file with no problem on macOS 26.1 using the tests/manual/media/FXMediaPlayer app in the FX repo. I didn't try with your application. I can see from the hs_err log you attached, that it is crashing in our libjfxmedia_avf library in a callback from CoreFoundation. I was running JDK 25.0.1 and I tried the latest mainline JavaFX (26 ea) as well as JavaFX 25.0.1. Can you confirm the exact versions of JDK 25 and JavaFX 25 you were running? -- Kevin On 11/25/2025 5:07 AM, Christopher Schnick wrote: > Hello, I encountered a reproducible crash when playing a music file > with MediaPlayer. This does not occur on older versions of the app > using an older JDK+JavaFX version on macOS 26. > > It crashes with JDK25 and JavaFX 25 for me. Attached is the crash log. > > I have not tested this in an isolated reproducer, but I don't see how > any of my application logic can influence this. If it does not happen > in an isolated manner, I can investigate what specific changes cause > it to crash. The music file I tested with is from > https://github.com/mkpaz/atlantafx/blob/master/sampler/src/main/resources/atlantafx/sampler/media/Beat%20Thee.mp3 > . The project to reproduce the crash is > https://github.com/xpipe-io/kickstartfx, where you just have to select > the music player and click on play sample. > > Best > Christopher Schnick > > P.S. There is still a message I sent a few days ago in the mailing > list moderation queue because it was larger than the maximum allowed > attachment size > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From angorya at openjdk.org Thu Dec 4 00:24:10 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Thu, 4 Dec 2025 00:24:10 GMT Subject: RFR: 8373038: Interpolator factories should follow method naming convention In-Reply-To: <86-PY5KbI9_yE0m1-afDGczK0O7-4bSQj2wzeAhLouo=.9d0b7494-2f9b-405f-ab0b-666e762c159e@github.com> References: <86-PY5KbI9_yE0m1-afDGczK0O7-4bSQj2wzeAhLouo=.9d0b7494-2f9b-405f-ab0b-666e762c159e@github.com> Message-ID: On Wed, 3 Dec 2025 17:08:24 GMT, Michael Strau? wrote: > The following interpolator factories don't follow the standard method naming convention: > > * `Interpolator.SPLINE(double, double, double, double)` > * `Interpolator.TANGENT(Duration, double, Duration, double)` > * `Interpolator.TANGENT(Duration, double)` > * `Interpolator.STEPS(int, StepPosition)` > > New methods named `ofSpline`, `ofTangent`, and `ofSteps` are added. The existing methods are deprecated (not for removal) in favor of the correctly-named methods. This change is in line with the new `ofLinear` method added with #1977. lgtm modules/javafx.controls/src/main/java/javafx/scene/control/skin/PaginationSkin.java line 97: > 95: private static final double SWIPE_THRESHOLD = 0.30; > 96: private static final double TOUCH_THRESHOLD = 15; > 97: private static final Interpolator interpolator = Interpolator.ofSpline(0.4829, 0.5709, 0.6803, 0.9928); Off-topic: shouldn't this interpolator be specified by the stylesheet (i.e. to be able to modify the transition if needed)? More of a question for @kevinrushforth modules/javafx.graphics/src/main/java/javafx/animation/Interpolator.java line 192: > 190: > 191: /** > 192: * Use {@link #ofSpline(double, double, double, double)}. maybe something like "This poorly named method is deprecated in favor of ..." or words to that extent? or keep the original description? ------------- Marked as reviewed by angorya (Reviewer). PR Review: https://git.openjdk.org/jfx/pull/1996#pullrequestreview-3537381451 PR Review Comment: https://git.openjdk.org/jfx/pull/1996#discussion_r2586989217 PR Review Comment: https://git.openjdk.org/jfx/pull/1996#discussion_r2586983857 From angorya at openjdk.org Thu Dec 4 03:27:12 2025 From: angorya at openjdk.org (Andy Goryachev) Date: Thu, 4 Dec 2025 03:27:12 GMT Subject: RFR: 8318095: TextArea/TextFlow: wrong layout in RTL mode In-Reply-To: References: Message-ID: On Wed, 3 Dec 2025 13:33:31 GMT, Ziad El Midaoui wrote: > Fixed issue with TextArea/TextFlow added a check `isMirrored()` in `PrismTextLayout.setWrapWidth` which makes the text right aligned in RTL. > Tested with monkeyTester and the test in the bug Forgot to mention: the text layout geometry depends on the padding/borders, please make sure they are taken into account. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1995#issuecomment-3609893349 From zjx001202 at gmail.com Thu Dec 4 05:35:06 2025 From: zjx001202 at gmail.com (Glavo) Date: Thu, 4 Dec 2025 13:35:06 +0800 Subject: WebP and AVIF image support In-Reply-To: References: Message-ID: Hi Michael, There's no need for your workaround. If you have TwelveMonkeys bundled > with your application, JavaFX can read all of the supported images > "natively" without manually converting to BufferedImage first. You > just specify the WebP file in the constructor of Image. I know we could do this starting with JavaFX 24, but most of our users are using Java 21, and we need to maintain compatibility with JavaFX 14 in the long term, so we haven't made any special handling for JavaFX 24+ for the time being. However, if JavaFX natively supports WebP, the benefits would make us willing to maintain an additional if-else statement. Glavo On Thu, Dec 4, 2025 at 4:21?AM Michael Strau? wrote: > > For example, our application needs to display icons for Minecraft mods, > modpacks, and other content sourced from Modrinth, and the vast majority of > these icons are in WebP format. To work around this, we currently have to > bundle TwelveMonkeys into our program, decode the images to BufferedImage, > and then convert them to javafx.scene.image.Image. This approach > significantly increases the size of our application, adds considerable > performance overhead, does not support animated WebP, and even has a > color-shift bug when decoding lossy-compressed WebP images. > > > > Is there any possibility that JavaFX will add native support for modern > image formats like WebP and AVIF in the future? I noticed that the > javafx.web module already depends on libwebp during its build, yet this > dependency is not utilized for javafx.scene.image.Image decoding?which is > honestly a bit of a shame. We sincerely hope that JavaFX can provide native > support for these formats. > > > There's no need for your workaround. If you have TwelveMonkeys bundled > with your application, JavaFX can read all of the supported images > "natively" without manually converting to BufferedImage first. You > just specify the WebP file in the constructor of Image. > > What's true is that this doesn't work for animated images. > -------------- next part -------------- An HTML attachment was scrubbed... URL: From zjx001202 at gmail.com Thu Dec 4 05:54:23 2025 From: zjx001202 at gmail.com (Glavo) Date: Thu, 4 Dec 2025 13:54:23 +0800 Subject: WebP and AVIF image support In-Reply-To: References: Message-ID: Hi Kevin, Compared to other difficulties, the most troublesome part of TwelveMonkeys for us was the color shift bug[1] when decoding images. Our program allows users to choose their own background images, but this bug is causing all WebP background pictures to appear greenish :( Additionally, JavaFX still doesn?t natively support any high-quality animated image format. GIF quality is too poor. To support high-quality animated images, we had no choice but to implement APNG decoding ourselves in the program. However, APNG files are insanely large ? one of my 5-second, 1920?1080, 60 fps animated wallpapers ends up reaching 1 GiB in size, which makes APNG almost equally impractical. It would be great if JavaFX could natively support animated WebP. Glavo [1]: https://github.com/haraldk/TwelveMonkeys/issues/734 On Thu, Dec 4, 2025 at 4:31?AM Kevin Rushforth wrote: > We don't currently have any plans to add such support, but could consider > it if there was enough demand. > > Now that we have support for using Java2D's ImageIO an application could > provide one or use a third-party ImageIO loader for those formats, but that > would have similar limitations to those mentioned (it wouldn't support > animated images and the application would need to bundle the loader). > > -- Kevin > > > On 12/3/2025 12:09 PM, Andy Goryachev wrote: > > And HEIC. > > -andy > > *From: *openjfx-dev > on behalf of Glavo > > *Date: *Wednesday, December 3, 2025 at 12:01 > *To: *openjfx-dev > *Subject: *WebP and AVIF image support > > Hi, > > The image formats supported by JavaFX have not been updated for a very > long time. However, more and more content providers are now adopting newer > formats such as WebP and AVIF. > > For example, our application needs to display icons for Minecraft mods, > modpacks, and other content sourced from Modrinth, and the vast majority of > these icons are in WebP format. To work around this, we currently have to > bundle TwelveMonkeys into our program, decode the images to BufferedImage, > and then convert them to javafx.scene.image.Image. This approach > significantly increases the size of our application, adds considerable > performance overhead, does not support animated WebP, and even has a > color-shift bug when decoding lossy-compressed WebP images. > > Is there any possibility that JavaFX will add native support for modern > image formats like WebP and AVIF in the future? I noticed that the > javafx.web module already depends on libwebp during its build, yet this > dependency is not utilized for javafx.scene.image.Image decoding?which is > honestly a bit of a shame. We sincerely hope that JavaFX can provide native > support for these formats. > > Glavo > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lukasz.kostyra at oracle.com Thu Dec 4 10:52:04 2025 From: lukasz.kostyra at oracle.com (Lukasz Kostyra) Date: Thu, 4 Dec 2025 10:52:04 +0000 Subject: JavaFX Direct3D 12 - Second EA release In-Reply-To: References: <2f171928-1f91-4dc7-be35-ca447fc5d712@xpipe.io> <0f43b772-c555-4d2f-a522-c4cf048bfeea@xpipe.io> <0b5bcb4c-6a35-4fc2-af52-b6273a319a57@xpipe.io> Message-ID: Thanks for checking. I filed https://bugs.openjdk.org/browse/JDK-8373088 to track this since this is unrelated to specifically text, will probably get to it in a few days. -Lukasz From: Christopher Schnick Sent: Wednesday, 3 December 2025 18:53 To: Lukasz Kostyra Cc: OpenJFX Subject: [External] : Re: JavaFX Direct3D 12 - Second EA release This commit fixes the problem when the property is set to false and it shows up again if the property is not set to false On 03/12/2025 5:54 PM, Lukasz Kostyra wrote: Hi Christopher, I did not find the way to reproduce this locally, but I found a problem with one of the optimizations that is in the backend. To double check if that is in fact the issue I pushed https://github.com/openjdk/jfx-sandbox/commit/7078d621dc282ab8439800b84b78377dec3eea89 to disable the optimization (it is on by default, disabling it fixes that specific problem on my end) and I?d like to double-check if this is the correct lead. When you have a moment, could you build JFX with that change and run your app with ?-Dprism.d3d12.clearOpts=false? added to the command line? If the problem persists with prism.d3d12.clearOpts set to false I would need some more information on how these labels are rendered to track this down. Thanks, -Lukasz From: Christopher Schnick Sent: Friday, 28 November 2025 13:25 To: Lukasz Kostyra Cc: OpenJFX Subject: [External] : Re: JavaFX Direct3D 12 - Second EA release I did not encounter the vanishing issue anymore with that build, so at least it is usable. However, the font rendering issue still exists for some nodes: [cid:image001.png at 01DC6514.67022F60] It is not deterministic, meaning that if I just scroll the scrollpane forward and back, the same text might get rendered correctly. Also, did you see the performance results I posted for my AMD system? Performance was quite bad there, so this is not in a stage where I can test this in production a bit. On 28/11/2025 12:41, Lukasz Kostyra wrote: Hi Christopher, I just pushed a fix for JDK-8371995 onto direct3d12 branch in the sandbox - https://github.com/openjdk/jfx-sandbox/tree/direct3d12 . If you find a moment, could you build JFX from that branch and check if your app works correctly? -Lukasz From: openjfx-dev On Behalf Of Lukasz Kostyra Sent: Monday, 17 November 2025 15:14 To: Christopher Schnick Cc: OpenJFX Subject: RE: Re: JavaFX Direct3D 12 - Second EA release I might?ve found the problem, there is an assertion that triggers when multiple text objects using different fonts are drawn. It could be related (AFAIK Label controls will eventually end up at the same text rendering routines as Text nodes). Assertions are compiled out on Release for performance, so there is a chance it would corrupt the rendering without anything meaningful shown on screen. To track this I just filed https://bugs.openjdk.org/browse/JDK-8371995 . I will check it and let you know when I fix it. On your side It might still be handy to build JFX in DebugNative, to confirm if the triggered assertion is the same and to later confirm if the fix is working for you too. -Lukasz From: Christopher Schnick > Sent: Saturday, 15 November 2025 17:39 To: Lukasz Kostyra > Cc: OpenJFX > Subject: Re: [External] : Re: JavaFX Direct3D 12 - Second EA release Forgot to add, there is nothing out of the ordinary printed in the verbose logs. If I find the time, I can look into compiling a debug build. But the problem should be reproducible somehow when just automatically creating a lot of labels with random styles, sizes, and text. Some of them should break as they did for me. On 15/11/2025 17:34, Christopher Schnick wrote: Ok, so I had more time to debug it. The one weird thing I observed when it was working was that some labels have corrupted text rendering: [cid:image002.png at 01DC6514.67022F60] Not all of them, most are fine. There are no differences in terms of style classes etc. between the labels. When scrolling, the rendering sometimes switches between this corrupted and normal state after some delay. After a while I also figured out that text rendering is responsible for the issue of the nodes vanishing: Certain label contents broke the renderer. For example, in my application, the string "Password manager" when assigned to a label broke it and nothing was rendered anymore. I tried to find an easy reproducer but was not able to. It's probably very dependent on all the different style classes that influence the text shape/size/etc. On 13/11/2025 16:30, Lukasz Kostyra wrote: Thanks for checking. It is very possible the D3D12 runtime did not like something, could be related to your specific hardware. D3D12 by now has many extensions which differ depending on hardware and can lift certain restrictions - we already internally had a case where one GPU had some restriction that was not enforced on another GPU and we had to accommodate that. The first step would be to try running D3D12 with ?-Dprism.verbose=true -Dprism.debug=true?. These should print additional logs that might have some extra information. If there?s nothing useful there, next step would be to build JavaFX with -PCONF=DebugNative - this will compile shaders in Debug, add assertions and debug logs to the backend - and then run your app with D3D12 debug layers and GPU debugging enabled by adding ?-Dprsim.d3d12.debugLayers=true -Dprism.d3d12.gpuDebug=true?. Those will slow down the app significantly, but will also tell D3D12 to run additional API use and GPU use checks. If the problem happens during a render loop and debug layers catch it, there is a chance it will cascade into other errors and spam the console output - you can tell D3D12 debug layers to trigger an assertion on first encountered error with ?-Dprism.d3d12.breakOnError=true?. I am running out of time today to check this myself, but if you find something let me know - I?ll try to reproduce the problem myself and we?ll see where we go from there. Good luck! - Lukasz From: Christopher Schnick Sent: Thursday, 13 November 2025 16:11 To: Lukasz Kostyra Cc: openjfx-dev at openjdk.org Subject: [External] : Re: JavaFX Direct3D 12 - Second EA release I just tried to run a project with provided jmods and at some point, certain nodes are just not rendered anymore and the window contents vanish. But they render for a short period of time. There is no exception thrown as far as I can see, so not sure what you need for debugging. For testing, this is the built application with the d3d12 jmods that you can use to attempt to reproduce the problem: https://we.tl/t-DJuX0BeqXm . It is built from these sources: https://github.com/xpipe-io/kickstartfx On 13/11/2025 14:40, Lukasz Kostyra wrote: Hello openjfx-dev, The second Early Access(EA) build of JavaFX with the Windows Direct3D 12 rendering pipeline is now available at: https://jdk.java.net/javafxdirect3d12/ Please test this bundle and share your feedback by: - emailing openjfx-dev at openjdk.java.net or - reporting issues via JBS[https://bugs.openjdk.org/] or at https://bugreport.java.com This is the second EA release. The backend is feature-complete and went through a first optimization pass, but it still requires some more testing on more hardware variants before we can consider it complete. As such, with this release we also would like to call for help with performance testing the backend (more details on that will be sent in a separate email thread). Known issues and pending tasks are captured on JBS and can be accessed using the filter provided on the Direct3D 12 EA page [https://jdk.java.net/javafxdirect3d12/]. Before reporting a new bug, please review the existing issues to avoid duplicates. Important Notes: 1. This is a Windows-specific feature, so only a Windows-specific bundle is provided. 2. The default rendering pipeline is set to d3d12. Use "-Dprism.order=d3d" or "-Dprism.order=sw" to select one of the other pipelines for comparison testing. 3. It is recommended to use JDK 25 or later. 4. At this stage D3D12 backend is feature-complete and went through the first phase of optimization. It is worth noting that, while generally we noticed performance improvements, it might not be on par with D3D backend on every machine combo - we already noted performance being worse on recent NVidia discrete GPUs [https://bugs.openjdk.org/browse/JDK-8370486] and are looking for solutions. 5. Issue behavior may vary across different hardware, so please provide detailed information, such as the output of "java -Dprism.verbose=true" or used hardware, when reporting or discussing issues. 6. Refer: Run HelloWorld using JavaFX SDK [https://openjfx.io/openjfx-docs/#install-javafx] We look forward to your feedback. Regards, Lukasz Confidential- Oracle Internal -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image001.png Type: image/png Size: 18275 bytes Desc: image001.png URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: image002.png Type: image/png Size: 57114 bytes Desc: image002.png URL: From lukasz.kostyra at oracle.com Thu Dec 4 10:54:09 2025 From: lukasz.kostyra at oracle.com (Lukasz Kostyra) Date: Thu, 4 Dec 2025 10:54:09 +0000 Subject: JavaFX Direct3D 12 - Call for performance testing help In-Reply-To: References: Message-ID: Thanks for testing! They seem to be mostly in line with what we see as well. I will take a closer look at those and work on improving those soon after I?m done with functional bugs we caught since EA2 :) -Lukasz From: Marius Hanl Sent: Wednesday, 3 December 2025 20:32 To: Lukasz Kostyra ; openjfx-dev at openjdk.org Subject: [External] : RE: RE: JavaFX Direct3D 12 - Call for performance testing help Hi Lukasz, finally, here are my benchmarks. I can confirm what you found out earlier. Some 3D shapes seems to perform better. Especially Text Rendering seems way worse right now, as expected. #1 - Tower PC - AMD Ryzen 9 5900X - AMD Radeon RX 6900 XT D3D12 Test;objectCount;FPS 3DBox;20000;28,73 3DCylinder;20000;28,77 3DMesh;15000;12,50 3DSphere;20000;35,57 Arc;6500;15,27 Button;5000;12,40 Circle;70000;8,87 CircleBlendAdd;22500;14,13 CircleBlendDarken;22500;14,13 CircleBlendMultiply;22500;14,10 CircleRH;12500;13,00 ColorText;25000;1,00 CubicCurve;40000;10,50 Ellipse;70000;8,70 Image;70000;9,30 ImageRH;70000;9,23 Label;5000;17,80 LargeColorText;30000;1,50 LargeText;30000;1,50 LinGradCircle;40000;8,93 Line;70000;8,70 MultiShape2D;22500;11,83 MultiShape2D3D;22500;27,33 MultiShape2D3DInterleaved;15000;24,00 MultiShape2DInterleaved;12500;14,97 MultiShape3D;12500;50,37 MultiShape3DInterleaved;12500;36,50 OpenArc;5000;17,03 Path;40000;10,67 Polygon;47500;9,50 QuadCurve;47500;10,20 RadGradCircle;4000;29,93 RandomSizeText;22500;1,10 Rectangle;70000;8,63 RotatedRectangleRH;47500;6,60 StrokedCircle;70000;8,10 StrokedPolygon;47500;5,53 StrokedRectangle;70000;8,10 WhiteText;22500;1,00 D3D Test;objectCount;FPS 3DBox;20000;31,97 3DCylinder;20000;34,13 3DMesh;15000;28,77 3DSphere;20000;20,27 Arc;6500;16,97 Button;5000;13,07 Circle;70000;20,47 CircleBlendAdd;22500;11,10 CircleBlendDarken;22500;11,00 CircleBlendMultiply;22500;10,83 CircleRH;12500;15,73 ColorText;25000;14,50 CubicCurve;40000;27,33 Ellipse;70000;19,07 Image;70000;33,37 ImageRH;70000;19,67 Label;5000;15,60 LargeColorText;30000;16,30 LargeText;30000;16,27 LinGradCircle;40000;24,87 Line;70000;18,33 MultiShape2D;22500;16,57 MultiShape2D3D;22500;32,43 MultiShape2D3DInterleaved;15000;16,63 MultiShape2DInterleaved;12500;8,93 MultiShape3D;12500;40,67 MultiShape3DInterleaved;12500;26,07 OpenArc;5000;18,97 Path;40000;25,50 Polygon;47500;22,40 QuadCurve;47500;24,17 RadGradCircle;4000;14,90 RandomSizeText;22500;16,10 Rectangle;70000;16,60 RotatedRectangleRH;47500;17,47 StrokedCircle;70000;20,90 StrokedPolygon;47500;20,97 StrokedRectangle;70000;15,80 WhiteText;22500;16,80 #2 - Laptop, only iGPU - AMD Ryzen 9 9955HX3D - iGPU: AMD Radeon(TM) 610M D3D12 Test;objectCount;FPS 3DBox;20000;18,43 3DCylinder;20000;12,80 3DMesh;15000;6,90 3DSphere;20000;6,50 Arc;6500;13,87 Button;5000;5,20 Circle;70000;8,93 CircleBlendAdd;22500;15,63 CircleBlendDarken;22500;15,53 CircleBlendMultiply;22500;15,43 CircleRH;12500;13,03 ColorText;25000;0,80 CubicCurve;40000;11,67 Ellipse;70000;8,90 Image;70000;8,93 ImageRH;70000;8,97 Label;5000;20,87 LargeColorText;30000;0,70 LargeText;30000;0,70 LinGradCircle;40000;10,47 Line;70000;8,30 MultiShape2D;22500;10,77 MultiShape2D3D;22500;15,00 MultiShape2D3DInterleaved;15000;20,63 MultiShape2DInterleaved;12500;15,67 MultiShape3D;12500;17,97 MultiShape3DInterleaved;12500;17,00 OpenArc;5000;16,10 Path;40000;10,97 Polygon;47500;9,60 QuadCurve;47500;10,03 RadGradCircle;4000;43,50 Rectangle;70000;8,50 RotatedRectangleRH;47500;9,43 StrokedCircle;70000;8,53 StrokedPolygon;47500;10,60 StrokedRectangle;70000;8,67 WhiteText;22500;0,90 D3D Test;objectCount;FPS 3DBox;20000;7,53 3DCylinder;20000;5,20 3DMesh;15000;5,83 3DSphere;20000;3,53 Arc;6500;14,73 Button;5000;2,30 Circle;70000;11,77 CircleBlendAdd;22500;12,00 CircleBlendDarken;22500;12,30 CircleBlendMultiply;22500;12,13 CircleRH;12500;11,33 ColorText;25000;10,90 CubicCurve;40000;23,10 Ellipse;70000;6,37 Image;70000;11,73 ImageRH;70000;11,87 Label;5000;19,93 LargeColorText;30000;5,43 LargeText;30000;5,53 LinGradCircle;40000;8,63 Line;70000;19,93 MultiShape2D;22500;10,70 MultiShape2D3D;22500;8,77 MultiShape2D3DInterleaved;15000;11,37 MultiShape2DInterleaved;12500;10,53 MultiShape3D;12500;8,93 MultiShape3DInterleaved;12500;7,23 OpenArc;5000;17,57 Path;40000;12,70 Polygon;47500;20,47 QuadCurve;47500;21,63 RadGradCircle;4000;18,27 Rectangle;70000;13,07 RotatedRectangleRH;47500;17,43 StrokedCircle;70000;10,20 StrokedPolygon;47500;17,40 StrokedRectangle;70000;10,80 WhiteText;22500;12,83 #3 - Laptop, with dGPU - AMD Ryzen 9 9955HX3D - iGPU: AMD Radeon(TM) 610M - dGPU: NVIDIA GeForce RTX 5080 Laptop GPU D3D12 Test;objectCount;FPS 3DBox;20000;39,73 3DCylinder;20000;37,67 3DMesh;15000;32,13 3DSphere;20000;47,93 Arc;6500;8,10 Button;5000;1,30 Circle;70000;1,00 CircleBlendAdd;22500;2,20 CircleBlendDarken;22500;2,20 CircleBlendMultiply;22500;2,20 CircleRH;12500;6,27 ColorText;25000;0,00 CubicCurve;40000;3,17 Ellipse;70000;1,90 Image;70000;1,90 ImageRH;70000;1,90 Label;5000;2,60 LargeColorText;30000;0,00 LargeText;30000;0,00 LinGradCircle;40000;1,60 Line;70000;1,00 MultiShape2D;22500;4,30 MultiShape2D3D;22500;10,20 MultiShape2D3DInterleaved;15000;13,30 MultiShape2DInterleaved;12500;7,70 MultiShape3D;12500;76,87 MultiShape3DInterleaved;12500;58,33 OpenArc;5000;9,93 Path;40000;3,10 Polygon;47500;2,63 QuadCurve;47500;2,60 RadGradCircle;4000;27,30 Rectangle;70000;1,00 RotatedRectangleRH;47500;1,40 StrokedCircle;70000;1,13 StrokedPolygon;47500;2,07 StrokedRectangle;70000;1,87 WhiteText;22500;0,00 D3D Test;objectCount;FPS 3DBox;20000;59,40 3DCylinder;20000;56,87 3DMesh;15000;16,57 3DSphere;20000;57,30 Arc;6500;10,03 Button;5000;5,63 Circle;70000;43,63 CircleBlendAdd;22500;56,60 CircleBlendDarken;22500;55,57 CircleBlendMultiply;22500;54,57 CircleRH;12500;8,83 ColorText;25000;19,23 CubicCurve;40000;35,87 Ellipse;70000;19,53 Image;70000;41,57 ImageRH;70000;34,93 Label;5000;72,20 LargeColorText;30000;17,97 LargeText;30000;15,93 LinGradCircle;40000;32,40 Line;70000;20,17 MultiShape2D;22500;10,70 MultiShape2D3D;22500;78,77 MultiShape2D3DInterleaved;15000;52,80 MultiShape2DInterleaved;12500;20,67 MultiShape3D;12500;87,70 MultiShape3DInterleaved;12500;74,47 OpenArc;5000;12,43 Path;40000;31,67 Polygon;47500;27,60 QuadCurve;47500;31,67 RadGradCircle;4000;28,70 Rectangle;70000;20,97 RotatedRectangleRH;47500;23,23 StrokedCircle;70000;34,57 StrokedPolygon;47500;24,53 StrokedRectangle;70000;19,53 WhiteText;22500;24,97 Also attached all results. -- Marius Gesendet: Freitag, 14. November 2025 um 15:10 Von: "Lukasz Kostyra" > An: "openjfx-dev at openjdk.org" > Betreff: RE: JavaFX Direct3D 12 - Call for performance testing help Hello all, I got feedback on the previous call for performance testing email that, instead of using the Bash test script on Windows (and hoping you have Cygwin/MINGW installed) it would be easier to integrate testing and CSV output functionality into RenderPerfTest. I made those changes and they are now available on jfx-sandbox direct3d12 branch (you WON?T find those on main repo yet): https://github.com/openjdk/jfx-sandbox/tree/direct3d12/tests/performance/animation/RenderPerfTest/src/renderperf Any feedback regarding RenderPerfTest will be updated on that branch automatically, so it?s indeed a better solution if there?s more feedback to it :) New steps for running tests: 1. Download RenderPerfTest from above link (has to be jfx-sandbox repo, direct3d12 branch) - best to download the entire ?renderperf? folder as ZIP as it contains extra resources needed for the test app 2. Get JavaFX Direct3D 12 build - either download the EA2 SDK from [ https://jdk.java.net/javafxdirect3d12/ ] or build it from scratch from direct3d12 [ https://github.com/openjdk/jfx-sandbox/tree/direct3d12 ] branch (make sure to build with -PCONF=Release; at the time of writing this email there is no functional difference between the sandbox repo and the EA2 build). 3. RenderPerf can be run with (underlined parts you need to fill in yourself): java --upgrade-module-path="/lib" --add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media --enable-native-access=javafx.graphics -Dprism.order= renderperf/RenderPerfTest.java --output-csv -r Where: - path to directory where JavaFX SDK is located (has to be where JavaFX bin and lib folders reside) - short-hand for which Prism backend to use - how many times each test case should run; RenderPerf will average FPS results from these runs 1. Running RenderPerf like above will produce RenderPerf_results---