Skip to content

Commit 62daf1e

Browse files
committed
Merge pull request #219 from JordanMartinez/mouseEventTemplates
Makes MouseEvent handling overridable using EventHandlerTemplates
2 parents 9032e63 + ca3b771 commit 62daf1e

1 file changed

Lines changed: 42 additions & 7 deletions

File tree

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

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class StyledTextAreaBehavior implements Behavior {
4545

4646
private static final EventHandlerTemplate<StyledTextAreaBehavior, ? super KeyEvent> KEY_PRESSED_TEMPLATE;
4747
private static final EventHandlerTemplate<StyledTextAreaBehavior, ? super KeyEvent> KEY_TYPED_TEMPLATE;
48+
private static final EventHandlerTemplate<StyledTextAreaBehavior, ? super MouseEvent> MOUSE_PRESSED_TEMPLATE;
49+
private static final EventHandlerTemplate<StyledTextAreaBehavior, ? super MouseEvent> MOUSE_DRAGGED_TEMPLATE;
50+
private static final EventHandlerTemplate<StyledTextAreaBehavior, ? super MouseEvent> DRAG_DETECTED_TEMPLATE;
51+
private static final EventHandlerTemplate<StyledTextAreaBehavior, ? super MouseEvent> MOUSE_RELEASED_TEMPLATE;
52+
4853
static {
4954
SelectionPolicy selPolicy = isMac
5055
? SelectionPolicy.EXTEND
@@ -163,6 +168,26 @@ class StyledTextAreaBehavior implements Behavior {
163168

164169
.create()
165170
.onlyWhen(b -> b.area.isEditable());
171+
172+
MOUSE_PRESSED_TEMPLATE = EventHandlerTemplate
173+
.on(MouseEvent.MOUSE_PRESSED)
174+
.act(StyledTextAreaBehavior::mousePressed)
175+
.create();
176+
177+
MOUSE_DRAGGED_TEMPLATE = EventHandlerTemplate
178+
.on(MouseEvent.MOUSE_DRAGGED)
179+
.act(StyledTextAreaBehavior::mouseDragged)
180+
.create();
181+
182+
DRAG_DETECTED_TEMPLATE = EventHandlerTemplate
183+
.on(MouseEvent.DRAG_DETECTED)
184+
.act(StyledTextAreaBehavior::dragDetected)
185+
.create();
186+
187+
MOUSE_RELEASED_TEMPLATE = EventHandlerTemplate
188+
.on(MouseEvent.MOUSE_RELEASED)
189+
.act(StyledTextAreaBehavior::mouseReleased)
190+
.create();
166191
}
167192

168193
/**
@@ -218,18 +243,28 @@ private CaretOffsetX getTargetCaretOffset() {
218243
EventHandler<? super KeyEvent> keyPressedHandler = KEY_PRESSED_TEMPLATE.bind(this);
219244
EventHandler<? super KeyEvent> keyTypedHandler = KEY_TYPED_TEMPLATE.bind(this);
220245

246+
EventHandler<? super MouseEvent> mousePressedHandler = MOUSE_PRESSED_TEMPLATE.bind(this);
247+
EventHandler<? super MouseEvent> mouseDraggedHandler = MOUSE_DRAGGED_TEMPLATE.bind(this);
248+
EventHandler<? super MouseEvent> dragDetectedHandler = DRAG_DETECTED_TEMPLATE.bind(this);
249+
EventHandler<? super MouseEvent> mouseReleasedHandler = MOUSE_RELEASED_TEMPLATE.bind(this);
250+
221251
EventHandlerHelper.installAfter(area.onKeyPressedProperty(), keyPressedHandler);
222252
EventHandlerHelper.installAfter(area.onKeyTypedProperty(), keyTypedHandler);
223253

224-
subscription = Subscription.multi(
225-
eventsOf(area, MouseEvent.MOUSE_PRESSED).subscribe(this::mousePressed),
226-
eventsOf(area, MouseEvent.MOUSE_DRAGGED).subscribe(this::mouseDragged),
227-
eventsOf(area, MouseEvent.DRAG_DETECTED).subscribe(this::dragDetected),
228-
eventsOf(area, MouseEvent.MOUSE_RELEASED).subscribe(this::mouseReleased),
229-
() -> {
254+
EventHandlerHelper.installAfter(area.onMousePressedProperty(), mousePressedHandler);
255+
EventHandlerHelper.installAfter(area.onMouseDraggedProperty(), mouseDraggedHandler);
256+
EventHandlerHelper.installAfter(area.onDragDetectedProperty(), dragDetectedHandler);
257+
EventHandlerHelper.installAfter(area.onMouseReleasedProperty(), mouseReleasedHandler);
258+
259+
subscription = () -> {
230260
EventHandlerHelper.remove(area.onKeyPressedProperty(), keyPressedHandler);
231261
EventHandlerHelper.remove(area.onKeyTypedProperty(), keyTypedHandler);
232-
});
262+
263+
EventHandlerHelper.remove(area.onMousePressedProperty(), mousePressedHandler);
264+
EventHandlerHelper.remove(area.onMouseDraggedProperty(), mouseDraggedHandler);
265+
EventHandlerHelper.remove(area.onDragDetectedProperty(), dragDetectedHandler);
266+
EventHandlerHelper.remove(area.onMouseReleasedProperty(), mouseReleasedHandler);
267+
};
233268

234269
// setup auto-scroll
235270
Val<Point2D> projection = Val.combine(

0 commit comments

Comments
 (0)