dragonbones-runtime
Version:
the tools to build dragonbones file for diffrent framework
364 lines (346 loc) • 12 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 Skin class defines the base class for all skins.
* You typically don't need to manually create the instance of this class.
* It can be created by resolving a EXML.<p/>
*
* @example You typically write the skin classes in EXML, as the followiong example shows:<p/>
* <pre>
* <?xml version="1.0" encoding="utf-8"?>
* <s:Skin xmlns:s="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing">
* <states>
* <!-- Specify the states controlled by this skin. -->
* </states>
* <!-- Define skin. -->
* </s:Skin>
* </pre>
*
* @defaultProperty elementsContent
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @includeExample extension/eui/components/SkinExample.ts
* @language en_US
*/
/**
* 皮肤基类。通常情况下,您不需要手动创建这个类的实例,而是通过解析EXML文件后自动生成。<p/>
*
* @example 通常您可以按照如下方式写EXML代码:<p/>
* <pre>
* <?xml version="1.0" encoding="utf-8"?>
* <s:Skin xmlns:s="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing">
* <states>
* <!-- Specify the states controlled by this skin. -->
* </states>
* <!-- Define skin. -->
* </s:Skin>
* </pre>
*
* @defaultProperty elementsContent
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @includeExample extension/eui/components/SkinExample.ts
* @language zh_CN
*/
export class Skin extends egret.EventDispatcher {
/**
* The list of skin parts name
* @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 skinParts:string[];
/**
* The maximum recommended width of the component to be considered.
* This property can only affect measure result of host component.
*
* @default 100000
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 皮肤的最大宽度。仅影响主机组件的测量结果。
*
* @default 100000
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public maxWidth:number = 100000;
/**
* The minimum recommended width of the component to be considered.
* This property can only affect measure result of host component.
*
* @default 0
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 皮肤的最小宽度,此属性设置为大于maxWidth的值时无效。仅影响主机组件的测量结果。
*
* @default 0
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public minWidth:number = 0;
/**
* The maximum recommended height of the component to be considered.
* This property can only affect measure result of host component.
*
* @default 100000
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 皮肤的最大高度。仅影响主机组件的测量结果。
*
* @default 100000
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public maxHeight:number = 100000;
/**
* The minimum recommended height of the component to be considered.
* This property can only affect measure result of host component.
*
* @default 0
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 皮肤的最小高度,此属性设置为大于maxHeight的值时无效。仅影响主机组件的测量结果。
*
* @default 0
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public minHeight:number = 0;
/**
* Number that specifies the explicit width of the skin.
* This property can only affect measure result of host component.
* @default NaN
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 皮肤显式设置宽度,设置为 NaN 表示不显式设置。仅影响主机组件的测量结果。
*
* @default NaN
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public width:number = NaN;
/**
* Number that specifies the explicit height of the skin.
* This property can only affect measure result of host component.
*
* @default NaN
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 皮肤显式设置高度,设置为 NaN 表示不显式设置。仅影响主机组件的测量结果。
*
* @default NaN
*
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public height:number = NaN;
/**
* @private
*/
$elementsContent:egret.DisplayObject[] = [];
public set elementsContent(value:egret.DisplayObject[]) {
this.$elementsContent = value;
}
/**
* @private
*/
private _hostComponent:Component = null;
/**
* The host component which the skin will be attached.
* @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 hostComponent():Component {
return this._hostComponent;
}
public set hostComponent(value:Component) {
if (this._hostComponent == value)
return;
if(this._hostComponent){
this._hostComponent.removeEventListener(egret.Event.ADDED_TO_STAGE,this.onAddedToStage,this);
}
this._hostComponent = value;
let values = this.$stateValues;
values.parent = value;
if (value) {
this.commitCurrentState();
if (!this.$stateValues.intialized) {
if (value.$stage) {
this.initializeStates(value.$stage);
}
else{
value.once(egret.Event.ADDED_TO_STAGE,this.onAddedToStage,this);
}
}
}
PropertyEvent.dispatchPropertyEvent(this, PropertyEvent.PROPERTY_CHANGE, "hostComponent");
}
/**
* @private
*
* @param event
*/
private onAddedToStage(event?:egret.Event):void{
this.initializeStates(this._hostComponent.$stage);
}
/**
* @private
*/
$stateValues:sys.StateValues = new sys.StateValues();
/**
* The list of state for host component.
* @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 states:State[];
/**
* The current state of host component.
* Set to <code>""</code> or <code>null</code> to reset the component back to its base state.
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 组件的当前视图状态。将其设置为 "" 或 null 可将组件重置回其基本状态。
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public currentState:string;
/**
* Check if contains the specifies state name.
* @param stateName the state name need to be checked
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language en_US
*/
/**
* 返回是否含有指定名称的视图状态
* @param stateName 要检查的视图状态名称
* @version Egret 2.4
* @version eui 1.0
* @platform Web,Native
* @language zh_CN
*/
public hasState:(stateName:string)=>boolean;
/**
* @private
* 初始化所有视图状态
*/
private initializeStates:(stage:egret.Stage)=>void;
/**
* @private
* 应用当前的视图状态。子类覆盖此方法在视图状态发生改变时执行相应更新操作。
*/
private commitCurrentState:()=>void;
}
sys.mixin(Skin, sys.StateClient);
registerProperty(Skin, "elementsContent", "Array", true);
registerProperty(Skin, "states", "State[]");
registerBindable(Skin.prototype, "hostComponent");
}