starling-framework
Version:
A fast, productive library for 2D cross-platform development.
163 lines (147 loc) • 6.35 kB
JavaScript
// 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;