diff --git a/src/main/haxework/gui/GroupView.hx b/src/main/haxework/gui/GroupView.hx index a803227..e895668 100755 --- a/src/main/haxework/gui/GroupView.hx +++ b/src/main/haxework/gui/GroupView.hx @@ -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>):Array> { diff --git a/src/main/haxework/gui/TextView.hx b/src/main/haxework/gui/TextView.hx index 6a130af..e780b24 100755 --- a/src/main/haxework/gui/TextView.hx +++ b/src/main/haxework/gui/TextView.hx @@ -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; diff --git a/src/main/haxework/gui/View.hx b/src/main/haxework/gui/View.hx index a37d57e..ae87c70 100755 --- a/src/main/haxework/gui/View.hx +++ b/src/main/haxework/gui/View.hx @@ -60,7 +60,14 @@ class View implements IView { } } - 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) { diff --git a/src/main/haxework/gui/ViewUpdater.hx b/src/main/haxework/gui/ViewUpdater.hx index fa12fce..79db1d8 100644 --- a/src/main/haxework/gui/ViewUpdater.hx +++ b/src/main/haxework/gui/ViewUpdater.hx @@ -35,11 +35,14 @@ class ViewUpdater { } } + public function isUpdate(view:IView):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(); } } diff --git a/src/main/haxework/gui/frame/FrameSwitcher.hx b/src/main/haxework/gui/frame/FrameSwitcher.hx index 27c0548..3e06946 100755 --- a/src/main/haxework/gui/frame/FrameSwitcher.hx +++ b/src/main/haxework/gui/frame/FrameSwitcher.hx @@ -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); } } diff --git a/src/main/haxework/gui/layout/DefaultLayout.hx b/src/main/haxework/gui/layout/DefaultLayout.hx index 58392cc..d2f9fb2 100755 --- a/src/main/haxework/gui/layout/DefaultLayout.hx +++ b/src/main/haxework/gui/layout/DefaultLayout.hx @@ -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>):Void { + override public function place(group:IGroupView, views:Array>):Void { for (view in views) { setViewWidth(group, view); setViewHeight(group, view); diff --git a/src/main/haxework/gui/layout/ILayout.hx b/src/main/haxework/gui/layout/ILayout.hx index 7b30667..ce4ee00 100755 --- a/src/main/haxework/gui/layout/ILayout.hx +++ b/src/main/haxework/gui/layout/ILayout.hx @@ -9,4 +9,8 @@ interface ILayout { public var margin(default, default):Float; public function place(group:IGroupView, views:Array>):Void; + + public function setAlign(hAlign:HAlign, vAlign:VAlign):ILayout; + + public function setMargin(margin:Float):ILayout; } diff --git a/src/main/haxework/gui/layout/Layout.hx b/src/main/haxework/gui/layout/Layout.hx new file mode 100644 index 0000000..8f91194 --- /dev/null +++ b/src/main/haxework/gui/layout/Layout.hx @@ -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>):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; + } +} diff --git a/src/main/haxework/gui/skin/LayoutSkin.hx b/src/main/haxework/gui/skin/LayoutSkin.hx new file mode 100644 index 0000000..a9ac63a --- /dev/null +++ b/src/main/haxework/gui/skin/LayoutSkin.hx @@ -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 { + + 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(); + } + } +} diff --git a/src/main/haxework/gui/skin/Skin.hx b/src/main/haxework/gui/skin/Skin.hx index 5d80a5e..96a17b4 100644 --- a/src/main/haxework/gui/skin/Skin.hx +++ b/src/main/haxework/gui/skin/Skin.hx @@ -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); + } }