[theme] use ResMap for theme skins
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package demo;
|
package demo;
|
||||||
|
|
||||||
import haxework.color.Color;
|
import haxework.color.Color;
|
||||||
import haxework.view.core.Geometry;
|
|
||||||
import haxework.view.skin.Skin;
|
import haxework.view.skin.Skin;
|
||||||
import haxework.view.theme.Theme;
|
import haxework.view.theme.Theme;
|
||||||
|
|
||||||
@@ -11,25 +10,11 @@ class AppTheme extends Theme {
|
|||||||
|
|
||||||
public function new(?color:Color, ?textColor:Color):Void {
|
public function new(?color:Color, ?textColor:Color):Void {
|
||||||
super({name: "Courirer"}, {light: color, text: textColor});
|
super({name: "Courirer"}, {light: color, text: textColor});
|
||||||
var background = Skin.color(0x000000);
|
}
|
||||||
var border = Skin.border(colors.light.multiply(1.5), 1, 2);
|
|
||||||
data.set("text0", [
|
|
||||||
Skin.color(colors.light.diff(128)),
|
|
||||||
text(colors.light.diff(-128)),
|
|
||||||
]);
|
|
||||||
data.set("text1", [
|
|
||||||
Skin.color(colors.light.diff(64)),
|
|
||||||
text(colors.light.diff(-128)),
|
|
||||||
]);
|
|
||||||
data.set("text", data.get("text0"));
|
|
||||||
data.set("background", [background]);
|
|
||||||
data.set("button", [Skin.buttonColor(colors.light), text(colors.text)]);
|
|
||||||
data.set("tab", [Skin.tabColor(colors.light), text(colors.text), Skin.geometry(new Geometry().setPadding([25, 8]))]);
|
|
||||||
data.set("view", [Skin.color(colors.light), border, text(colors.text)]);
|
|
||||||
data.set("scroll", [Skin.scrollVertical(colors.light, colors.light.diff(128))]);
|
|
||||||
data.set("border", [border]);
|
|
||||||
data.set("panel", [background, border]);
|
|
||||||
|
|
||||||
data.set("test", [Skin.color(0x00ffff)]);
|
override private function reload():Void {
|
||||||
|
super.reload();
|
||||||
|
data.put("view", text().concat(background(colors.light)).concat(border()));
|
||||||
|
data.put("test", [Skin.color(0x00ffff)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package demo;
|
|||||||
|
|
||||||
import demo.dispatch.DemoDispatcher;
|
import demo.dispatch.DemoDispatcher;
|
||||||
import demo.popup.ColorPopup;
|
import demo.popup.ColorPopup;
|
||||||
|
import demo.popup.FontPopup;
|
||||||
import haxework.App;
|
import haxework.App;
|
||||||
import haxework.log.TraceLogger;
|
import haxework.log.TraceLogger;
|
||||||
import haxework.net.JsonLoader;
|
import haxework.net.JsonLoader;
|
||||||
@@ -24,11 +25,11 @@ import haxework.view.IView;
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function choiceColor():Void {
|
private function choiceColor():Void {
|
||||||
// ToDo: update Theme
|
new ColorPopup().show().then(function(color) theme.colors = {light: color});
|
||||||
new ColorPopup()
|
}
|
||||||
.show();
|
|
||||||
/*.then(function(color) AppTheme.setColor(color))
|
private function choiceFont():Void {
|
||||||
.catchError(function(e) {});*/
|
new FontPopup().show().then(function(font) theme.font = font);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,7 +54,7 @@ class Demo extends App implements DemoListener {
|
|||||||
dispatcher.test3Signal.emit(1, "test");
|
dispatcher.test3Signal.emit(1, "test");
|
||||||
dispatcher.test4Signal.emit(app);
|
dispatcher.test4Signal.emit(app);
|
||||||
|
|
||||||
new JsonLoader().GET("http://umix.tv/channel/data2/renova.json")
|
new JsonLoader().GET("https://embed.tvbit.co/channel/data2/renova.json")
|
||||||
.then(function(data:Array<Model>) {
|
.then(function(data:Array<Model>) {
|
||||||
app.resources.any.put("data", data);
|
app.resources.any.put("data", data);
|
||||||
app.resources.any.put("data50", Util.marray(data, 50));
|
app.resources.any.put("data50", Util.marray(data, 50));
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ views:
|
|||||||
selected: "list"
|
selected: "list"
|
||||||
- id: switcher
|
- id: switcher
|
||||||
$type: haxework.view.frame.FrameSwitcher
|
$type: haxework.view.frame.FrameSwitcher
|
||||||
skinId: panel
|
|
||||||
animateFactory: { $class: haxework.animate.SlideAnimate }
|
animateFactory: { $class: haxework.animate.SlideAnimate }
|
||||||
+onSwitch: ~onFrameSwitch
|
+onSwitch: ~onFrameSwitch
|
||||||
geometry.size.stretch: true
|
geometry.size.stretch: true
|
||||||
@@ -40,23 +39,18 @@ views:
|
|||||||
layout.margin: 10
|
layout.margin: 10
|
||||||
views:
|
views:
|
||||||
- $type: haxework.view.form.ButtonView
|
- $type: haxework.view.form.ButtonView
|
||||||
geometry.padding: [25, 8]
|
|
||||||
skinId: button
|
|
||||||
text: Color
|
text: Color
|
||||||
+onPress: ~choiceColor()
|
+onPress: ~choiceColor()
|
||||||
|
- $type: haxework.view.form.ButtonView
|
||||||
|
text: Font
|
||||||
|
+onPress: ~choiceFont()
|
||||||
# separator
|
# separator
|
||||||
- $type: haxework.view.SpriteView
|
- $type: haxework.view.SpriteView
|
||||||
geometry.size.stretch: true
|
geometry.size.stretch: true
|
||||||
- $type: haxework.view.form.ButtonView
|
- $type: haxework.view.form.ButtonView
|
||||||
geometry.padding: [25, 8]
|
|
||||||
skinId: button
|
|
||||||
text: OK
|
text: OK
|
||||||
- $type: haxework.view.form.ButtonView
|
- $type: haxework.view.form.ButtonView
|
||||||
geometry.padding: [25, 8]
|
|
||||||
skinId: button
|
|
||||||
text: Apply
|
text: Apply
|
||||||
- $type: haxework.view.form.ButtonView
|
- $type: haxework.view.form.ButtonView
|
||||||
geometry.padding: [25, 8]
|
|
||||||
skinId: button
|
|
||||||
text: Cancel
|
text: Cancel
|
||||||
+onPress: ~flash.system.System.exit(0)
|
+onPress: ~flash.system.System.exit(0)
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import haxework.view.text.TextView;
|
|||||||
label.geometry.size.percent.width = 100;
|
label.geometry.size.percent.width = 100;
|
||||||
label.geometry.margin = 1;
|
label.geometry.margin = 1;
|
||||||
label.geometry.padding = 2;
|
label.geometry.padding = 2;
|
||||||
label.skinId = "text";
|
|
||||||
label.text = (value.title != null ? '${value.title}\n-\n' : '') + value.message;
|
label.text = (value.title != null ? '${value.title}\n-\n' : '') + value.message;
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
views:
|
views:
|
||||||
- $type: haxework.view.ScrollView
|
- $type: haxework.view.ScrollView
|
||||||
geometry.size.stretch: true
|
geometry.size.stretch: true
|
||||||
scroll.skinId: scroll
|
|
||||||
view:
|
view:
|
||||||
id: data
|
id: data
|
||||||
$type: haxework.view.data.DataView
|
$type: haxework.view.data.DataView
|
||||||
|
|||||||
@@ -7,5 +7,4 @@ views:
|
|||||||
geometry.size.stretch: true
|
geometry.size.stretch: true
|
||||||
scroll:
|
scroll:
|
||||||
$type: haxework.view.list.VScrollBarView
|
$type: haxework.view.list.VScrollBarView
|
||||||
skinId: scroll
|
|
||||||
data: $r:any:data50
|
data: $r:any:data50
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ views:
|
|||||||
- $type: haxework.view.form.SelectView<String>
|
- $type: haxework.view.form.SelectView<String>
|
||||||
layout.margin: 2
|
layout.margin: 2
|
||||||
dataView.layout.margin: 1
|
dataView.layout.margin: 1
|
||||||
labelSkinId: text
|
|
||||||
data:
|
data:
|
||||||
- "value 1"
|
- "value 1"
|
||||||
- "value 2"
|
- "value 2"
|
||||||
@@ -17,7 +16,6 @@ views:
|
|||||||
- $type: haxework.view.form.SelectView.SelectIdView<{id:Int,label:String}, Int>
|
- $type: haxework.view.form.SelectView.SelectIdView<{id:Int,label:String}, Int>
|
||||||
layout.margin: 2
|
layout.margin: 2
|
||||||
dataView.layout.margin: 1
|
dataView.layout.margin: 1
|
||||||
labelSkinId: text
|
|
||||||
labelBuilder: |
|
labelBuilder: |
|
||||||
~function(item:{id:Int,label:String}):String {
|
~function(item:{id:Int,label:String}):String {
|
||||||
var result = item.label;
|
var result = item.label;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
views:
|
views:
|
||||||
- $type: haxework.view.ScrollView
|
- $type: haxework.view.ScrollView
|
||||||
geometry.size.stretch: true
|
geometry.size.stretch: true
|
||||||
scroll.skinId: scroll
|
|
||||||
view:
|
view:
|
||||||
id: data
|
id: data
|
||||||
$type: haxework.view.data.DataView
|
$type: haxework.view.data.DataView
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ view:
|
|||||||
geometry.padding: 10
|
geometry.padding: 10
|
||||||
geometry.hAlign: center
|
geometry.hAlign: center
|
||||||
geometry.vAlign: middle
|
geometry.vAlign: middle
|
||||||
skinId: panel
|
skinId: frame
|
||||||
views:
|
views:
|
||||||
- id: colors
|
- id: colors
|
||||||
$type: haxework.view.data.DataView
|
$type: haxework.view.data.DataView
|
||||||
@@ -29,7 +29,5 @@ view:
|
|||||||
layout.margin: 10
|
layout.margin: 10
|
||||||
views:
|
views:
|
||||||
- $type: haxework.view.form.ButtonView
|
- $type: haxework.view.form.ButtonView
|
||||||
geometry.padding: [25, 8]
|
|
||||||
skinId: button
|
|
||||||
text: Cancel
|
text: Cancel
|
||||||
+onPress: ~reject('cancel')
|
+onPress: ~reject('cancel')
|
||||||
|
|||||||
47
demo/src/demo/popup/FontPopup.hx
Normal file
47
demo/src/demo/popup/FontPopup.hx
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
package demo.popup;
|
||||||
|
|
||||||
|
import flash.text.Font;
|
||||||
|
import flash.text.FontType;
|
||||||
|
import haxework.view.list.LabelListItem;
|
||||||
|
import haxework.view.list.ListView;
|
||||||
|
import haxework.view.popup.PopupView;
|
||||||
|
import haxework.view.theme.ITheme;
|
||||||
|
|
||||||
|
class FontLabelView extends LabelListItem<ThemeFont> {
|
||||||
|
|
||||||
|
override private function set_data(value:ThemeFont):ThemeFont {
|
||||||
|
skinId = item_index % 2 == 0 ? "light" : "dark";
|
||||||
|
data = value;
|
||||||
|
text = value.name;
|
||||||
|
fontFamily = value.name;
|
||||||
|
fontEmbed = value.embed;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@:template class FontPopup extends PopupView<ThemeFont> {
|
||||||
|
|
||||||
|
@:view var fonts:ListView<ThemeFont>;
|
||||||
|
|
||||||
|
private function init():Void {
|
||||||
|
var values:Array<ThemeFont> = Font.enumerateFonts(true).map(function(font:Font) {
|
||||||
|
return {
|
||||||
|
name: font.fontName,
|
||||||
|
embed: switch font.fontType {
|
||||||
|
case DEVICE: false;
|
||||||
|
case _: true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
values.sort(function(a:ThemeFont, b:ThemeFont) {
|
||||||
|
return switch [a.embed, b.embed] {
|
||||||
|
case [false, true]: 1;
|
||||||
|
case [true, false]: -1;
|
||||||
|
case _: 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
fonts.data = values;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function fontViewFactory() return new FontLabelView();
|
||||||
|
}
|
||||||
25
demo/src/demo/popup/FontPopup.yaml
Normal file
25
demo/src/demo/popup/FontPopup.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
view:
|
||||||
|
$type: haxework.view.group.VGroupView
|
||||||
|
geometry.size.width: 400
|
||||||
|
geometry.size.height: 80%
|
||||||
|
geometry.padding: 10
|
||||||
|
geometry.hAlign: center
|
||||||
|
geometry.vAlign: middle
|
||||||
|
skinId: frame
|
||||||
|
views:
|
||||||
|
- id: fonts
|
||||||
|
$type: haxework.view.list.VListView
|
||||||
|
geometry.size.stretch: true
|
||||||
|
factory: ~fontViewFactory
|
||||||
|
+onItemSelect: ~function(item) close(item.data)
|
||||||
|
scroll:
|
||||||
|
$type: haxework.view.list.VScrollBarView
|
||||||
|
- $type: haxework.view.group.HGroupView
|
||||||
|
geometry.size.width: 100%
|
||||||
|
geometry.margin.top: 10
|
||||||
|
layout.hAlign: right
|
||||||
|
views:
|
||||||
|
- $type: haxework.view.form.ButtonView
|
||||||
|
text: Cancel
|
||||||
|
+onPress: ~reject('cancel')
|
||||||
@@ -136,8 +136,12 @@ class View<C:DisplayObject> implements IView<C> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function set_skinId(value:String):String {
|
private function set_skinId(value:String):String {
|
||||||
skin = theme != null ? theme.resolve(value) : [];
|
//skin = theme != null ? theme.resolve(value) : [];
|
||||||
return value;
|
skinId = value;
|
||||||
|
if (theme != null) {
|
||||||
|
theme.bind(skinId, this);
|
||||||
|
}
|
||||||
|
return skinId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function set_visible(value:Bool):Bool {
|
private function set_visible(value:Bool):Bool {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class ButtonView extends LabelView {
|
|||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
super();
|
super();
|
||||||
|
skinId = "button";
|
||||||
overed = false;
|
overed = false;
|
||||||
downed = false;
|
downed = false;
|
||||||
state = ButtonState.UP;
|
state = ButtonState.UP;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ class LabelView extends TextView {
|
|||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
super();
|
super();
|
||||||
|
skinId = "label";
|
||||||
fill = false;
|
fill = false;
|
||||||
textField.selectable = false;
|
textField.selectable = false;
|
||||||
textField.wordWrap = false;
|
textField.wordWrap = false;
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class SelectView<D> extends GroupView {
|
|||||||
currentView = new ButtonView();
|
currentView = new ButtonView();
|
||||||
currentView.onPress.connect(function(_) toggle());
|
currentView.onPress.connect(function(_) toggle());
|
||||||
dataView = new DataView();
|
dataView = new DataView();
|
||||||
dataView.skin = [Skin.transparent];
|
dataView.skinId = "dropdown";
|
||||||
dataView.geometry.position = ABSOLUTE;
|
dataView.geometry.position = ABSOLUTE;
|
||||||
dataView.factory = factory;
|
dataView.factory = factory;
|
||||||
dataView.onDataSelect.connect(function(value:D):Void {
|
dataView.onDataSelect.connect(function(value:D):Void {
|
||||||
@@ -81,7 +81,9 @@ class SelectView<D> extends GroupView {
|
|||||||
var result = new LabelView();
|
var result = new LabelView();
|
||||||
result.layout.hAlign = LEFT;
|
result.layout.hAlign = LEFT;
|
||||||
result.geometry.size.percent.width = 100;
|
result.geometry.size.percent.width = 100;
|
||||||
|
if (labelSkinId != null) {
|
||||||
result.skinId = labelSkinId;
|
result.skinId = labelSkinId;
|
||||||
|
}
|
||||||
result.text = labelBuilder(value);
|
result.text = labelBuilder(value);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ class FrameView<D> extends GroupView {
|
|||||||
|
|
||||||
public function new(frameId:String, ?layout:ILayout) {
|
public function new(frameId:String, ?layout:ILayout) {
|
||||||
super(layout != null ? layout : new VerticalLayout());
|
super(layout != null ? layout : new VerticalLayout());
|
||||||
|
skinId = "frame";
|
||||||
this.frameId = frameId;
|
this.frameId = frameId;
|
||||||
this.geometry.size.stretch = true;
|
this.geometry.size.stretch = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ class HScrollBarView extends ScrollBarView {
|
|||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
super();
|
super();
|
||||||
|
skinId = "scroll.horizontal";
|
||||||
geometry.size.percent.width = 100;
|
geometry.size.percent.width = 100;
|
||||||
geometry.size.fixed.height = 10;
|
geometry.size.fixed.height = 10;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ class VScrollBarView extends ScrollBarView {
|
|||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
super();
|
super();
|
||||||
|
skinId = "scroll.vertical";
|
||||||
geometry.size.percent.height = 100;
|
geometry.size.percent.height = 100;
|
||||||
geometry.size.fixed.width = 10;
|
geometry.size.fixed.width = 10;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class TextView extends SpriteView implements ITextView {
|
|||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
super();
|
super();
|
||||||
|
skinId = "text";
|
||||||
layout = new Layout();
|
layout = new Layout();
|
||||||
textField = buildTextField();
|
textField = buildTextField();
|
||||||
textField.width = 1;
|
textField.width = 1;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package haxework.view.theme;
|
package haxework.view.theme;
|
||||||
|
|
||||||
import haxework.view.text.ITextView;
|
|
||||||
import haxework.color.Color;
|
import haxework.color.Color;
|
||||||
import haxework.view.skin.ISkin;
|
import haxework.view.skin.ISkin;
|
||||||
|
|
||||||
@@ -18,13 +17,15 @@ typedef ThemeColors = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface ITheme {
|
interface ITheme {
|
||||||
public var font(default, null):ThemeFont;
|
public var font(default, set):ThemeFont;
|
||||||
public var colors(default, null):ThemeColors;
|
public var colors(default, set):ThemeColors;
|
||||||
|
|
||||||
public function resolve(id:String):SkinSet;
|
public function resolve(id:String):SkinSet;
|
||||||
public function resolve2(ids:Array<String>):SkinSet;
|
public function bind(id:String, view:IView<Dynamic>):Void;
|
||||||
|
|
||||||
// ToDo:
|
public function background(?color:Color):SkinSet;
|
||||||
public function text(color:Color):ISkin<ITextView>;
|
public function border(?color:Color):SkinSet;
|
||||||
public function textBox(color:Color):SkinSet;
|
public function text(?color:Color):SkinSet;
|
||||||
|
public function button(?color:Color, ?textColor:Color):SkinSet;
|
||||||
|
public function textBox(?color:Color):SkinSet;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
package haxework.view.theme;
|
package haxework.view.theme;
|
||||||
|
|
||||||
|
import haxework.resources.Resources.ResMap;
|
||||||
import flash.text.Font;
|
import flash.text.Font;
|
||||||
import flash.text.FontType;
|
import flash.text.FontType;
|
||||||
import haxework.color.Color;
|
import haxework.color.Color;
|
||||||
|
import haxework.view.core.Geometry;
|
||||||
import haxework.view.skin.ISkin;
|
import haxework.view.skin.ISkin;
|
||||||
import haxework.view.skin.Skin;
|
import haxework.view.skin.Skin;
|
||||||
import haxework.view.text.ITextView;
|
|
||||||
import haxework.view.theme.ITheme;
|
import haxework.view.theme.ITheme;
|
||||||
|
|
||||||
using haxework.color.ColorUtil;
|
using haxework.color.ColorUtil;
|
||||||
@@ -16,19 +17,111 @@ class Theme implements ITheme {
|
|||||||
public var bigFontSize = 22;
|
public var bigFontSize = 22;
|
||||||
public var veryBigFontSize = 24;
|
public var veryBigFontSize = 24;
|
||||||
|
|
||||||
public var font(default, null):ThemeFont;
|
public var font(default, set):ThemeFont;
|
||||||
public var colors(default, null):ThemeColors;
|
public var colors(default, set):ThemeColors;
|
||||||
|
|
||||||
private var data:Map<String, SkinSet>;
|
private var data:ResMap<SkinSet>;
|
||||||
|
|
||||||
public function new(?font:ThemeFont, ?colors:ThemeColors) {
|
public function new(?font:ThemeFont, ?colors:ThemeColors) {
|
||||||
data = new Map();
|
data = new ResMap();
|
||||||
this.font = resolveFont(font);
|
this.font = font;
|
||||||
this.colors = resolveColors(colors);
|
this.colors = colors;
|
||||||
L.d("Theme", 'font: ${this.font}');
|
L.d("Theme", 'font: ${this.font}');
|
||||||
L.d("Theme", 'colors: ${this.colors}');
|
L.d("Theme", 'colors: ${this.colors}');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function set_font(value:ThemeFont):ThemeFont {
|
||||||
|
font = resolveFont(value);
|
||||||
|
if (font != null && colors != null) {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function set_colors(value:ThemeColors):ThemeColors {
|
||||||
|
colors = resolveColors(value);
|
||||||
|
if (font != null && colors != null) {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
return colors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function reload():Void {
|
||||||
|
data.put("background", background());
|
||||||
|
data.put("border", border());
|
||||||
|
data.put("frame", background().concat(border()).concat([Skin.geometry(new Geometry().setPadding(2))]));
|
||||||
|
|
||||||
|
data.put("text", text());
|
||||||
|
data.put("label", text().concat([Skin.geometry(new Geometry().setPadding([8, 2]))]));
|
||||||
|
data.put("button", button());
|
||||||
|
data.put("dropdown", background().concat(border()));
|
||||||
|
data.put("tab", text().concat([
|
||||||
|
Skin.tabColor(this.colors.light),
|
||||||
|
Skin.geometry(new Geometry().setPadding([25, 8]))
|
||||||
|
]));
|
||||||
|
|
||||||
|
data.put("text0", text().concat(background(this.colors.light.diff(-16))));
|
||||||
|
data.put("text1", text().concat(background(this.colors.light.diff(16))));
|
||||||
|
data.put("scroll.vertical", [
|
||||||
|
Skin.scrollVertical(this.colors.light, this.colors.dark),
|
||||||
|
]);
|
||||||
|
data.put("scroll.horizontal", [
|
||||||
|
Skin.scrollHorizontal(this.colors.light, this.colors.dark),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function background(?color:Color):SkinSet {
|
||||||
|
if (color == null) {
|
||||||
|
color = colors.dark;
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
Skin.color(color),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function border(?color:Color):SkinSet {
|
||||||
|
if (color == null) {
|
||||||
|
color = colors.border;
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
Skin.border(color, 1, 2),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function text(?color:Color):SkinSet {
|
||||||
|
if (color == null) {
|
||||||
|
color = colors.text;
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
Skin.text(color, baseFontSize, font.name, font.embed),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function button(?color:Color, ?textColor:Color):SkinSet {
|
||||||
|
if (color == null) {
|
||||||
|
color = colors.light;
|
||||||
|
}
|
||||||
|
return text(textColor).concat([
|
||||||
|
Skin.buttonColor(color),
|
||||||
|
Skin.geometry(new Geometry().setPadding([25, 8])),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function textBox(?color:Color):SkinSet {
|
||||||
|
return text(color).concat([
|
||||||
|
Skin.color(0x000000, 0.1),
|
||||||
|
Skin.border(colors.light, 1, 2),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function bind(id:String, view:IView<Dynamic>):Void {
|
||||||
|
data.bind(id, view, "skin");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resolve(id:String):SkinSet {
|
||||||
|
return data.exists(id) ? data.get(id) : [];
|
||||||
|
}
|
||||||
|
|
||||||
private static function resolveFont(font:ThemeFont):ThemeFont {
|
private static function resolveFont(font:ThemeFont):ThemeFont {
|
||||||
if (font == null) {
|
if (font == null) {
|
||||||
font = {};
|
font = {};
|
||||||
@@ -55,7 +148,7 @@ class Theme implements ITheme {
|
|||||||
colors = {};
|
colors = {};
|
||||||
}
|
}
|
||||||
var light:Color = colors.light != null ? colors.light : 0x33aa33;
|
var light:Color = colors.light != null ? colors.light : 0x33aa33;
|
||||||
var dark:Color = colors.dark != null ? colors.dark : light.diff(64);
|
var dark:Color = colors.dark != null ? colors.dark : light.diff(-64);
|
||||||
var text:Color = colors.text != null ? colors.text : 0xffffff;
|
var text:Color = colors.text != null ? colors.text : 0xffffff;
|
||||||
var border:Color = colors.border != null ? colors.border : light.multiply(1.5);
|
var border:Color = colors.border != null ? colors.border : light.multiply(1.5);
|
||||||
var active:Color = colors.active != null ? colors.active : 0x00ff00;
|
var active:Color = colors.active != null ? colors.active : 0x00ff00;
|
||||||
@@ -67,30 +160,4 @@ class Theme implements ITheme {
|
|||||||
active: active,
|
active: active,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resolve(id:String):SkinSet {
|
|
||||||
return data.exists(id) ? data.get(id) : [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function resolve2(ids:Array<String>):SkinSet {
|
|
||||||
var result = [];
|
|
||||||
for (id in ids) {
|
|
||||||
if (data.exists(id)) {
|
|
||||||
result = result.concat(data.get(id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function text(color:Color):ISkin<ITextView> {
|
|
||||||
return Skin.text(color, baseFontSize, font.name, font.embed);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function textBox(color:Color):SkinSet {
|
|
||||||
return [
|
|
||||||
Skin.color(0x000000, 0.1),
|
|
||||||
Skin.border(colors.light, 1, 2),
|
|
||||||
text(color),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user