[gui] add SizeValue wrapper

This commit is contained in:
2019-03-04 21:12:05 +03:00
parent 02e5481bbd
commit f1302e5636
2 changed files with 22 additions and 39 deletions

View File

@@ -1,11 +1,8 @@
package haxework.gui;
import haxework.gui.skin.ISkin.SkinSet;
class ToggleButtonView extends ButtonView {
public var on(default, set):Bool;
public var onSkin(default, set):SkinSet;
public var onText(default, set):String;
@@ -19,16 +16,6 @@ class ToggleButtonView extends ButtonView {
return on;
}
private function set_onSkin(value:SkinSet):SkinSet {
onSkin = value;
toRedraw();
return onSkin;
}
private function currentSkin():SkinSet {
return on ? onSkin : skin;
}
private function set_onText(value:String):String {
if (onText != value) {
onText = value;

View File

@@ -5,28 +5,26 @@ enum SizeValue {
PERCENT(value:Float);
}
abstract SValue(String) {
public var percent(get, never):Bool;
public var value(get, never):Float;
abstract ASizeValue(SizeValue) {
inline public function new(value:String) {
public inline function new(value:SizeValue) {
this = value;
}
inline private function get_percent():Bool {
return this.substr(this.length - 1) == "%";
@:from static public inline function fromFloat(value:Float):ASizeValue {
return new ASizeValue(FIXED(value));
}
inline private function get_value():Float {
return Std.parseFloat(this);
@:from static public inline function fromString(value:String):ASizeValue {
if (value.substr(value.length - 1) == "%") {
return new ASizeValue(PERCENT(Std.parseFloat(value)));
} else {
return new ASizeValue(FIXED(Std.parseFloat(value)));
}
}
@:from static public inline function fromFloat(value:Float):SValue {
return new SValue('$value');
}
@:from static public inline function fromString(value:String):SValue {
return new SValue(value);
@:to public inline function toSizeValue():SizeValue {
return this;
}
}
@@ -36,8 +34,8 @@ class SizeSet {
public var percent(default, default):Size;
public var stretch(null, set):Bool;
public var width(null, set):SValue;
public var height(null, set):SValue;
public var width(null, set):ASizeValue;
public var height(null, set):ASizeValue;
public function new() {
this.content = [];
@@ -50,20 +48,18 @@ class SizeSet {
return value;
}
inline private function set_width(value:SValue):SValue {
if (value.percent) {
percent.width = value.value;
} else {
fixed.width = value.value;
inline private function set_width(value:ASizeValue):ASizeValue {
switch cast(value, SizeValue) {
case PERCENT(v): percent.width = v;
case FIXED(v): fixed.width = v;
}
return value;
}
inline private function set_height(value:SValue):SValue {
if (value.percent) {
percent.height = value.value;
} else {
fixed.height = value.value;
inline private function set_height(value:ASizeValue):ASizeValue {
switch cast(value, SizeValue) {
case PERCENT(v): percent.height = v;
case FIXED(v): fixed.height = v;
}
return value;
}