UNPKG

starling-framework

Version:

A fast, productive library for 2D cross-platform development.

163 lines (147 loc) 6.35 kB
// Class: starling.utils.ButtonBehavior var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../hxClasses_stub").default; var $hxEnums = require("./../../hxEnums_stub").default; var $import = require("./../../import_stub").default; var $bind = require("./../../bind_stub").default; function openfl_ui_Mouse() {return $import(require("openfl/ui/Mouse"));} function starling_display_ButtonState() {return require("./../../starling/display/ButtonState");} function starling_utils_Execute() {return require("./../../starling/utils/Execute");} function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");} function openfl_errors_ArgumentError() {return $import(require("openfl/errors/ArgumentError"));} function openfl_geom_Rectangle() {return $import(require("openfl/geom/Rectangle"));} // Constructor var ButtonBehavior = function(target,onStateChange,minHitAreaSize,abortDistance) { if(abortDistance == null) { abortDistance = 50; } if(minHitAreaSize == null) { minHitAreaSize = 44; } if(target == null) { throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("target cannot be null")); } if(onStateChange == null) { throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("onStateChange cannot be null")); } this.__target = target; this.__target.addEventListener("touch",$bind(this,this.onTouch)); this.__onStateChange = onStateChange; this.__minHitAreaSize = minHitAreaSize; this.__abortDistance = abortDistance; this.__triggerBounds = new (openfl_geom_Rectangle().default)(); this.__state = "up"; this.__useHandCursor = true; this.__enabled = true; } // Meta ButtonBehavior.__name__ = "starling.utils.ButtonBehavior"; ButtonBehavior.__isInterface__ = false; ButtonBehavior.prototype = { onTouch: function(event) { (openfl_ui_Mouse().default).cursor = this.__useHandCursor && this.__enabled && event.interactsWith(this.__target) ? "button" : "auto"; var touch = event.getTouch(this.__target); var isWithinBounds; if(!(!this.__enabled)) { if(touch == null) { this.set_state("up"); } else if(touch.get_phase() == "hover") { this.set_state("over"); } else if(touch.get_phase() == "began" && this.__state != "down") { this.__triggerBounds = this.__target.getBounds(this.__target.get_stage(),this.__triggerBounds); this.__triggerBounds.inflate(this.__abortDistance,this.__abortDistance); this.set_state("down"); } else if(touch.get_phase() == "moved") { isWithinBounds = this.__triggerBounds.contains(touch.get_globalX(),touch.get_globalY()); if(this.__state == "down" && !isWithinBounds) { this.set_state("up"); } else if(this.__state == "up" && isWithinBounds) { this.set_state("down"); } } else if(touch.get_phase() == "ended" && this.__state == "down") { this.set_state("up"); if(!touch.get_cancelled()) { this.__target.dispatchEventWith("triggered",true); } } } }, hitTest: function(localPoint) { if(!this.__target.get_visible() || !this.__target.get_touchable() || !this.__target.hitTestMask(localPoint)) { return null; } this.__target.getBounds(this.__target,ButtonBehavior.sBounds); if(ButtonBehavior.sBounds.width < this.__minHitAreaSize) { ButtonBehavior.sBounds.inflate((this.__minHitAreaSize - ButtonBehavior.sBounds.width) / 2,0); } if(ButtonBehavior.sBounds.height < this.__minHitAreaSize) { ButtonBehavior.sBounds.inflate(0,(this.__minHitAreaSize - ButtonBehavior.sBounds.height) / 2); } if(ButtonBehavior.sBounds.containsPoint(localPoint)) { return this.__target; } else { return null; } }, get_state: function() { return this.__state; }, set_state: function(value) { if(this.__state != value) { if((starling_display_ButtonState().default).isValid(value)) { this.__state = value; (starling_utils_Execute().default).execute(this.__onStateChange,[value]); } else { throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Invalid button state: " + value)); } } return value; }, get_target: function() { return this.__target; }, get_onStateChange: function() { return this.__onStateChange; }, set_onStateChange: function(value) { return this.__onStateChange = value; }, get_useHandCursor: function() { return this.__useHandCursor; }, set_useHandCursor: function(value) { return this.__useHandCursor = value; }, get_enabled: function() { return this.__enabled; }, set_enabled: function(value) { if(this.__enabled != value) { this.__enabled = value; this.set_state(value ? "up" : "disabled"); } return this.__enabled; }, get_minHitAreaSize: function() { return this.__minHitAreaSize; }, set_minHitAreaSize: function(value) { return this.__minHitAreaSize = value; }, get_abortDistance: function() { return this.__abortDistance; }, set_abortDistance: function(value) { return this.__abortDistance = value; } }; ButtonBehavior.prototype.__class__ = ButtonBehavior.prototype.constructor = $hxClasses["starling.utils.ButtonBehavior"] = ButtonBehavior; // Init Object.defineProperties(ButtonBehavior.prototype,{ state : { get : function () { return this.get_state (); }, set : function (v) { return this.set_state (v); }}, target : { get : function () { return this.get_target (); }}, onStateChange : { get : function () { return this.get_onStateChange (); }, set : function (v) { return this.set_onStateChange (v); }}, useHandCursor : { get : function () { return this.get_useHandCursor (); }, set : function (v) { return this.set_useHandCursor (v); }}, enabled : { get : function () { return this.get_enabled (); }, set : function (v) { return this.set_enabled (v); }}, minHitAreaSize : { get : function () { return this.get_minHitAreaSize (); }, set : function (v) { return this.set_minHitAreaSize (v); }}, abortDistance : { get : function () { return this.get_abortDistance (); }, set : function (v) { return this.set_abortDistance (v); }}}); // Statics ButtonBehavior.sBounds = new (openfl_geom_Rectangle().default)() // Export exports.default = ButtonBehavior;