dragonbones-runtime
Version:
the tools to build dragonbones file for diffrent framework
297 lines (282 loc) • 10.1 kB
text/typescript
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
namespace eui {
/**
* The Button component is a commonly used rectangular button.
* The Button component looks like it can be pressed.
* The default skin has a text label and a icon display object.
*
* @event egret.TouchEvent.TOUCH_CANCEL canceled the touch
*
* @state up Button up state
* @state down Button down state
* @state disabled Button disabled state
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @includeExample extension/eui/components/ButtonExample.ts
* @language en_US
*/
/**
* Button 组件是常用的矩形按钮。Button 组件看起来可以按压。默认外观具有一个文本标签和图标显示对象。
*
* @event egret.TouchEvent.TOUCH_CANCEL 取消触摸事件
*
* @state up 按钮弹起状态
* @state down 按钮按下状态
* @state disabled 按钮禁用状态
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @includeExample extension/eui/components/ButtonExample.ts
* @language zh_CN
*/
export class Button extends Component {
/**
* Constructor.
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 创建一个按钮实例
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public constructor() {
super();
this.touchChildren = false;
this.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.onTouchBegin, this);
}
/**
* [SkinPart] A skin part that defines the label of the button.
* @skinPart
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* [SkinPart] 按钮上的文本标签。
* @skinPart
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public labelDisplay:IDisplayText = null;
/**
* @private
*/
private _label:string = "";
/**
* Text to appear on the Button control.
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 要在按钮上显示的文本。
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public get label():string {
return this._label;
}
public set label(value:string) {
this._label = value;
if (this.labelDisplay) {
this.labelDisplay.text = value;
}
}
/**
* [SkinPart] A skin part that defines an optional icon for the button.
* @skinPart
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* [SkinPart] 按钮上的图标显示对象。
* @skinPart
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public iconDisplay:Image = null;
/**
* @private
*/
private _icon:string|egret.Texture = null;
/**
* Icon to appear on the Button control.
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 要在按钮上显示的图标数据
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public get icon():string|egret.Texture {
return this._icon;
}
public set icon(value:string|egret.Texture) {
this._icon = value;
if (this.iconDisplay) {
this.iconDisplay.source = value;
}
}
/**
* @private
* 指示第一次分派 TouchEvent.TOUCH_BEGIN 时,触摸点是否在按钮上。
*/
private touchCaptured:boolean = false;
/**
* This method handles the touchCancle events
* @param The <code>egret.TouchEvent</code> object.
* @version Egret 3.0.1
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 解除触碰事件处理。
* @param event 事件 <code>egret.TouchEvent</code> 的对象。
* @version Egret 3.0.1
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
protected onTouchCancle(event:egret.TouchEvent):void {
let stage = event.$currentTarget;
stage.removeEventListener(egret.TouchEvent.TOUCH_CANCEL, this.onTouchCancle, this);
stage.removeEventListener(egret.TouchEvent.TOUCH_END, this.onStageTouchEnd, this);
this.touchCaptured = false;
this.invalidateState();
}
/**
* This method handles the touch events
* @param The <code>egret.TouchEvent</code> object.
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 触碰事件处理。
* @param event 事件 <code>egret.TouchEvent</code> 的对象。
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
protected onTouchBegin(event:egret.TouchEvent):void {
this.$stage.addEventListener(egret.TouchEvent.TOUCH_CANCEL, this.onTouchCancle, this);
this.$stage.addEventListener(egret.TouchEvent.TOUCH_END, this.onStageTouchEnd, this);
this.touchCaptured = true;
this.invalidateState();
event.updateAfterEvent();
}
/**
* @private
* 舞台上触摸弹起事件
*/
private onStageTouchEnd(event:egret.Event):void {
let stage = event.$currentTarget;
stage.removeEventListener(egret.TouchEvent.TOUCH_CANCEL, this.onTouchCancle, this);
stage.removeEventListener(egret.TouchEvent.TOUCH_END, this.onStageTouchEnd, this);
if (this.contains(event.target)){
this.buttonReleased();
}
this.touchCaptured = false;
this.invalidateState();
}
/**
* @inheritDoc
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
*/
protected getCurrentState():string {
if (!this.enabled)
return "disabled";
if (this.touchCaptured)
return "down";
return "up";
}
/**
* @inheritDoc
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
*/
protected partAdded(partName:string, instance:any):void {
if (instance === this.labelDisplay) {
this.labelDisplay.text = this._label;
}
else if (instance == this.iconDisplay) {
this.iconDisplay.source = this._icon;
}
}
/**
* This method is called when handling a <code>egret.TouchEvent.TOUCH_END</code> event
* when the user touches on the button. It is only called when the button
* is the target and when <code>touchCaptured</code> is <code>true</code>.
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 当在用户单击按钮之后处理 <code>egret.TouchEvent.TOUCH_END</code> 事件时,将调用此方法。
* 仅当以按钮为目标,并且 <code>touchCaptured</code> 为 <code>true</code> 时,才会调用此方法。
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
protected buttonReleased():void {
}
}
}