Skip to content

Commit feb4bf0

Browse files
author
jmhofer
committed
Added basic mouse event observables.
1 parent b31a371 commit feb4bf0

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed

rxjava-contrib/rxjava-swing/src/main/java/rx/SwingObservable.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919

2020
import java.awt.event.ActionEvent;
2121
import java.awt.event.KeyEvent;
22+
import java.awt.event.MouseEvent;
2223
import java.util.Set;
2324

2425
import javax.swing.AbstractButton;
2526
import javax.swing.JComponent;
2627

2728
import rx.swing.sources.AbstractButtonSource;
2829
import rx.swing.sources.KeyEventSource;
30+
import rx.swing.sources.MouseEventSource;
2931
import rx.util.functions.Func1;
3032

3133
/**
@@ -81,4 +83,26 @@ public Boolean call(KeyEvent event) {
8183
public static Observable<Set<Integer>> currentlyPressedKeys(JComponent component) {
8284
return KeyEventSource.currentlyPressedKeysOf(component);
8385
}
86+
87+
/**
88+
* Creates an observable corresponding to raw mouse events (excluding mouse motion events).
89+
*
90+
* @param component
91+
* The component to register the observable for.
92+
* @return Observable of mouse events.
93+
*/
94+
public static Observable<MouseEvent> fromMouseEvents(JComponent component) {
95+
return MouseEventSource.fromMouseEventsOf(component);
96+
}
97+
98+
/**
99+
* Creates an observable corresponding to raw mouse motion events.
100+
*
101+
* @param component
102+
* The component to register the observable for.
103+
* @return Observable of mouse motion events.
104+
*/
105+
public static Observable<MouseEvent> fromMouseMotionEvents(JComponent component) {
106+
return MouseEventSource.fromMouseMotionEventsOf(component);
107+
}
84108
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/**
2+
* Copyright 2013 Netflix, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package rx.swing.sources;
17+
18+
import java.awt.event.MouseEvent;
19+
import java.awt.event.MouseListener;
20+
import java.awt.event.MouseMotionListener;
21+
22+
import javax.swing.JComponent;
23+
24+
import rx.Observable;
25+
import rx.Observer;
26+
import rx.Subscription;
27+
import rx.subscriptions.Subscriptions;
28+
import rx.util.functions.Action0;
29+
import rx.util.functions.Func1;
30+
31+
public enum MouseEventSource { ; // no instances
32+
33+
public static Observable<MouseEvent> fromMouseEventsOf(final JComponent component) {
34+
return Observable.create(new Func1<Observer<MouseEvent>, Subscription>() {
35+
@Override
36+
public Subscription call(final Observer<MouseEvent> observer) {
37+
final MouseListener listener = new MouseListener() {
38+
@Override
39+
public void mouseClicked(MouseEvent event) {
40+
observer.onNext(event);
41+
}
42+
43+
@Override
44+
public void mousePressed(MouseEvent event) {
45+
observer.onNext(event);
46+
}
47+
48+
@Override
49+
public void mouseReleased(MouseEvent event) {
50+
observer.onNext(event);
51+
}
52+
53+
@Override
54+
public void mouseEntered(MouseEvent event) {
55+
observer.onNext(event);
56+
}
57+
58+
@Override
59+
public void mouseExited(MouseEvent event) {
60+
observer.onNext(event);
61+
}
62+
};
63+
component.addMouseListener(listener);
64+
65+
return Subscriptions.create(new Action0() {
66+
@Override
67+
public void call() {
68+
component.removeMouseListener(listener);
69+
}
70+
});
71+
}
72+
});
73+
}
74+
75+
public static Observable<MouseEvent> fromMouseMotionEventsOf(final JComponent component) {
76+
return Observable.create(new Func1<Observer<MouseEvent>, Subscription>() {
77+
@Override
78+
public Subscription call(final Observer<MouseEvent> observer) {
79+
final MouseMotionListener listener = new MouseMotionListener() {
80+
@Override
81+
public void mouseDragged(MouseEvent event) {
82+
observer.onNext(event);
83+
}
84+
85+
@Override
86+
public void mouseMoved(MouseEvent event) {
87+
observer.onNext(event);
88+
}
89+
};
90+
component.addMouseMotionListener(listener);
91+
92+
return Subscriptions.create(new Action0() {
93+
@Override
94+
public void call() {
95+
component.removeMouseMotionListener(listener);
96+
}
97+
});
98+
}
99+
});
100+
}
101+
}

0 commit comments

Comments
 (0)