[demo] update

This commit is contained in:
2019-02-13 10:53:43 +03:00
parent e517c0a298
commit 78ecd35587
28 changed files with 370 additions and 174 deletions

View File

@@ -42,6 +42,7 @@ class Root {
View.updater.stage = content.stage;
content.stage.addEventListener(Event.RESIZE, onResize);
content.stage.stageFocusRect = false;
onResize();
}

View File

@@ -0,0 +1,72 @@
package haxework.gui;
import flash.display.Shape;
import haxework.gui.skin.Skin;
import flash.events.MouseEvent;
import haxework.gui.list.ScrollBarView;
import haxework.signal.Signal;
class ScrollView extends HGroupView {
public var view(default, set):IView<Dynamic>;
public var scroll(default, set):ScrollBarView;
public var ratio(default, null):Signal<Float> = new Signal();
public var position(default, set):Float = 0;
private var mask:Shape;
public function new() {
super();
skin = [Skin.color(0x0000FF, 1.0)];
mask = new Shape();
content.addChild(mask);
content.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheelEvent);
}
private function onMouseWheelEvent(event:MouseEvent):Void {
#if flash event.preventDefault(); #end
position -= event.delta / 50;
}
private function set_view(value:IView<Dynamic>):IView<Dynamic> {
view = value;
views = [view, scroll];
view.content.mask = mask;
return view;
}
private function set_scroll(value:ScrollBarView):ScrollBarView {
scroll = value;
views = [view, scroll];
ratio.connect(function(ratio) {
if (scroll.ratio == ratio) return;
scroll.ratio = ratio;
scroll.visible = scroll.inLayout = ratio < 1;
});
scroll.onScroll.connect(function(position) this.position = position);
return scroll;
}
override public function set_views(value:Array<IView<Dynamic>>):Array<IView<Dynamic>> {
return super.set_views(value.filter(function(view) return view != null));
}
private function set_position(value:Float):Float {
position = Math.min(Math.max(0, value), 1 - (height / view.height));
scroll.position = position;
invalidate();
return position;
}
override public function update():Void {
super.update();
ratio.emit(height / view.height);
view.y = - position * view.height;
// mask redraw
mask.graphics.clear();
mask.graphics.beginFill(0, 0);
mask.graphics.drawRect(0, 0, width, height);
mask.graphics.endFill();
}
}

View File

@@ -1,32 +1,31 @@
package haxework.gui.frame;
import haxework.animate.IAnimate;
import flash.display.Sprite;
import haxework.gui.IView;
import haxework.gui.GroupView;
class FrameSwitcher extends GroupView implements IFrameSwitcher {
public var current(default, null):Null<IView>;
private var frames:Map<String, IView>;
public var current(default, null):Null<IView<Dynamic>>;
private var frames:Map<String, IView<Dynamic>>;
public var animateFactory(default, default):Class<IAnimate>;
private var animate:IAnimate;
public function new() {
super();
frames = new Map<String, IView>();
frames = new Map<String, IView<Dynamic>>();
current = null;
}
private function buildAnimate(view:IView):Null<IAnimate> {
private function buildAnimate(view:IView<Dynamic>):Null<IAnimate> {
if (animateFactory != null) {
return Type.createInstance(animateFactory, [view]);
}
return null;
}
public function change(id:String):IView {
public function change(id:String):IView<Dynamic> {
var prev = null;
if (current != null) {
if (current.id == id) return current;
@@ -50,7 +49,7 @@ class FrameSwitcher extends GroupView implements IFrameSwitcher {
return current;
}
private function removePrev(prev:Null<IView>):Void {
private function removePrev(prev:Null<IView<Dynamic>>):Void {
if (prev != null) {
var onHideMethod:Dynamic = Reflect.field(prev, "onHide");
if (onHideMethod != null) Reflect.callMethod(prev, onHideMethod, []);
@@ -58,7 +57,7 @@ class FrameSwitcher extends GroupView implements IFrameSwitcher {
}
}
override public function set_views(value:Array<IView>):Array<IView> {
override public function set_views(value:Array<IView<Dynamic>>):Array<IView<Dynamic>> {
views = [];
if (value.length > 0) {
for (view in value) {

View File

@@ -2,7 +2,7 @@ package haxework.gui.frame;
import haxework.gui.IView;
interface IFrameSwitcher extends IView {
public var current(default, null):Null<IView>;
public function change(id:String):IView;
}
interface IFrameSwitcher extends IView<Dynamic> {
public var current(default, null):Null<IView<Dynamic>>;
public function change(id:String):IView<Dynamic>;
}

View File

@@ -0,0 +1,58 @@
package haxework.gui.layout;
typedef Row = {
var width:Float;
var height:Float;
var views:Array<IView<Dynamic>>;
}
class TailLayout extends DefaultLayout {
public function new() {
super();
}
// ToDo: check group.layoutAlign
private function placeRow(group:IGroupView, y:Float, row:Row):Void {
var x:Float = (group.width - row.width) / 2;
for (v in row.views) {
v.x = x;
v.y = y + (row.height - v.height) / 2;
x += v.width + group.layoutMargin;
}
}
override public function place(group:IGroupView, views:Array<IView<Dynamic>>):Void {
var rows:Array<Row> = [];
var row:Row = {
width: 0,
height: 0,
views: [],
}
for (view in views) {
if (row.width + view.width + group.layoutMargin + group.leftMargin + group.rightMargin > group.width) {
rows.push(row);
row = {
width: 0,
height: 0,
views: [],
};
}
row.views.push(view);
row.width += view.width + group.layoutMargin;
row.height = Math.max(row.height, view.height);
}
rows.push(row);
var h:Float = Lambda.fold(rows, function(row, h) return row.height + h, 0) + group.layoutMargin * (rows.length - 1);
var y:Float = Math.max(group.topMargin, (group.height - h) / 2);
y = 0;
for (row in rows) {
placeRow(group, y, row);
y += row.height + group.layoutMargin;
}
if (group.contentSize) {
group.height = h;
}
}
}

View File

@@ -1,11 +1,10 @@
package haxework.gui.list;
import haxework.gui.list.ListView.IListItemView;
import haxework.gui.core.HAlign;
import haxework.gui.layout.VerticalLayout;
import haxework.gui.list.HScrollView;
import haxework.gui.core.VAlign;
import haxework.gui.layout.HorizontalLayout;
import haxework.gui.layout.VerticalLayout;
import haxework.gui.list.ListView.IListItemView;
class HListView<D> extends ListView<D> {
@@ -30,4 +29,4 @@ class HListView<D> extends ListView<D> {
override private function onMouseWheel(value:Int):Void {
offset = offset + value;
}
}
}

View File

@@ -2,7 +2,7 @@ package haxework.gui.list;
import flash.geom.Point;
class HScrollView extends ScrollView {
class HScrollBarView extends ScrollBarView {
override private function onMouseDown(p:Point):Void {
mousePosition = p.x - width * position;

View File

@@ -20,7 +20,7 @@ class ListView<D> extends GroupView {
private var sizeDiff:Float;
public var onItemSelect(default, null):Signal<IListItemView<D>>;
public var scroll(default, set):ScrollView;
public var scroll(default, set):ScrollBarView;
public var prev(default, set):ButtonView;
public var next(default, set):ButtonView;
@@ -68,7 +68,7 @@ class ListView<D> extends GroupView {
content.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheelEvent);
}
private function set_scroll(value:ScrollView):ScrollView {
private function set_scroll(value:ScrollBarView):ScrollBarView {
if (scroll != null) {
scroll.onScroll.disconnect(onScroll);
removeView(scroll);

View File

@@ -2,7 +2,7 @@ package haxework.gui.list;
import haxework.gui.skin.ISkin;
class HScrollSkin implements ISkin<ScrollView> {
class HScrollBarSkin implements ISkin<ScrollBarView> {
public var foreColor(default, default):Int;
public var backColor(default, default):Int;
@@ -11,7 +11,7 @@ class HScrollSkin implements ISkin<ScrollView> {
this.backColor = backColor;
}
public function draw(view:ScrollView):Void {
public function draw(view:ScrollBarView):Void {
if (view.ratio < 1) {
view.content.graphics.beginFill(backColor);
view.content.graphics.drawRect(0, 0, view.width, view.height);
@@ -22,7 +22,7 @@ class HScrollSkin implements ISkin<ScrollView> {
}
}
class VScrollSkin implements ISkin<ScrollView> {
class VScrollBarSkin implements ISkin<ScrollBarView> {
public var foreColor(default, default):Int;
public var backColor(default, default):Int;
@@ -31,7 +31,7 @@ class VScrollSkin implements ISkin<ScrollView> {
this.backColor = backColor;
}
public function draw(view:ScrollView):Void {
public function draw(view:ScrollBarView):Void {
if (view.ratio < 1) {
view.content.graphics.beginFill(backColor);
view.content.graphics.drawRect(0, 0, view.width, view.height);
@@ -42,13 +42,13 @@ class VScrollSkin implements ISkin<ScrollView> {
}
}
class ScrollSkin {
public static function vertical(foreColor:Int = 0xffffff, backColor:Int = 0x707070) {
return new VScrollSkin(foreColor, backColor);
}
class ScrollBarSkin {
public static function horizontal(foreColor:Int = 0xffffff, backColor:Int = 0x707070) {
return new HScrollSkin(foreColor, backColor);
return new HScrollBarSkin(foreColor, backColor);
}
public static function vertical(foreColor:Int = 0xffffff, backColor:Int = 0x707070) {
return new VScrollBarSkin(foreColor, backColor);
}
}

View File

@@ -5,21 +5,20 @@ import haxework.utils.NumberUtil;
import flash.geom.Point;
import flash.events.MouseEvent;
class ScrollView extends SpriteView {
class ScrollBarView extends SpriteView {
public var position(default, set):Float;
public var ratio(default, set):Float;
public var onScroll(default, null):Signal<Float>;
public var onScroll(default, null):Signal<Float> = new Signal();
private var mousePosition:Float;
public function new() {
super();
content.buttonMode = true;
position = 0;
ratio = 1;
onScroll = new Signal();
position = 0;
content.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownEvent);
}

View File

@@ -1,11 +1,10 @@
package haxework.gui.list;
import haxework.gui.list.ListView.IListItemView;
import haxework.gui.core.VAlign;
import haxework.gui.layout.VerticalLayout;
import haxework.gui.list.VScrollView;
import haxework.gui.core.HAlign;
import haxework.gui.core.VAlign;
import haxework.gui.layout.HorizontalLayout;
import haxework.gui.layout.VerticalLayout;
import haxework.gui.list.ListView.IListItemView;
class VListView<D> extends ListView<D> {
@@ -30,4 +29,4 @@ class VListView<D> extends ListView<D> {
override private function onMouseWheel(value:Int):Void {
offset = offset - value;
}
}
}

View File

@@ -2,7 +2,7 @@ package haxework.gui.list;
import flash.geom.Point;
class VScrollView extends ScrollView {
class VScrollBarView extends ScrollBarView {
override private function onMouseDown(p:Point):Void {
mousePosition = p.y - height * position;

View File

@@ -0,0 +1,20 @@
package haxework.gui.skin;
class BorderSkin implements ISkin<SpriteView> {
public var color(default, default):Int;
public var alpha(default, default):Float;
public var tickness(default, default):Float;
public function new(color:Int = 0xffffff, alpha:Float = 1.0, tickness: Float = 1.0) {
this.color = color;
this.alpha = alpha;
this.tickness = tickness;
}
public function draw(view:SpriteView):Void {
view.content.graphics.lineStyle(tickness, color, alpha, true);
view.content.graphics.drawRect(0, 0, view.width, view.height);
view.content.graphics.lineStyle();
}
}

View File

@@ -5,4 +5,8 @@ class Skin {
public static function color(color: Int, alpha: Float = 1.0): ISkin<SpriteView> {
return new ColorSkin(color, alpha);
}
public static function border(color: Int, alpha: Float = 1.0, tickness: Float = 1.0): ISkin<SpriteView> {
return new BorderSkin(color, alpha, tickness);
}
}

View File

@@ -19,7 +19,7 @@ class TraceLogger extends BaseLogger {
var str = flash.Boot.__string_rec(v, "");
untyped __global__["trace"](str);
#else
untyped flash.Boot.__trace(v);
untyped flash.Boot.__trace(v, infos);
#end
#elseif neko
untyped {