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.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);
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;
/**

View File

@@ -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 { }
/**

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 onFocusOut = 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 onMinimize = new Event<Void->Void> ();
public var onMouseDown = new Event<Float->Float->Int->Void> ();

View File

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

View File

@@ -3,6 +3,7 @@
#include <hx/CFFI.h>
#include <stdint.h>
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;

View File

@@ -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);

View File

@@ -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 ());