The same happens with the following CSS rule from AtlantaFX from
https://github.com/mkpaz/atlantafx/blob/3ffaf3d24345c28d5abb3c9122698a1ee9727a9c/styles/src/components/_data.scss#L444:
// when in constrained resize mode, the right-most visible cell should
not have a right-border, // as it is not possible to get this cleanly
out of view without introducing horizontal scrollbars .table-view:constrained-resize>.virtual-flow>.clipped-container>.sheet>.table-row-cell>.table-cell:last-visible,
.tree-table-view:constrained-resize>.virtual-flow>.clipped-container>.sheet>.tree-table-row-cell>.tree-table-cell:last-visible
{
-fx-border-color:transparent;
}
When this rule is present, a focus change in a table cell causes the
whole scene root to be marked as dirty for me.
The table view I am using doesn't even have the :constrained-resize
pseudo class active, yet the rule still affects the behaviour. So I
assume that having multiple pseudoclasses in a CSS rule at different
places breaks something with the dirty region calculation. It might not
even be the wrong usage of pseudoclasses that causes issues
On 02/07/2026 14:20, Christopher Schnick wrote:
I enabled the property -Dprism.showdirty=true to troubleshoot some
performance issues of our application.
I found a case where the entire scene root node is marked as dirty
when pseudoclasses are used in a certain way. Since I am no expert
about the CSS implementation, I wanted to ask whether this is a bug.
The offending rule was:
.combo-box-base:hover .arrow-button:hover .arrow {
-fx-background-color:red;
}
Note that the hover pseudo class is used twice, was my mistake that
did go unnoticed. Whenever the hover state changed for the combo box,
the root was shown as dirty
When changing it to this, everything works as expected and only the
arrow is marked as dirty instead of the whole scene:
.combo-box-base > .arrow-button:hover .arrow {
-fx-background-color:red;
}