[gui] public setContentSize method in View

This commit is contained in:
2019-03-12 17:20:58 +03:00
parent a07d9eb366
commit 301360df31
8 changed files with 42 additions and 9 deletions

View File

@@ -36,4 +36,6 @@ interface IView<C:DisplayObject> {
public function toRedraw():Void; public function toRedraw():Void;
public function remove():Void; public function remove():Void;
public function setContentSize(width:Float, height:Float, type:String="default"):Void;
} }

View File

@@ -3,6 +3,7 @@ package haxework.gui;
import flash.display.BitmapData; import flash.display.BitmapData;
import haxework.gui.skin.BitmapSkin; import haxework.gui.skin.BitmapSkin;
import haxework.gui.skin.ISkin; import haxework.gui.skin.ISkin;
import haxework.gui.utils.BitmapUtil;
import haxework.gui.utils.DrawUtil.FillType; import haxework.gui.utils.DrawUtil.FillType;
import haxework.net.ImageLoader; import haxework.net.ImageLoader;
@@ -10,6 +11,7 @@ class ImageView extends SpriteView {
public var image(default, set):BitmapData; public var image(default, set):BitmapData;
public var imageUrl(default, set):String; public var imageUrl(default, set):String;
public var color(default, set):Int = -1;
public var fillType(default, set):FillType; public var fillType(default, set):FillType;
private var bitmapSkin:BitmapSkin = new BitmapSkin(); private var bitmapSkin:BitmapSkin = new BitmapSkin();
@@ -31,7 +33,10 @@ class ImageView extends SpriteView {
private function set_image(value:BitmapData):BitmapData { private function set_image(value:BitmapData):BitmapData {
if (image != value) { if (image != value) {
image = value; image = value;
bitmapSkin.image = value; if (color > -1) {
image = BitmapUtil.colorize(image, color);
}
bitmapSkin.image = image;
toRedraw(); toRedraw();
} }
return image; return image;
@@ -50,7 +55,19 @@ class ImageView extends SpriteView {
private function set_fillType(value:FillType):FillType { private function set_fillType(value:FillType):FillType {
if (fillType != value) { if (fillType != value) {
bitmapSkin.fillType = fillType = value; bitmapSkin.fillType = fillType = value;
toRedraw();
} }
return fillType; return fillType;
} }
private function set_color(value:Int):Int {
if (color != value) {
color = value;
if (image != null) {
image = BitmapUtil.colorize(image, color);
toRedraw();
}
}
return color;
}
} }

View File

@@ -72,7 +72,7 @@ class View<C:DisplayObject> implements IView<C> {
} }
} }
private function setContentSize(width:Float, height:Float, type:String="default"):Void { public function setContentSize(width:Float, height:Float, type:String="default"):Void {
var contentSize = geometry.size.content.get(type); var contentSize = geometry.size.content.get(type);
if (contentSize == null || width != contentSize.width || height != contentSize.height) { if (contentSize == null || width != contentSize.width || height != contentSize.height) {
geometry.size.content.set(type, [width, height]); geometry.size.content.set(type, [width, height]);

View File

@@ -39,7 +39,8 @@ class FrameSwitcher extends GroupView {
throw 'frame "$id" not found'; throw 'frame "$id" not found';
} }
addView(current); addView(current);
update(); toUpdate();
//update();
//ToDo: //ToDo:
if (content.stage != null) content.stage.focus = cast(current, SpriteView).content; if (content.stage != null) content.stage.focus = cast(current, SpriteView).content;
var onShowMethod:Dynamic = Reflect.field(current, "onShow"); var onShowMethod:Dynamic = Reflect.field(current, "onShow");

View File

@@ -29,7 +29,7 @@ class HorizontalLayout extends DefaultLayout {
maxSize = Math.max(maxSize, view.height); maxSize = Math.max(maxSize, view.height);
} }
group.geometry.size.content.set("group", [fixedSize, maxSize]); group.setContentSize(fixedSize, maxSize, "group");
leftSize -= fixedSize; leftSize -= fixedSize;
for (view in views) { for (view in views) {

View File

@@ -28,13 +28,15 @@ class TailLayout extends DefaultLayout {
height: 0, height: 0,
views: [], views: [],
} }
var w:Float = 0;
for (view in views) { for (view in views) {
setViewWidth(group, view); setViewWidth(group, view);
setViewHeight(group, view); setViewHeight(group, view);
if ( if (
(rowSize > 0 && row.views.length >= rowSize) || (rowSize > 0 && row.views.length >= rowSize) ||
(row.width + view.width + margin + group.geometry.margin.horizontal > group.width) (rowSize == 0 && row.width + view.width + margin + group.geometry.margin.horizontal > group.width)
) { ) {
w = Math.max(w, row.width);
rows.push(row); rows.push(row);
row = { row = {
width: 0, width: 0,
@@ -46,6 +48,7 @@ class TailLayout extends DefaultLayout {
row.width += view.width + margin; row.width += view.width + margin;
row.height = Math.max(row.height, view.height); row.height = Math.max(row.height, view.height);
} }
w = Math.max(w, row.width);
rows.push(row); rows.push(row);
var h:Float = Lambda.fold(rows, function(row, h) return row.height + h, 0) + margin * (rows.length - 1); var h:Float = Lambda.fold(rows, function(row, h) return row.height + h, 0) + margin * (rows.length - 1);
var y:Float = Math.max(group.geometry.padding.top, (group.height - h) / 2); var y:Float = Math.max(group.geometry.padding.top, (group.height - h) / 2);
@@ -63,6 +66,6 @@ class TailLayout extends DefaultLayout {
y += row.height + margin; y += row.height + margin;
} }
group.geometry.size.content.set("group", [-1, h]); group.setContentSize(w, h, "group");
} }
} }

View File

@@ -25,7 +25,7 @@ class VerticalLayout extends DefaultLayout {
maxSize = Math.max(maxSize, view.width); maxSize = Math.max(maxSize, view.width);
} }
group.geometry.size.content.set("group", [maxSize, fixedSize]); group.setContentSize(maxSize, fixedSize, "group");
leftSize -= fixedSize; leftSize -= fixedSize;
for (view in views) { for (view in views) {

View File

@@ -1,9 +1,11 @@
package haxework.gui.utils; package haxework.gui.utils;
import flash.geom.Point; import flash.display.BitmapData;
import flash.filters.ColorMatrixFilter; import flash.filters.ColorMatrixFilter;
import flash.geom.ColorTransform; import flash.geom.ColorTransform;
import flash.display.BitmapData; import flash.geom.Point;
import flash.geom.Rectangle;
import haxework.color.Color;
class BitmapUtil { class BitmapUtil {
@@ -43,4 +45,12 @@ class BitmapUtil {
toCache(image, "grayscale:" + m, out); toCache(image, "grayscale:" + m, out);
return out; return out;
} }
public static function colorize(data:BitmapData, color:Color):BitmapData {
if (color.zero) return data;
var result = data.clone();
var transform = new ColorTransform(color.red / 255, color.green / 255, color.blue / 255, 1, 0, 0, 0, 0);
result.colorTransform(new Rectangle(0, 0, result.width, result.height), transform);
return result;
}
} }