[gui] add LayoutSkin

This commit is contained in:
2019-03-20 17:35:50 +03:00
parent 7a1a98daf3
commit 58674f3572
10 changed files with 94 additions and 29 deletions

View File

@@ -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>> {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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;
}

View 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;
}
}

View 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();
}
}
}

View File

@@ -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);
}
}