Skip to content

Commit 511e8e1

Browse files
authored
Improved placeholder implementation (#900)
1 parent 12bc273 commit 511e8e1

1 file changed

Lines changed: 27 additions & 19 deletions

File tree

richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.function.IntSupplier;
1717
import java.util.function.IntUnaryOperator;
1818

19+
import javafx.application.Platform;
1920
import javafx.beans.NamedArg;
2021
import javafx.beans.binding.Bindings;
2122
import javafx.beans.property.BooleanProperty;
@@ -53,7 +54,6 @@
5354
import javafx.scene.shape.PathElement;
5455
import javafx.scene.text.TextFlow;
5556

56-
import javafx.application.Platform;
5757
import org.fxmisc.flowless.Cell;
5858
import org.fxmisc.flowless.VirtualFlow;
5959
import org.fxmisc.flowless.VirtualFlowHit;
@@ -802,21 +802,29 @@ public GenericStyledArea(
802802
() -> getLength() == 0 && ! isFocused(),
803803
lengthProperty(), focusedProperty()
804804
);
805-
806-
placeHolderProp.addListener( (ob,oldNode,newNode) -> {
807-
if ( oldNode != null ) {
808-
oldNode.visibleProperty().unbind();
809-
oldNode.layoutXProperty().unbind();
810-
oldNode.layoutYProperty().unbind();
811-
getChildren().remove( oldNode );
812-
setClip( null );
813-
}
814-
if ( newNode != null ) {
815-
newNode.visibleProperty().bind( showPlaceholder );
816-
configurePlaceholder( newNode );
817-
getChildren().add( newNode );
818-
}
819-
});
805+
806+
placeHolderProp.addListener( (ob,ov,newNode) -> displayPlaceHolder( showPlaceholder.getValue(), newNode ) );
807+
showPlaceholder.addListener( (ob,ov,show) -> displayPlaceHolder( show, getPlaceholder() ) );
808+
}
809+
810+
private Node placeholder;
811+
812+
private void displayPlaceHolder( boolean show, Node newNode )
813+
{
814+
if ( placeholder != null && (! show || newNode != placeholder) )
815+
{
816+
placeholder.layoutXProperty().unbind();
817+
placeholder.layoutYProperty().unbind();
818+
getChildren().remove( placeholder );
819+
placeholder = null;
820+
setClip( null );
821+
}
822+
if ( newNode != null && show && newNode != placeholder )
823+
{
824+
configurePlaceholder( newNode );
825+
getChildren().add( newNode );
826+
placeholder = newNode;
827+
}
820828
}
821829

822830
protected void configurePlaceholder( Node placeholder )
@@ -1442,9 +1450,9 @@ protected void layoutChildren() {
14421450
paging = false;
14431451
});
14441452

1445-
Node node = getPlaceholder();
1446-
if (node != null && node.isResizable() && node.isManaged()) {
1447-
node.autosize();
1453+
Node holder = placeholder;
1454+
if (holder != null && holder.isResizable() && holder.isManaged()) {
1455+
holder.autosize();
14481456
}
14491457
}
14501458

0 commit comments

Comments
 (0)