From 2dbfe79371c3e6ff673fbe887e126308e7197661 Mon Sep 17 00:00:00 2001 From: shmyga Date: Fri, 12 Jul 2019 12:12:20 +0300 Subject: [PATCH] [view] fixes --- demo/build.hxml | 4 +- demo/src/demo/AppTheme.hx | 5 +- demo/src/demo/DemoView.yaml | 14 +-- demo/src/demo/form/DataForm.hx | 3 +- demo/src/demo/form/DataForm.yaml | 20 ++-- demo/src/demo/form/ListForm.yaml | 16 ++-- demo/src/demo/form/TailForm.hx | 7 +- demo/src/demo/form/TailForm.yaml | 22 ++--- demo/src/demo/form/TestLayoutForm.hx | 2 +- demo/src/demo/form/TestLayoutForm.yaml | 96 +++++++++---------- demo/src/demo/popup/ColorPopup.hx | 4 +- demo/src/demo/popup/ColorPopup.yaml | 10 +- demo/src/demo/popup/FontPopup.hx | 6 +- demo/src/demo/popup/FontPopup.yaml | 36 +++---- demo/src/demo/test/TestView.yaml | 8 ++ src/main/haxework/view/IView.hx | 3 +- src/main/haxework/view/ImageView.hx | 13 +-- src/main/haxework/view/ScrollView.hx | 4 +- src/main/haxework/view/View.hx | 3 +- src/main/haxework/view/data/ButtonGroup.hx | 15 +-- src/main/haxework/view/form/ButtonView.hx | 2 +- src/main/haxework/view/form/LabelView.hx | 6 +- src/main/haxework/view/form/SelectView.hx | 29 +++--- src/main/haxework/view/frame/FrameView.hx | 4 +- src/main/haxework/view/geometry/Geometry.hx | 9 ++ src/main/haxework/view/group/GroupView.hx | 18 ---- src/main/haxework/view/layout/TailLayout.hx | 4 +- .../haxework/view/layout/VerticalLayout.hx | 2 +- src/main/haxework/view/list/HListView.hx | 18 ++-- src/main/haxework/view/list/HScrollBarView.hx | 6 +- src/main/haxework/view/list/LabelListItem.hx | 8 +- src/main/haxework/view/list/ListView.hx | 34 +++---- src/main/haxework/view/list/VListView.hx | 18 ++-- src/main/haxework/view/list/VScrollBarView.hx | 6 +- src/main/haxework/view/popup/PopupView.hx | 9 +- src/main/haxework/view/skin/GeometrySkin.hx | 50 ---------- src/main/haxework/view/skin/LayoutSkin.hx | 35 ------- src/main/haxework/view/skin/Skin.hx | 19 ---- src/main/haxework/view/skin/TextSkin.hx | 27 ------ src/main/haxework/view/text/FontStyle.hx | 9 ++ src/main/haxework/view/text/ITextView.hx | 2 + src/main/haxework/view/text/TextView.hx | 92 +++--------------- src/main/haxework/view/theme/ITheme.hx | 1 - src/main/haxework/view/theme/StyleId.hx | 24 +++++ src/main/haxework/view/theme/Theme.hx | 77 --------------- 45 files changed, 273 insertions(+), 527 deletions(-) delete mode 100644 src/main/haxework/view/skin/GeometrySkin.hx delete mode 100644 src/main/haxework/view/skin/LayoutSkin.hx delete mode 100644 src/main/haxework/view/skin/TextSkin.hx create mode 100644 src/main/haxework/view/theme/StyleId.hx diff --git a/demo/build.hxml b/demo/build.hxml index 012513e..739d592 100755 --- a/demo/build.hxml +++ b/demo/build.hxml @@ -5,10 +5,10 @@ --macro haxework.parser.Parser.auto() -debug -D native_trace --D dev_layout +#-D dev_layout -swf-version 10.1 -swf-header 800:600:30:000000 --main demo.Test +-main demo.Demo -swf target/demo.swf #-as3 target diff --git a/demo/src/demo/AppTheme.hx b/demo/src/demo/AppTheme.hx index 53101b0..e3024ec 100644 --- a/demo/src/demo/AppTheme.hx +++ b/demo/src/demo/AppTheme.hx @@ -1,7 +1,6 @@ package demo; import haxework.color.Color; -import haxework.view.skin.Skin; import haxework.view.theme.Theme; using haxework.color.ColorUtil; @@ -14,7 +13,7 @@ class AppTheme extends Theme { override private function reload():Void { super.reload(); - data.put("view", text().concat(background(colors.light)).concat(border())); - data.put("test", [Skin.color(0x00ffff)]); +// data.put("view", text().concat(background(colors.light)).concat(border())); +// data.put("test", [Skin.color(0x00ffff)]); } } diff --git a/demo/src/demo/DemoView.yaml b/demo/src/demo/DemoView.yaml index cd7ea88..a93ec8e 100644 --- a/demo/src/demo/DemoView.yaml +++ b/demo/src/demo/DemoView.yaml @@ -1,6 +1,6 @@ --- -skinId: background -geometry.size.stretch: true +style: background +geometry.stretch: true views: - $type: haxework.view.ImageView geometry.padding: 10 @@ -9,10 +9,10 @@ views: $type: haxework.view.data.ButtonGroup layout.margin: 5 layout.hAlign: left - geometry.size.width: 100% + geometry.width: 100% geometry.padding.left: 5 geometry.margin.bottom: -3 - buttonSkinId: tab + buttonStyle: tab +onDataSelect: ~function(id) switcher.change(id) data: - "list" @@ -25,7 +25,7 @@ views: $type: haxework.view.frame.FrameSwitcher animateFactory: { $class: haxework.animate.SlideAnimate } +onSwitch: ~onFrameSwitch - geometry.size.stretch: true + geometry.stretch: true geometry.padding: 5 factory: _list_: {$class: demo.form.ListForm} @@ -34,7 +34,7 @@ views: _test_layout_: {$class: demo.form.TestLayoutForm} _select_: {$class: demo.form.SelectForm} - $type: haxework.view.group.HGroupView - geometry.size.percent.width: 100 + geometry.width: 100% geometry.padding: 10 layout.margin: 10 views: @@ -46,7 +46,7 @@ views: +onPress: ~choiceFont() # separator - $type: haxework.view.SpriteView - geometry.size.stretch: true + geometry.stretch: true - $type: haxework.view.form.ButtonView text: OK - $type: haxework.view.form.ButtonView diff --git a/demo/src/demo/form/DataForm.hx b/demo/src/demo/form/DataForm.hx index 11aaa19..5667772 100644 --- a/demo/src/demo/form/DataForm.hx +++ b/demo/src/demo/form/DataForm.hx @@ -3,7 +3,6 @@ package demo.form; import haxework.view.frame.FrameView; import haxework.view.text.TextView; - @:template class DataForm extends FrameView { public function new() { super("data"); @@ -11,7 +10,7 @@ import haxework.view.text.TextView; private function factory(index:Int, value:Model):TextView { var label = new TextView(); - label.geometry.size.percent.width = 100; + label.geometry.width.percent = 100; label.geometry.margin = 1; label.geometry.padding = 2; label.text = (value.title != null ? '${value.title}\n-\n' : '') + value.message; diff --git a/demo/src/demo/form/DataForm.yaml b/demo/src/demo/form/DataForm.yaml index fd04c4e..e63fc37 100644 --- a/demo/src/demo/form/DataForm.yaml +++ b/demo/src/demo/form/DataForm.yaml @@ -1,12 +1,12 @@ --- views: - - $type: haxework.view.ScrollView - geometry.size.stretch: true - view: - id: data - $type: haxework.view.data.DataView - layout: - $type: haxework.view.layout.VerticalLayout - factory: ~factory - geometry.size.width: 100% - data: $r:any:data + - $type: haxework.view.ScrollView + geometry.stretch: true + view: + id: data + $type: haxework.view.data.DataView + layout: + $type: haxework.view.layout.VerticalLayout + factory: ~factory + geometry.width: 100% + data: $r:any:data diff --git a/demo/src/demo/form/ListForm.yaml b/demo/src/demo/form/ListForm.yaml index 9aba535..42b4618 100644 --- a/demo/src/demo/form/ListForm.yaml +++ b/demo/src/demo/form/ListForm.yaml @@ -1,10 +1,10 @@ --- views: - - id: list - $type: haxework.view.list.VListView - +onItemSelect: ~onItemSelect - factory: ~factory - geometry.size.stretch: true - scroll: - $type: haxework.view.list.VScrollBarView - data: $r:any:data50 + - id: list + $type: haxework.view.list.VListView + +onItemSelect: ~onItemSelect + factory: ~factory + geometry.stretch: true + scroll: + $type: haxework.view.list.VScrollBarView + data: $r:any:data50 diff --git a/demo/src/demo/form/TailForm.hx b/demo/src/demo/form/TailForm.hx index f224805..52a2c1a 100644 --- a/demo/src/demo/form/TailForm.hx +++ b/demo/src/demo/form/TailForm.hx @@ -17,18 +17,17 @@ import haxework.view.utils.DrawUtil; if (value.image != null) { var imageView = new ImageView(); imageView.stretch = false; - imageView.skinId = "border"; + imageView.style = "border"; imageView.fillType = FillType.CONTAIN; imageView.imageUrl = value.image.url; view = imageView; } else { var textView = new TextView(); - textView.skinId = "view"; + textView.style = "view"; textView.text = '${value.id}\n${value.maker}'; view = textView; } - view.geometry.size.fixed.width = 350; - view.geometry.size.fixed.height = 200; + view.setSize(350, 200); return view; } } diff --git a/demo/src/demo/form/TailForm.yaml b/demo/src/demo/form/TailForm.yaml index 3a208a0..ff5562f 100644 --- a/demo/src/demo/form/TailForm.yaml +++ b/demo/src/demo/form/TailForm.yaml @@ -1,13 +1,13 @@ --- views: - - $type: haxework.view.ScrollView - geometry.size.stretch: true - view: - id: data - $type: haxework.view.data.DataView - layout: - $type: haxework.view.layout.TailLayout - margin: 2 - factory: ~factory - geometry.size.width: 100% - data: $r:any:data + - $type: haxework.view.ScrollView + geometry.stretch: true + view: + id: data + $type: haxework.view.data.DataView + layout: + $type: haxework.view.layout.TailLayout + margin: 2 + factory: ~factory + geometry.width: 100% + data: $r:any:data diff --git a/demo/src/demo/form/TestLayoutForm.hx b/demo/src/demo/form/TestLayoutForm.hx index 03e1893..6ec72c3 100644 --- a/demo/src/demo/form/TestLayoutForm.hx +++ b/demo/src/demo/form/TestLayoutForm.hx @@ -22,6 +22,6 @@ import haxework.view.SpriteView; private function resize():Void { var w = 200 + 400 * Math.random(); var h = 100 + 200 * Math.random(); - render.setContentSize(w, h, "render"); + render.setSize(w, h, "render"); } } diff --git a/demo/src/demo/form/TestLayoutForm.yaml b/demo/src/demo/form/TestLayoutForm.yaml index 36970cb..4d2cced 100644 --- a/demo/src/demo/form/TestLayoutForm.yaml +++ b/demo/src/demo/form/TestLayoutForm.yaml @@ -1,53 +1,53 @@ --- views: - - id: main - $type: haxework.view.group.VGroupView - geometry.size.stretch: true - layout.hAlign: center - layout.vAlign: middle - views: - - id: container + - id: main $type: haxework.view.group.VGroupView - layout.margin: 10 - skin: - - $type: [haxework.view.skin.Skin.color, 0xffff00] + geometry.stretch: true + layout.hAlign: center + layout.vAlign: middle views: - - id: top - $type: haxework.view.group.GroupView - layout.hAlign: center - geometry.size.width: 100% - geometry.size.height: 20 - skinId: test - - id: middle - $type: haxework.view.group.HGroupView - layout.margin: 10 - views: - - id: left - $type: haxework.view.group.GroupView - layout.vAlign: middle - geometry.size.width: 20 - geometry.size.height: 100% - skinId: test - - id: render - $type: haxework.view.SpriteView - #geometry.size.width: 300 - #geometry.size.height: 200 - skinId: test - - id: right - $type: haxework.view.group.GroupView - layout.vAlign: middle - geometry.size.width: 20 - geometry.size.height: 100% - skinId: test + - id: container + $type: haxework.view.group.VGroupView + layout.margin: 10 + skin: + $type: [haxework.view.skin.Skin.color, 0xffff00] views: - - $type: haxework.view.SpriteView - geometry.size.width: 100 - geometry.size.height: 100% - skin: - - $type: [haxework.view.skin.Skin.color, 0xff0000] - - id: bottom - $type: haxework.view.group.GroupView - layout.hAlign: center - skinId: test - geometry.size.width: 100% - geometry.size.height: 20 + - id: top + $type: haxework.view.group.GroupView + layout.hAlign: center + geometry.width: 100% + geometry.height: 20 + style: test + - id: middle + $type: haxework.view.group.HGroupView + layout.margin: 10 + views: + - id: left + $type: haxework.view.group.GroupView + layout.vAlign: middle + geometry.width: 20 + geometry.height: 100% + style: test + - id: render + $type: haxework.view.SpriteView + #geometry.width: 300 + #geometry.height: 200 + style: test + - id: right + $type: haxework.view.group.GroupView + layout.vAlign: middle + geometry.width: 20 + geometry.height: 100% + style: test + views: + - $type: haxework.view.SpriteView + geometry.width: 100 + geometry.height: 100% + skin: + $type: [haxework.view.skin.Skin.color, 0xff0000] + - id: bottom + $type: haxework.view.group.GroupView + layout.hAlign: center + style: test + geometry.width: 100% + geometry.height: 20 diff --git a/demo/src/demo/popup/ColorPopup.hx b/demo/src/demo/popup/ColorPopup.hx index 7933012..62f9829 100644 --- a/demo/src/demo/popup/ColorPopup.hx +++ b/demo/src/demo/popup/ColorPopup.hx @@ -8,8 +8,8 @@ import haxework.view.skin.Skin; private function colorViewFactory(index:Int, color:Int) { var view = new ButtonView(); - view.geometry.size.fixed = [48, 48]; - view.skin = [Skin.buttonColor(color)]; + view.setSize(48, 48, "fixed"); + view.skin = Skin.buttonColor(color); return view; } } diff --git a/demo/src/demo/popup/ColorPopup.yaml b/demo/src/demo/popup/ColorPopup.yaml index 9ae7ba1..762407b 100644 --- a/demo/src/demo/popup/ColorPopup.yaml +++ b/demo/src/demo/popup/ColorPopup.yaml @@ -1,16 +1,16 @@ --- view: $type: haxework.view.group.VGroupView - geometry.size.width: 400 - geometry.size.height: 200 + geometry.width: 400 + geometry.height: 200 geometry.padding: 10 geometry.hAlign: center geometry.vAlign: middle - skinId: frame + style: frame views: - id: colors $type: haxework.view.data.DataView - geometry.size.stretch: true + geometry.stretch: true layout: $type: haxework.view.layout.TailLayout vAlign: middle @@ -24,7 +24,7 @@ view: - 0x3333AA +onDataSelect: ~close - $type: haxework.view.group.HGroupView - geometry.size.width: 100% + geometry.width: 100% layout.hAlign: right layout.margin: 10 views: diff --git a/demo/src/demo/popup/FontPopup.hx b/demo/src/demo/popup/FontPopup.hx index c8c43a8..ca7a6a8 100644 --- a/demo/src/demo/popup/FontPopup.hx +++ b/demo/src/demo/popup/FontPopup.hx @@ -10,11 +10,11 @@ import haxework.view.theme.ITheme; class FontLabelView extends LabelListItem { override private function set_data(value:ThemeFont):ThemeFont { - skinId = item_index % 2 == 0 ? "light" : "dark"; + style = item_index % 2 == 0 ? "light" : "dark"; data = value; text = value.name; - fontFamily = value.name; - fontEmbed = value.embed; + font.family = value.name; + font.embed = value.embed; return data; } } diff --git a/demo/src/demo/popup/FontPopup.yaml b/demo/src/demo/popup/FontPopup.yaml index 0834279..7ab6a7b 100644 --- a/demo/src/demo/popup/FontPopup.yaml +++ b/demo/src/demo/popup/FontPopup.yaml @@ -1,25 +1,25 @@ --- view: $type: haxework.view.group.VGroupView - geometry.size.width: 400 - geometry.size.height: 80% + geometry.width: 400 + geometry.height: 80% geometry.padding: 10 geometry.hAlign: center geometry.vAlign: middle - skinId: frame + style: 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') + - id: fonts + $type: haxework.view.list.VListView + geometry.stretch: true + factory: ~fontViewFactory + +onItemSelect: ~function(item) close(item.data) + scroll: + $type: haxework.view.list.VScrollBarView + - $type: haxework.view.group.HGroupView + geometry.width: 100% + geometry.margin.top: 10 + layout.hAlign: right + views: + - $type: haxework.view.form.ButtonView + text: Cancel + +onPress: ~reject('cancel') diff --git a/demo/src/demo/test/TestView.yaml b/demo/src/demo/test/TestView.yaml index 0c1e657..e8e0994 100644 --- a/demo/src/demo/test/TestView.yaml +++ b/demo/src/demo/test/TestView.yaml @@ -37,6 +37,14 @@ views: skin: $type: haxework.view.skin.ColorSkin color: 0xff0000 + - $type: haxework.view.list.VListView + factory: ~haxework.view.list.LabelListItem.factory + geometry.width: 100 + geometry.height: 100 + scroll: + $type: haxework.view.list.VScrollBarView + data: + - "aaa" - $type: haxework.view.SpriteView geometry.width: 60% geometry.height: 100% diff --git a/src/main/haxework/view/IView.hx b/src/main/haxework/view/IView.hx index 26b6f7b..16b15d2 100755 --- a/src/main/haxework/view/IView.hx +++ b/src/main/haxework/view/IView.hx @@ -5,6 +5,7 @@ import flash.geom.Rectangle; import haxework.view.geometry.Geometry; import haxework.view.group.IGroupView; import haxework.view.skin.ISkin; +import haxework.view.theme.StyleId; interface IView { @:style public var geometry(default, default):Geometry; @@ -18,7 +19,7 @@ interface IView { public var width(default, null):Float; public var height(default, null):Float; - public var styles(default, default):Array; + public var style(default, default):StyleId; public var content(default, null):C; diff --git a/src/main/haxework/view/ImageView.hx b/src/main/haxework/view/ImageView.hx index 94e6d4e..d141ca1 100755 --- a/src/main/haxework/view/ImageView.hx +++ b/src/main/haxework/view/ImageView.hx @@ -1,13 +1,12 @@ package haxework.view; import flash.display.BitmapData; +import haxework.net.ImageLoader; import haxework.view.skin.BitmapSkin; -import haxework.view.skin.ISkin; import haxework.view.utils.BitmapUtil; import haxework.view.utils.DrawUtil.FillType; -import haxework.net.ImageLoader; -@:style("image") class ImageView extends SpriteView { +class ImageView extends SpriteView { public var image(default, set):BitmapData; public var imageUrl(default, set):String; @@ -26,16 +25,10 @@ import haxework.net.ImageLoader; } } - override private function set_skin(value:SkinSet):SkinSet { - value = value.slice(0); - value.unshift(bitmapSkin); - return super.set_skin(value); - } - private function set_image(value:BitmapData):BitmapData { if (image != value) { if (stretch) { - setContentSize(value.width, value.height, "image"); + setSize(value.width, value.height, "image"); } image = value; if (color > -1) { diff --git a/src/main/haxework/view/ScrollView.hx b/src/main/haxework/view/ScrollView.hx index 1feddc4..8c1f489 100644 --- a/src/main/haxework/view/ScrollView.hx +++ b/src/main/haxework/view/ScrollView.hx @@ -4,7 +4,7 @@ import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.MouseEvent; import haxework.signal.Signal; -import haxework.view.geometry.Geometry.Position; +import haxework.view.geometry.Position; import haxework.view.group.HGroupView; import haxework.view.list.ScrollBarView; import haxework.view.list.VScrollBarView; @@ -23,7 +23,7 @@ class ScrollView extends HGroupView { public function new() { super(); layout.overflow = true; - skin = [Skin.color(0x000000, 0.0)]; + skin = Skin.transparent; mask = new Sprite(); content.addChild(mask); content.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheelEvent); diff --git a/src/main/haxework/view/View.hx b/src/main/haxework/view/View.hx index 7c1c8c2..71c5ad7 100755 --- a/src/main/haxework/view/View.hx +++ b/src/main/haxework/view/View.hx @@ -8,6 +8,7 @@ import haxework.view.geometry.SizeSet; import haxework.view.group.IGroupView; import haxework.view.skin.ISkin; import haxework.view.theme.ITheme; +import haxework.view.theme.StyleId; class View implements IView { @@ -18,7 +19,7 @@ class View implements IView { public var geometry(default, default):Geometry; public var skin(default, default):ISkin; - public var styles(default, default):Array; + public var style(default, default):StyleId; public var id(default, default):String; diff --git a/src/main/haxework/view/data/ButtonGroup.hx b/src/main/haxework/view/data/ButtonGroup.hx index de058ce..5899ffc 100644 --- a/src/main/haxework/view/data/ButtonGroup.hx +++ b/src/main/haxework/view/data/ButtonGroup.hx @@ -1,5 +1,6 @@ package haxework.view.data; +import haxework.view.theme.StyleId; import haxework.view.form.ToggleButtonView; import haxework.view.data.DataView.Factory; import haxe.EnumTools; @@ -11,7 +12,7 @@ using haxework.utils.StringUtil; class ButtonGroup extends DataView { public var selected(default, set):D; - public var buttonSkinId(default, set):String; + public var buttonStyle(default, set):StyleId; public function new(?layout:ILayout) { super(layout != null ? layout : new HorizontalLayout()); @@ -45,20 +46,20 @@ class ButtonGroup extends DataView { return selected; } - private function set_buttonSkinId(value:String):String { - if (buttonSkinId != value) { - buttonSkinId = value; + private function set_buttonStyle(value:StyleId):StyleId { + if (buttonStyle != value) { + buttonStyle = value; for (view in dataViews) { - view.skinId = buttonSkinId; + view.style = buttonStyle; } } - return buttonSkinId; + return buttonStyle; } override private function rebuild():Void { super.rebuild(); for (view in dataViews) { - view.skinId = buttonSkinId; + view.style = buttonStyle; } } diff --git a/src/main/haxework/view/form/ButtonView.hx b/src/main/haxework/view/form/ButtonView.hx index 00e3cce..c324dc7 100755 --- a/src/main/haxework/view/form/ButtonView.hx +++ b/src/main/haxework/view/form/ButtonView.hx @@ -23,7 +23,7 @@ class ButtonView extends LabelView { public function new() { super(); - skinId = "button"; + style = "button"; overed = false; downed = false; state = ButtonState.UP; diff --git a/src/main/haxework/view/form/LabelView.hx b/src/main/haxework/view/form/LabelView.hx index 008829c..30d564f 100755 --- a/src/main/haxework/view/form/LabelView.hx +++ b/src/main/haxework/view/form/LabelView.hx @@ -1,14 +1,14 @@ package haxework.view.form; -import haxework.view.core.HAlign; -import haxework.view.core.VAlign; +import haxework.view.geometry.HAlign; +import haxework.view.geometry.VAlign; import haxework.view.text.TextView; class LabelView extends TextView { public function new() { super(); - skinId = "label"; + style = "label"; fill = false; textField.selectable = false; textField.wordWrap = false; diff --git a/src/main/haxework/view/form/SelectView.hx b/src/main/haxework/view/form/SelectView.hx index 9627f68..132e566 100644 --- a/src/main/haxework/view/form/SelectView.hx +++ b/src/main/haxework/view/form/SelectView.hx @@ -1,11 +1,12 @@ package haxework.view.form; +import haxework.view.theme.StyleId; import flash.events.MouseEvent; import flash.geom.Point; import haxework.signal.Signal; -import haxework.view.geometry.Geometry.Position; -import haxework.view.core.HAlign; import haxework.view.data.DataView; +import haxework.view.geometry.HAlign; +import haxework.view.geometry.Position; import haxework.view.group.GroupView; import haxework.view.group.IGroupView; import haxework.view.layout.VerticalLayout; @@ -52,7 +53,7 @@ class SelectView extends GroupView { public var currentView(default, null):ButtonView; public var dataView(default, null):DataView; - public var labelSkinId(default, set):String; + public var labelStyle(default, set):StyleId; public var labelBuilder(default, set):D -> String; public var data(default, set):Array; public var selected(default, set):D; @@ -62,11 +63,11 @@ class SelectView extends GroupView { public function new() { super(new VerticalLayout()); - skin = [Skin.transparent]; + skin = Skin.transparent; currentView = new ButtonView(); currentView.onPress.connect(function(_) toggle()); dataView = new DataView(); - dataView.skinId = "dropdown"; + dataView.style = "dropdown"; dataView.geometry.position = ABSOLUTE; dataView.factory = factory; dataView.onDataSelect.connect(function(value:D):Void { @@ -80,23 +81,23 @@ class SelectView extends GroupView { private function factory(index:Int, value:D):LabelView { var result = new LabelView(); result.layout.hAlign = LEFT; - result.geometry.size.percent.width = 100; - if (labelSkinId != null) { - result.skinId = labelSkinId; + result.geometry.width.percent = 100; + if (labelStyle != null) { + result.style = labelStyle; } result.text = labelBuilder(value); return result; } - private function set_labelSkinId(value:String):String { - if (labelSkinId != value) { - labelSkinId = value; - currentView.skinId = labelSkinId; + private function set_labelStyle(value:StyleId):StyleId { + if (labelStyle != value) { + labelStyle = value; + currentView.style = labelStyle; for (view in dataView.dataViews) { - view.skinId = labelSkinId; + view.style = labelStyle; } } - return labelSkinId; + return labelStyle; } private function set_labelBuilder(value:D -> String):D -> String { diff --git a/src/main/haxework/view/frame/FrameView.hx b/src/main/haxework/view/frame/FrameView.hx index 6953319..c9c64a6 100644 --- a/src/main/haxework/view/frame/FrameView.hx +++ b/src/main/haxework/view/frame/FrameView.hx @@ -9,9 +9,9 @@ class FrameView extends GroupView { public function new(frameId:String, ?layout:ILayout) { super(layout != null ? layout : new VerticalLayout()); - skinId = "frame"; + style = "frame"; this.frameId = frameId; - this.geometry.size.stretch = true; + this.geometry.stretch = true; } public function onShow(data:D):Void {} diff --git a/src/main/haxework/view/geometry/Geometry.hx b/src/main/haxework/view/geometry/Geometry.hx index b9711d7..20b429f 100644 --- a/src/main/haxework/view/geometry/Geometry.hx +++ b/src/main/haxework/view/geometry/Geometry.hx @@ -9,6 +9,7 @@ class Geometry { public var vAlign(default, default):VAlign; public var position(default, default):Position; public var ratio(default, default):Float; + public var stretch(null, set):Bool; public function new() { this.padding = []; @@ -21,6 +22,14 @@ class Geometry { this.ratio = -1; } + private function set_stretch(value:Bool):Bool { + if (value) { + width.percent = 100; + height.percent = 100; + } + return value; + } + public function setSize(width:SizeValue, height:SizeValue):Geometry { this.width = width; this.height = height; diff --git a/src/main/haxework/view/group/GroupView.hx b/src/main/haxework/view/group/GroupView.hx index 5954481..5b89cd1 100755 --- a/src/main/haxework/view/group/GroupView.hx +++ b/src/main/haxework/view/group/GroupView.hx @@ -16,24 +16,6 @@ class GroupView extends SpriteView implements IGroupView { views = []; } - /*override private function set_width(value:Float):Float { - if (width != value) { - width = value; - toUpdate(); - toRedraw(); - } - return width; - } - - override private function set_height(value:Float):Float { - if (height != value) { - height = value; - toUpdate(); - toRedraw(); - } - return height; - }*/ - inline private function get_container():DisplayObjectContainer { return content; } diff --git a/src/main/haxework/view/layout/TailLayout.hx b/src/main/haxework/view/layout/TailLayout.hx index acf0416..616372a 100644 --- a/src/main/haxework/view/layout/TailLayout.hx +++ b/src/main/haxework/view/layout/TailLayout.hx @@ -1,6 +1,6 @@ package haxework.view.layout; -import haxework.view.core.VAlign; +import haxework.view.geometry.VAlign; import haxework.view.group.IGroupView; typedef Row = { @@ -73,6 +73,6 @@ class TailLayout extends DefaultLayout { y += row.height + margin; } - group.setContentSize(w, h, "group"); + group.setSize(w, h, "group"); } } diff --git a/src/main/haxework/view/layout/VerticalLayout.hx b/src/main/haxework/view/layout/VerticalLayout.hx index e144792..c40b2f5 100755 --- a/src/main/haxework/view/layout/VerticalLayout.hx +++ b/src/main/haxework/view/layout/VerticalLayout.hx @@ -35,7 +35,7 @@ class VerticalLayout extends DefaultLayout { case PERCENT: var result = view.geometry.height.value / 100 * leftSize; fixedSize += result + view.geometry.margin.vertical; - view.setSize(0, result, "percent.width"); + view.setSize(0, result, "percent.height"); case _: }; } diff --git a/src/main/haxework/view/list/HListView.hx b/src/main/haxework/view/list/HListView.hx index 2481c5f..58db277 100755 --- a/src/main/haxework/view/list/HListView.hx +++ b/src/main/haxework/view/list/HListView.hx @@ -1,8 +1,7 @@ package haxework.view.list; -import haxework.view.geometry.Geometry.SizeValue; -import haxework.view.core.HAlign; -import haxework.view.core.VAlign; +import haxework.view.geometry.HAlign; +import haxework.view.geometry.VAlign; import haxework.view.layout.HorizontalLayout; import haxework.view.layout.VerticalLayout; import haxework.view.list.ListView.IListItemView; @@ -11,17 +10,14 @@ class HListView extends ListView { public function new() { super(new VerticalLayout(), new HorizontalLayout()); - box.layout.hAlign = HAlign.LEFT; - box.layout.vAlign = VAlign.MIDDLE; + box.layout.hAlign = LEFT; + box.layout.vAlign = MIDDLE; } override private function recalcSize(item:IListItemView):Void { - itemSize = switch(item.geometry.width) { - case SizeValue.FIXED(value): value + item.geometry.margin.horizontal + box.layout.margin; - case _: 0; - } - size = Math.ceil(Math.max(0, box.width / itemSize)) + 2; - sizeDiff = size - ((box.width - box.layout.margin - 1) / itemSize); + itemSize = item.geometry.width.fixed + item.geometry.margin.horizontal + box.layout.margin; + itemCount = Math.ceil(Math.max(0, box.width / itemSize)) + 2; + sizeDiff = itemCount - ((box.width - box.layout.margin - 1) / itemSize); } override private function set_offsetDiff(value:Float):Float { diff --git a/src/main/haxework/view/list/HScrollBarView.hx b/src/main/haxework/view/list/HScrollBarView.hx index 113a532..2a8ca5c 100755 --- a/src/main/haxework/view/list/HScrollBarView.hx +++ b/src/main/haxework/view/list/HScrollBarView.hx @@ -6,9 +6,9 @@ class HScrollBarView extends ScrollBarView { public function new() { super(); - skinId = "scroll.horizontal"; - geometry.size.percent.width = 100; - geometry.size.fixed.height = 10; + style = "scroll.horizontal"; + geometry.width.percent = 100; + geometry.height.fixed = 10; } override private function onMouseDown(p:Point):Void { diff --git a/src/main/haxework/view/list/LabelListItem.hx b/src/main/haxework/view/list/LabelListItem.hx index 8d935fa..7abc490 100644 --- a/src/main/haxework/view/list/LabelListItem.hx +++ b/src/main/haxework/view/list/LabelListItem.hx @@ -1,7 +1,7 @@ package haxework.view.list; -import haxework.view.core.HAlign; import haxework.view.form.LabelView; +import haxework.view.geometry.HAlign; import haxework.view.list.ListView.IListItemView; private typedef Formatter = Int -> T -> String; @@ -19,8 +19,8 @@ class LabelListItem extends LabelView implements IListItemView { public function new(formatter:Formatter = null) { super(); this.formatter = formatter == null ? defaultFormatter : formatter; - geometry.size.percent.width = 100; - geometry.size.fixed.height = 20; + geometry.width.percent = 100; + geometry.height.fixed = 20; geometry.padding = 8; layout.hAlign = LEFT; } @@ -28,7 +28,7 @@ class LabelListItem extends LabelView implements IListItemView { private function set_data(value:T):T { data = value; text = formatter(item_index, value); - skinId = 'text${item_index % 2}'; + style = 'text${item_index % 2}'; return value; } diff --git a/src/main/haxework/view/list/ListView.hx b/src/main/haxework/view/list/ListView.hx index b1e084b..2115c1f 100755 --- a/src/main/haxework/view/list/ListView.hx +++ b/src/main/haxework/view/list/ListView.hx @@ -3,9 +3,9 @@ package haxework.view.list; import flash.events.MouseEvent; import haxework.signal.Signal; import haxework.utils.NumberUtil; -import haxework.view.geometry.Geometry.Position; -import haxework.view.core.HAlign; -import haxework.view.core.VAlign; +import haxework.view.geometry.Position; +import haxework.view.geometry.HAlign; +import haxework.view.geometry.VAlign; import haxework.view.form.ButtonView; import haxework.view.group.GroupView; import haxework.view.layout.ILayout; @@ -19,7 +19,7 @@ class ListView extends GroupView { public var offset(default, set):Int; private var offsetDiff(default, set):Float; - private var size(default, set):Int; + private var itemCount(default, set):Int; private var sizeDiff:Float; public var onItemSelect(default, null):Signal>; @@ -46,16 +46,16 @@ class ListView extends GroupView { main = new GroupView(layout); main.layout.hAlign = CENTER; main.layout.vAlign = MIDDLE; - main.geometry.size.stretch = true; + main.geometry.stretch = true; addView(main); box = new GroupView(layout); - box.geometry.size.stretch = true; + box.geometry.stretch = true; box.layout.overflow = true; main.addView(box); mask = new SpriteView(); - mask.geometry.size.stretch = true; + mask.geometry.stretch = true; mask.geometry.position = ABSOLUTE; - mask.skin.push(Skin.color(0xffffff)); + mask.skin = Skin.color(0xffffff); box.content.mask = mask.content; box.addView(mask); onItemSelect = new Signal(); @@ -128,12 +128,12 @@ class ListView extends GroupView { private function onMouseWheel(value:Int):Void {} private function set_offset(value:Int):Int { - value = NumberUtil.limitInt(value, 0, filteredData == null ? 0 : filteredData.length - size + 2); + value = NumberUtil.limitInt(value, 0, filteredData == null ? 0 : filteredData.length - itemCount + 2); if (offset != value) { if (filteredData != null) { //ToDo: constant for 2 if (value == 0) offsetDiff = 0; - if (value == filteredData.length - size + 2) offsetDiff = sizeDiff - 2; + if (value == filteredData.length - itemCount + 2) offsetDiff = sizeDiff - 2; } offset = value; render(); @@ -167,10 +167,10 @@ class ListView extends GroupView { if (data != null && factory != null) { filteredData = filter == null ? data : data.filter(filter); if (scroll != null) { - scroll.ratio = Math.min(1.0, (size - sizeDiff) / filteredData.length); + scroll.ratio = Math.min(1.0, (itemCount - sizeDiff) / filteredData.length); scroll.position = ((offset + offsetDiff) / filteredData.length); } - for (i in 0...size) { + for (i in 0...itemCount) { var item:IListItemView = items[i]; var index = offset + i; if (filteredData[index] == null) { @@ -192,10 +192,10 @@ class ListView extends GroupView { private function recalcSize(item:IListItemView):Void {} - private function set_size(value:Int):Int { - if (size != value) { - size = value; - var diff:Int = size - items.length; + private function set_itemCount(value:Int):Int { + if (itemCount != value) { + itemCount = value; + var diff:Int = itemCount - items.length; if (diff > 0) { for (i in 0...diff) { var item:IListItemView = factory(); @@ -213,7 +213,7 @@ class ListView extends GroupView { } } } - return size; + return itemCount; } private function set_offsetDiff(value:Float):Float { diff --git a/src/main/haxework/view/list/VListView.hx b/src/main/haxework/view/list/VListView.hx index 562c89e..cb21c03 100755 --- a/src/main/haxework/view/list/VListView.hx +++ b/src/main/haxework/view/list/VListView.hx @@ -1,8 +1,7 @@ package haxework.view.list; -import haxework.view.geometry.Geometry.SizeValue; -import haxework.view.core.HAlign; -import haxework.view.core.VAlign; +import haxework.view.geometry.HAlign; +import haxework.view.geometry.VAlign; import haxework.view.layout.HorizontalLayout; import haxework.view.layout.VerticalLayout; import haxework.view.list.ListView.IListItemView; @@ -11,17 +10,14 @@ class VListView extends ListView { public function new() { super(new VerticalLayout(), new HorizontalLayout()); - box.layout.hAlign = HAlign.CENTER; - box.layout.vAlign = VAlign.TOP; + box.layout.hAlign = CENTER; + box.layout.vAlign = TOP; } override private function recalcSize(item:IListItemView):Void { - itemSize = switch(item.geometry.height) { - case SizeValue.FIXED(value): value + item.geometry.margin.vertical + box.layout.margin; - case _: 0; - } - size = Math.ceil(Math.max(0, box.height / itemSize)) + 2; - sizeDiff = size - ((box.height - box.layout.margin - 1) / itemSize); + itemSize = item.geometry.height.fixed + item.geometry.margin.vertical + box.layout.margin; + itemCount = Math.ceil(Math.max(0, box.height / itemSize)) + 2; + sizeDiff = itemCount - ((box.height - box.layout.margin - 1) / itemSize); } override private function set_offsetDiff(value:Float):Float { diff --git a/src/main/haxework/view/list/VScrollBarView.hx b/src/main/haxework/view/list/VScrollBarView.hx index f605226..c358d45 100755 --- a/src/main/haxework/view/list/VScrollBarView.hx +++ b/src/main/haxework/view/list/VScrollBarView.hx @@ -6,9 +6,9 @@ class VScrollBarView extends ScrollBarView { public function new() { super(); - skinId = "scroll.vertical"; - geometry.size.percent.height = 100; - geometry.size.fixed.width = 10; + style = "scroll.vertical"; + geometry.height.percent = 100; + geometry.width.fixed = 10; } override private function onMouseDown(p:Point):Void { diff --git a/src/main/haxework/view/popup/PopupView.hx b/src/main/haxework/view/popup/PopupView.hx index 62b2529..42709fa 100755 --- a/src/main/haxework/view/popup/PopupView.hx +++ b/src/main/haxework/view/popup/PopupView.hx @@ -1,8 +1,7 @@ package haxework.view.popup; -import flash.display.DisplayObject; import flash.events.MouseEvent; -import haxework.view.geometry.Geometry.Position; +import haxework.view.geometry.Position; import haxework.view.group.GroupView; import haxework.view.skin.Skin; import promhx.Deferred; @@ -17,7 +16,7 @@ class PopupView extends GroupView { public function new() { super(); - geometry.size.stretch = true; + geometry.stretch = true; geometry.position = Position.ABSOLUTE; background = buildBackground(); background.content.addEventListener(MouseEvent.CLICK, onBackgroundClick); @@ -26,9 +25,9 @@ class PopupView extends GroupView { private function buildBackground():IView { var result = new SpriteView(); - result.geometry.size.stretch = true; + result.geometry.stretch = true; result.geometry.position = Position.ABSOLUTE; - result.skin = [Skin.color(0x000000, 0.6)]; + result.skin = Skin.color(0x000000, 0.6); return result; } diff --git a/src/main/haxework/view/skin/GeometrySkin.hx b/src/main/haxework/view/skin/GeometrySkin.hx deleted file mode 100644 index 066468d..0000000 --- a/src/main/haxework/view/skin/GeometrySkin.hx +++ /dev/null @@ -1,50 +0,0 @@ -package haxework.view.skin; - -import haxework.view.core.HAlign; -import haxework.view.core.VAlign; -import haxework.view.geometry.Geometry; - -class GeometrySkin implements ISkin> { - - private var geometry(default, default):Geometry; - - public function new(geometry:Geometry) { - this.geometry = geometry; - } - - public function draw(view:IView):Void { - var updated = false; - if (!geometry.padding.empty && view.geometry.padding != geometry.padding) { - view.geometry.padding = geometry.padding; - updated = true; - } - if (!geometry.margin.empty && view.geometry.margin != geometry.margin) { - view.geometry.margin = geometry.margin; - updated = true; - } - if (geometry.position != view.geometry.position) { - view.geometry.position = geometry.position; - updated = true; - } - if (geometry.hAlign != NONE && geometry.hAlign != view.geometry.hAlign) { - view.geometry.hAlign = geometry.hAlign; - updated = true; - } - if (geometry.vAlign != NONE && geometry.vAlign != view.geometry.vAlign) { - view.geometry.vAlign = geometry.vAlign; - updated = true; - } - if (!geometry.size.fixed.empty && geometry.size.fixed != view.geometry.size.fixed) { - view.geometry.size.fixed = geometry.size.fixed; - updated = true; - } - if (!geometry.size.percent.empty && geometry.size.percent != view.geometry.size.percent) { - view.geometry.size.percent = geometry.size.percent; - updated = true; - } - if (updated) { - view.toUpdate(); - view.toUpdateParent(); - } - } -} diff --git a/src/main/haxework/view/skin/LayoutSkin.hx b/src/main/haxework/view/skin/LayoutSkin.hx deleted file mode 100644 index 849f6a5..0000000 --- a/src/main/haxework/view/skin/LayoutSkin.hx +++ /dev/null @@ -1,35 +0,0 @@ -package haxework.view.skin; - -import haxework.view.core.HAlign; -import haxework.view.core.VAlign; -import haxework.view.group.IGroupView; -import haxework.view.layout.ILayout; - -class LayoutSkin implements ISkin { - - private var layout(default, default):ILayout; - - public function new(layout:ILayout) { - this.layout = layout; - } - - public function draw(view:IGroupView):Void { - var updated = false; - if (layout.margin > 0 && view.layout.margin != layout.margin) { - view.layout.margin = layout.margin; - updated = true; - } - if (layout.hAlign != NONE && layout.hAlign != view.layout.hAlign) { - view.layout.hAlign = layout.hAlign; - updated = true; - } - if (layout.vAlign != NONE && layout.vAlign != view.layout.vAlign) { - view.layout.vAlign = layout.vAlign; - updated = true; - } - if (updated) { - view.toUpdate(); - view.toUpdateParent(); - } - } -} diff --git a/src/main/haxework/view/skin/Skin.hx b/src/main/haxework/view/skin/Skin.hx index 71c705b..84085e1 100644 --- a/src/main/haxework/view/skin/Skin.hx +++ b/src/main/haxework/view/skin/Skin.hx @@ -1,20 +1,13 @@ package haxework.view.skin; import flash.display.BitmapData; -import haxework.view.geometry.Geometry; import haxework.view.form.ButtonView; -import haxework.view.layout.ILayout; -import haxework.view.text.ITextView; import haxework.view.utils.DrawUtil; class Skin { public static var transparent(default, never):ISkin = new ColorSkin(0, 0); - public static function size(width:Float, height:Float):ISkin { - return new GeometrySkin(new Geometry().setSize(width, height)); - } - public static function bitmap(image:BitmapData, fillType:FillType = null):ISkin { return new BitmapSkin(image, fillType); } @@ -27,10 +20,6 @@ class Skin { return new BorderSkin(color, alpha, tickness); } - public static function text(fontColor:Int, fontSize:Int, fontFamily:String = null, fontEmbed:Bool = false):ISkin { - return new TextSkin(fontColor, fontSize, fontFamily, fontEmbed); - } - public static function buttonColor(color:Int, borderColor:Int = -1):ISkin { return new ButtonColorSkin(color, borderColor); } @@ -50,12 +39,4 @@ class Skin { public static function scrollVertical(foreColor:Int, backColor:Int) { return new VScrollBarSkin(foreColor, backColor); } - - public static function geometry(geometry:Geometry):GeometrySkin { - return new GeometrySkin(geometry); - } - - public static function layout(layout:ILayout):LayoutSkin { - return new LayoutSkin(layout); - } } diff --git a/src/main/haxework/view/skin/TextSkin.hx b/src/main/haxework/view/skin/TextSkin.hx deleted file mode 100644 index 4dac2bf..0000000 --- a/src/main/haxework/view/skin/TextSkin.hx +++ /dev/null @@ -1,27 +0,0 @@ -package haxework.view.skin; - -import haxework.view.text.ITextView; - -class TextSkin implements ISkin { - - public var fontColor(default, default):Int; - public var fontSize(default, default):Int; - public var fontFamily(default, default):String; - public var fontEmbed(default, default):Bool; - - public function new(fontColor:Int, fontSize:Int, fontFamily:String, fontEmbed:Bool=false) { - this.fontColor = fontColor; - this.fontSize = fontSize; - this.fontFamily = fontFamily; - this.fontEmbed = fontEmbed; - } - - public function draw(view:ITextView):Void { - view.fontColor = fontColor; - if (fontSize > 0) { - view.fontSize = fontSize; - } - view.fontFamily = fontFamily; - view.fontEmbed = fontEmbed; - } -} diff --git a/src/main/haxework/view/text/FontStyle.hx b/src/main/haxework/view/text/FontStyle.hx index 7fa9464..3d14af3 100644 --- a/src/main/haxework/view/text/FontStyle.hx +++ b/src/main/haxework/view/text/FontStyle.hx @@ -9,4 +9,13 @@ class FontStyle { public var size(default, default):Int; public var bold(default, default):Bool; public var align(default, default):TextFormatAlign; + + public function new() { + family = null; + embed = false; + color = 0xffffff; + size = 16; + bold = false; + align = null; + } } diff --git a/src/main/haxework/view/text/ITextView.hx b/src/main/haxework/view/text/ITextView.hx index 3a95907..cd13e59 100755 --- a/src/main/haxework/view/text/ITextView.hx +++ b/src/main/haxework/view/text/ITextView.hx @@ -2,9 +2,11 @@ package haxework.view.text; import flash.text.TextField; import haxework.view.IView; +import haxework.view.layout.ILayout; interface ITextView extends IView { @:style public var font(default, default):FontStyle; + @:style public var layout(default, default):ILayout; public var textField(default, null):TextField; public var text(get, set):String; diff --git a/src/main/haxework/view/text/TextView.hx b/src/main/haxework/view/text/TextView.hx index e1aa05a..fb0841d 100755 --- a/src/main/haxework/view/text/TextView.hx +++ b/src/main/haxework/view/text/TextView.hx @@ -1,40 +1,34 @@ package haxework.view.text; -import haxework.view.layout.ILayout; -import haxework.view.layout.Layout; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.text.TextFormatAlign; -import haxework.view.core.HAlign; -import haxework.view.core.VAlign; import haxework.text.BitmapTextField; import haxework.text.TextUtil; +import haxework.view.geometry.HAlign; +import haxework.view.geometry.VAlign; +import haxework.view.layout.ILayout; +import haxework.view.layout.Layout; class TextView extends SpriteView implements ITextView { + public var font(default, default):FontStyle; + public var layout(default, default):ILayout; public var textField(default, null):TextField; public var text(get, set):String; - public var layout:ILayout; private var _text:String; - public var align(default, set):TextFormatAlign; - public var fontFamily(default, set):String; - public var fontEmbed(default, set):Bool; - public var fontColor(default, set):Int; - public var fontSize(default, set):Int; - public var fontBold(default, set):Bool; public var fill(default, set):Bool = true; public var shadow(default, set):Bool; public var shadowColor(default, set):Int; - private var textFormat:TextFormat; - public function new() { super(); - skinId = "text"; + font = new FontStyle(); + style = "text"; layout = new Layout(); textField = buildTextField(); textField.width = 1; @@ -45,11 +39,6 @@ class TextView extends SpriteView implements ITextView { textField.borderColor = 0xff0000; textField.border = true; #end - textFormat = textField.defaultTextFormat; - textFormat.font = "Arial"; - textFormat.size = 16; - textFormat.leading = 0; - textFormat.align = TextFormatAlign.LEFT; content.addChild(textField); } @@ -81,77 +70,24 @@ class TextView extends SpriteView implements ITextView { return _text; } - private function set_align(value:TextFormatAlign):TextFormatAlign { - if (align != value) { - align = value; - textFormat.align = value; - toUpdate(); - } - return align; - } - - private function set_fontFamily(value:String):String { - if (fontFamily != value) { - fontFamily = value; - textFormat.font = fontFamily; - toUpdate(); - } - return fontFamily; - } - - private function set_fontEmbed(value:Bool):Bool { - if (fontEmbed != value) { - fontEmbed = value; - toUpdate(); - } - return fontEmbed; - } - - private function set_fontColor(value:Int):Int { - if (fontColor != value) { - fontColor = value; - textFormat.color = fontColor; - toUpdate(); - } - return fontColor; - } - - private function set_fontSize(value:Int):Int { - if (fontSize != value) { - fontSize = value; - textFormat.size = fontSize; - toUpdate(); - } - return fontSize; - } - - private function set_fontBold(value:Bool):Bool { - if (fontBold != value) { - fontBold = value; - textFormat.bold = fontBold; - toUpdate(); - } - return fontBold; - } - private function currentText():String { return _text; } private function updateTextSize():Void { var size = TextUtil.getSize(textField); - if (!Math.isNaN(size.x) && !Math.isNaN(size.y)) { - setContentSize(size.x, size.y, "text"); + if (!Math.isNaN(size.x) && !Math.isNaN(size.y)/* && size.x > 0 && size.y > 0*/) { + setSize(size.x, size.y, "text"); } } override public function update():Void { - textField.embedFonts = fontEmbed; - textField.defaultTextFormat = textFormat; + textField.embedFonts = font.embed; + textField.defaultTextFormat = new TextFormat(font.family, font.size, font.color, font.bold); textField.autoSize = fill ? TextFieldAutoSize.NONE : TextFieldAutoSize.LEFT; var t:String = currentText(); if (t != null) textField.text = t; - textField.setTextFormat(textFormat); + textField.setTextFormat(textField.defaultTextFormat); updateTextSize(); placeTextField(textField); //ToDo: @@ -166,7 +102,7 @@ class TextView extends SpriteView implements ITextView { private function placeTextField(textField:TextField):Void { textField.width = width; - textField.height = geometry.size.content.exists("text") ? geometry.size.content.get("text").height : height; + textField.height = height; // ToDo: textField.x = switch (layout.hAlign) { case LEFT | NONE: geometry.padding.left; diff --git a/src/main/haxework/view/theme/ITheme.hx b/src/main/haxework/view/theme/ITheme.hx index d94dfe2..63ef6fe 100644 --- a/src/main/haxework/view/theme/ITheme.hx +++ b/src/main/haxework/view/theme/ITheme.hx @@ -1,7 +1,6 @@ package haxework.view.theme; import haxework.color.Color; -import haxework.view.skin.ISkin; typedef ThemeFont = { @:optional var name:String; diff --git a/src/main/haxework/view/theme/StyleId.hx b/src/main/haxework/view/theme/StyleId.hx new file mode 100644 index 0000000..e49f0cd --- /dev/null +++ b/src/main/haxework/view/theme/StyleId.hx @@ -0,0 +1,24 @@ +package haxework.view.theme; + +abstract StyleId(Array) { + + public function new(value:Array) { + this = value; + } + + @:to public inline function toArray():Array { + return this; + } + + @:to public inline function toString():String { + return this.join("."); + } + + @:from public static inline function fromArray(value:Array):StyleId { + return new StyleId(value); + } + + @:from public static inline function fromString(value:String):StyleId { + return new StyleId(value.split(".")); + } +} diff --git a/src/main/haxework/view/theme/Theme.hx b/src/main/haxework/view/theme/Theme.hx index 2e06f5b..3d23f5d 100644 --- a/src/main/haxework/view/theme/Theme.hx +++ b/src/main/haxework/view/theme/Theme.hx @@ -1,19 +1,12 @@ package haxework.view.theme; -import haxework.resources.Resources.ResMap; import flash.text.Font; import flash.text.FontType; import haxework.color.Color; -import haxework.view.geometry.Geometry; -import haxework.view.skin.ISkin; -import haxework.view.skin.Skin; import haxework.view.theme.ITheme; using haxework.color.ColorUtil; -//ToDo: temp -typedef SkinSet = Array>; - class Theme implements ITheme { // ToDo: configurable public var baseFontSize = 18; @@ -23,10 +16,7 @@ class Theme implements ITheme { public var font(default, set):ThemeFont; public var colors(default, set):ThemeColors; - private var data:ResMap; - public function new(?font:ThemeFont, ?colors:ThemeColors) { - data = new ResMap(); this.font = font; this.colors = colors; L.d("Theme", 'font: ${this.font}'); @@ -50,71 +40,7 @@ class Theme implements ITheme { } 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(styles:Array, view:IView):Void { @@ -126,9 +52,6 @@ class Theme implements ITheme { font = {}; } var fonts = Font.enumerateFonts(!font.embed); - for (item in fonts) { - trace(item.fontName); - } if (font.name == null) { var flashFont = Font.enumerateFonts(!font.embed)[0]; font = {