laya-coreui-es
Version:
laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改
338 lines (337 loc) • 11.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Button = void 0;
const UIComponent_1 = require("./UIComponent");
const Styles_1 = require("./Styles");
const Const_1 = require("../Const");
const Text_1 = require("../display/Text");
const Event_1 = require("../events/Event");
const Loader_1 = require("../net/Loader");
const Texture_1 = require("../resource/Texture");
const AutoBitmap_1 = require("./AutoBitmap");
const UIUtils_1 = require("./UIUtils");
const Handler_1 = require("../utils/Handler");
const Utils_1 = require("../utils/Utils");
const WeakObject_1 = require("../utils/WeakObject");
const ILaya_1 = require("../../ILaya");
class Button extends UIComponent_1.UIComponent {
constructor(skin = null, label = "") {
super();
this._labelColors = Styles_1.Styles.buttonLabelColors;
this._state = 0;
this._autoSize = true;
this._stateNum = Styles_1.Styles.buttonStateNum;
this._stateChanged = false;
this.skin = skin;
this.label = label;
}
destroy(destroyChild = true) {
super.destroy(destroyChild);
this._bitmap && this._bitmap.destroy();
this._text && this._text.destroy(destroyChild);
this._bitmap = null;
this._text = null;
this._clickHandler = null;
this._labelColors = this._sources = this._strokeColors = null;
}
createChildren() {
this.graphics = this._bitmap = new AutoBitmap_1.AutoBitmap();
}
createText() {
if (!this._text) {
this._text = new Text_1.Text();
this._text.overflow = Text_1.Text.HIDDEN;
this._text.align = "center";
this._text.valign = "middle";
this._text.width = this._width;
this._text.height = this._height;
}
}
initialize() {
if (this._mouseState !== 1) {
this.mouseEnabled = true;
this._setBit(Const_1.Const.HAS_MOUSE, true);
}
this._createListener(Event_1.Event.MOUSE_OVER, this, this.onMouse, null, false, false);
this._createListener(Event_1.Event.MOUSE_OUT, this, this.onMouse, null, false, false);
this._createListener(Event_1.Event.MOUSE_DOWN, this, this.onMouse, null, false, false);
this._createListener(Event_1.Event.MOUSE_UP, this, this.onMouse, null, false, false);
this._createListener(Event_1.Event.CLICK, this, this.onMouse, null, false, false);
}
onMouse(e) {
if (this.toggle === false && this._selected)
return;
if (e.type === Event_1.Event.CLICK) {
this.toggle && (this.selected = !this._selected);
this._clickHandler && this._clickHandler.run();
return;
}
!this._selected && (this.state = Button.stateMap[e.type]);
}
get skin() {
return this._skin;
}
set skin(value) {
if (this._skin != value) {
this._skin = value;
if (value) {
if (!Loader_1.Loader.getRes(value)) {
ILaya_1.ILaya.loader.load(this._skin, Handler_1.Handler.create(this, this._skinLoaded), null, Loader_1.Loader.IMAGE, 1);
}
else {
this._skinLoaded();
}
}
else {
this._skinLoaded();
}
}
}
_skinLoaded() {
this.callLater(this.changeClips);
this._setStateChanged();
this._sizeChanged();
this.event(Event_1.Event.LOADED);
}
get stateNum() {
return this._stateNum;
}
set stateNum(value) {
if (typeof value == 'string') {
value = parseInt(value);
}
if (this._stateNum != value) {
this._stateNum = value < 1 ? 1 : value > 3 ? 3 : value;
this.callLater(this.changeClips);
}
}
changeClips() {
var img = Loader_1.Loader.getRes(this._skin);
if (!img) {
console.log("lose skin", this._skin);
return;
}
var width = img.sourceWidth;
var height = img.sourceHeight / this._stateNum;
img.$_GID || (img.$_GID = Utils_1.Utils.getGID());
var key = img.$_GID + "-" + this._stateNum;
var clips = WeakObject_1.WeakObject.I.get(key);
if (!Utils_1.Utils.isOkTextureList(clips)) {
clips = null;
}
if (clips)
this._sources = clips;
else {
this._sources = [];
if (this._stateNum === 1) {
this._sources.push(img);
}
else {
for (var i = 0; i < this._stateNum; i++) {
this._sources.push(Texture_1.Texture.createFromTexture(img, 0, height * i, width, height));
}
}
WeakObject_1.WeakObject.I.set(key, this._sources);
}
if (this._autoSize) {
this._bitmap.width = this._width || width;
this._bitmap.height = this._height || height;
if (this._text) {
this._text.width = this._bitmap.width;
this._text.height = this._bitmap.height;
}
}
else {
this._text && (this._text.x = width);
}
}
measureWidth() {
this.runCallLater(this.changeClips);
if (this._autoSize)
return this._bitmap.width;
this.runCallLater(this.changeState);
return this._bitmap.width + (this._text ? this._text.width : 0);
}
measureHeight() {
this.runCallLater(this.changeClips);
return this._text ? Math.max(this._bitmap.height, this._text.height) : this._bitmap.height;
}
get label() {
return this._text ? this._text.text : null;
}
set label(value) {
if (!this._text && !value)
return;
this.createText();
if (this._text.text != value) {
value && !this._text.parent && this.addChild(this._text);
this._text.text = (value + "").replace(/\\n/g, "\n");
this._setStateChanged();
}
}
get selected() {
return this._selected;
}
set selected(value) {
if (this._selected != value) {
this._selected = value;
this.state = this._selected ? 2 : 0;
this.event(Event_1.Event.CHANGE);
}
}
get state() {
return this._state;
}
set state(value) {
if (this._state != value) {
this._state = value;
this._setStateChanged();
}
}
changeState() {
this._stateChanged = false;
this.runCallLater(this.changeClips);
var index = this._state < this._stateNum ? this._state : this._stateNum - 1;
this._sources && (this._bitmap.source = this._sources[index]);
if (this.label) {
this._text.color = this._labelColors[index];
if (this._strokeColors)
this._text.strokeColor = this._strokeColors[index];
}
}
get labelColors() {
return this._labelColors.join(",");
}
set labelColors(value) {
this._labelColors = UIUtils_1.UIUtils.fillArray(Styles_1.Styles.buttonLabelColors, value, String);
this._setStateChanged();
}
get strokeColors() {
return this._strokeColors ? this._strokeColors.join(",") : "";
}
set strokeColors(value) {
this._strokeColors = UIUtils_1.UIUtils.fillArray(Styles_1.Styles.buttonLabelColors, value, String);
this._setStateChanged();
}
get labelPadding() {
this.createText();
return this._text.padding.join(",");
}
set labelPadding(value) {
this.createText();
this._text.padding = UIUtils_1.UIUtils.fillArray(Styles_1.Styles.labelPadding, value, Number);
}
get labelSize() {
this.createText();
return this._text.fontSize;
}
set labelSize(value) {
this.createText();
this._text.fontSize = value;
}
get labelStroke() {
this.createText();
return this._text.stroke;
}
set labelStroke(value) {
this.createText();
this._text.stroke = value;
}
get labelStrokeColor() {
this.createText();
return this._text.strokeColor;
}
set labelStrokeColor(value) {
this.createText();
this._text.strokeColor = value;
}
get labelBold() {
this.createText();
return this._text.bold;
}
set labelBold(value) {
this.createText();
this._text.bold = value;
}
get labelFont() {
this.createText();
return this._text.font;
}
set labelFont(value) {
this.createText();
this._text.font = value;
}
get labelAlign() {
this.createText();
return this._text.align;
}
set labelAlign(value) {
this.createText();
this._text.align = value;
}
get clickHandler() {
return this._clickHandler;
}
set clickHandler(value) {
this._clickHandler = value;
}
get text() {
this.createText();
return this._text;
}
get sizeGrid() {
if (this._bitmap.sizeGrid)
return this._bitmap.sizeGrid.join(",");
return null;
}
set sizeGrid(value) {
this._bitmap.sizeGrid = UIUtils_1.UIUtils.fillArray(Styles_1.Styles.defaultSizeGrid, value, Number);
}
set width(value) {
super.set_width(value);
if (this._autoSize) {
this._bitmap.width = value;
this._text && (this._text.width = value);
}
}
get width() {
return super.get_width();
}
set height(value) {
super.set_height(value);
if (this._autoSize) {
this._bitmap.height = value;
this._text && (this._text.height = value);
}
}
get height() {
return super.get_height();
}
set dataSource(value) {
this._dataSource = value;
if (typeof (value) == 'number' || typeof (value) == 'string')
this.label = value + "";
else
super.set_dataSource(value);
}
get dataSource() {
return super.get_dataSource();
}
get iconOffset() {
return this._bitmap._offset ? this._bitmap._offset.join(",") : null;
}
set iconOffset(value) {
if (value)
this._bitmap._offset = UIUtils_1.UIUtils.fillArray([1, 1], value, Number);
else
this._bitmap._offset = [];
}
_setStateChanged() {
if (!this._stateChanged) {
this._stateChanged = true;
this.callLater(this.changeState);
}
}
}
exports.Button = Button;
Button.stateMap = { "mouseup": 0, "mouseover": 1, "mousedown": 2, "mouseout": 0 };