Move Keyboard events back to Window

This commit is contained in:
Joshua Granick
2015-08-19 16:30:36 -07:00
parent c666477b58
commit f7e53cdea8
12 changed files with 59 additions and 52 deletions

View File

@@ -13,7 +13,6 @@ import lime.app.Application;
import lime.app.Config; import lime.app.Config;
import lime.audio.AudioManager; import lime.audio.AudioManager;
import lime.graphics.Renderer; import lime.graphics.Renderer;
import lime.ui.Keyboard;
import lime.ui.KeyCode; import lime.ui.KeyCode;
import lime.ui.KeyModifier; import lime.ui.KeyModifier;
import lime.ui.Touch; import lime.ui.Touch;
@@ -199,23 +198,27 @@ class FlashApplication {
private function handleKeyEvent (event:KeyboardEvent):Void { private function handleKeyEvent (event:KeyboardEvent):Void {
var keyCode = convertKeyCode (event.keyCode); if (parent.window != null) {
var modifier = (event.shiftKey ? (KeyModifier.SHIFT) : 0) | (event.ctrlKey ? (KeyModifier.CTRL) : 0) | (event.altKey ? (KeyModifier.ALT) : 0);
if (event.type == KeyboardEvent.KEY_DOWN) {
Keyboard.onKeyDown.dispatch (keyCode, modifier); var keyCode = convertKeyCode (event.keyCode);
var modifier = (event.shiftKey ? (KeyModifier.SHIFT) : 0) | (event.ctrlKey ? (KeyModifier.CTRL) : 0) | (event.altKey ? (KeyModifier.ALT) : 0);
if (parent.window != null && parent.window.enableTextEvents) { if (event.type == KeyboardEvent.KEY_DOWN) {
parent.window.onTextInput.dispatch (String.fromCharCode (event.charCode)); parent.window.onKeyDown.dispatch (keyCode, modifier);
if (parent.window != null && parent.window.enableTextEvents) {
parent.window.onTextInput.dispatch (String.fromCharCode (event.charCode));
}
} else {
parent.window.onKeyUp.dispatch (keyCode, modifier);
} }
} else {
Keyboard.onKeyUp.dispatch (keyCode, modifier);
} }
} }

View File

@@ -7,7 +7,6 @@ import lime.app.Application;
import lime.app.Config; import lime.app.Config;
import lime.audio.AudioManager; import lime.audio.AudioManager;
import lime.graphics.Renderer; import lime.graphics.Renderer;
import lime.ui.Keyboard;
import lime.ui.KeyCode; import lime.ui.KeyCode;
import lime.ui.KeyModifier; import lime.ui.KeyModifier;
import lime.ui.Window; import lime.ui.Window;
@@ -262,17 +261,16 @@ class HTML5Application {
if (event.type == "keydown") { if (event.type == "keydown") {
Keyboard.onKeyDown.dispatch (keyCode, modifier); parent.window.onKeyDown.dispatch (keyCode, modifier);
} else { } else {
Keyboard.onKeyUp.dispatch (keyCode, modifier); parent.window.onKeyUp.dispatch (keyCode, modifier);
} }
} }
} }

View File

@@ -14,7 +14,6 @@ import lime.system.Display;
import lime.system.DisplayMode; import lime.system.DisplayMode;
import lime.system.System; import lime.system.System;
import lime.ui.Gamepad; import lime.ui.Gamepad;
import lime.ui.Keyboard;
import lime.ui.Touch; import lime.ui.Touch;
import lime.ui.Window; import lime.ui.Window;
@@ -197,15 +196,21 @@ class NativeApplication {
private function handleKeyEvent ():Void { private function handleKeyEvent ():Void {
switch (keyEventInfo.type) { var window = parent.windows.get (keyEventInfo.windowID);
if (window != null) {
case KEY_DOWN: switch (keyEventInfo.type) {
Keyboard.onKeyDown.dispatch (keyEventInfo.keyCode, keyEventInfo.modifier); case KEY_DOWN:
case KEY_UP: window.onKeyDown.dispatch (keyEventInfo.keyCode, keyEventInfo.modifier);
Keyboard.onKeyUp.dispatch (keyEventInfo.keyCode, keyEventInfo.modifier); case KEY_UP:
window.onKeyUp.dispatch (keyEventInfo.keyCode, keyEventInfo.modifier);
}
} }
@@ -607,11 +612,13 @@ private class KeyEventInfo {
public var keyCode:Int; public var keyCode:Int;
public var modifier:Int; public var modifier:Int;
public var type:KeyEventType; public var type:KeyEventType;
public var windowID:Int;
public function new (type:KeyEventType = null, keyCode:Int = 0, modifier:Int = 0) { public function new (type:KeyEventType = null, windowID:Int = 0, keyCode:Int = 0, modifier:Int = 0) {
this.type = type; this.type = type;
this.windowID = windowID;
this.keyCode = keyCode; this.keyCode = keyCode;
this.modifier = modifier; this.modifier = modifier;
@@ -620,7 +627,7 @@ private class KeyEventInfo {
public function clone ():KeyEventInfo { public function clone ():KeyEventInfo {
return new KeyEventInfo (type, keyCode, modifier); return new KeyEventInfo (type, windowID, keyCode, modifier);
} }

View File

@@ -6,7 +6,6 @@ import lime.graphics.RenderContext;
import lime.ui.Gamepad; import lime.ui.Gamepad;
import lime.ui.GamepadAxis; import lime.ui.GamepadAxis;
import lime.ui.GamepadButton; import lime.ui.GamepadButton;
import lime.ui.Keyboard;
import lime.ui.KeyCode; import lime.ui.KeyCode;
import lime.ui.KeyModifier; import lime.ui.KeyModifier;
import lime.ui.Touch; import lime.ui.Touch;
@@ -62,8 +61,6 @@ class Application extends Module {
onUpdate.add (update); onUpdate.add (update);
Gamepad.onConnect.add (onGamepadConnect); Gamepad.onConnect.add (onGamepadConnect);
Keyboard.onKeyDown.add (onKeyDown);
Keyboard.onKeyUp.add (onKeyUp);
Touch.onStart.add (onTouchStart); Touch.onStart.add (onTouchStart);
Touch.onMove.add (onTouchMove); Touch.onMove.add (onTouchMove);
Touch.onEnd.add (onTouchEnd); Touch.onEnd.add (onTouchEnd);
@@ -131,6 +128,8 @@ class Application extends Module {
window.onFocusIn.add (onWindowFocusIn.bind (window)); window.onFocusIn.add (onWindowFocusIn.bind (window));
window.onFocusOut.add (onWindowFocusOut.bind (window)); window.onFocusOut.add (onWindowFocusOut.bind (window));
window.onFullscreen.add (onWindowFullscreen.bind (window)); window.onFullscreen.add (onWindowFullscreen.bind (window));
window.onKeyDown.add (onKeyDown.bind (window));
window.onKeyUp.add (onKeyUp.bind (window));
window.onLeave.add (onWindowLeave.bind (window)); window.onLeave.add (onWindowLeave.bind (window));
window.onMinimize.add (onWindowMinimize.bind (window)); window.onMinimize.add (onWindowMinimize.bind (window));
window.onMouseDown.add (onMouseDown.bind (window)); window.onMouseDown.add (onMouseDown.bind (window));
@@ -257,22 +256,22 @@ class Application extends Module {
} }
public override function onKeyDown (keyCode:KeyCode, modifier:KeyModifier):Void { public override function onKeyDown (window:Window, keyCode:KeyCode, modifier:KeyModifier):Void {
for (module in modules) { for (module in modules) {
module.onKeyDown (keyCode, modifier); module.onKeyDown (window, keyCode, modifier);
} }
} }
public override function onKeyUp (keyCode:KeyCode, modifier:KeyModifier):Void { public override function onKeyUp (window:Window, keyCode:KeyCode, modifier:KeyModifier):Void {
for (module in modules) { for (module in modules) {
module.onKeyUp (keyCode, modifier); module.onKeyUp (window, keyCode, modifier);
} }

View File

@@ -63,18 +63,20 @@ interface IModule {
/** /**
* Called when a key down event is fired * Called when a key down event is fired
* @param window The window dispatching the event
* @param keyCode The code of the key that was pressed * @param keyCode The code of the key that was pressed
* @param modifier The modifier of the key that was pressed * @param modifier The modifier of the key that was pressed
*/ */
public function onKeyDown (keyCode:KeyCode, modifier:KeyModifier):Void; public function onKeyDown (window:Window, keyCode:KeyCode, modifier:KeyModifier):Void;
/** /**
* Called when a key up event is fired * Called when a key up event is fired
* @param window The window dispatching the event
* @param keyCode The code of the key that was released * @param keyCode The code of the key that was released
* @param modifier The modifier of the key that was released * @param modifier The modifier of the key that was released
*/ */
public function onKeyUp (keyCode:KeyCode, modifier:KeyModifier):Void; public function onKeyUp (window:Window, keyCode:KeyCode, modifier:KeyModifier):Void;
/** /**

View File

@@ -76,18 +76,20 @@ class Module implements IModule {
/** /**
* Called when a key down event is fired * Called when a key down event is fired
* @param window The window dispatching the event
* @param keyCode The code of the key that was pressed * @param keyCode The code of the key that was pressed
* @param modifier The modifier of the key that was pressed * @param modifier The modifier of the key that was pressed
*/ */
public function onKeyDown (keyCode:KeyCode, modifier:KeyModifier):Void { } public function onKeyDown (window:Window, keyCode:KeyCode, modifier:KeyModifier):Void { }
/** /**
* Called when a key up event is fired * Called when a key up event is fired
* @param window The window dispatching the event
* @param keyCode The code of the key that was released * @param keyCode The code of the key that was released
* @param modifier The modifier of the key that was released * @param modifier The modifier of the key that was released
*/ */
public function onKeyUp (keyCode:KeyCode, modifier:KeyModifier):Void { } public function onKeyUp (window:Window, keyCode:KeyCode, modifier:KeyModifier):Void { }
/** /**

View File

@@ -1,14 +0,0 @@
package lime.ui;
import lime.app.Event;
class Keyboard {
public static var onKeyDown = new Event<KeyCode->KeyModifier->Void> ();
public static var onKeyUp = new Event<KeyCode->KeyModifier->Void> ();
}

View File

@@ -28,6 +28,8 @@ class Window {
public var onFocusIn = new Event<Void->Void> (); public var onFocusIn = new Event<Void->Void> ();
public var onFocusOut = new Event<Void->Void> (); public var onFocusOut = new Event<Void->Void> ();
public var onFullscreen = new Event<Void->Void> (); public var onFullscreen = new Event<Void->Void> ();
public var onKeyDown = new Event<KeyCode->KeyModifier->Void> ();
public var onKeyUp = new Event<KeyCode->KeyModifier->Void> ();
public var onLeave = new Event<Void->Void> (); public var onLeave = new Event<Void->Void> ();
public var onMinimize = new Event<Void->Void> (); public var onMinimize = new Event<Void->Void> ();
public var onMouseDown = new Event<Float->Float->Int->Void> (); public var onMouseDown = new Event<Float->Float->Int->Void> ();

View File

@@ -3,6 +3,7 @@
#include <hx/CFFI.h> #include <hx/CFFI.h>
#include <stdint.h>
namespace lime { namespace lime {
@@ -30,6 +31,7 @@ namespace lime {
double keyCode; double keyCode;
int modifier; int modifier;
KeyEventType type; KeyEventType type;
uint32_t windowID;
}; };

View File

@@ -3,6 +3,7 @@
#include <hx/CFFI.h> #include <hx/CFFI.h>
#include <stdint.h>
namespace lime { namespace lime {
@@ -28,10 +29,10 @@ namespace lime {
static void Dispatch (TouchEvent* event); static void Dispatch (TouchEvent* event);
int device; uint32_t device;
float dx; float dx;
float dy; float dy;
int id; uint32_t id;
float pressure; float pressure;
TouchEventType type; TouchEventType type;
float x; float x;

View File

@@ -335,6 +335,7 @@ namespace lime {
keyEvent.keyCode = event->key.keysym.sym; keyEvent.keyCode = event->key.keysym.sym;
keyEvent.modifier = event->key.keysym.mod; keyEvent.modifier = event->key.keysym.mod;
keyEvent.windowID = event->key.windowID;
KeyEvent::Dispatch (&keyEvent); KeyEvent::Dispatch (&keyEvent);

View File

@@ -11,6 +11,7 @@ namespace lime {
static double id_keyCode; static double id_keyCode;
static int id_modifier; static int id_modifier;
static int id_type; static int id_type;
static int id_windowID;
static bool init = false; static bool init = false;
@@ -19,6 +20,7 @@ namespace lime {
keyCode = 0; keyCode = 0;
modifier = 0; modifier = 0;
type = KEY_DOWN; type = KEY_DOWN;
windowID = 0;
} }
@@ -32,6 +34,7 @@ namespace lime {
id_keyCode = val_id ("keyCode"); id_keyCode = val_id ("keyCode");
id_modifier = val_id ("modifier"); id_modifier = val_id ("modifier");
id_type = val_id ("type"); id_type = val_id ("type");
id_windowID = val_id ("windowID");
init = true; init = true;
} }
@@ -41,6 +44,7 @@ namespace lime {
alloc_field (object, id_keyCode, alloc_float (event->keyCode)); alloc_field (object, id_keyCode, alloc_float (event->keyCode));
alloc_field (object, id_modifier, alloc_int (event->modifier)); alloc_field (object, id_modifier, alloc_int (event->modifier));
alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_type, alloc_int (event->type));
alloc_field (object, id_windowID, alloc_int (event->windowID));
val_call0 (KeyEvent::callback->get ()); val_call0 (KeyEvent::callback->get ());