RFR: 8351368: RichTextArea: exception pasting from Word

2025-03-06 Thread Andy Goryachev
The original code used String attribute keys.

I'd like to backport this fix to jfx24u.

-

Commit messages:
 - fix

Changes: https://git.openjdk.org/jfx/pull/1731/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1731&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8351368
  Stats: 4 lines in 1 file changed: 0 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jfx/pull/1731.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1731/head:pull/1731

PR: https://git.openjdk.org/jfx/pull/1731


Re: RFR: 8342565: [TestBug] StubTextLayout [v9]

2025-03-06 Thread Marius Hanl
On Thu, 6 Mar 2025 16:21:52 GMT, Andy Goryachev  wrote:

>> Changed the StubTextLayout to use product PrismTextLayout with much 
>> simplified glyph layout (via stubbed fonts).  The new layout assumes all the 
>> glyphs are squares of font size, while the bold type face produces wider 
>> glyphs (by 1 pixel).  The default font size has changed from 10 to 12 to 
>> make it closer to win/linux.
>> 
>> This brings the test environment closer to the product configuration and 
>> expands the capabilities of our headless testing pipeline, which will be 
>> useful for upcoming behavior tests.
>> 
>> Existing tests have been adjusted/reworked mainly due to default font size 
>> change.
>
> Andy Goryachev has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Revert "fixed bad merge"
>   
>   This reverts commit 0e9e8ee63895bd1d976398587add5b96958d38aa.

Nice Improvement for the tests and utilizing the existing abstraction of the 
layout code.

-

Marked as reviewed by mhanl (Committer).

PR Review: https://git.openjdk.org/jfx/pull/1667#pullrequestreview-2665852619


Re: RFR: 8351368: RichTextArea: exception pasting from Word

2025-03-06 Thread Kevin Rushforth
On Thu, 6 Mar 2025 23:16:41 GMT, Andy Goryachev  wrote:

> The original code used String attribute keys.
> 
> I'd like to backport this fix to jfx24u.

This is a simple enough fix that a single reviewer should be sufficient.

modules/jfx.incubator.richtext/src/main/java/com/sun/jfx/incubator/scene/control/richtext/rtf/RTFReader.java
 line 787:

> 785: Object stype = defined.getAttribute(STYLE_TYPE);
> 786: Map toMap;
> 787: if (STYLE_SECTION.equals(stype)) {

Since this is a marker object, should it be `==` rather than `.equals`? They 
are equivalent, so it's up to you.

-

Marked as reviewed by kcr (Lead).

PR Review: https://git.openjdk.org/jfx/pull/1731#pullrequestreview-2665858008
PR Review Comment: https://git.openjdk.org/jfx/pull/1731#discussion_r1984190205


Re: RFR: 8342565: [TestBug] StubTextLayout [v2]

2025-03-06 Thread Andy Goryachev
On Tue, 4 Feb 2025 08:53:31 GMT, Marius Hanl  wrote:

>> 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 19 additional 
>> commits since the last revision:
>> 
>>  - atomic boolean
>>  - Merge branch 'master' into 8342565.stub.text.layout
>>  - cleanup
>>  - better test
>>  - cleanup
>>  - more magic
>>  - magic numbers
>>  - more
>>  - add exports
>>  - stub fonts
>>  - ... and 9 more: https://git.openjdk.org/jfx/compare/6ed82938...5010278f
>
> I think this is a good change, completely utilizing that the text layout code 
> is abstracted away for good.
> Changes look good to me so far. 
> Some tests are hard to understand the changes, but that is a preexisting 
> problem (especially if the name of the test is just `rt_`).
> Not sure about the code style of using `S`, `M` or `L` as variable names 
> (minor), so I will see what other reviewers say about this.

thank you @Maran23

-

PR Comment: https://git.openjdk.org/jfx/pull/1667#issuecomment-2705176354


RFR: 8351276: Prevent redundant computeValue calls when a chain of mappings becomes observed

2025-03-06 Thread John Hendrikx
8351276: Prevent redundant computeValue calls when a chain of mappings becomes 
observed

-

Commit messages:
 - Add test case
 - Prevent redundant compute value calls

Changes: https://git.openjdk.org/jfx/pull/1730/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1730&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8351276
  Stats: 145 lines in 3 files changed: 138 ins; 1 del; 6 mod
  Patch: https://git.openjdk.org/jfx/pull/1730.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1730/head:pull/1730

PR: https://git.openjdk.org/jfx/pull/1730


Re: RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v7]

2025-03-06 Thread John Hendrikx
On Thu, 6 Mar 2025 03:08:58 GMT, Nir Lisker  wrote:

> I tested the new convergence check. If listener A and listener B fight over a 
> value, it works, but if I add after then listener C that just prints what it 
> sees without changing the value, it completes without an error.
> 
> Is it not possible to let the SOE be thrown naturally (by infinite recursion)?

Not without breaking one of the rules.  I can't get infinite recursion if I'm 
not calling the change listener that is causing it.   I'd have to call it 
either with `oldValue == newValue` (breaks Rule 2) or `badOldValue + 
sameNewValue` (breaks Rule 1 which is what `ExpressionHelper` does).

We can of course discuss this, but I think no `ChangeListener` is interested to 
be called with `oldValue == newValue` in edge cases.  It probably wouldn't 
require special logic on their parts though, so it could be considered.  The 
nasty case of adding/removing listeners to maintain a chain like 
node->scene->window would not break when both values are equal.

> > Note that the non-convergence detection logic is pretty smart, as the test 
> > case where multiple listeners are trying to agree upon a value that is 
> > divisible by 3, 5, 7 and 11 still works fine
> 
> And what about non-integer values, like custom objects or strings?

I fail to see how this would make a difference.  The test case demonstrates 
what happens if multiple listeners have non-conflicting rules defined, and it 
is not rejected just because multiple listeners are making changes, as long as 
they eventually reach an agreement.  Doing this with any other values should 
work just as well as long as there **exists** a solution (and the listeners at 
least make some effort to resolving it).  If there is no solution, or some 
listeners are just resetting values back, then there is no hope that it will 
ever converge.  So a listener that requires even values and another that 
requires uneven values -> no solution.  A listener that requires even values 
and one that requires positive values -> solution possible.

-

PR Comment: https://git.openjdk.org/jfx/pull/1081#issuecomment-2703223673


Re: RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v7]

2025-03-06 Thread John Hendrikx
On Thu, 6 Mar 2025 03:08:58 GMT, Nir Lisker  wrote:

>> John Hendrikx has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Fix docs
>
> I tested the new convergence check. If listener A and listener B fight over a 
> value, it works, but if I add after then listener C that just prints what it 
> sees without changing the value, it completes without an error.
> 
> Is it not possible to let the SOE be thrown naturally (by infinite recursion)?
> 
>> Note that the non-convergence detection logic is pretty smart, as the test 
>> case where multiple listeners are trying to agree upon a value that is 
>> divisible by 3, 5, 7 and 11 still works fine
> 
> And what about non-integer values, like custom objects or strings?

@nlisker I've fixed the edge case you found -- thanks very much for finding it; 
the extra listener would overwrite the progress value and so the aborted nested 
loop would go undetected. I added an additional test case to cover this.

-

PR Comment: https://git.openjdk.org/jfx/pull/1081#issuecomment-2703325887


Re: RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v8]

2025-03-06 Thread John Hendrikx
> This provides and uses a new implementation of `ExpressionHelper`, called 
> `ListenerManager` with improved semantics.
> 
> # Behavior
> 
> |Listener...|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Invocation Order|In order they were registered, invalidation listeners 
> always before change listeners|(unchanged)|
> |Removal during Notification|All listeners present when notification started 
> are notified, but excluded for any nested changes|Listeners are removed 
> immediately regardless of nesting|
> |Addition during Notification|Only listeners present when notification 
> started are notified, but included for any nested changes|New listeners are 
> never called during the current notification regardless of nesting|
> 
> ## Nested notifications:
> 
> | |ExpressionHelper|ListenerManager|
> |---|---|---|
> |Type|Depth first (call stack increases for each nested level)|(same)|
> |# of Calls|Listeners * Depth (using incorrect old values)|Collapses nested 
> changes, skipping non-changes|
> |Vetoing Possible?|No|Yes|
> |Old Value correctness|Only for listeners called before listeners making 
> nested changes|Always|
> 
> # Performance
> 
> |Listener|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Addition|Array based, append in empty slot, resize as needed|(same)|
> |Removal|Array based, shift array, resize as needed|(same)|
> |Addition during notification|Array is copied, removing collected 
> WeakListeners in the process|Appended when notification finishes|
> |Removal during notification|As above|Entry is `null`ed (to avoid moving 
> elements in array that is being iterated)|
> |Notification completion with changes|-|Null entries (and collected 
> WeakListeners) are removed|
> |Notifying Invalidation Listeners|1 ns each|(same)|
> |Notifying Change Listeners|1 ns each (*)|2-3 ns each|
> 
> (*) a simple for loop is close to optimal, but unfortunately does not provide 
> correct old values
> 
> # Memory Use 
> 
> Does not include alignment, and assumes a 32-bit VM or one that is using 
> compressed oops.
> 
> |Listener|ExpressionHelper|ListenerManager|OldValueCaching ListenerManager|
> |---|---|---|---|
> |No Listeners|none|none|none|
> |Single InvalidationListener|16 bytes overhead|none|none|
> |Single ChangeListener|20 bytes overhead|none|16 bytes overhead|
> |Multiple listeners|57 + 4 per listener (excluding unused slots)|57 + 4 per 
> listener (excluding unused slots)|61 + 4 per listener (excluding unused 
> slots)|
> 
> # About nested changes
> 
> Nested changes are simply changes that are made to a property that is 
> currently in the process of notifying its listeners. This...

John Hendrikx has updated the pull request incrementally with one additional 
commit since the last revision:

  Fix edge case with non-convergence detection

-

Changes:
  - all: https://git.openjdk.org/jfx/pull/1081/files
  - new: https://git.openjdk.org/jfx/pull/1081/files/8e198cdb..dd714266

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=07
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=06-07

  Stats: 112 lines in 2 files changed: 79 ins; 16 del; 17 mod
  Patch: https://git.openjdk.org/jfx/pull/1081.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1081/head:pull/1081

PR: https://git.openjdk.org/jfx/pull/1081


Integrated: 8313556: Create implementation of NSAccessibilitySlider protocol

2025-03-06 Thread Alexander Zuev
On Tue, 29 Aug 2023 10:10:54 GMT, Alexander Zuev  wrote:

> Create implementation for Slider and Stepper accessibility protocols.
> Fix mapping.
> Fix performAction parameter type in declaration.

This pull request has now been integrated.

Changeset: c7091e1f
Author:Alexander Zuev 
Committer: Ambarish Rapte 
URL:   
https://git.openjdk.org/jfx/commit/c7091e1f57503e68c578ec890a4945a74d2d2978
Stats: 276 lines in 6 files changed: 273 ins; 0 del; 3 mod

8313556: Create implementation of NSAccessibilitySlider protocol
8313558: Create implementation of NSAccessibilityStepper protocol

Reviewed-by: arapte, angorya

-

PR: https://git.openjdk.org/jfx/pull/1226


Re: RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v9]

2025-03-06 Thread John Hendrikx
> This provides and uses a new implementation of `ExpressionHelper`, called 
> `ListenerManager` with improved semantics.
> 
> # Behavior
> 
> |Listener...|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Invocation Order|In order they were registered, invalidation listeners 
> always before change listeners|(unchanged)|
> |Removal during Notification|All listeners present when notification started 
> are notified, but excluded for any nested changes|Listeners are removed 
> immediately regardless of nesting|
> |Addition during Notification|Only listeners present when notification 
> started are notified, but included for any nested changes|New listeners are 
> never called during the current notification regardless of nesting|
> 
> ## Nested notifications:
> 
> | |ExpressionHelper|ListenerManager|
> |---|---|---|
> |Type|Depth first (call stack increases for each nested level)|(same)|
> |# of Calls|Listeners * Depth (using incorrect old values)|Collapses nested 
> changes, skipping non-changes|
> |Vetoing Possible?|No|Yes|
> |Old Value correctness|Only for listeners called before listeners making 
> nested changes|Always|
> 
> # Performance
> 
> |Listener|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Addition|Array based, append in empty slot, resize as needed|(same)|
> |Removal|Array based, shift array, resize as needed|(same)|
> |Addition during notification|Array is copied, removing collected 
> WeakListeners in the process|Appended when notification finishes|
> |Removal during notification|As above|Entry is `null`ed (to avoid moving 
> elements in array that is being iterated)|
> |Notification completion with changes|-|Null entries (and collected 
> WeakListeners) are removed|
> |Notifying Invalidation Listeners|1 ns each|(same)|
> |Notifying Change Listeners|1 ns each (*)|2-3 ns each|
> 
> (*) a simple for loop is close to optimal, but unfortunately does not provide 
> correct old values
> 
> # Memory Use 
> 
> Does not include alignment, and assumes a 32-bit VM or one that is using 
> compressed oops.
> 
> |Listener|ExpressionHelper|ListenerManager|OldValueCaching ListenerManager|
> |---|---|---|---|
> |No Listeners|none|none|none|
> |Single InvalidationListener|16 bytes overhead|none|none|
> |Single ChangeListener|20 bytes overhead|none|16 bytes overhead|
> |Multiple listeners|57 + 4 per listener (excluding unused slots)|57 + 4 per 
> listener (excluding unused slots)|61 + 4 per listener (excluding unused 
> slots)|
> 
> # About nested changes
> 
> Nested changes are simply changes that are made to a property that is 
> currently in the process of notifying its listeners. This...

John Hendrikx has updated the pull request incrementally with one additional 
commit since the last revision:

  Simplified overly complicated non-convergence logic

-

Changes:
  - all: https://git.openjdk.org/jfx/pull/1081/files
  - new: https://git.openjdk.org/jfx/pull/1081/files/dd714266..6608d3ba

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=08
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=07-08

  Stats: 91 lines in 2 files changed: 16 ins; 62 del; 13 mod
  Patch: https://git.openjdk.org/jfx/pull/1081.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1081/head:pull/1081

PR: https://git.openjdk.org/jfx/pull/1081


Re: RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v10]

2025-03-06 Thread John Hendrikx
> This provides and uses a new implementation of `ExpressionHelper`, called 
> `ListenerManager` with improved semantics.
> 
> # Behavior
> 
> |Listener...|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Invocation Order|In order they were registered, invalidation listeners 
> always before change listeners|(unchanged)|
> |Removal during Notification|All listeners present when notification started 
> are notified, but excluded for any nested changes|Listeners are removed 
> immediately regardless of nesting|
> |Addition during Notification|Only listeners present when notification 
> started are notified, but included for any nested changes|New listeners are 
> never called during the current notification regardless of nesting|
> 
> ## Nested notifications:
> 
> | |ExpressionHelper|ListenerManager|
> |---|---|---|
> |Type|Depth first (call stack increases for each nested level)|(same)|
> |# of Calls|Listeners * Depth (using incorrect old values)|Collapses nested 
> changes, skipping non-changes|
> |Vetoing Possible?|No|Yes|
> |Old Value correctness|Only for listeners called before listeners making 
> nested changes|Always|
> 
> # Performance
> 
> |Listener|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Addition|Array based, append in empty slot, resize as needed|(same)|
> |Removal|Array based, shift array, resize as needed|(same)|
> |Addition during notification|Array is copied, removing collected 
> WeakListeners in the process|Appended when notification finishes|
> |Removal during notification|As above|Entry is `null`ed (to avoid moving 
> elements in array that is being iterated)|
> |Notification completion with changes|-|Null entries (and collected 
> WeakListeners) are removed|
> |Notifying Invalidation Listeners|1 ns each|(same)|
> |Notifying Change Listeners|1 ns each (*)|2-3 ns each|
> 
> (*) a simple for loop is close to optimal, but unfortunately does not provide 
> correct old values
> 
> # Memory Use 
> 
> Does not include alignment, and assumes a 32-bit VM or one that is using 
> compressed oops.
> 
> |Listener|ExpressionHelper|ListenerManager|OldValueCaching ListenerManager|
> |---|---|---|---|
> |No Listeners|none|none|none|
> |Single InvalidationListener|16 bytes overhead|none|none|
> |Single ChangeListener|20 bytes overhead|none|16 bytes overhead|
> |Multiple listeners|57 + 4 per listener (excluding unused slots)|57 + 4 per 
> listener (excluding unused slots)|61 + 4 per listener (excluding unused 
> slots)|
> 
> # About nested changes
> 
> Nested changes are simply changes that are made to a property that is 
> currently in the process of notifying its listeners. This...

John Hendrikx has updated the pull request incrementally with one additional 
commit since the last revision:

  Fix docs

-

Changes:
  - all: https://git.openjdk.org/jfx/pull/1081/files
  - new: https://git.openjdk.org/jfx/pull/1081/files/6608d3ba..5470edb3

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=09
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=08-09

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jfx/pull/1081.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1081/head:pull/1081

PR: https://git.openjdk.org/jfx/pull/1081


Re: RFR: 8342565: [TestBug] StubTextLayout [v6]

2025-03-06 Thread Marius Hanl
On Wed, 5 Mar 2025 15:54:49 GMT, Andy Goryachev  wrote:

>> Changed the StubTextLayout to use product PrismTextLayout with much 
>> simplified glyph layout (via stubbed fonts).  The new layout assumes all the 
>> glyphs are squares of font size, while the bold type face produces wider 
>> glyphs (by 1 pixel).  The default font size has changed from 10 to 12 to 
>> make it closer to win/linux.
>> 
>> This brings the test environment closer to the product configuration and 
>> expands the capabilities of our headless testing pipeline, which will be 
>> useful for upcoming behavior tests.
>> 
>> Existing tests have been adjusted/reworked mainly due to default font size 
>> change.
>
> 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 24 additional 
> commits since the last revision:
> 
>  - Merge remote-tracking branch 'origin/master' into 8342565.stub.text.layout
>  - Merge remote-tracking branch 'origin/master' into 8342565.stub.text.layout
>  - Merge remote-tracking branch 'origin/master' into 8342565.stub.text.layout
>  - review comments
>  - Merge remote-tracking branch 'origin/master' into 8342565.stub.text.layout
>  - atomic boolean
>  - Merge branch 'master' into 8342565.stub.text.layout
>  - cleanup
>  - better test
>  - cleanup
>  - ... and 14 more: https://git.openjdk.org/jfx/compare/302a3dce...3650989a

Code looks good to me, some minor convention related things from my side.

modules/javafx.controls/src/test/addExports line 38:

> 36: --add-exports=javafx.graphics/com.sun.javafx.menu=ALL-UNNAMED
> 37: --add-exports=javafx.graphics/com.sun.javafx.text=ALL-UNNAMED
> 38: 

minor: extra added newline here

modules/javafx.graphics/src/main/java/com/sun/javafx/text/GlyphLayoutManager.java
 line 43:

> 41: public class GlyphLayoutManager {
> 42: private static GlyphLayout reusableGL = newInstance();
> 43: private static final AtomicBoolean guard = new AtomicBoolean(false);

if we follow the java standard, then this should be named `GUARD`

modules/javafx.graphics/src/main/java/com/sun/javafx/text/PrismTextLayoutFactory.java
 line 34:

> 32: 
> 33: public class PrismTextLayoutFactory implements TextLayoutFactory {
> 34: private static final PrismTextLayoutFactory factory = new 
> PrismTextLayoutFactory();

Again, if we want to follow the practise this should be uppercase

modules/javafx.graphics/src/main/java/com/sun/javafx/text/PrismTextLayoutFactory.java
 line 37:

> 35: /* Same strategy as GlyphLayout */
> 36: private static final TextLayout reusableTL = factory.createLayout();
> 37: private static final AtomicBoolean guard = new AtomicBoolean(false);

same here

-

Marked as reviewed by mhanl (Committer).

PR Review: https://git.openjdk.org/jfx/pull/1667#pullrequestreview-2664025448
PR Review Comment: https://git.openjdk.org/jfx/pull/1667#discussion_r1983109268
PR Review Comment: https://git.openjdk.org/jfx/pull/1667#discussion_r1983105350
PR Review Comment: https://git.openjdk.org/jfx/pull/1667#discussion_r1983107627
PR Review Comment: https://git.openjdk.org/jfx/pull/1667#discussion_r1983107282


Re: RFR: 8345261: Refactor the Dimension2D classes

2025-03-06 Thread John Hendrikx
On Thu, 6 Mar 2025 02:50:33 GMT, Nir Lisker  wrote:

> The int-based Dimension is only used by Rectangle even if in another class

I've taken another look.  Rectangle is not using this class at all.  I think it 
would be much better to give the GTK screencast logic its own little int/int 
record (not necessarily called anything like dimension).  Just define it 
package private or as an inner type of `TokenItem`.  This code really has no 
relation at all to the rest of FX (it is even GTK specific).  

Alternatively (which may be even better), avoid the creation of a dimension and 
just call `hasAllScreensOfSameSize(dimensions)` with the actual rectangles and 
have `TokenItem` figure it out using that information.

As for the `float` version of `Dimension2D`, I think we don't need this.  Just 
use the `double` one; everything in FX is doubles, and to be honest, the 
conversion we sometimes do to floats is a precision loss risk.

So, if it is up to me:
- Don't create any new dimension types; FX uses doubles, down casting to floats 
is not without risk.  Int variants are not needed in core FX code.
- Have TokenItem accept Rectangles in its `hasAllScreensOfSameSize` function.  
I think you can change the logic to avoid creating a dimension class at all, or 
you can make a tiny `record ScreenSize(int w, int h)` defined as an inner class 
or even method class to do what it is currently doing.  
- Delete `com.sun.javafx.geom.Dimension` completely

-

PR Comment: https://git.openjdk.org/jfx/pull/1653#issuecomment-2703192504


Re: RFR: 8277000: Tree-/TableRowSkin: replace listener to fixedCellSize by live lookup [v5]

2025-03-06 Thread Kevin Rushforth
On Mon, 17 Feb 2025 22:56:56 GMT, Marius Hanl  wrote:

>> This PR improves the `Tree-/TableRowSkin` code by doing a normal live lookup 
>> for the `fixedCellSize` instead of adding listener just to update 
>> variables(`fixedCellSizeEnabled` and `fixedCellSize`) which can otherwise be 
>> also just lookup'd without the hassle of listeners.
>> 
>> While this is mostly a cleanup, it does improve the state of the 
>> `Tree-/TableRow`, as when the `TableRowSkinBase` constructor is called, the 
>> variables are not yet set.
>> 
>> It is also consistent with the other cells, see also 
>> [JDK-8246745](https://bugs.openjdk.org/browse/JDK-8246745).
>> Helps a bit with [JDK-8185887](https://bugs.openjdk.org/browse/JDK-8185887) 
>> (https://github.com/openjdk/jfx/pull/1644), but as written above, not 
>> required as there is no (visible) effect.
>
> Marius Hanl has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Add as javadoc

@arapte Can you be the second reviewer?

-

PR Comment: https://git.openjdk.org/jfx/pull/1645#issuecomment-2705036479


Re: RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v11]

2025-03-06 Thread John Hendrikx
> This provides and uses a new implementation of `ExpressionHelper`, called 
> `ListenerManager` with improved semantics.
> 
> # Behavior
> 
> |Listener...|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Invocation Order|In order they were registered, invalidation listeners 
> always before change listeners|(unchanged)|
> |Removal during Notification|All listeners present when notification started 
> are notified, but excluded for any nested changes|Listeners are removed 
> immediately regardless of nesting|
> |Addition during Notification|Only listeners present when notification 
> started are notified, but included for any nested changes|New listeners are 
> never called during the current notification regardless of nesting|
> 
> ## Nested notifications:
> 
> | |ExpressionHelper|ListenerManager|
> |---|---|---|
> |Type|Depth first (call stack increases for each nested level)|(same)|
> |# of Calls|Listeners * Depth (using incorrect old values)|Collapses nested 
> changes, skipping non-changes|
> |Vetoing Possible?|No|Yes|
> |Old Value correctness|Only for listeners called before listeners making 
> nested changes|Always|
> 
> # Performance
> 
> |Listener|ExpressionHelper|ListenerManager|
> |---|---|---|
> |Addition|Array based, append in empty slot, resize as needed|(same)|
> |Removal|Array based, shift array, resize as needed|(same)|
> |Addition during notification|Array is copied, removing collected 
> WeakListeners in the process|Appended when notification finishes|
> |Removal during notification|As above|Entry is `null`ed (to avoid moving 
> elements in array that is being iterated)|
> |Notification completion with changes|-|Null entries (and collected 
> WeakListeners) are removed|
> |Notifying Invalidation Listeners|1 ns each|(same)|
> |Notifying Change Listeners|1 ns each (*)|2-3 ns each|
> 
> (*) a simple for loop is close to optimal, but unfortunately does not provide 
> correct old values
> 
> # Memory Use 
> 
> Does not include alignment, and assumes a 32-bit VM or one that is using 
> compressed oops.
> 
> |Listener|ExpressionHelper|ListenerManager|OldValueCaching ListenerManager|
> |---|---|---|---|
> |No Listeners|none|none|none|
> |Single InvalidationListener|16 bytes overhead|none|none|
> |Single ChangeListener|20 bytes overhead|none|16 bytes overhead|
> |Multiple listeners|57 + 4 per listener (excluding unused slots)|57 + 4 per 
> listener (excluding unused slots)|61 + 4 per listener (excluding unused 
> slots)|
> 
> # About nested changes
> 
> Nested changes are simply changes that are made to a property that is 
> currently in the process of notifying its listeners. This...

John Hendrikx has updated the pull request incrementally with one additional 
commit since the last revision:

  Fix non-convergence logic one more time...

-

Changes:
  - all: https://git.openjdk.org/jfx/pull/1081/files
  - new: https://git.openjdk.org/jfx/pull/1081/files/5470edb3..5863932f

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=10
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1081&range=09-10

  Stats: 149 lines in 2 files changed: 114 ins; 23 del; 12 mod
  Patch: https://git.openjdk.org/jfx/pull/1081.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1081/head:pull/1081

PR: https://git.openjdk.org/jfx/pull/1081


Re: RFR: 8342565: [TestBug] StubTextLayout [v9]

2025-03-06 Thread Andy Goryachev
> Changed the StubTextLayout to use product PrismTextLayout with much 
> simplified glyph layout (via stubbed fonts).  The new layout assumes all the 
> glyphs are squares of font size, while the bold type face produces wider 
> glyphs (by 1 pixel).  The default font size has changed from 10 to 12 to make 
> it closer to win/linux.
> 
> This brings the test environment closer to the product configuration and 
> expands the capabilities of our headless testing pipeline, which will be 
> useful for upcoming behavior tests.
> 
> Existing tests have been adjusted/reworked mainly due to default font size 
> change.

Andy Goryachev has updated the pull request incrementally with one additional 
commit since the last revision:

  Revert "fixed bad merge"
  
  This reverts commit 0e9e8ee63895bd1d976398587add5b96958d38aa.

-

Changes:
  - all: https://git.openjdk.org/jfx/pull/1667/files
  - new: https://git.openjdk.org/jfx/pull/1667/files/0e9e8ee6..e18e49a5

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1667&range=08
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1667&range=07-08

  Stats: 41 lines in 2 files changed: 13 ins; 0 del; 28 mod
  Patch: https://git.openjdk.org/jfx/pull/1667.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1667/head:pull/1667

PR: https://git.openjdk.org/jfx/pull/1667


Re: RFR: 8342565: [TestBug] StubTextLayout [v8]

2025-03-06 Thread Andy Goryachev
> Changed the StubTextLayout to use product PrismTextLayout with much 
> simplified glyph layout (via stubbed fonts).  The new layout assumes all the 
> glyphs are squares of font size, while the bold type face produces wider 
> glyphs (by 1 pixel).  The default font size has changed from 10 to 12 to make 
> it closer to win/linux.
> 
> This brings the test environment closer to the product configuration and 
> expands the capabilities of our headless testing pipeline, which will be 
> useful for upcoming behavior tests.
> 
> Existing tests have been adjusted/reworked mainly due to default font size 
> change.

Andy Goryachev has updated the pull request incrementally with one additional 
commit since the last revision:

  fixed bad merge

-

Changes:
  - all: https://git.openjdk.org/jfx/pull/1667/files
  - new: https://git.openjdk.org/jfx/pull/1667/files/1c4e5a80..0e9e8ee6

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1667&range=07
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1667&range=06-07

  Stats: 41 lines in 2 files changed: 0 ins; 13 del; 28 mod
  Patch: https://git.openjdk.org/jfx/pull/1667.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1667/head:pull/1667

PR: https://git.openjdk.org/jfx/pull/1667