[view] fix view size

This commit is contained in:
2019-07-16 20:12:02 +03:00
parent 37e6f3d7f8
commit 374b286ebb
9 changed files with 19 additions and 23 deletions

View File

@@ -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<C:DisplayObject> {
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;

View File

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

View File

@@ -9,7 +9,7 @@ class SizeSet extends StringMap<Size> {
}
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<Size> {
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);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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]),