diff --git a/src/main/haxework/view/IView.hx b/src/main/haxework/view/IView.hx index 59d991f..83fa6b5 100755 --- a/src/main/haxework/view/IView.hx +++ b/src/main/haxework/view/IView.hx @@ -3,7 +3,7 @@ package haxework.view; import flash.display.DisplayObject; import flash.geom.Rectangle; import haxework.view.geometry.Geometry; -import haxework.view.geometry.Size; +import haxework.view.geometry.SizeSet; import haxework.view.group.IGroupView; import haxework.view.skin.ISkin; import haxework.view.theme.StyleId; @@ -20,7 +20,7 @@ interface IView { public var width(default, null):Float; public var height(default, null):Float; - public var size(default, null):Size; + public var size(default, null):SizeSet; public var style(default, set):StyleId; diff --git a/src/main/haxework/view/View.hx b/src/main/haxework/view/View.hx index 66fd889..6d376dc 100755 --- a/src/main/haxework/view/View.hx +++ b/src/main/haxework/view/View.hx @@ -28,7 +28,7 @@ import haxework.view.theme.ITheme; public var width(default, null):Float; public var height(default, null):Float; - public var size(default, null):Size; + public var size(default, null):SizeSet; public var content(default, null):C; @@ -40,12 +40,9 @@ import haxework.view.theme.ITheme; public var rect(get, null):Rectangle; - private var sizeSet:SizeSet; - public function new(content:C) { id = Type.getClassName(Type.getClass(this)) + counter++; - sizeSet = new SizeSet(); - size = 0; + size = new SizeSet(); this.content = content; x = 0; y = 0; @@ -90,13 +87,10 @@ import haxework.view.theme.ITheme; } public function setSize(width:Float, height:Float, type:String = "default"):Void { - if (sizeSet.update([width, height], type)) { - var s = sizeSet.toSize(); + if (size.update([width, height], type)) { + var s = size.toSize(); this.width = s.width + geometry.padding.horizontal; this.height = s.height + geometry.padding.vertical; - size = sizeSet.toSize(false); - size.width += geometry.padding.horizontal; - size.height += geometry.padding.vertical; toUpdateParent(); toRedraw(); } diff --git a/src/main/haxework/view/geometry/SizeSet.hx b/src/main/haxework/view/geometry/SizeSet.hx index 91424d9..9229aa1 100644 --- a/src/main/haxework/view/geometry/SizeSet.hx +++ b/src/main/haxework/view/geometry/SizeSet.hx @@ -9,7 +9,7 @@ class SizeSet extends StringMap { } public function update(value:Size, type:String = "default"):Bool { - var existValue = get(type); + var existValue:Size = get(type); if (existValue == null || value.width != existValue.width || value.height != existValue.height) { set(type, value); return true; @@ -17,10 +17,10 @@ class SizeSet extends StringMap { return false; } - public function toSize(percent:Bool = true):Size { + public function toSize(?exclude:String):Size { var result:Size = 0; for (type in keys()) { - if (percent || type.indexOf("percent") == -1) { + if (exclude == null || type.indexOf(exclude) == -1) { var value = get(type); result.width = Math.max(result.width, value.width); result.height = Math.max(result.height, value.height); diff --git a/src/main/haxework/view/layout/DefaultLayout.hx b/src/main/haxework/view/layout/DefaultLayout.hx index 117365c..d82fd70 100755 --- a/src/main/haxework/view/layout/DefaultLayout.hx +++ b/src/main/haxework/view/layout/DefaultLayout.hx @@ -15,8 +15,9 @@ class DefaultLayout extends Layout { setViewHeight(group, view); placeViewHorizontal(group, view); placeViewVertical(group, view); - width = Math.max(width, view.size.width + view.geometry.margin.horizontal); - height = Math.max(height, view.size.height + view.geometry.margin.horizontal); + var size = view.size.toSize("percent"); + width = Math.max(width, size.width + view.geometry.margin.horizontal); + height = Math.max(height, size.height + view.geometry.margin.horizontal); } if (!overflow) group.setSize(width, height, "group"); } diff --git a/src/main/haxework/view/layout/HorizontalLayout.hx b/src/main/haxework/view/layout/HorizontalLayout.hx index bf645f6..fa666f0 100755 --- a/src/main/haxework/view/layout/HorizontalLayout.hx +++ b/src/main/haxework/view/layout/HorizontalLayout.hx @@ -22,7 +22,7 @@ class HorizontalLayout extends DefaultLayout { case FIXED: fixedSize += (view.width + view.geometry.margin.horizontal); } - maxSize = Math.max(maxSize, view.size.height + view.geometry.margin.vertical); + maxSize = Math.max(maxSize, view.size.toSize("percent").height + view.geometry.padding.vertical + view.geometry.margin.vertical); } if (!overflow) group.setSize(fixedSize, maxSize, "group"); diff --git a/src/main/haxework/view/layout/TailLayout.hx b/src/main/haxework/view/layout/TailLayout.hx index 616372a..3976658 100644 --- a/src/main/haxework/view/layout/TailLayout.hx +++ b/src/main/haxework/view/layout/TailLayout.hx @@ -34,12 +34,13 @@ class TailLayout extends DefaultLayout { views: [], } var w:Float = 0; + var size = group.size.toSize("group"); for (view in views) { setViewWidth(group, view); setViewHeight(group, view); if ( (rowSize > 0 && row.views.length >= rowSize) || - (/*rowSize == 0 && */row.width + view.width + margin + group.geometry.margin.horizontal > group.width) + (/*rowSize == 0 && */row.width + view.width + margin + group.geometry.margin.horizontal > size.width) ) { row.width -= margin; w = Math.max(w, row.width); diff --git a/src/main/haxework/view/layout/VerticalLayout.hx b/src/main/haxework/view/layout/VerticalLayout.hx index 76fae49..78779a4 100755 --- a/src/main/haxework/view/layout/VerticalLayout.hx +++ b/src/main/haxework/view/layout/VerticalLayout.hx @@ -22,7 +22,7 @@ class VerticalLayout extends DefaultLayout { case FIXED: fixedSize += (Math.max(view.geometry.height.value, view.height) + view.geometry.margin.vertical); } - maxSize = Math.max(maxSize, view.size.width + view.geometry.margin.horizontal); + maxSize = Math.max(maxSize, view.size.toSize("percent").width + view.geometry.padding.horizontal + view.geometry.margin.horizontal); } if (!overflow) group.setSize(maxSize, fixedSize, "group"); diff --git a/src/main/haxework/view/text/TextView.hx b/src/main/haxework/view/text/TextView.hx index fdcfff7..bf0e33f 100755 --- a/src/main/haxework/view/text/TextView.hx +++ b/src/main/haxework/view/text/TextView.hx @@ -110,7 +110,7 @@ import haxework.view.layout.Layout; private function placeTextField(textField:TextField):Void { textField.width = width; - textField.height = sizeSet.exists("text") ? sizeSet.get("text").height : height; + textField.height = size.exists("text") ? size.get("text").height : height; //textField.height = height; textField.x = switch (layout.hAlign) { diff --git a/src/main/haxework/view/theme/Theme.hx b/src/main/haxework/view/theme/Theme.hx index 9df9c22..b5f0fd4 100644 --- a/src/main/haxework/view/theme/Theme.hx +++ b/src/main/haxework/view/theme/Theme.hx @@ -78,10 +78,10 @@ class Theme implements ITheme { "font.embed" => font.embed, ]); data.set("text0", create([ - "font.color" => colors.light.diff(-16), + "skin.background.color" => colors.light.diff(-16), ], ["text"])); data.set("text1", create([ - "font.color" => colors.light.diff(16), + "skin.background.color" => colors.light.diff(16), ], ["text"])); data.set("label", create([ "geometry.padding" => Box.fromArray([8, 2]),