Skip to content

Commit eca3fd3

Browse files
committed
Implement SceneEvents
1 parent f87c595 commit eca3fd3

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package rx.javafx.sources;
2+
3+
import javafx.event.Event;
4+
import javafx.event.EventHandler;
5+
import javafx.event.EventType;
6+
import javafx.scene.Scene;
7+
import rx.Observable;
8+
import rx.Subscriber;
9+
import rx.schedulers.JavaFxScheduler;
10+
import rx.subscriptions.JavaFxSubscriptions;
11+
12+
public final class SceneEventSource {
13+
14+
public static <T extends Event> Observable<T> fromSceneEvents(final Scene source, final EventType<T> eventType) {
15+
16+
return Observable.create(new Observable.OnSubscribe<T>() {
17+
@Override
18+
public void call(final Subscriber<? super T> subscriber) {
19+
final EventHandler<T> handler = subscriber::onNext;
20+
21+
source.addEventHandler(eventType, handler);
22+
23+
subscriber.add(JavaFxSubscriptions.unsubscribeInEventDispatchThread(() -> source.removeEventHandler(eventType, handler)));
24+
}
25+
26+
}).subscribeOn(JavaFxScheduler.getInstance());
27+
}
28+
}

src/main/java/rx/observables/JavaFxObservable.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,20 @@
2020
import javafx.event.Event;
2121
import javafx.event.EventType;
2222
import javafx.scene.Node;
23+
import javafx.scene.Scene;
2324
import rx.Observable;
2425
import rx.javafx.sources.Change;
2526
import rx.javafx.sources.NodeEventSource;
2627
import rx.javafx.sources.ObservableValueSource;
28+
import rx.javafx.sources.SceneEventSource;
2729

2830

2931
public enum JavaFxObservable {
3032
; // no instances
3133

3234

3335
/**
34-
* Creates an observable corresponding to javafx ui events.
36+
* Creates an observable corresponding to javafx Node events.
3537
*
3638
* @param node The target of the UI events.
3739
* @param eventType The type of the observed UI events
@@ -62,4 +64,14 @@ public static <T> Observable<T> fromObservableValue(final ObservableValue<T> fxO
6264
public static <T> Observable<Change<T>> fromObservableValueChanges(final ObservableValue<T> fxObservable) {
6365
return ObservableValueSource.fromObservableValueChanges(fxObservable);
6466
}
67+
/**
68+
* Creates an observable corresponding to javafx Scene events.
69+
*
70+
* @param scene The target of the UI events.
71+
* @param eventType The type of the observed UI events
72+
* @return An Observable of UI events, appropriately typed
73+
*/
74+
public static <T extends Event> Observable<T> fromSceneEvents(final Scene scene, final EventType<T> eventType) {
75+
return SceneEventSource.fromSceneEvents(scene,eventType);
76+
}
6577
}

0 commit comments

Comments
 (0)