24 */
25
26 package sun.lwawt.macosx;
27
28 import sun.awt.SunToolkit;
29 import sun.lwawt.LWWindowPeer;
30 import sun.lwawt.macosx.event.NSEvent;
31 import java.awt.Toolkit;
32 import java.awt.event.MouseEvent;
33 import java.awt.event.InputEvent;
34 import java.awt.event.MouseWheelEvent;
35 import java.awt.event.KeyEvent;
36
37 /**
38 * Translates NSEvents/NPCocoaEvents into AWT events.
39 */
40 final class CPlatformResponder {
41
42 private final LWWindowPeer peer;
43 private final boolean isNpapiCallback;
44
45 CPlatformResponder(final LWWindowPeer peer, final boolean isNpapiCallback) {
46 this.peer = peer;
47 this.isNpapiCallback = isNpapiCallback;
48 }
49
50 /**
51 * Handles mouse events.
52 */
53 void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber,
54 int clickCount, int x, int y, int absoluteX,
55 int absoluteY) {
56 final SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
57 if ((buttonNumber > 2 && !tk.areExtraMouseButtonsEnabled())
58 || buttonNumber > tk.getNumberOfButtons() - 1) {
59 return;
60 }
61
62 int jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
63 NSEvent.nsToJavaEventType(eventType);
166 }
167
168 jkeyCode = out[0];
169 jkeyLocation = out[1];
170 jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
171 NSEvent.nsToJavaEventType(eventType);
172 }
173
174 char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags);
175 // Some keys may generate a KEY_TYPED, but we can't determine
176 // what that character is. That's likely a bug, but for now we
177 // just check for CHAR_UNDEFINED.
178 if (javaChar == KeyEvent.CHAR_UNDEFINED) {
179 postsTyped = false;
180 }
181
182
183 int jmodifiers = NSEvent.nsToJavaKeyModifiers(modifierFlags);
184 long when = System.currentTimeMillis();
185
186 peer.dispatchKeyEvent(jeventType, when, jmodifiers,
187 jkeyCode, javaChar, jkeyLocation);
188
189 // Current browser may be sending input events, so don't
190 // post the KEY_TYPED here.
191 postsTyped &= needsKeyTyped;
192
193 // That's the reaction on the PRESSED (not RELEASED) event as it comes to
194 // appear in MacOSX.
195 // Modifier keys (shift, etc) don't want to send TYPED events.
196 // On the other hand we don't want to generate keyTyped events
197 // for clipboard related shortcuts like Meta + [CVX]
198 boolean isMetaDown = (jmodifiers & KeyEvent.META_DOWN_MASK) != 0;
199 if (jeventType == KeyEvent.KEY_PRESSED && postsTyped && !isMetaDown) {
200 peer.dispatchKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers,
201 KeyEvent.VK_UNDEFINED, javaChar,
202 KeyEvent.KEY_LOCATION_UNKNOWN);
203 }
204 }
205
206 void handleInputEvent(String text) {
207 if (text != null) {
208 int index = 0, length = text.length();
209 char c;
210 while (index < length) {
211 c = text.charAt(index);
212 peer.dispatchKeyEvent(KeyEvent.KEY_TYPED,
213 System.currentTimeMillis(),
214 0, KeyEvent.VK_UNDEFINED, c,
215 KeyEvent.KEY_LOCATION_UNKNOWN);
216 index++;
217 }
218 }
219 }
220
221 void handleWindowFocusEvent(boolean gained, LWWindowPeer opposite) {
222 peer.notifyActivation(gained, opposite);
223 }
224 }
|
24 */
25
26 package sun.lwawt.macosx;
27
28 import sun.awt.SunToolkit;
29 import sun.lwawt.LWWindowPeer;
30 import sun.lwawt.macosx.event.NSEvent;
31 import java.awt.Toolkit;
32 import java.awt.event.MouseEvent;
33 import java.awt.event.InputEvent;
34 import java.awt.event.MouseWheelEvent;
35 import java.awt.event.KeyEvent;
36
37 /**
38 * Translates NSEvents/NPCocoaEvents into AWT events.
39 */
40 final class CPlatformResponder {
41
42 private final LWWindowPeer peer;
43 private final boolean isNpapiCallback;
44 private int lastKeyPressCode = KeyEvent.VK_UNDEFINED;
45
46 CPlatformResponder(final LWWindowPeer peer, final boolean isNpapiCallback) {
47 this.peer = peer;
48 this.isNpapiCallback = isNpapiCallback;
49 }
50
51 /**
52 * Handles mouse events.
53 */
54 void handleMouseEvent(int eventType, int modifierFlags, int buttonNumber,
55 int clickCount, int x, int y, int absoluteX,
56 int absoluteY) {
57 final SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
58 if ((buttonNumber > 2 && !tk.areExtraMouseButtonsEnabled())
59 || buttonNumber > tk.getNumberOfButtons() - 1) {
60 return;
61 }
62
63 int jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
64 NSEvent.nsToJavaEventType(eventType);
167 }
168
169 jkeyCode = out[0];
170 jkeyLocation = out[1];
171 jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
172 NSEvent.nsToJavaEventType(eventType);
173 }
174
175 char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags);
176 // Some keys may generate a KEY_TYPED, but we can't determine
177 // what that character is. That's likely a bug, but for now we
178 // just check for CHAR_UNDEFINED.
179 if (javaChar == KeyEvent.CHAR_UNDEFINED) {
180 postsTyped = false;
181 }
182
183
184 int jmodifiers = NSEvent.nsToJavaKeyModifiers(modifierFlags);
185 long when = System.currentTimeMillis();
186
187 if (jeventType == KeyEvent.KEY_PRESSED) {
188 lastKeyPressCode = jkeyCode;
189 }
190 peer.dispatchKeyEvent(jeventType, when, jmodifiers,
191 jkeyCode, javaChar, jkeyLocation);
192
193 // Current browser may be sending input events, so don't
194 // post the KEY_TYPED here.
195 postsTyped &= needsKeyTyped;
196
197 // That's the reaction on the PRESSED (not RELEASED) event as it comes to
198 // appear in MacOSX.
199 // Modifier keys (shift, etc) don't want to send TYPED events.
200 // On the other hand we don't want to generate keyTyped events
201 // for clipboard related shortcuts like Meta + [CVX]
202 boolean isMetaDown = (jmodifiers & KeyEvent.META_DOWN_MASK) != 0;
203 if (jeventType == KeyEvent.KEY_PRESSED && postsTyped && !isMetaDown) {
204 peer.dispatchKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers,
205 KeyEvent.VK_UNDEFINED, javaChar,
206 KeyEvent.KEY_LOCATION_UNKNOWN);
207 }
208 }
209
210 void handleInputEvent(String text) {
211 if (text != null) {
212 int index = 0, length = text.length();
213 char c;
214 while (index < length) {
215 c = text.charAt(index);
216 peer.dispatchKeyEvent(KeyEvent.KEY_TYPED,
217 System.currentTimeMillis(),
218 0, KeyEvent.VK_UNDEFINED, c,
219 KeyEvent.KEY_LOCATION_UNKNOWN);
220 peer.dispatchKeyEvent(KeyEvent.KEY_RELEASED,
221 System.currentTimeMillis(),
222 0, lastKeyPressCode, c,
223 KeyEvent.KEY_LOCATION_UNKNOWN);
224 index++;
225 }
226 }
227 }
228
229 void handleWindowFocusEvent(boolean gained, LWWindowPeer opposite) {
230 peer.notifyActivation(gained, opposite);
231 }
232 }
|