[gui] add LayoutSkin
This commit is contained in:
@@ -39,6 +39,7 @@ class GroupView extends SpriteView implements IGroupView {
|
||||
}
|
||||
|
||||
override public function update():Void {
|
||||
super.update();
|
||||
layout.place(this, views);
|
||||
for (view in views) {
|
||||
view.update();
|
||||
@@ -46,7 +47,6 @@ class GroupView extends SpriteView implements IGroupView {
|
||||
content.setChildIndex(view.content, view.index);
|
||||
}
|
||||
}
|
||||
super.update();
|
||||
}
|
||||
|
||||
public function set_views(value:Array<IView<Dynamic>>):Array<IView<Dynamic>> {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package haxework.gui;
|
||||
|
||||
import haxework.gui.layout.ILayout;
|
||||
import haxework.gui.layout.Layout;
|
||||
import flash.text.TextField;
|
||||
import flash.text.TextFieldAutoSize;
|
||||
import flash.text.TextFormat;
|
||||
@@ -9,18 +11,11 @@ import haxework.gui.core.VAlign;
|
||||
import haxework.text.BitmapTextField;
|
||||
import haxework.text.TextUtil;
|
||||
|
||||
class TextLayout {
|
||||
public var hAlign(default, default):HAlign = NONE;
|
||||
public var vAlign(default, default):VAlign = NONE;
|
||||
|
||||
public function new() {}
|
||||
}
|
||||
|
||||
class TextView extends SpriteView implements ITextView {
|
||||
|
||||
public var textField(default, null):TextField;
|
||||
public var text(get, set):String;
|
||||
public var layout:TextLayout;
|
||||
public var layout:ILayout;
|
||||
|
||||
private var _text:String;
|
||||
public var align(default, set):TextFormatAlign;
|
||||
@@ -39,7 +34,7 @@ class TextView extends SpriteView implements ITextView {
|
||||
|
||||
public function new() {
|
||||
super();
|
||||
layout = new TextLayout();
|
||||
layout = new Layout();
|
||||
textField = buildTextField();
|
||||
textField.width = 1;
|
||||
textField.height = 1;
|
||||
|
||||
@@ -60,7 +60,14 @@ class View<C:DisplayObject> implements IView<C> {
|
||||
}
|
||||
}
|
||||
|
||||
public function update():Void {}
|
||||
public function update():Void {
|
||||
/*for (skin in this.skin) {
|
||||
if (Std.is(skin, ISizeSkin)) {
|
||||
var sizeSkin:ISizeSkin = cast skin;
|
||||
setContentSize(sizeSkin.width, sizeSkin.height, "skin");
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public function redraw():Void {
|
||||
for (skin in this.skin) {
|
||||
|
||||
@@ -35,11 +35,14 @@ class ViewUpdater {
|
||||
}
|
||||
}
|
||||
|
||||
public function isUpdate(view:IView<Dynamic>):Bool {
|
||||
return updateViews.indexOf(view) > -1;
|
||||
}
|
||||
|
||||
public function update():Void {
|
||||
var repeat = 0;
|
||||
while (updateViews.length > 0) {
|
||||
var v = null;
|
||||
v = updateViews.shift();
|
||||
var v = updateViews.shift();
|
||||
var count = updateViews.length;
|
||||
v.update();
|
||||
if (updateViews.length > count) {
|
||||
@@ -54,8 +57,7 @@ class ViewUpdater {
|
||||
|
||||
public function redraw():Void {
|
||||
while (redrawViews.length > 0) {
|
||||
var v = null;
|
||||
v = redrawViews.shift();
|
||||
var v = redrawViews.shift();
|
||||
v.redraw();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,6 +70,7 @@ class FrameSwitcher extends GroupView {
|
||||
views = [];
|
||||
if (value.length > 0) {
|
||||
for (view in value) {
|
||||
view.geometry.size.stretch = true;
|
||||
frames.set(view.id, view);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,12 @@
|
||||
package haxework.gui.layout;
|
||||
|
||||
import haxework.gui.core.Geometry.Position;
|
||||
import haxework.gui.core.Geometry.SizeValue;
|
||||
import haxework.gui.core.Geometry;
|
||||
import haxework.gui.core.VAlign;
|
||||
import haxework.gui.core.HAlign;
|
||||
|
||||
class DefaultLayout implements ILayout {
|
||||
class DefaultLayout extends Layout {
|
||||
|
||||
public var hAlign(default, default):HAlign;
|
||||
public var vAlign(default, default):VAlign;
|
||||
public var margin(default, default):Float;
|
||||
|
||||
public function new() {
|
||||
hAlign = NONE;
|
||||
vAlign = NONE;
|
||||
margin = 0;
|
||||
}
|
||||
|
||||
public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void {
|
||||
override public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void {
|
||||
for (view in views) {
|
||||
setViewWidth(group, view);
|
||||
setViewHeight(group, view);
|
||||
|
||||
@@ -9,4 +9,8 @@ interface ILayout {
|
||||
public var margin(default, default):Float;
|
||||
|
||||
public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void;
|
||||
|
||||
public function setAlign(hAlign:HAlign, vAlign:VAlign):ILayout;
|
||||
|
||||
public function setMargin(margin:Float):ILayout;
|
||||
}
|
||||
|
||||
29
src/main/haxework/gui/layout/Layout.hx
Normal file
29
src/main/haxework/gui/layout/Layout.hx
Normal file
@@ -0,0 +1,29 @@
|
||||
package haxework.gui.layout;
|
||||
import haxework.gui.core.VAlign;
|
||||
import haxework.gui.core.HAlign;
|
||||
|
||||
class Layout implements ILayout {
|
||||
|
||||
public var hAlign(default, default):HAlign;
|
||||
public var vAlign(default, default):VAlign;
|
||||
public var margin(default, default):Float;
|
||||
|
||||
public function new() {
|
||||
hAlign = NONE;
|
||||
vAlign = NONE;
|
||||
margin = 0;
|
||||
}
|
||||
|
||||
public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void {}
|
||||
|
||||
public function setAlign(hAlign:HAlign, vAlign:VAlign):ILayout {
|
||||
this.hAlign = hAlign;
|
||||
this.vAlign = vAlign;
|
||||
return this;
|
||||
}
|
||||
|
||||
public function setMargin(margin:Float):ILayout {
|
||||
this.margin = margin;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
33
src/main/haxework/gui/skin/LayoutSkin.hx
Normal file
33
src/main/haxework/gui/skin/LayoutSkin.hx
Normal file
@@ -0,0 +1,33 @@
|
||||
package haxework.gui.skin;
|
||||
|
||||
import haxework.gui.core.HAlign;
|
||||
import haxework.gui.core.VAlign;
|
||||
import haxework.gui.layout.ILayout;
|
||||
|
||||
class LayoutSkin implements ISkin<IGroupView> {
|
||||
|
||||
private var layout(default, default):ILayout;
|
||||
|
||||
public function new(layout:ILayout) {
|
||||
this.layout = layout;
|
||||
}
|
||||
|
||||
public function draw(view:IGroupView):Void {
|
||||
var updated = false;
|
||||
if (layout.margin > 0 && view.layout.margin != layout.margin) {
|
||||
view.layout.margin = layout.margin;
|
||||
updated = true;
|
||||
}
|
||||
if (layout.hAlign != NONE && layout.hAlign != view.geometry.hAlign) {
|
||||
view.layout.hAlign = layout.hAlign;
|
||||
updated = true;
|
||||
}
|
||||
if (layout.vAlign != NONE && layout.vAlign != view.geometry.vAlign) {
|
||||
view.layout.vAlign = layout.vAlign;
|
||||
updated = true;
|
||||
}
|
||||
if (updated) {
|
||||
view.toUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package haxework.gui.skin;
|
||||
|
||||
import haxework.gui.layout.ILayout;
|
||||
import haxework.gui.core.Geometry;
|
||||
import flash.display.BitmapData;
|
||||
|
||||
@@ -48,4 +49,8 @@ class Skin {
|
||||
public static function geometry(geometry:Geometry):GeometrySkin {
|
||||
return new GeometrySkin(geometry);
|
||||
}
|
||||
|
||||
public static function layout(layout:ILayout):LayoutSkin {
|
||||
return new LayoutSkin(layout);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user