> When the initial value of a styleable property is not specified in a 
> stylesheet, no transition is started:
> 
>     .button {
>         transition: -fx-opacity 1s;
>     }
>     
>     .button:hover {
>         -fx-opacity: 0.5;
>     }
> 
> The expected behavior is that a transition is started in this case, since the 
> default value of `-fx-opacity` is 1.
> 
> The reason for this bug is that `StyleableProperty` implementations do not 
> start a CSS transition when the value is applied for the first time. The 
> intention behind this is that a node that is added to the scene graph should 
> not start transitions. CSS transitions should only be started _after_ the 
> node has been shown for the first time.
> 
> The logic to detect this situation is currently as follows:
> 
>     // If this.origin == null, we're setting the value for the first time.
>     // No transition should be started in this case.
>     TransitionDefinition transition = this.origin != null && getBean() 
> instanceof Node node ?
>         NodeHelper.findTransitionDefinition(node, getCssMetaData()) : null;
> 
> 
> However, this does not work. When no initial style is specified in the 
> stylesheet, `this.origin` will not be set, and thus no transition will be 
> started even after the node has been shown. The new logic works like this:
> 
> A `Node.initialCssState` flag is added. Initially, this is `true`. Manually 
> calling `applyCss` or similar methods will not clear this flag, as we 
> consider all manual CSS processing to be part of the "initial CSS state". 
> Only at the end of `Scene.doCSSPass` will this flag be cleared on all nodes 
> that have expressed their interest. This mechanism ensures that a node will 
> be eligible for CSS transitions only after the following conditions have been 
> satisfied:
> 1. The node was added to a scene graph
> 2. CSS processing was completed for a scene pulse

Michael Strauß has updated the pull request incrementally with one additional 
commit since the last revision:

  use HashSet instead of IdentityHashMap

-------------

Changes:
  - all: https://git.openjdk.org/jfx/pull/1607/files
  - new: https://git.openjdk.org/jfx/pull/1607/files/9acfc04a..261da3b8

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1607&range=01
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1607&range=00-01

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

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

Reply via email to