added gui package

This commit is contained in:
2013-08-12 12:55:08 +02:00
parent b08e3b7ef2
commit 03c909dbee
6 changed files with 169 additions and 5 deletions

19
com/abit/haxework/gui/IView.hx Executable file
View File

@@ -0,0 +1,19 @@
package com.abit.haxework.gui;
import com.abit.haxework.gui.skin.ISkin;
interface IView<C> {
public var id(default, null):String;
public var x(default, set):Float;
public var y(default, set):Float;
public var width(default, set):Float;
public var height(default, set):Float;
public var pWidth(default, set):Float;
public var pHeight(default, set):Float;
public var content(default, null):C;
public var skin(default, set):ISkin<C, IView<C>>;
public function update():Void;
}

112
com/abit/haxework/gui/View.hx Executable file
View File

@@ -0,0 +1,112 @@
package com.abit.haxework.gui;
import flash.events.Event;
import flash.display.Stage;
import com.abit.haxework.gui.skin.FakeSkin;
import com.abit.haxework.gui.skin.ISkin;
import flash.display.Sprite;
class View implements IView<Sprite> {
private static var counter:Int = 0;
public static var updater(default, null):Updater = new Updater();
public var id(default, null):String;
public var x(default, set):Float;
public var y(default, set):Float;
public var width(default, set):Float;
public var height(default, set):Float;
public var pWidth(default, set):Float;
public var pHeight(default, set):Float;
public var content(default, null):Sprite;
public var skin(default, set):ISkin<Sprite, IView<Sprite>>;
public function new() {
id = Type.getClassName(Type.getClass(this)) + counter++;
content = new Sprite();
skin = new FakeSkin();
x = 0;
y = 0;
}
private function invalidate():Void {
updater.invalidate(this);
}
public function update():Void {
content.x = x;
content.y = y;
skin.draw(this);
}
private function set_x(value:Float):Float {
x = value;
invalidate();
return x;
}
private function set_y(value:Float):Float {
y = value;
invalidate();
return y;
}
private function set_width(value:Float):Float {
width = value;
invalidate();
return width;
}
private function set_height(value:Float):Float {
height = value;
invalidate();
return height;
}
private function set_pWidth(value:Float):Float {
pWidth = value;
invalidate();
return pWidth;
}
private function set_pHeight(value:Float):Float {
pHeight = value;
invalidate();
return pHeight;
}
private function set_skin(value:ISkin<Sprite, IView<Sprite>>):ISkin<Sprite, IView<Sprite>> {
skin = value;
invalidate();
return skin;
}
}
class Updater {
public var stage(null, set):Stage;
private var invalidated:Array<IView<Sprite>>;
public function new() {
invalidated = [];
}
private function set_stage(value:Stage):Stage {
value.addEventListener(Event.ENTER_FRAME, update);
return value;
}
public function invalidate(view:IView<Sprite>):Void {
invalidated.push(view);
}
public function update(?_):Void {
while (invalidated.length > 0) {
invalidated.shift().update();
}
}
}

View File

@@ -0,0 +1,22 @@
package com.abit.haxework.gui.skin;
import flash.display.Graphics;
import flash.display.Sprite;
class ColorSkin implements ISkin<Sprite, IView<Sprite>> {
public var color(default, default):Int;
public function new(?color:Int = 0xffffff) {
this.color = color;
}
public function draw(view:IView<Sprite>):Void {
var graphics:Graphics = view.content.graphics;
graphics.clear();
graphics.beginFill(color);
graphics.drawRect(0, 0, view.width, view.height);
graphics.endFill();
}
}

View File

@@ -0,0 +1,11 @@
package com.abit.haxework.gui.skin;
import flash.display.Sprite;
class FakeSkin implements ISkin<Sprite, IView<Sprite>> {
public function new() {}
public function draw(view:IView<Sprite>):Void {}
}

View File

@@ -0,0 +1,5 @@
package com.abit.haxework.gui.skin;
interface ISkin<C, V:IView<C>> {
public function draw(view:V):Void;
}

View File

@@ -1,13 +1,8 @@
package com.abit.haxework.net; package com.abit.haxework.net;
import flash.net.URLLoaderDataFormat;
import flash.events.SecurityErrorEvent;
import com.abit.haxework.net.callback.Callback; import com.abit.haxework.net.callback.Callback;
import com.abit.haxework.net.callback.ICallback; import com.abit.haxework.net.callback.ICallback;
import flash.events.IOErrorEvent;
import flash.net.URLRequest;
import flash.events.Event; import flash.events.Event;
import flash.net.URLLoader;
import com.abit.haxework.net.ILoader.Method; import com.abit.haxework.net.ILoader.Method;
class BaseLoader<T> implements ILoader<T> { class BaseLoader<T> implements ILoader<T> {