From 34c6a269de538caea3fbdf9f739891b74000632f Mon Sep 17 00:00:00 2001 From: shmyga Date: Mon, 25 Feb 2019 17:39:17 +0300 Subject: [PATCH] [skin] process contentSize views in bitmap skins --- src/main/haxework/gui/TextView.hx | 2 +- src/main/haxework/gui/frame/FrameSwitcher.hx | 3 + src/main/haxework/gui/list/ListView.hx | 2 +- src/main/haxework/gui/skin/BitmapSkin.hx | 49 +++++----- .../haxework/gui/skin/ButtonBitmapSkin.hx | 96 ++++++++++--------- src/main/haxework/gui/skin/Skin.hx | 14 +++ src/main/haxework/gui/skin/TextSkin.hx | 5 +- 7 files changed, 99 insertions(+), 72 deletions(-) diff --git a/src/main/haxework/gui/TextView.hx b/src/main/haxework/gui/TextView.hx index 3a86dfd..5c1adc1 100755 --- a/src/main/haxework/gui/TextView.hx +++ b/src/main/haxework/gui/TextView.hx @@ -175,7 +175,7 @@ class TextView extends SpriteView implements ITextView { if (t != null) textField.text = t; textField.setTextFormat(textFormat); updateTextSize(); - if (contentSize) { + if (contentSize && _text != null && _text.length > 0) { #if html5 var h = _textHeight; var w = _textWidth; diff --git a/src/main/haxework/gui/frame/FrameSwitcher.hx b/src/main/haxework/gui/frame/FrameSwitcher.hx index 54d9061..2dcde1c 100755 --- a/src/main/haxework/gui/frame/FrameSwitcher.hx +++ b/src/main/haxework/gui/frame/FrameSwitcher.hx @@ -32,6 +32,9 @@ class FrameSwitcher extends GroupView implements IFrameSwitcher { prev = current; } current = frames.get(id); + if (current == null) { + throw 'frame "$id" not found'; + } addView(current); //ToDo: if (content.stage != null) content.stage.focus = cast(current, SpriteView).content; diff --git a/src/main/haxework/gui/list/ListView.hx b/src/main/haxework/gui/list/ListView.hx index ebbbb83..f249561 100755 --- a/src/main/haxework/gui/list/ListView.hx +++ b/src/main/haxework/gui/list/ListView.hx @@ -231,6 +231,6 @@ class ListView extends GroupView { } interface IListItemView extends IView { - public var item_index(default, set):Int; + public var item_index(default, default):Int; public var data(default, set):D; } diff --git a/src/main/haxework/gui/skin/BitmapSkin.hx b/src/main/haxework/gui/skin/BitmapSkin.hx index 37b258a..c82d1c5 100755 --- a/src/main/haxework/gui/skin/BitmapSkin.hx +++ b/src/main/haxework/gui/skin/BitmapSkin.hx @@ -6,33 +6,36 @@ import haxework.gui.utils.DrawUtil; class BitmapSkin implements ISkin { - public var width(default, null):Float; - public var height(default, null):Float; + public var width(default, null):Float; + public var height(default, null):Float; - public var image(null, set):BitmapData; - public var color(default, default):Int; - public var fillType(default, default):FillType; + public var image(null, set):BitmapData; + public var color(default, default):Int; + public var fillType(default, default):FillType; - public function new(image:BitmapData = null, fillType = null, color = -1) { - if (image != null) { - this.image = image; + public function new(image:BitmapData = null, fillType = null, color = -1) { + if (image != null) { + this.image = image; + } + this.fillType = fillType; + this.color = color; } - this.fillType = fillType; - this.color = color; - } - private function set_image(value:BitmapData):BitmapData { - if (image != value) { - image = value; - width = image.width; - height = image.height; + private function set_image(value:BitmapData):BitmapData { + if (image != value) { + image = value; + width = image.width; + height = image.height; + } + return image; } - return image; - } - - public function draw(view:SpriteView):Void { - if (image == null) return; - DrawUtil.draw(view.content.graphics, image, new Rectangle(0, 0, view.width, view.height), fillType, color); - } + public function draw(view:SpriteView):Void { + if (image == null) return; + DrawUtil.draw(view.content.graphics, image, new Rectangle(0, 0, view.width, view.height), fillType, color); + if (view.contentSize) { + view.w = image.width; + view.h = image.height; + } + } } diff --git a/src/main/haxework/gui/skin/ButtonBitmapSkin.hx b/src/main/haxework/gui/skin/ButtonBitmapSkin.hx index cb4c97c..e7bcd5c 100755 --- a/src/main/haxework/gui/skin/ButtonBitmapSkin.hx +++ b/src/main/haxework/gui/skin/ButtonBitmapSkin.hx @@ -8,60 +8,64 @@ import haxework.gui.utils.DrawUtil; class ButtonBitmapSkin implements ISkin { - public var width(default, null):Float; - public var height(default, null):Float; + public var width(default, null):Float; + public var height(default, null):Float; - public var fillType(default, default):FillType; - public var color(default, default):Int; - public var image(null, set):BitmapData; - public var upImage(null, set):BitmapData; - public var overImage(null, set):BitmapData; - public var downImage(null, set):BitmapData; - public var disableImage(null, default):BitmapData; + public var fillType(default, default):FillType; + public var color(default, default):Int; + public var image(null, set):BitmapData; + public var upImage(null, set):BitmapData; + public var overImage(null, set):BitmapData; + public var downImage(null, set):BitmapData; + public var disableImage(null, default):BitmapData; - private var images:Map; - private var disable:BitmapData; + private var images:Map; + private var disable:BitmapData; - public function new(image:BitmapData = null, fillType:FillType = null, color = -1) { - images = new Map(); - if (image != null) { - this.image = image; + public function new(image:BitmapData = null, fillType:FillType = null, color = -1) { + images = new Map(); + if (image != null) { + this.image = image; + } + this.fillType = fillType; + this.color = color; } - this.fillType = fillType; - this.color = color; - } - private function set_image(value:BitmapData):BitmapData { - width = value.width; - height = value.height; - images.set(ButtonState.UP, value); - images.set(ButtonState.DOWN, BitmapUtil.multiply(value, 0.8)); - images.set(ButtonState.OVER, BitmapUtil.multiply(value, 1.2)); - disable = BitmapUtil.grayscale(value, 0.2); - return value; - } + private function set_image(value:BitmapData):BitmapData { + width = value.width; + height = value.height; + images.set(ButtonState.UP, value); + images.set(ButtonState.DOWN, BitmapUtil.multiply(value, 0.8)); + images.set(ButtonState.OVER, BitmapUtil.multiply(value, 1.2)); + disable = BitmapUtil.grayscale(value, 0.2); + return value; + } - private function set_upImage(value:BitmapData):BitmapData { - width = value.width; - height = value.height; - images.set(ButtonState.UP, value); - return value; - } + private function set_upImage(value:BitmapData):BitmapData { + width = value.width; + height = value.height; + images.set(ButtonState.UP, value); + return value; + } - private function set_overImage(value:BitmapData):BitmapData { - images.set(ButtonState.OVER, value); - return value; - } + private function set_overImage(value:BitmapData):BitmapData { + images.set(ButtonState.OVER, value); + return value; + } - private function set_downImage(value:BitmapData):BitmapData { - images.set(ButtonState.DOWN, value); - return value; - } + private function set_downImage(value:BitmapData):BitmapData { + images.set(ButtonState.DOWN, value); + return value; + } - public function draw(view:ButtonView):Void { - if (images == null) return; - var image:BitmapData = view.disabled ? disableImage == null ? disable : disableImage : images.get(view.state); - DrawUtil.draw(view.content.graphics, image, new Rectangle(0, 0, view.width, view.height), fillType, color); - } + public function draw(view:ButtonView):Void { + if (images == null) return; + var image:BitmapData = view.disabled ? disableImage == null ? disable : disableImage : images.get(view.state); + DrawUtil.draw(view.content.graphics, image, new Rectangle(0, 0, view.width, view.height), fillType, color); + if (view.contentSize) { + view.w = image.width; + view.h = image.height; + } + } } diff --git a/src/main/haxework/gui/skin/Skin.hx b/src/main/haxework/gui/skin/Skin.hx index 229fb3b..fb3b90d 100644 --- a/src/main/haxework/gui/skin/Skin.hx +++ b/src/main/haxework/gui/skin/Skin.hx @@ -1,7 +1,13 @@ package haxework.gui.skin; +import flash.display.BitmapData; + class Skin { + public static function bitmap(image:BitmapData): ISkin { + return new BitmapSkin(image); + } + public static function color(color: Int, alpha: Float = 1.0): ISkin { return new ColorSkin(color, alpha); } @@ -9,4 +15,12 @@ class Skin { public static function border(color: Int, alpha: Float = 1.0, tickness: Float = 1.0): ISkin { return new BorderSkin(color, alpha, tickness); } + + public static function size(width:Float, height:Float): ISkin { + return new SizeSkin(width, height); + } + + public static function text(fontColor:Int, fontSize:Int, fontFamily:String = null):ISkin { + return new TextSkin(fontColor, fontSize, fontFamily); + } } diff --git a/src/main/haxework/gui/skin/TextSkin.hx b/src/main/haxework/gui/skin/TextSkin.hx index 1dc1ec5..e08785d 100644 --- a/src/main/haxework/gui/skin/TextSkin.hx +++ b/src/main/haxework/gui/skin/TextSkin.hx @@ -3,15 +3,18 @@ package haxework.gui.skin; class TextSkin implements ISkin { public var fontColor(default, default):Int; + public var fontSize(default, default):Int; public var fontFamily(default, default):String; - public function new(fontColor:Int = 0xffffff, fontFamily:String = null) { + public function new(fontColor:Int, fontSize:Int, fontFamily:String) { this.fontColor = fontColor; + this.fontSize = fontSize; this.fontFamily = fontFamily; } public function draw(view:ITextView):Void { view.fontColor = fontColor; + view.fontSize = fontSize; view.fontFamily = fontFamily; } }