More work on events
This commit is contained in:
@@ -4,21 +4,33 @@ package lime.ui;
|
||||
class KeyEvent {
|
||||
|
||||
|
||||
public var altKey:Bool;
|
||||
public var code:Int;
|
||||
public var ctrlKey:Bool;
|
||||
public var key:Int;
|
||||
public var location:KeyEventLocation;
|
||||
public var metaKey:Bool;
|
||||
public var shiftKey:Bool;
|
||||
public var type:KeyEventType;
|
||||
|
||||
|
||||
public function new (type:KeyEventType = null, code:Int = -1) {
|
||||
public function new (type:KeyEventType = null, code:Int = 0, key:Int = 0, location:KeyEventLocation = null, ctrlKey:Bool = false, altKey:Bool = false, shiftKey:Bool = false, metaKey:Bool = false) {
|
||||
|
||||
this.type = type;
|
||||
this.code = code;
|
||||
this.key = key;
|
||||
this.location = location;
|
||||
this.ctrlKey = ctrlKey;
|
||||
this.altKey = altKey;
|
||||
this.shiftKey = shiftKey;
|
||||
this.metaKey = metaKey;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function clone ():KeyEvent {
|
||||
|
||||
return new KeyEvent (type, code);
|
||||
return new KeyEvent (type, code, key, location, ctrlKey, altKey, shiftKey, metaKey);
|
||||
|
||||
}
|
||||
|
||||
@@ -26,6 +38,16 @@ class KeyEvent {
|
||||
}
|
||||
|
||||
|
||||
@:enum abstract KeyEventLocation(Int) {
|
||||
|
||||
var KEY_LOCATION_STANDARD = 0;
|
||||
var KEY_LOCATION_LEFT = 1;
|
||||
var KEY_LOCATION_RIGHT = 2;
|
||||
var KEY_LOCATION_NUMPAD = 3;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@:enum abstract KeyEventType(Int) {
|
||||
|
||||
var KEY_DOWN = 0;
|
||||
|
||||
@@ -15,16 +15,19 @@ class KeyEventManager extends EventManager<IKeyEventListener> {
|
||||
|
||||
private static var instance:KeyEventManager;
|
||||
|
||||
private var keyEvent:KeyEvent;
|
||||
|
||||
|
||||
public function new () {
|
||||
|
||||
super ();
|
||||
|
||||
instance = this;
|
||||
keyEvent = new KeyEvent ();
|
||||
|
||||
#if (cpp || neko)
|
||||
|
||||
lime_key_event_manager_register (handleEvent, new KeyEvent ());
|
||||
lime_key_event_manager_register (handleEvent, keyEvent);
|
||||
|
||||
#end
|
||||
|
||||
@@ -42,6 +45,29 @@ class KeyEventManager extends EventManager<IKeyEventListener> {
|
||||
}
|
||||
|
||||
|
||||
#if js
|
||||
private function handleDOMEvent (event:js.html.KeyboardEvent):Void {
|
||||
|
||||
//keyEvent.code = event.code;
|
||||
keyEvent.code = (event.keyCode != null ? event.keyCode : event.which);
|
||||
keyEvent.key = keyEvent.code;
|
||||
//keyEvent.code = Keyboard.__convertMozillaCode (keyEvent.code);
|
||||
|
||||
//keyEvent.location = untyped (event).location != null ? untyped (event).location : event.keyLocation;
|
||||
|
||||
keyEvent.ctrlKey = event.ctrlKey;
|
||||
keyEvent.altKey = event.altKey;
|
||||
keyEvent.shiftKey = event.shiftKey;
|
||||
keyEvent.metaKey = event.metaKey;
|
||||
|
||||
keyEvent.type = (event.type == "keydown" ? KEY_DOWN : KEY_UP);
|
||||
|
||||
handleEvent (keyEvent);
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
|
||||
private function handleEvent (event:KeyEvent):Void {
|
||||
|
||||
var event = event.clone ();
|
||||
@@ -74,19 +100,8 @@ class KeyEventManager extends EventManager<IKeyEventListener> {
|
||||
if (instance != null) {
|
||||
|
||||
#if js
|
||||
|
||||
Browser.window.addEventListener ("keydown", function (event) {
|
||||
|
||||
instance.handleEvent (new KeyEvent (KEY_DOWN, 0));
|
||||
|
||||
}, false);
|
||||
|
||||
Browser.window.addEventListener ("keyup", function (event) {
|
||||
|
||||
instance.handleEvent (new KeyEvent (KEY_UP, 0));
|
||||
|
||||
}, false);
|
||||
|
||||
Browser.window.addEventListener ("keydown", instance.handleDOMEvent, false);
|
||||
Browser.window.addEventListener ("keyup", instance.handleDOMEvent, false);
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
@@ -11,16 +11,19 @@ class MouseEventManager extends EventManager<IMouseEventListener> {
|
||||
|
||||
private static var instance:MouseEventManager;
|
||||
|
||||
private var mouseEvent:MouseEvent;
|
||||
|
||||
|
||||
public function new () {
|
||||
|
||||
super ();
|
||||
|
||||
instance = this;
|
||||
mouseEvent = new MouseEvent ();
|
||||
|
||||
#if (cpp || neko)
|
||||
|
||||
lime_mouse_event_manager_register (handleEvent, new MouseEvent ());
|
||||
lime_mouse_event_manager_register (handleEvent, mouseEvent);
|
||||
|
||||
#end
|
||||
|
||||
@@ -38,6 +41,50 @@ class MouseEventManager extends EventManager<IMouseEventListener> {
|
||||
}
|
||||
|
||||
|
||||
#if js
|
||||
private function handleDOMEvent (event:js.html.MouseEvent):Void {
|
||||
|
||||
/*
|
||||
var rect;
|
||||
|
||||
if (__canvas != null) {
|
||||
|
||||
rect = __canvas.getBoundingClientRect ();
|
||||
__mouseX = (event.clientX - rect.left) * (stageWidth / rect.width);
|
||||
__mouseY = (event.clientY - rect.top) * (stageHeight / rect.height);
|
||||
|
||||
} else {
|
||||
|
||||
rect = __div.getBoundingClientRect ();
|
||||
//__mouseX = (event.clientX - rect.left) * (__div.style.width / rect.width);
|
||||
__mouseX = (event.clientX - rect.left);
|
||||
//__mouseY = (event.clientY - rect.top) * (__div.style.height / rect.height);
|
||||
__mouseY = (event.clientY - rect.top);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
mouseEvent.x = event.clientX;
|
||||
mouseEvent.y = event.clientY;
|
||||
|
||||
mouseEvent.type = switch (event.type) {
|
||||
|
||||
case "mousedown": MOUSE_DOWN;
|
||||
case "mouseup": MOUSE_UP;
|
||||
case "mousemove": MOUSE_MOVE;
|
||||
//case "click": MouseEvent.CLICK;
|
||||
//case "dblclick": MouseEvent.DOUBLE_CLICK;
|
||||
case "mousewheel": MOUSE_WHEEL;
|
||||
default: null;
|
||||
|
||||
}
|
||||
|
||||
handleEvent (mouseEvent);
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
|
||||
private function handleEvent (event:MouseEvent):Void {
|
||||
|
||||
var event = event.clone ();
|
||||
@@ -80,31 +127,10 @@ class MouseEventManager extends EventManager<IMouseEventListener> {
|
||||
if (instance != null) {
|
||||
|
||||
#if js
|
||||
|
||||
window.element.addEventListener ("mousedown", function (event) {
|
||||
|
||||
instance.handleEvent (new MouseEvent (MOUSE_DOWN, 0, 0));
|
||||
|
||||
}, true);
|
||||
|
||||
window.element.addEventListener ("mousemove", function (event) {
|
||||
|
||||
instance.handleEvent (new MouseEvent (MOUSE_MOVE, 0, 0));
|
||||
|
||||
}, true);
|
||||
|
||||
window.element.addEventListener ("mouseup", function (event) {
|
||||
|
||||
instance.handleEvent (new MouseEvent (MOUSE_UP, 0, 0));
|
||||
|
||||
}, true);
|
||||
|
||||
window.element.addEventListener ("mousewheel", function (event) {
|
||||
|
||||
//instance.handleEvent (new MouseEvent (MOUSE_DOWN, 0, 0));
|
||||
|
||||
}, true);
|
||||
|
||||
window.element.addEventListener ("mousedown", instance.handleDOMEvent, true);
|
||||
window.element.addEventListener ("mousemove", instance.handleDOMEvent, true);
|
||||
window.element.addEventListener ("mouseup", instance.handleDOMEvent, true);
|
||||
//window.element.addEventListener ("mousewheel", handleDOMEvent, true);
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
@@ -11,16 +11,19 @@ class TouchEventManager extends EventManager<ITouchEventListener> {
|
||||
|
||||
private static var instance:TouchEventManager;
|
||||
|
||||
private var touchEvent:TouchEvent;
|
||||
|
||||
|
||||
public function new () {
|
||||
|
||||
super ();
|
||||
|
||||
instance = this;
|
||||
touchEvent = new TouchEvent ();
|
||||
|
||||
#if (cpp || neko)
|
||||
|
||||
lime_touch_event_manager_register (handleEvent, new TouchEvent ());
|
||||
lime_touch_event_manager_register (handleEvent, touchEvent);
|
||||
|
||||
#end
|
||||
|
||||
@@ -38,6 +41,80 @@ class TouchEventManager extends EventManager<ITouchEventListener> {
|
||||
}
|
||||
|
||||
|
||||
#if js
|
||||
private function handleDOMEvent (event:js.html.TouchEvent):Void {
|
||||
|
||||
event.preventDefault ();
|
||||
|
||||
//var rect = __canvas.getBoundingClientRect ();
|
||||
|
||||
touchEvent.id = event.changedTouches[0].identifier;
|
||||
touchEvent.x = event.pageX;
|
||||
touchEvent.y = event.pageY;
|
||||
|
||||
touchEvent.type = switch (event.type) {
|
||||
|
||||
case "touchstart": TOUCH_START;
|
||||
case "touchmove": TOUCH_MOVE;
|
||||
case "touchend": TOUCH_END;
|
||||
default: null;
|
||||
|
||||
}
|
||||
|
||||
handleEvent (touchEvent);
|
||||
|
||||
/*
|
||||
event.preventDefault ();
|
||||
|
||||
var rect;
|
||||
|
||||
if (__canvas != null) {
|
||||
|
||||
rect = __canvas.getBoundingClientRect ();
|
||||
|
||||
} else {
|
||||
|
||||
rect = __div.getBoundingClientRect ();
|
||||
|
||||
}
|
||||
|
||||
var touch = event.changedTouches[0];
|
||||
var point = new Point ((touch.pageX - rect.left) * (stageWidth / rect.width), (touch.pageY - rect.top) * (stageHeight / rect.height));
|
||||
|
||||
__mouseX = point.x;
|
||||
__mouseY = point.y;
|
||||
|
||||
__stack = [];
|
||||
|
||||
var type = null;
|
||||
var mouseType = null;
|
||||
|
||||
switch (event.type) {
|
||||
|
||||
case "touchstart":
|
||||
|
||||
type = TouchEvent.TOUCH_BEGIN;
|
||||
mouseType = MouseEvent.MOUSE_DOWN;
|
||||
|
||||
case "touchmove":
|
||||
|
||||
type = TouchEvent.TOUCH_MOVE;
|
||||
mouseType = MouseEvent.MOUSE_MOVE;
|
||||
|
||||
case "touchend":
|
||||
|
||||
type = TouchEvent.TOUCH_END;
|
||||
mouseType = MouseEvent.MOUSE_UP;
|
||||
|
||||
default:
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
|
||||
private function handleEvent (event:TouchEvent):Void {
|
||||
|
||||
var event = event.clone ();
|
||||
@@ -78,25 +155,9 @@ class TouchEventManager extends EventManager<ITouchEventListener> {
|
||||
if (instance != null) {
|
||||
|
||||
#if js
|
||||
|
||||
window.element.addEventListener ("touchstart", function (event) {
|
||||
|
||||
instance.handleEvent (new TouchEvent (TOUCH_START, 0, 0, 0));
|
||||
|
||||
}, true);
|
||||
|
||||
window.element.addEventListener ("touchmove", function (event) {
|
||||
|
||||
instance.handleEvent (new TouchEvent (TOUCH_MOVE, 0, 0, 0));
|
||||
|
||||
}, true);
|
||||
|
||||
window.element.addEventListener ("touchend", function (event) {
|
||||
|
||||
instance.handleEvent (new TouchEvent (TOUCH_END, 0, 0, 0));
|
||||
|
||||
}, true);
|
||||
|
||||
window.element.addEventListener ("touchstart", instance.handleDOMEvent, true);
|
||||
window.element.addEventListener ("touchmove", instance.handleDOMEvent, true);
|
||||
window.element.addEventListener ("touchend", instance.handleDOMEvent, true);
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
@@ -15,16 +15,19 @@ class WindowEventManager extends EventManager<IWindowEventListener> {
|
||||
|
||||
private static var instance:WindowEventManager;
|
||||
|
||||
private var windowEvent:WindowEvent;
|
||||
|
||||
|
||||
public function new () {
|
||||
|
||||
super ();
|
||||
|
||||
instance = this;
|
||||
windowEvent = new WindowEvent ();
|
||||
|
||||
#if (cpp || neko)
|
||||
|
||||
lime_window_event_manager_register (handleEvent, new WindowEvent ());
|
||||
lime_window_event_manager_register (handleEvent, windowEvent);
|
||||
|
||||
#end
|
||||
|
||||
@@ -42,6 +45,16 @@ class WindowEventManager extends EventManager<IWindowEventListener> {
|
||||
}
|
||||
|
||||
|
||||
#if js
|
||||
private function handleDOMEvent (event:js.html.Event):Void {
|
||||
|
||||
windowEvent.type = (event.type == "focus" ? WINDOW_ACTIVATE : WINDOW_DEACTIVATE);
|
||||
handleEvent (windowEvent);
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
|
||||
private function handleEvent (event:WindowEvent):Void {
|
||||
|
||||
var event = event.clone ();
|
||||
@@ -74,19 +87,8 @@ class WindowEventManager extends EventManager<IWindowEventListener> {
|
||||
if (instance != null) {
|
||||
|
||||
#if js
|
||||
|
||||
Browser.window.addEventListener ("focus", function (event) {
|
||||
|
||||
instance.handleEvent (new WindowEvent (WINDOW_ACTIVATE));
|
||||
|
||||
}, false);
|
||||
|
||||
Browser.window.addEventListener ("blur", function (event) {
|
||||
|
||||
instance.handleEvent (new WindowEvent (WINDOW_DEACTIVATE));
|
||||
|
||||
}, false);
|
||||
|
||||
Browser.window.addEventListener ("focus", instance.handleDOMEvent, false);
|
||||
Browser.window.addEventListener ("blur", instance.handleDOMEvent, false);
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user