From f7e53cdea81e2f833e3476ae56c7a5a798debc58 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Wed, 19 Aug 2015 16:30:36 -0700 Subject: [PATCH] Move Keyboard events back to Window --- lime/_backend/flash/FlashApplication.hx | 27 ++++++++++++---------- lime/_backend/html5/HTML5Application.hx | 6 ++--- lime/_backend/native/NativeApplication.hx | 25 ++++++++++++-------- lime/app/Application.hx | 13 +++++------ lime/app/IModule.hx | 6 +++-- lime/app/Module.hx | 6 +++-- lime/ui/Keyboard.hx | 14 ----------- lime/ui/Window.hx | 2 ++ project/include/ui/KeyEvent.h | 2 ++ project/include/ui/TouchEvent.h | 5 ++-- project/src/backend/sdl/SDLApplication.cpp | 1 + project/src/ui/KeyEvent.cpp | 4 ++++ 12 files changed, 59 insertions(+), 52 deletions(-) delete mode 100644 lime/ui/Keyboard.hx diff --git a/lime/_backend/flash/FlashApplication.hx b/lime/_backend/flash/FlashApplication.hx index 2e84652fd..363fa163b 100644 --- a/lime/_backend/flash/FlashApplication.hx +++ b/lime/_backend/flash/FlashApplication.hx @@ -13,7 +13,6 @@ import lime.app.Application; import lime.app.Config; import lime.audio.AudioManager; import lime.graphics.Renderer; -import lime.ui.Keyboard; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.Touch; @@ -199,23 +198,27 @@ class FlashApplication { private function handleKeyEvent (event:KeyboardEvent):Void { - var keyCode = convertKeyCode (event.keyCode); - var modifier = (event.shiftKey ? (KeyModifier.SHIFT) : 0) | (event.ctrlKey ? (KeyModifier.CTRL) : 0) | (event.altKey ? (KeyModifier.ALT) : 0); - - if (event.type == KeyboardEvent.KEY_DOWN) { + if (parent.window != null) { - 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); - } } diff --git a/lime/_backend/html5/HTML5Application.hx b/lime/_backend/html5/HTML5Application.hx index a9c2d7631..2f1ad6d7d 100644 --- a/lime/_backend/html5/HTML5Application.hx +++ b/lime/_backend/html5/HTML5Application.hx @@ -7,7 +7,6 @@ import lime.app.Application; import lime.app.Config; import lime.audio.AudioManager; import lime.graphics.Renderer; -import lime.ui.Keyboard; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.Window; @@ -262,17 +261,16 @@ class HTML5Application { if (event.type == "keydown") { - Keyboard.onKeyDown.dispatch (keyCode, modifier); + parent.window.onKeyDown.dispatch (keyCode, modifier); } else { - Keyboard.onKeyUp.dispatch (keyCode, modifier); + parent.window.onKeyUp.dispatch (keyCode, modifier); } } - } diff --git a/lime/_backend/native/NativeApplication.hx b/lime/_backend/native/NativeApplication.hx index 7e1bd110c..fc65cbf97 100644 --- a/lime/_backend/native/NativeApplication.hx +++ b/lime/_backend/native/NativeApplication.hx @@ -14,7 +14,6 @@ import lime.system.Display; import lime.system.DisplayMode; import lime.system.System; import lime.ui.Gamepad; -import lime.ui.Keyboard; import lime.ui.Touch; import lime.ui.Window; @@ -197,15 +196,21 @@ class NativeApplication { 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_UP: + case KEY_DOWN: + + 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 modifier:Int; 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.windowID = windowID; this.keyCode = keyCode; this.modifier = modifier; @@ -620,7 +627,7 @@ private class KeyEventInfo { public function clone ():KeyEventInfo { - return new KeyEventInfo (type, keyCode, modifier); + return new KeyEventInfo (type, windowID, keyCode, modifier); } diff --git a/lime/app/Application.hx b/lime/app/Application.hx index 717f2285d..2d117db7d 100644 --- a/lime/app/Application.hx +++ b/lime/app/Application.hx @@ -6,7 +6,6 @@ import lime.graphics.RenderContext; import lime.ui.Gamepad; import lime.ui.GamepadAxis; import lime.ui.GamepadButton; -import lime.ui.Keyboard; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.Touch; @@ -62,8 +61,6 @@ class Application extends Module { onUpdate.add (update); Gamepad.onConnect.add (onGamepadConnect); - Keyboard.onKeyDown.add (onKeyDown); - Keyboard.onKeyUp.add (onKeyUp); Touch.onStart.add (onTouchStart); Touch.onMove.add (onTouchMove); Touch.onEnd.add (onTouchEnd); @@ -131,6 +128,8 @@ class Application extends Module { window.onFocusIn.add (onWindowFocusIn.bind (window)); window.onFocusOut.add (onWindowFocusOut.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.onMinimize.add (onWindowMinimize.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) { - 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) { - module.onKeyUp (keyCode, modifier); + module.onKeyUp (window, keyCode, modifier); } diff --git a/lime/app/IModule.hx b/lime/app/IModule.hx index 3b53abdfb..e3eaee7e6 100644 --- a/lime/app/IModule.hx +++ b/lime/app/IModule.hx @@ -63,18 +63,20 @@ interface IModule { /** * 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 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 + * @param window The window dispatching the event * @param keyCode The code 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; /** diff --git a/lime/app/Module.hx b/lime/app/Module.hx index 33fd0744d..cfb487821 100644 --- a/lime/app/Module.hx +++ b/lime/app/Module.hx @@ -76,18 +76,20 @@ class Module implements IModule { /** * 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 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 + * @param window The window dispatching the event * @param keyCode The code 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 { } /** diff --git a/lime/ui/Keyboard.hx b/lime/ui/Keyboard.hx deleted file mode 100644 index 378cfd5f3..000000000 --- a/lime/ui/Keyboard.hx +++ /dev/null @@ -1,14 +0,0 @@ -package lime.ui; - - -import lime.app.Event; - - -class Keyboard { - - - public static var onKeyDown = new EventKeyModifier->Void> (); - public static var onKeyUp = new EventKeyModifier->Void> (); - - -} \ No newline at end of file diff --git a/lime/ui/Window.hx b/lime/ui/Window.hx index fb3efadd4..0452ab143 100644 --- a/lime/ui/Window.hx +++ b/lime/ui/Window.hx @@ -28,6 +28,8 @@ class Window { public var onFocusIn = new EventVoid> (); public var onFocusOut = new EventVoid> (); public var onFullscreen = new EventVoid> (); + public var onKeyDown = new EventKeyModifier->Void> (); + public var onKeyUp = new EventKeyModifier->Void> (); public var onLeave = new EventVoid> (); public var onMinimize = new EventVoid> (); public var onMouseDown = new EventFloat->Int->Void> (); diff --git a/project/include/ui/KeyEvent.h b/project/include/ui/KeyEvent.h index 69457e012..ad2887a99 100644 --- a/project/include/ui/KeyEvent.h +++ b/project/include/ui/KeyEvent.h @@ -3,6 +3,7 @@ #include +#include namespace lime { @@ -30,6 +31,7 @@ namespace lime { double keyCode; int modifier; KeyEventType type; + uint32_t windowID; }; diff --git a/project/include/ui/TouchEvent.h b/project/include/ui/TouchEvent.h index 99e34bf0d..9b3ca9a44 100644 --- a/project/include/ui/TouchEvent.h +++ b/project/include/ui/TouchEvent.h @@ -3,6 +3,7 @@ #include +#include namespace lime { @@ -28,10 +29,10 @@ namespace lime { static void Dispatch (TouchEvent* event); - int device; + uint32_t device; float dx; float dy; - int id; + uint32_t id; float pressure; TouchEventType type; float x; diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index cb3bbb1c4..e296e7ab8 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -335,6 +335,7 @@ namespace lime { keyEvent.keyCode = event->key.keysym.sym; keyEvent.modifier = event->key.keysym.mod; + keyEvent.windowID = event->key.windowID; KeyEvent::Dispatch (&keyEvent); diff --git a/project/src/ui/KeyEvent.cpp b/project/src/ui/KeyEvent.cpp index 14204cd10..4804f1023 100644 --- a/project/src/ui/KeyEvent.cpp +++ b/project/src/ui/KeyEvent.cpp @@ -11,6 +11,7 @@ namespace lime { static double id_keyCode; static int id_modifier; static int id_type; + static int id_windowID; static bool init = false; @@ -19,6 +20,7 @@ namespace lime { keyCode = 0; modifier = 0; type = KEY_DOWN; + windowID = 0; } @@ -32,6 +34,7 @@ namespace lime { id_keyCode = val_id ("keyCode"); id_modifier = val_id ("modifier"); id_type = val_id ("type"); + id_windowID = val_id ("windowID"); init = true; } @@ -41,6 +44,7 @@ namespace lime { alloc_field (object, id_keyCode, alloc_float (event->keyCode)); alloc_field (object, id_modifier, alloc_int (event->modifier)); alloc_field (object, id_type, alloc_int (event->type)); + alloc_field (object, id_windowID, alloc_int (event->windowID)); val_call0 (KeyEvent::callback->get ());