Created
July 15, 2013 13:21
-
-
Save lptr/5999894 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package prezi.engine.render; | |
import prezi.engine.operations.ObjectOperation; | |
import prezi.engine.operations.AddObject; | |
import prezi.engine.operations.Operation; | |
import prezi.engine.operations.PropertyChange; | |
import prezi.engine.operations.RemoveObject; | |
import prezi.engine.operations.execution.OperationExecutor; | |
import createjs.easeljs.DisplayObject; | |
import createjs.easeljs.Shape; | |
import createjs.easeljs.Stage; | |
import haxe.Timer; | |
import js.Lib; | |
import prezi.engine.doc.SimpleDocument; | |
@:expose | |
class RenderTest implements OperationExecutor | |
{ | |
static inline var FRAME_TIME = Std.int(1000 / 30); | |
var handlers:Hash<Operation->Void>; | |
var stage:Stage; | |
var document:SimpleDocument; | |
var renderPeers:Hash<Shape>; | |
public function new(canvas:js.HTMLCanvasElement) | |
{ | |
stage = new Stage(canvas); | |
Lib.document.onkeydown = handleKeyDown; | |
var handlers = new Hash<Operation->Void>(); | |
handlers.set(Type.getClassName(AddObject), handleAddObject); | |
handlers.set(Type.getClassName(RemoveObject), handleRemoveObject); | |
handlers.set(Type.getClassName(PropertyChange), handlePropertyChange); | |
document = new SimpleDocument(); | |
document.chain(this); | |
renderPeers = new Hash<Shape>(); | |
Timer.delay(render, FRAME_TIME); | |
} | |
public function execute(ops:Array<Operation>):Void | |
{ | |
for (op in ops) | |
{ | |
var handler = handlers.get(Type.getClassName(Type.getClass(op))); | |
if (handler != null) | |
{ | |
handler(op); | |
} | |
} | |
render(); | |
} | |
function handleAddObject(op:Operation) | |
{ | |
var objectId = (cast op).getObjectId(); | |
var renderPeer = new Shape(); | |
stage.addChild(renderPeer); | |
renderPeers.set(objectId, renderPeer); | |
updatePeer(objectId, renderPeer); | |
} | |
function handleRemoveObject(op:Operation) | |
{ | |
var objectId = (cast op).getObjectId(); | |
var renderPeer = renderPeers.get(objectId); | |
if (renderPeer != null) | |
{ | |
renderPeers.remove(objectId); | |
stage.removeChild(renderPeer); | |
} | |
} | |
function handlePropertyChange(op:Operation) | |
{ | |
var objectId = (cast op).getObjectId(); | |
var renderPeer = renderPeers.get(objectId); | |
if (renderPeer != null) | |
{ | |
updatePeer(objectId, renderPeer); | |
} | |
} | |
private function updatePeer(objectId:String, renderPeer:Shape) | |
{ | |
renderPeer.graphics.clear(); | |
} | |
private function handleKeyDown(event:Dynamic) | |
{ | |
var shape = new Shape(); | |
} | |
private function render() | |
{ | |
stage.update(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment