[gui] add LayoutSkin
This commit is contained in:
@@ -39,6 +39,7 @@ class GroupView extends SpriteView implements IGroupView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override public function update():Void {
|
override public function update():Void {
|
||||||
|
super.update();
|
||||||
layout.place(this, views);
|
layout.place(this, views);
|
||||||
for (view in views) {
|
for (view in views) {
|
||||||
view.update();
|
view.update();
|
||||||
@@ -46,7 +47,6 @@ class GroupView extends SpriteView implements IGroupView {
|
|||||||
content.setChildIndex(view.content, view.index);
|
content.setChildIndex(view.content, view.index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function set_views(value:Array<IView<Dynamic>>):Array<IView<Dynamic>> {
|
public function set_views(value:Array<IView<Dynamic>>):Array<IView<Dynamic>> {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package haxework.gui;
|
package haxework.gui;
|
||||||
|
|
||||||
|
import haxework.gui.layout.ILayout;
|
||||||
|
import haxework.gui.layout.Layout;
|
||||||
import flash.text.TextField;
|
import flash.text.TextField;
|
||||||
import flash.text.TextFieldAutoSize;
|
import flash.text.TextFieldAutoSize;
|
||||||
import flash.text.TextFormat;
|
import flash.text.TextFormat;
|
||||||
@@ -9,18 +11,11 @@ import haxework.gui.core.VAlign;
|
|||||||
import haxework.text.BitmapTextField;
|
import haxework.text.BitmapTextField;
|
||||||
import haxework.text.TextUtil;
|
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 {
|
class TextView extends SpriteView implements ITextView {
|
||||||
|
|
||||||
public var textField(default, null):TextField;
|
public var textField(default, null):TextField;
|
||||||
public var text(get, set):String;
|
public var text(get, set):String;
|
||||||
public var layout:TextLayout;
|
public var layout:ILayout;
|
||||||
|
|
||||||
private var _text:String;
|
private var _text:String;
|
||||||
public var align(default, set):TextFormatAlign;
|
public var align(default, set):TextFormatAlign;
|
||||||
@@ -39,7 +34,7 @@ class TextView extends SpriteView implements ITextView {
|
|||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
super();
|
super();
|
||||||
layout = new TextLayout();
|
layout = new Layout();
|
||||||
textField = buildTextField();
|
textField = buildTextField();
|
||||||
textField.width = 1;
|
textField.width = 1;
|
||||||
textField.height = 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 {
|
public function redraw():Void {
|
||||||
for (skin in this.skin) {
|
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 {
|
public function update():Void {
|
||||||
var repeat = 0;
|
var repeat = 0;
|
||||||
while (updateViews.length > 0) {
|
while (updateViews.length > 0) {
|
||||||
var v = null;
|
var v = updateViews.shift();
|
||||||
v = updateViews.shift();
|
|
||||||
var count = updateViews.length;
|
var count = updateViews.length;
|
||||||
v.update();
|
v.update();
|
||||||
if (updateViews.length > count) {
|
if (updateViews.length > count) {
|
||||||
@@ -54,8 +57,7 @@ class ViewUpdater {
|
|||||||
|
|
||||||
public function redraw():Void {
|
public function redraw():Void {
|
||||||
while (redrawViews.length > 0) {
|
while (redrawViews.length > 0) {
|
||||||
var v = null;
|
var v = redrawViews.shift();
|
||||||
v = redrawViews.shift();
|
|
||||||
v.redraw();
|
v.redraw();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ class FrameSwitcher extends GroupView {
|
|||||||
views = [];
|
views = [];
|
||||||
if (value.length > 0) {
|
if (value.length > 0) {
|
||||||
for (view in value) {
|
for (view in value) {
|
||||||
|
view.geometry.size.stretch = true;
|
||||||
frames.set(view.id, view);
|
frames.set(view.id, view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,12 @@
|
|||||||
package haxework.gui.layout;
|
package haxework.gui.layout;
|
||||||
|
|
||||||
import haxework.gui.core.Geometry.Position;
|
import haxework.gui.core.Geometry;
|
||||||
import haxework.gui.core.Geometry.SizeValue;
|
|
||||||
import haxework.gui.core.VAlign;
|
import haxework.gui.core.VAlign;
|
||||||
import haxework.gui.core.HAlign;
|
import haxework.gui.core.HAlign;
|
||||||
|
|
||||||
class DefaultLayout implements ILayout {
|
class DefaultLayout extends Layout {
|
||||||
|
|
||||||
public var hAlign(default, default):HAlign;
|
override public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void {
|
||||||
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 {
|
|
||||||
for (view in views) {
|
for (view in views) {
|
||||||
setViewWidth(group, view);
|
setViewWidth(group, view);
|
||||||
setViewHeight(group, view);
|
setViewHeight(group, view);
|
||||||
|
|||||||
@@ -9,4 +9,8 @@ interface ILayout {
|
|||||||
public var margin(default, default):Float;
|
public var margin(default, default):Float;
|
||||||
|
|
||||||
public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void;
|
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;
|
package haxework.gui.skin;
|
||||||
|
|
||||||
|
import haxework.gui.layout.ILayout;
|
||||||
import haxework.gui.core.Geometry;
|
import haxework.gui.core.Geometry;
|
||||||
import flash.display.BitmapData;
|
import flash.display.BitmapData;
|
||||||
|
|
||||||
@@ -48,4 +49,8 @@ class Skin {
|
|||||||
public static function geometry(geometry:Geometry):GeometrySkin {
|
public static function geometry(geometry:Geometry):GeometrySkin {
|
||||||
return new GeometrySkin(geometry);
|
return new GeometrySkin(geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function layout(layout:ILayout):LayoutSkin {
|
||||||
|
return new LayoutSkin(layout);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user