UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

674 lines (629 loc) 19.5 kB
////////////////////////////////////////////////////////////////////////////////////// // // 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.sys { /** * @private */ export const enum EditableTextKeys { promptText, textColorUser, asPassword } } namespace eui { let UIImpl = sys.UIComponentImpl; /** * Editable text for displaying, * scrolling, selecting, and editing text. * @includeExample extension/eui/components/EditablTextExample.ts * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language en_US */ /** * 可编辑文本,用于显示、滚动、选择和编辑文本。 * @includeExample extension/eui/components/EditablTextExample.ts * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language zh_CN */ export class EditableText extends egret.TextField implements UIComponent, IDisplayText { /** * 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.initializeUIValues(); this.type = egret.TextFieldType.INPUT; this.$EditableText = { 0: null, //promptText, 1: 0xffffff, //textColorUser, 2: false //asPassword } } $EditableText: Object; /** * @private * */ $invalidateTextField(): void { super.$invalidateTextField(); this.invalidateSize(); } /** * @private * * @param value */ $setWidth(value: number): boolean { let result1: boolean = super.$setWidth(value); let result2: boolean = UIImpl.prototype.$setWidth.call(this, value); return result1 && result2; } /** * @private * * @param value */ $setHeight(value: number): boolean { let result1: boolean = super.$setHeight(value); let result2: boolean = UIImpl.prototype.$setHeight.call(this, value); return result1 && result2; } /** * @private * * @param value */ $getText():string { let value = super.$getText(); if(value == this.$EditableText[sys.EditableTextKeys.promptText]){ value = ""; } return value; } /** * @private * * @param value */ $setText(value: string): boolean { let promptText = this.$EditableText[sys.EditableTextKeys.promptText]; if (promptText != value || promptText == null) { this.$isShowPrompt = false; this.textColor = this.$EditableText[sys.EditableTextKeys.textColorUser]; this.displayAsPassword = this.$EditableText[sys.EditableTextKeys.asPassword]; } if (!this.$isFocusIn) { if (value == "" || value == null) { value = promptText; this.$isShowPrompt = true; super.$setTextColor(this.$promptColor); super.$setDisplayAsPassword(false); } } let result: boolean = super.$setText(value); PropertyEvent.dispatchPropertyEvent(this, PropertyEvent.PROPERTY_CHANGE, "text"); return result; } /** * @private */ private _widthConstraint: number = NaN; /** * @private * * @param stage * @param nestLevel */ public $onAddToStage(stage: egret.Stage, nestLevel: number): void { sys.UIComponentImpl.prototype["$onAddToStage"].call(this,stage, nestLevel); this.addEventListener(egret.FocusEvent.FOCUS_IN, this.onfocusIn, this); this.addEventListener(egret.FocusEvent.FOCUS_OUT, this.onfocusOut, this); } /** * @private * */ public $onRemoveFromStage(): void { sys.UIComponentImpl.prototype["$onRemoveFromStage"].call(this); this.removeEventListener(egret.FocusEvent.FOCUS_IN, this.onfocusIn, this); this.removeEventListener(egret.FocusEvent.FOCUS_OUT, this.onfocusOut, this); } /** * @private */ private $isShowPrompt: boolean = false; /** * When the property of the text is empty, it will show the defalut string. * @version Egret 2.5.5 * @version eui 1.0 * @platform Web,Native * @language en_US */ /** * 当text属性为空字符串时要显示的文本内容。 * 先创建文本控件时将显示提示文本。控件获得焦点时或控件的 text 属性为非空字符串时,提示文本将消失。 * 控件失去焦点时提示文本将重新显示,但仅当未输入文本时(如果文本字段的值为空字符串)。<p/> * 对于文本控件,如果用户输入文本,但随后又将其删除,则控件失去焦点后,提示文本将重新显示。 * 您还可以通过编程方式将文本控件的 text 属性设置为空字符串使提示文本重新显示。 * @version Egret 2.5.5 * @version eui 1.0 * @platform Web,Native * @language zh_CN */ public get prompt(): string { return this.$EditableText[sys.EditableTextKeys.promptText]; } public set prompt(value: string) { let values = this.$EditableText; let promptText = values[sys.EditableTextKeys.promptText]; if (promptText == value) return; values[sys.EditableTextKeys.promptText] = value; let text = this.text; if (!text || text == promptText) { this.showPromptText(); } } /** * @private */ private $promptColor: number = 0x666666; /** * @private */ private $isFocusIn: boolean = false; /** * The color of the defalut string. * @version Egret 2.5.5 * @version eui 1.0 * @platform Web,Native * @language en_US */ /** * 默认文本的颜色 * @version Egret 2.5.5 * @version eui 1.0 * @platform Web,Native * @language zh_CN */ public set promptColor(value: number) { value = +value | 0; if (this.$promptColor != value) { this.$promptColor = value; let text = this.text; if (!text || text == this.$EditableText[sys.EditableTextKeys.promptText]) { this.showPromptText(); } } } public get promptColor(): number { return this.$promptColor; } /** * @private */ private onfocusOut(): void { this.$isFocusIn = false; if (!this.text) { this.showPromptText(); } } /** * @private */ private onfocusIn(): void { this.$isFocusIn = true; this.$isShowPrompt = false; this.displayAsPassword = this.$EditableText[sys.EditableTextKeys.asPassword]; let values = this.$EditableText; let text = this.text; if (!text || text == values[sys.EditableTextKeys.promptText]) { this.textColor = values[sys.EditableTextKeys.textColorUser]; this.text = ""; } } /** * @private */ private showPromptText(): void { let values = this.$EditableText; this.$isShowPrompt = true; super.$setTextColor(this.$promptColor); super.$setDisplayAsPassword(false); this.text = values[sys.EditableTextKeys.promptText]; } /** * @private */ $setTextColor(value: number): boolean { value = +value | 0; this.$EditableText[sys.EditableTextKeys.textColorUser] = value; if (!this.$isShowPrompt) { super.$setTextColor(value); } return true; } /** * @private */ $setDisplayAsPassword(value: boolean): boolean { this.$EditableText[sys.EditableTextKeys.asPassword] = value; if (!this.$isShowPrompt) { super.$setDisplayAsPassword(value); } return true; } //=======================UIComponent接口实现=========================== /** * @private * UIComponentImpl 定义的所有变量请不要添加任何初始值,必须统一在此处初始化。 */ private initializeUIValues: () => void; /** * @copy eui.Component#createChildren() * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected createChildren(): void { this.onfocusOut(); } /** * @copy eui.Component#childrenCreated() * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected childrenCreated(): void { } /** * @copy eui.Component#commitProperties() * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected commitProperties(): void { } /** * @copy eui.Component#measure() * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected measure(): void { let values = this.$UIComponent; let textValues = this.$TextField; let oldWidth = textValues[egret.sys.TextKeys.textFieldWidth]; let availableWidth = NaN; if (!isNaN(this._widthConstraint)) { availableWidth = this._widthConstraint; this._widthConstraint = NaN; } else if (!isNaN(values[sys.UIKeys.explicitWidth])) { availableWidth = values[sys.UIKeys.explicitWidth]; } else if (values[sys.UIKeys.maxWidth] != 100000) { availableWidth = values[sys.UIKeys.maxWidth]; } super.$setWidth(availableWidth); this.setMeasuredSize(this.textWidth, this.textHeight); super.$setWidth(oldWidth); } /** * @copy eui.Component#updateDisplayList() * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected updateDisplayList(unscaledWidth: number, unscaledHeight: number): void { super.$setWidth(unscaledWidth); super.$setHeight(unscaledHeight); } /** * @copy eui.Component#invalidateParentLayout() * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected invalidateParentLayout(): void { } /** * @private */ $UIComponent: Object; /** * @private */ $includeInLayout: boolean; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public includeInLayout: boolean; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public left: any; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public right: any; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public top: any; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public bottom: any; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public horizontalCenter: any; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public verticalCenter: any; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public percentWidth: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public percentHeight: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public explicitWidth: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public explicitHeight: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public minWidth: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public maxWidth: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public minHeight: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public maxHeight: number; /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public setMeasuredSize(width: number, height: number): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public invalidateProperties(): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public validateProperties(): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public invalidateSize(): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public validateSize(recursive?: boolean): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public invalidateDisplayList(): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public validateDisplayList(): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public validateNow(): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public setLayoutBoundsSize(layoutWidth: number, layoutHeight: number): void { UIImpl.prototype.setLayoutBoundsSize.call(this, layoutWidth, layoutHeight); if (isNaN(layoutWidth) || layoutWidth === this._widthConstraint || layoutWidth == 0) { return; } let values = this.$UIComponent; if (!isNaN(values[sys.UIKeys.explicitHeight])) { return; } if (layoutWidth == values[sys.UIKeys.measuredWidth]) { return; } this._widthConstraint = layoutWidth; this.invalidateSize(); } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public setLayoutBoundsPosition(x: number, y: number): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public getLayoutBounds(bounds: egret.Rectangle): void { } /** * @inheritDoc * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public getPreferredBounds(bounds: egret.Rectangle): void { } } sys.implementUIComponent(EditableText, egret.TextField); registerBindable(EditableText.prototype, "text"); }