diff --git a/lime/app/Application.hx b/lime/app/Application.hx index 29b1d489b..354ed47ee 100644 --- a/lime/app/Application.hx +++ b/lime/app/Application.hx @@ -79,16 +79,16 @@ class Application implements IKeyEventListener implements IMouseEventListener im } - public function onKeyDown (event:KeyEvent):Void {} - public function onKeyUp (event:KeyEvent):Void {} - public function onMouseDown (event:MouseEvent):Void {} - public function onMouseMove (event:MouseEvent):Void {} - public function onMouseUp (event:MouseEvent):Void {} - public function onTouchEnd (event:TouchEvent):Void {} - public function onTouchMove (event:TouchEvent):Void {} - public function onTouchStart (event:TouchEvent):Void {} - public function onWindowActivate (event:WindowEvent):Void {} - public function onWindowDeactivate (event:WindowEvent):Void { } + public function onKeyDown (keyCode:Int, modifier:Int):Void {} + public function onKeyUp (keyCode:Int, modifier:Int):Void {} + public function onMouseDown (x:Float, y:Float):Void {} + public function onMouseMove (x:Float, y:Float):Void {} + public function onMouseUp (x:Float, y:Float):Void {} + public function onTouchEnd (x:Float, y:Float):Void {} + public function onTouchMove (x:Float, y:Float):Void {} + public function onTouchStart (x:Float, y:Float):Void {} + public function onWindowActivate ():Void {} + public function onWindowDeactivate ():Void { } public function render (context:RenderContext):Void { @@ -132,7 +132,7 @@ private class EventDelegate implements IRenderEventListener implements IUpdateEv } - public function onRender (event:RenderEvent):Void { + public function onRender (context:RenderContext):Void { for (window in application.windows) { @@ -152,13 +152,13 @@ private class EventDelegate implements IRenderEventListener implements IUpdateEv } - public function onUpdate (event:UpdateEvent):Void { + public function onUpdate (deltaTime:Int):Void { #if (js && stats) application.windows[0].stats.begin (); #end - application.update (event.deltaTime); + application.update (deltaTime); } diff --git a/lime/app/IUpdateEventListener.hx b/lime/app/IUpdateEventListener.hx index a877af6c2..26c17c863 100644 --- a/lime/app/IUpdateEventListener.hx +++ b/lime/app/IUpdateEventListener.hx @@ -4,7 +4,7 @@ package lime.app; interface IUpdateEventListener { - function onUpdate (event:UpdateEvent):Void; + function onUpdate (deltaTime:Int):Void; } \ No newline at end of file diff --git a/lime/app/UpdateEvent.hx b/lime/app/UpdateEventInfo.hx similarity index 72% rename from lime/app/UpdateEvent.hx rename to lime/app/UpdateEventInfo.hx index 797a21c32..f54719136 100644 --- a/lime/app/UpdateEvent.hx +++ b/lime/app/UpdateEventInfo.hx @@ -1,7 +1,7 @@ package lime.app; -class UpdateEvent { +class UpdateEventInfo { public var deltaTime:Int; @@ -16,9 +16,9 @@ class UpdateEvent { } - public function clone ():UpdateEvent { + public function clone ():UpdateEventInfo { - return new UpdateEvent (type, deltaTime); + return new UpdateEventInfo (type, deltaTime); } diff --git a/lime/app/UpdateEventManager.hx b/lime/app/UpdateEventManager.hx index e609719a0..0f44e8c0c 100644 --- a/lime/app/UpdateEventManager.hx +++ b/lime/app/UpdateEventManager.hx @@ -19,7 +19,7 @@ class UpdateEventManager extends EventManager { private static var instance:UpdateEventManager; - private var event:UpdateEvent; + private var eventInfo:UpdateEventInfo; public function new () { @@ -27,10 +27,10 @@ class UpdateEventManager extends EventManager { super (); instance = this; - event = new UpdateEvent (); + eventInfo = new UpdateEventInfo (); #if (cpp || neko) - lime_update_event_manager_register (handleEvent, event); + lime_update_event_manager_register (dispatch, eventInfo); #end } @@ -47,13 +47,13 @@ class UpdateEventManager extends EventManager { } - private function handleEvent (event:UpdateEvent):Void { + private function dispatch ():Void { - var event = event.clone (); + var deltaTime = eventInfo.deltaTime; for (listener in listeners) { - listener.onUpdate (event); + listener.onUpdate (deltaTime); } @@ -108,7 +108,7 @@ class UpdateEventManager extends EventManager { public function triggerFrame (?_):Void { - handleEvent (event); + dispatch (); if (RenderEventManager.instance != null) { diff --git a/lime/graphics/IRenderEventListener.hx b/lime/graphics/IRenderEventListener.hx index c0ba15bbd..fe10e6de1 100644 --- a/lime/graphics/IRenderEventListener.hx +++ b/lime/graphics/IRenderEventListener.hx @@ -4,7 +4,7 @@ package lime.graphics; interface IRenderEventListener { - function onRender (event:RenderEvent):Void; + function onRender (context:RenderContext):Void; } \ No newline at end of file diff --git a/lime/graphics/RenderEvent.hx b/lime/graphics/RenderEvent.hx deleted file mode 100644 index edc6d89cc..000000000 --- a/lime/graphics/RenderEvent.hx +++ /dev/null @@ -1,31 +0,0 @@ -package lime.graphics; - - -class RenderEvent { - - - public var type:RenderEventType; - - - public function new (type:RenderEventType = null) { - - this.type = type; - - } - - - public function clone ():RenderEvent { - - return new RenderEvent (type); - - } - - -} - - -@:enum abstract RenderEventType(Int) { - - var RENDER = 0; - -} \ No newline at end of file diff --git a/lime/graphics/RenderEventInfo.hx b/lime/graphics/RenderEventInfo.hx new file mode 100644 index 000000000..fec155b30 --- /dev/null +++ b/lime/graphics/RenderEventInfo.hx @@ -0,0 +1,33 @@ +package lime.graphics; + + +class RenderEventInfo { + + + public var context:RenderContext; + public var type:RenderEventType; + + + public function new (type:RenderEventType = null, context:RenderContext = null) { + + this.type = type; + this.context = context; + + } + + + public function clone ():RenderEventInfo { + + return new RenderEventInfo (type, context); + + } + + +} + + +@:enum abstract RenderEventType(Int) { + + var RENDER = 0; + +} \ No newline at end of file diff --git a/lime/graphics/RenderEventManager.hx b/lime/graphics/RenderEventManager.hx index 500771429..77dace5a9 100644 --- a/lime/graphics/RenderEventManager.hx +++ b/lime/graphics/RenderEventManager.hx @@ -12,7 +12,7 @@ class RenderEventManager extends EventManager { private static var instance:RenderEventManager; - private var event:RenderEvent; + private var eventInfo:RenderEventInfo; public function new () { @@ -20,11 +20,11 @@ class RenderEventManager extends EventManager { super (); instance = this; - event = new RenderEvent (); + eventInfo = new RenderEventInfo (); #if (cpp || neko) - lime_render_event_manager_register (handleEvent, event); + lime_render_event_manager_register (dispatch, eventInfo); #end @@ -42,13 +42,13 @@ class RenderEventManager extends EventManager { } - private function handleEvent (event:RenderEvent):Void { + private function dispatch ():Void { - var event = event.clone (); + var context = eventInfo.context; for (listener in listeners) { - listener.onRender (event); + listener.onRender (context); } @@ -64,7 +64,7 @@ class RenderEventManager extends EventManager { private function render ():Void { - handleEvent (event); + dispatch (); } diff --git a/lime/ui/IKeyEventListener.hx b/lime/ui/IKeyEventListener.hx index 9566ba334..e701145eb 100644 --- a/lime/ui/IKeyEventListener.hx +++ b/lime/ui/IKeyEventListener.hx @@ -4,8 +4,8 @@ package lime.ui; interface IKeyEventListener { - function onKeyDown (event:KeyEvent):Void; - function onKeyUp (event:KeyEvent):Void; + function onKeyDown (keyCode:Int, modifier:Int):Void; + function onKeyUp (keyCode:Int, modifier:Int):Void; } \ No newline at end of file diff --git a/lime/ui/IMouseEventListener.hx b/lime/ui/IMouseEventListener.hx index 6757cf978..a93ba14a4 100644 --- a/lime/ui/IMouseEventListener.hx +++ b/lime/ui/IMouseEventListener.hx @@ -4,9 +4,9 @@ package lime.ui; interface IMouseEventListener { - function onMouseDown (event:MouseEvent):Void; - function onMouseMove (event:MouseEvent):Void; - function onMouseUp (event:MouseEvent):Void; + function onMouseDown (x:Float, y:Float):Void; + function onMouseMove (x:Float, y:Float):Void; + function onMouseUp (x:Float, y:Float):Void; } \ No newline at end of file diff --git a/lime/ui/ITouchEventListener.hx b/lime/ui/ITouchEventListener.hx index a94ae5922..5c7b6fffd 100644 --- a/lime/ui/ITouchEventListener.hx +++ b/lime/ui/ITouchEventListener.hx @@ -4,9 +4,9 @@ package lime.ui; interface ITouchEventListener { - function onTouchEnd (event:TouchEvent):Void; - function onTouchMove (event:TouchEvent):Void; - function onTouchStart (event:TouchEvent):Void; + function onTouchEnd (x:Float, y:Float):Void; + function onTouchMove (x:Float, y:Float):Void; + function onTouchStart (x:Float, y:Float):Void; } \ No newline at end of file diff --git a/lime/ui/IWindowEventListener.hx b/lime/ui/IWindowEventListener.hx index 55488b12c..45861d07d 100644 --- a/lime/ui/IWindowEventListener.hx +++ b/lime/ui/IWindowEventListener.hx @@ -4,8 +4,8 @@ package lime.ui; interface IWindowEventListener { - function onWindowActivate (event:WindowEvent):Void; - function onWindowDeactivate (event:WindowEvent):Void; + function onWindowActivate ():Void; + function onWindowDeactivate ():Void; } \ No newline at end of file diff --git a/lime/ui/KeyEvent.hx b/lime/ui/KeyEvent.hx deleted file mode 100644 index a4ae7c35a..000000000 --- a/lime/ui/KeyEvent.hx +++ /dev/null @@ -1,56 +0,0 @@ -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 = 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, key, location, ctrlKey, altKey, shiftKey, metaKey); - - } - - -} - - -@: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; - var KEY_UP = 1; - -} \ No newline at end of file diff --git a/lime/ui/KeyEventInfo.hx b/lime/ui/KeyEventInfo.hx new file mode 100644 index 000000000..68fa21129 --- /dev/null +++ b/lime/ui/KeyEventInfo.hx @@ -0,0 +1,36 @@ +package lime.ui; + + +class KeyEventInfo { + + + public var keyCode:Int; + public var modifier:Int; + public var type:KeyEventType; + + + public function new (type:KeyEventType = null, keyCode:Int = 0, modifier:Int = 0) { + + this.type = type; + this.keyCode = keyCode; + this.modifier = modifier; + + } + + + public function clone ():KeyEventInfo { + + return new KeyEventInfo (type, keyCode, modifier); + + } + + +} + + +@:enum abstract KeyEventType(Int) { + + var KEY_DOWN = 0; + var KEY_UP = 1; + +} \ No newline at end of file diff --git a/lime/ui/KeyEventManager.hx b/lime/ui/KeyEventManager.hx index 36aff1d22..0194f7473 100644 --- a/lime/ui/KeyEventManager.hx +++ b/lime/ui/KeyEventManager.hx @@ -17,7 +17,7 @@ class KeyEventManager extends EventManager { private static var instance:KeyEventManager; - private var keyEvent:KeyEvent; + private var eventInfo:KeyEventInfo; public function new () { @@ -25,12 +25,10 @@ class KeyEventManager extends EventManager { super (); instance = this; - keyEvent = new KeyEvent (); + eventInfo = new KeyEventInfo (); #if (cpp || neko) - - lime_key_event_manager_register (handleEvent, keyEvent); - + lime_key_event_manager_register (dispatch, eventInfo); #end } @@ -47,40 +45,18 @@ class KeyEventManager extends EventManager { } - #if js - private function handleDOMEvent (event:js.html.KeyboardEvent):Void { + private function dispatch ():Void { - //keyEvent.code = event.code; - keyEvent.code = (event.keyCode != null ? event.keyCode : event.which); - keyEvent.key = keyEvent.code; - //keyEvent.code = Keyboard.__convertMozillaCode (keyEvent.code); + var keyCode = eventInfo.keyCode; + var modifier = eventInfo.modifier; - //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 (); - - switch (event.type) { + switch (eventInfo.type) { case KEY_DOWN: for (listener in listeners) { - listener.onKeyDown (event); + listener.onKeyDown (keyCode, modifier); } @@ -88,7 +64,7 @@ class KeyEventManager extends EventManager { for (listener in listeners) { - listener.onKeyUp (event); + listener.onKeyUp (keyCode, modifier); } @@ -97,20 +73,41 @@ class KeyEventManager extends EventManager { } + #if js + private function handleDOMEvent (event:js.html.KeyboardEvent):Void { + + //keyEvent.code = event.code; + eventInfo.keyCode = (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; + + eventInfo.type = (event.type == "keydown" ? KEY_DOWN : KEY_UP); + dispatch (); + + } + #end + + #if flash private function handleFlashEvent (event:flash.events.KeyboardEvent):Void { - keyEvent.code = event.keyCode; - keyEvent.key = event.charCode; + eventInfo.keyCode = event.keyCode; + //keyEvent.key = event.charCode; - keyEvent.ctrlKey = event.ctrlKey; - keyEvent.altKey = event.altKey; - keyEvent.shiftKey = event.shiftKey; + //keyEvent.ctrlKey = event.ctrlKey; + //keyEvent.altKey = event.altKey; + //keyEvent.shiftKey = event.shiftKey; //keyEvent.metaKey = event.commandKey; - keyEvent.type = (event.type == flash.events.KeyboardEvent.KEY_DOWN ? KEY_DOWN : KEY_UP); - - handleEvent (keyEvent); + eventInfo.type = (event.type == flash.events.KeyboardEvent.KEY_DOWN ? KEY_DOWN : KEY_UP); + dispatch (); } #end diff --git a/lime/ui/MouseEvent.hx b/lime/ui/MouseEventInfo.hx similarity index 79% rename from lime/ui/MouseEvent.hx rename to lime/ui/MouseEventInfo.hx index 552b223ee..79366941f 100644 --- a/lime/ui/MouseEvent.hx +++ b/lime/ui/MouseEventInfo.hx @@ -1,7 +1,7 @@ package lime.ui; -class MouseEvent { +class MouseEventInfo { public var id:Int; @@ -21,9 +21,9 @@ class MouseEvent { } - public function clone ():MouseEvent { + public function clone ():MouseEventInfo { - return new MouseEvent (type, id, x, y); + return new MouseEventInfo (type, id, x, y); } diff --git a/lime/ui/MouseEventManager.hx b/lime/ui/MouseEventManager.hx index 834413deb..466681f15 100644 --- a/lime/ui/MouseEventManager.hx +++ b/lime/ui/MouseEventManager.hx @@ -17,7 +17,7 @@ class MouseEventManager extends EventManager { private static var instance:MouseEventManager; - private var mouseEvent:MouseEvent; + private var eventInfo:MouseEventInfo; public function new () { @@ -25,12 +25,10 @@ class MouseEventManager extends EventManager { super (); instance = this; - mouseEvent = new MouseEvent (); + eventInfo = new MouseEventInfo (); #if (cpp || neko) - - lime_mouse_event_manager_register (handleEvent, mouseEvent); - + lime_mouse_event_manager_register (dispatch, eventInfo); #end } @@ -47,6 +45,44 @@ class MouseEventManager extends EventManager { } + private function dispatch ():Void { + + var x = eventInfo.x; + var y = eventInfo.y; + + switch (eventInfo.type) { + + case MOUSE_DOWN: + + for (listener in listeners) { + + listener.onMouseDown (x, y); + + } + + case MOUSE_UP: + + for (listener in listeners) { + + listener.onMouseUp (x, y); + + } + + case MOUSE_MOVE: + + for (listener in listeners) { + + listener.onMouseMove (x, y); + + } + + default: + + } + + } + + #if js private function handleDOMEvent (event:js.html.MouseEvent):Void { @@ -70,10 +106,10 @@ class MouseEventManager extends EventManager { } */ - mouseEvent.x = event.clientX; - mouseEvent.y = event.clientY; + eventInfo.x = event.clientX; + eventInfo.y = event.clientY; - mouseEvent.type = switch (event.type) { + eventInfo.type = switch (event.type) { case "mousedown": MOUSE_DOWN; case "mouseup": MOUSE_UP; @@ -85,56 +121,19 @@ class MouseEventManager extends EventManager { } - handleEvent (mouseEvent); + dispatch (); } #end - private function handleEvent (event:MouseEvent):Void { - - var event = event.clone (); - - switch (event.type) { - - case MOUSE_DOWN: - - for (listener in listeners) { - - listener.onMouseDown (event); - - } - - case MOUSE_UP: - - for (listener in listeners) { - - listener.onMouseUp (event); - - } - - case MOUSE_MOVE: - - for (listener in listeners) { - - listener.onMouseMove (event); - - } - - default: - - } - - } - - #if flash private function handleFlashEvent (event:flash.events.MouseEvent):Void { - mouseEvent.x = event.stageX; - mouseEvent.y = event.stageY; + eventInfo.x = event.stageX; + eventInfo.y = event.stageY; - mouseEvent.type = switch (event.type) { + eventInfo.type = switch (event.type) { case flash.events.MouseEvent.MOUSE_DOWN: MOUSE_DOWN; case flash.events.MouseEvent.MOUSE_MOVE: MOUSE_MOVE; @@ -142,7 +141,7 @@ class MouseEventManager extends EventManager { } - handleEvent (mouseEvent); + dispatch (); } #end diff --git a/lime/ui/TouchEvent.hx b/lime/ui/TouchEventInfo.hx similarity index 78% rename from lime/ui/TouchEvent.hx rename to lime/ui/TouchEventInfo.hx index d364cac77..ba1335c21 100644 --- a/lime/ui/TouchEvent.hx +++ b/lime/ui/TouchEventInfo.hx @@ -1,7 +1,7 @@ package lime.ui; -class TouchEvent { +class TouchEventInfo { public var id:Int; @@ -21,9 +21,9 @@ class TouchEvent { } - public function clone ():TouchEvent { + public function clone ():TouchEventInfo { - return new TouchEvent (type, id, x, y); + return new TouchEventInfo (type, id, x, y); } diff --git a/lime/ui/TouchEventManager.hx b/lime/ui/TouchEventManager.hx index e90096081..693048c0c 100644 --- a/lime/ui/TouchEventManager.hx +++ b/lime/ui/TouchEventManager.hx @@ -17,7 +17,7 @@ class TouchEventManager extends EventManager { private static var instance:TouchEventManager; - private var touchEvent:TouchEvent; + private var eventInfo:TouchEventInfo; public function new () { @@ -25,12 +25,10 @@ class TouchEventManager extends EventManager { super (); instance = this; - touchEvent = new TouchEvent (); + eventInfo = new TouchEventInfo (); #if (cpp || neko) - - lime_touch_event_manager_register (handleEvent, touchEvent); - + lime_touch_event_manager_register (dispatch, eventInfo); #end } @@ -47,6 +45,42 @@ class TouchEventManager extends EventManager { } + private function dispatch ():Void { + + var x = eventInfo.x; + var y = eventInfo.y; + + switch (eventInfo.type) { + + case TOUCH_START: + + for (listener in listeners) { + + listener.onTouchStart (x, y); + + } + + case TOUCH_END: + + for (listener in listeners) { + + listener.onTouchEnd (x, y); + + } + + case TOUCH_MOVE: + + for (listener in listeners) { + + listener.onTouchMove (x, y); + + } + + } + + } + + #if js private function handleDOMEvent (event:js.html.TouchEvent):Void { @@ -54,11 +88,11 @@ class TouchEventManager extends EventManager { //var rect = __canvas.getBoundingClientRect (); - touchEvent.id = event.changedTouches[0].identifier; - touchEvent.x = event.pageX; - touchEvent.y = event.pageY; + //touchEvent.id = event.changedTouches[0].identifier; + eventInfo.x = event.pageX; + eventInfo.y = event.pageY; - touchEvent.type = switch (event.type) { + eventInfo.type = switch (event.type) { case "touchstart": TOUCH_START; case "touchmove": TOUCH_MOVE; @@ -67,7 +101,7 @@ class TouchEventManager extends EventManager { } - handleEvent (touchEvent); + dispatch (); /* event.preventDefault (); @@ -121,49 +155,14 @@ class TouchEventManager extends EventManager { #end - private function handleEvent (event:TouchEvent):Void { - - var event = event.clone (); - - switch (event.type) { - - case TOUCH_START: - - for (listener in listeners) { - - listener.onTouchStart (event); - - } - - case TOUCH_END: - - for (listener in listeners) { - - listener.onTouchEnd (event); - - } - - case TOUCH_MOVE: - - for (listener in listeners) { - - listener.onTouchMove (event); - - } - - } - - } - - #if flash private function handleFlashEvent (event:flash.events.TouchEvent):Void { - touchEvent.id = event.touchPointID; - touchEvent.x = event.stageX; - touchEvent.y = event.stageY; + //touchEvent.id = event.touchPointID; + eventInfo.x = event.stageX; + eventInfo.y = event.stageY; - touchEvent.type = switch (event.type) { + eventInfo.type = switch (event.type) { case flash.events.TouchEvent.TOUCH_BEGIN: TOUCH_START; case flash.events.TouchEvent.TOUCH_MOVE: TOUCH_MOVE; @@ -171,7 +170,7 @@ class TouchEventManager extends EventManager { } - handleEvent (touchEvent); + dispatch (); } #end diff --git a/lime/ui/Window.hx b/lime/ui/Window.hx index de0805e2f..501eea89d 100644 --- a/lime/ui/Window.hx +++ b/lime/ui/Window.hx @@ -5,7 +5,6 @@ import lime.app.Application; import lime.app.Config; import lime.app.UpdateEventManager; import lime.graphics.Renderer; -import lime.graphics.RenderEvent; import lime.graphics.RenderEventManager; import lime.system.System; diff --git a/lime/ui/WindowEvent.hx b/lime/ui/WindowEventInfo.hx similarity index 71% rename from lime/ui/WindowEvent.hx rename to lime/ui/WindowEventInfo.hx index c5146e406..fdadab3be 100644 --- a/lime/ui/WindowEvent.hx +++ b/lime/ui/WindowEventInfo.hx @@ -1,7 +1,7 @@ package lime.ui; -class WindowEvent { +class WindowEventInfo { public var type:WindowEventType; @@ -14,9 +14,9 @@ class WindowEvent { } - public function clone ():WindowEvent { + public function clone ():WindowEventInfo { - return new WindowEvent (type); + return new WindowEventInfo (type); } diff --git a/lime/ui/WindowEventManager.hx b/lime/ui/WindowEventManager.hx index 58009d02d..1d7e6999e 100644 --- a/lime/ui/WindowEventManager.hx +++ b/lime/ui/WindowEventManager.hx @@ -19,7 +19,7 @@ class WindowEventManager extends EventManager { private static var instance:WindowEventManager; - private var windowEvent:WindowEvent; + private var eventInfo:WindowEventInfo; public function new () { @@ -27,12 +27,10 @@ class WindowEventManager extends EventManager { super (); instance = this; - windowEvent = new WindowEvent (); + eventInfo = new WindowEventInfo (); #if (cpp || neko) - - lime_window_event_manager_register (handleEvent, windowEvent); - + lime_window_event_manager_register (dispatch, eventInfo); #end } @@ -49,27 +47,15 @@ class WindowEventManager extends EventManager { } - #if js - private function handleDOMEvent (event:Event):Void { + private function dispatch ():Void { - windowEvent.type = (event.type == "focus" ? WINDOW_ACTIVATE : WINDOW_DEACTIVATE); - handleEvent (windowEvent); - - } - #end - - - private function handleEvent (event:WindowEvent):Void { - - var event = event.clone (); - - switch (event.type) { + switch (eventInfo.type) { case WINDOW_ACTIVATE: for (listener in listeners) { - listener.onWindowActivate (event); + listener.onWindowActivate (); } @@ -77,7 +63,7 @@ class WindowEventManager extends EventManager { for (listener in listeners) { - listener.onWindowDeactivate (event); + listener.onWindowDeactivate (); } @@ -86,11 +72,21 @@ class WindowEventManager extends EventManager { } + #if js + private function handleDOMEvent (event:Event):Void { + + eventInfo.type = (event.type == "focus" ? WINDOW_ACTIVATE : WINDOW_DEACTIVATE); + dispatch (); + + } + #end + + #if flash private function handleFlashEvent (event:Event):Void { - windowEvent.type = (event.type == Event.ACTIVATE ? WINDOW_ACTIVATE : WINDOW_DEACTIVATE); - handleEvent (windowEvent); + eventInfo.type = (event.type == Event.ACTIVATE ? WINDOW_ACTIVATE : WINDOW_DEACTIVATE); + dispatch (); } #end diff --git a/project/include/ui/KeyEvent.h b/project/include/ui/KeyEvent.h index 760d4cdc8..6004c5f16 100644 --- a/project/include/ui/KeyEvent.h +++ b/project/include/ui/KeyEvent.h @@ -27,7 +27,8 @@ namespace lime { static void Dispatch (KeyEvent* event); - int code; + int keyCode; + int modifier; KeyEventType type; }; diff --git a/project/src/app/UpdateEvent.cpp b/project/src/app/UpdateEvent.cpp index d112939c6..e31f6af3b 100644 --- a/project/src/app/UpdateEvent.cpp +++ b/project/src/app/UpdateEvent.cpp @@ -38,7 +38,7 @@ namespace lime { alloc_field (object, id_deltaTime, alloc_int (event->deltaTime)); //alloc_field (object, id_type, alloc_int (event->type)); - val_call1 (UpdateEvent::callback->get (), object); + val_call0 (UpdateEvent::callback->get ()); } diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index d7dbf615d..419960a84 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -203,7 +203,7 @@ namespace lime { } - keyEvent.code = event->key.keysym.sym; + keyEvent.keyCode = event->key.keysym.sym; KeyEvent::Dispatch (&keyEvent); diff --git a/project/src/graphics/RenderEvent.cpp b/project/src/graphics/RenderEvent.cpp index 7c69b1c0f..37d42a59a 100644 --- a/project/src/graphics/RenderEvent.cpp +++ b/project/src/graphics/RenderEvent.cpp @@ -33,7 +33,7 @@ namespace lime { //alloc_field (object, id_type, alloc_int (event->type)); - val_call1 (RenderEvent::callback->get (), object); + val_call0 (RenderEvent::callback->get ()); } diff --git a/project/src/ui/KeyEvent.cpp b/project/src/ui/KeyEvent.cpp index 9d99c33e7..1f7411f4a 100644 --- a/project/src/ui/KeyEvent.cpp +++ b/project/src/ui/KeyEvent.cpp @@ -8,14 +8,16 @@ namespace lime { AutoGCRoot* KeyEvent::callback = 0; AutoGCRoot* KeyEvent::eventObject = 0; - static int id_code; + static int id_keyCode; + static int id_modifier; static int id_type; static bool init = false; KeyEvent::KeyEvent () { - code = 0; + keyCode = 0; + modifier = 0; type = KEY_DOWN; } @@ -27,7 +29,8 @@ namespace lime { if (!init) { - id_code = val_id ("code"); + id_keyCode = val_id ("keyCode"); + id_modifier = val_id ("modifier"); id_type = val_id ("type"); init = true; @@ -35,10 +38,11 @@ namespace lime { value object = (KeyEvent::eventObject ? KeyEvent::eventObject->get () : alloc_empty_object ()); - alloc_field (object, id_code, alloc_int (event->code)); + alloc_field (object, id_keyCode, alloc_int (event->keyCode)); + alloc_field (object, id_modifier, alloc_int (event->modifier)); alloc_field (object, id_type, alloc_int (event->type)); - val_call1 (KeyEvent::callback->get (), object); + val_call0 (KeyEvent::callback->get ()); } diff --git a/project/src/ui/MouseEvent.cpp b/project/src/ui/MouseEvent.cpp index cc1d7d061..222a632c8 100644 --- a/project/src/ui/MouseEvent.cpp +++ b/project/src/ui/MouseEvent.cpp @@ -19,8 +19,8 @@ namespace lime { id = 0; type = MOUSE_DOWN; - x = 0; - y = 0; + x = 0.0; + y = 0.0; } @@ -46,7 +46,7 @@ namespace lime { alloc_field (object, id_x, alloc_float (event->x)); alloc_field (object, id_y, alloc_float (event->y)); - val_call1 (MouseEvent::callback->get (), object); + val_call0 (MouseEvent::callback->get ()); } diff --git a/project/src/ui/WindowEvent.cpp b/project/src/ui/WindowEvent.cpp index 9d18f1ecc..7e4536c91 100644 --- a/project/src/ui/WindowEvent.cpp +++ b/project/src/ui/WindowEvent.cpp @@ -34,7 +34,7 @@ namespace lime { alloc_field (object, id_type, alloc_int (event->type)); - val_call1 (WindowEvent::callback->get (), object); + val_call0 (WindowEvent::callback->get ()); }