haxe/ui/layouts/DelegateLayout.hx
package haxe.ui.layouts;
import haxe.ui.core.Component;
import haxe.ui.geom.Size;
class DelegateLayout extends DefaultLayout {
@:clonable private var _size:DelegateLayoutSize;
public function new(size:DelegateLayoutSize = null) {
super();
_size = size;
}
public override function calcAutoSize(exclusions:Array<Component> = null):Size {
_size.component = component;
var cx:Float = _size.width;
var cy:Float = _size.height;
if (_size.getBool("includePadding", false) == true) {
cx += (paddingLeft + paddingRight);
cy += (paddingTop + paddingBottom);
}
var size:Size = new Size(cx, cy);
return size;
}
private override function get_usableSize():Size {
var size:Size = super.get_usableSize();
_size.component = component;
size.width -= _size.usableWidthModifier;
size.height -= _size.usableHeightModifier;
return size;
}
}
class DelegateLayoutSize {
public function new() {
}
public var component:Component;
public var config:Map<String, String>;
public var width(get, null):Float;
private function get_width():Float {
return 0;
}
public var height(get, null):Float;
private function get_height():Float {
return 0;
}
public var usableWidthModifier(get, null):Float;
private function get_usableWidthModifier():Float {
return 0;
}
public var usableHeightModifier(get, null):Float;
private function get_usableHeightModifier():Float {
return 0;
}
public function getString(name:String, defaultValue:String = null):String {
if (config == null) {
return defaultValue;
}
if (config.exists(name) == false) {
return defaultValue;
}
return config.get(name);
}
public function getInt(name:String, defaultValue:Int = 0):Int {
var v = getString(name);
if (v == null) {
return defaultValue;
}
return Std.parseInt(v);
}
public function getBool(name:String, defaultValue:Bool = false):Bool {
var v = getString(name);
if (v == null) {
return defaultValue;
}
return (v == "true");
}
}