diff --git a/lime/app/Application.hx b/lime/app/Application.hx index 3dbc8062a..d1e8e7f0b 100644 --- a/lime/app/Application.hx +++ b/lime/app/Application.hx @@ -6,18 +6,20 @@ import lime.system.*; import lime.ui.*; -class Application implements IKeyEventListener implements IMouseEventListener implements IRenderEventListener implements ITouchEventListener implements IUpdateEventListener implements IWindowEventListener { +class Application implements IKeyEventListener implements IMouseEventListener implements ITouchEventListener implements IWindowEventListener { public var handle:Dynamic; private var config:Config; + private var delegate:EventDelegate; private var lastUpdate:Int; private var windows:Array; public function new () { + delegate = new EventDelegate (this); lastUpdate = 0; windows = new Array (); @@ -47,11 +49,12 @@ class Application implements IKeyEventListener implements IMouseEventListener im new UpdateEventManager (); new WindowEventManager (); + RenderEventManager.addEventListener (delegate); + UpdateEventManager.addEventListener (delegate); + KeyEventManager.addEventListener (this); MouseEventManager.addEventListener (this); - RenderEventManager.addEventListener (this); TouchEventManager.addEventListener (this); - UpdateEventManager.addEventListener (this); WindowEventManager.addEventListener (this); var window = new Window (this); @@ -85,13 +88,25 @@ class Application implements IKeyEventListener implements IMouseEventListener im public function onMouseDown (event:MouseEvent):Void {} public function onMouseMove (event:MouseEvent):Void {} public function onMouseUp (event:MouseEvent):Void {} - public function onRender (event:RenderEvent):Void {} public function onTouchEnd (event:TouchEvent):Void {} public function onTouchMove (event:TouchEvent):Void {} public function onTouchStart (event:TouchEvent):Void {} - public function onUpdate (event:UpdateEvent):Void {} public function onWindowActivate (event:WindowEvent):Void {} - public function onWindowDeactivate (event:WindowEvent):Void {} + public function onWindowDeactivate (event:WindowEvent):Void { } + + + public function render ():Void { + + + + } + + + public function update ():Void { + + + + } #if (cpp || neko) @@ -101,4 +116,45 @@ class Application implements IKeyEventListener implements IMouseEventListener im #end +} + + +@:access(lime.app.Application) +private class EventDelegate implements IRenderEventListener implements IUpdateEventListener { + + + private var application:Application; + + + public function new (application:Application) { + + this.application = application; + + } + + + public function onRender (event:RenderEvent):Void { + + application.render (); + + for (window in application.windows) { + + if (window.currentRenderer != null) { + + window.currentRenderer.flip (); + + } + + } + + } + + + public function onUpdate (event:UpdateEvent):Void { + + application.update (); + + } + + } \ No newline at end of file diff --git a/lime/graphics/Renderer.hx b/lime/graphics/Renderer.hx index e31ef4767..73af21957 100644 --- a/lime/graphics/Renderer.hx +++ b/lime/graphics/Renderer.hx @@ -5,23 +5,32 @@ import lime.system.System; import lime.ui.Window; -class Renderer implements IRenderEventListener { +class Renderer { public var handle:Dynamic; + private var window:Window; + public function new (window:Window) { + this.window = window; + this.window.currentRenderer = this; + + } + + + public function create ():Void { + #if (cpp || neko) handle = lime_renderer_create (window.handle); - RenderEventManager.addEventListener (this, -99999999); #end } - public function onRender (event:RenderEvent):Void { + public function flip ():Void { #if (cpp || neko) lime_renderer_flip (handle); diff --git a/lime/ui/Window.hx b/lime/ui/Window.hx index 92bb6c9a0..dbbdbc369 100644 --- a/lime/ui/Window.hx +++ b/lime/ui/Window.hx @@ -4,6 +4,7 @@ package lime.ui; 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; @@ -22,6 +23,7 @@ class Window { public static var instance:Window; + public var currentRenderer:Renderer; #if js public var element:HtmlElement; #end @@ -189,6 +191,12 @@ class Window { UpdateEventManager.registerWindow (this); WindowEventManager.registerWindow (this); + if (currentRenderer != null) { + + currentRenderer.create (); + + } + } diff --git a/project/include/ui/Window.h b/project/include/ui/Window.h index 618502d58..a3b9544fa 100644 --- a/project/include/ui/Window.h +++ b/project/include/ui/Window.h @@ -2,12 +2,12 @@ #define LIME_UI_WINDOW_H -#include - #ifdef CreateWindow #undef CreateWindow #endif +#include + namespace lime {