23
23
24
24
import javafx .beans .property .ObjectProperty ;
25
25
import javafx .beans .property .SimpleObjectProperty ;
26
+ import javafx .beans .value .ChangeListener ;
26
27
import javafx .collections .FXCollections ;
27
28
import javafx .collections .MapChangeListener ;
28
29
import javafx .collections .ObservableMap ;
@@ -94,18 +95,19 @@ public ObjectProperty<Paint> highlightTextFillProperty() {
94
95
Val <Double > leftInset = Val .map (insetsProperty (), Insets ::getLeft );
95
96
Val <Double > topInset = Val .map (insetsProperty (), Insets ::getTop );
96
97
98
+ ChangeListener <IndexRange > selectionRangeListener = (obs , ov , nv ) -> requestLayout ();
97
99
selectionPathListener = change -> {
98
100
if (change .wasRemoved ()) {
99
101
SelectionPath p = change .getValueRemoved ();
100
- p .rangeProperty ().removeListener ( ( obs , ov , nv ) -> requestLayout () );
102
+ p .rangeProperty ().removeListener (selectionRangeListener );
101
103
p .layoutXProperty ().unbind ();
102
104
p .layoutYProperty ().unbind ();
103
105
104
106
getChildren ().remove (p );
105
107
}
106
108
if (change .wasAdded ()) {
107
109
SelectionPath p = change .getValueAdded ();
108
- p .rangeProperty ().addListener ( ( obs , ov , nv ) -> requestLayout () );
110
+ p .rangeProperty ().addListener (selectionRangeListener );
109
111
p .layoutXProperty ().bind (leftInset );
110
112
p .layoutYProperty ().bind (topInset );
111
113
@@ -115,18 +117,19 @@ public ObjectProperty<Paint> highlightTextFillProperty() {
115
117
};
116
118
selections .addListener ( selectionPathListener );
117
119
120
+ ChangeListener <Integer > caretPositionListener = (obs , ov , nv ) -> requestLayout ();
118
121
caretNodeListener = change -> {
119
122
if (change .wasRemoved ()) {
120
123
CaretNode caret = change .getElementRemoved ();
121
- caret .columnPositionProperty ().removeListener ( ( obs , ov , nv ) -> requestLayout () );
124
+ caret .columnPositionProperty ().removeListener (caretPositionListener );
122
125
caret .layoutXProperty ().unbind ();
123
126
caret .layoutYProperty ().unbind ();
124
127
125
128
getChildren ().remove (caret );
126
129
}
127
130
if (change .wasAdded ()) {
128
131
CaretNode caret = change .getElementAdded ();
129
- caret .columnPositionProperty ().addListener ( ( obs , ov , nv ) -> requestLayout () );
132
+ caret .columnPositionProperty ().addListener (caretPositionListener );
130
133
caret .layoutXProperty ().bind (leftInset );
131
134
caret .layoutYProperty ().bind (topInset );
132
135
0 commit comments