UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

667 lines (610 loc) 20.2 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. // ////////////////////////////////////////////////////////////////////////////////////// /// <reference path="supportClasses/DefaultAssetAdapter.ts" /> namespace eui { /** * The Image control lets you show JPEG, PNG, and GIF files * at runtime. Image inherit Bitmap,so you can set the <code>bitmapData</code> property * to show the data. you can also set the <code>source</code> property, Image will auto load * and show the url image or the bitmapData. * * @event egret.Event.COMPLETE Dispatched when the image loaded complete. * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @includeExample extension/eui/components/ImageExample.ts * @language en_US */ /** * Image 控件允许您在运行时显示 JPEG、PNG 等图片文件文件。Image 继承至 Bitmap,因此您可以直接对其 bitmapData 属性, * 赋值从外部加载得到的位图数据以显示对应图片。同时,Image 还提供了更加方便的 source 属性,source 属性可以接受一个网络图片url作为值, * 赋值为url后,它内部会自动去加载并显示图片。并且您同样也可以直接把 BitmapData 对象赋值给 source 属性以显示图片。 * * @event egret.Event.COMPLETE 当图片加载完成后调度 * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @includeExample extension/eui/components/ImageExample.ts * @language zh_CN */ export class Image extends egret.Bitmap implements UIComponent { /** * Constructor. * * @param source The source used for the bitmap fill. the value can be * a string or an instance of <code>egret.Texture</code> * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language en_US */ /** * 构造函数。 * * @param source 用于位图填充的源。可以是一个字符串或者 <code>egret.Texture</code> 对象 * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language zh_CN */ public constructor(source?: string | egret.Texture) { super(); this.initializeUIValues(); if (source) { this.source = source; } } /** * Represent a Rectangle Area that the 9 scale area of Image. * Notice: This property is valid only when <code>fillMode</code> * is <code>BitmapFillMode.SCALE</code>. * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language en_US */ /** * 矩形区域,它定义素材对象的九个缩放区域。 * 注意:此属性仅在<code>fillMode</code>为<code>BitmapFillMode.SCALE</code>时有效。 * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language zh_CN */ public get scale9Grid(): egret.Rectangle { return this.$scale9Grid; } public set scale9Grid(value: egret.Rectangle) { this.$scale9Grid = value; this.$renderDirty = true; this.invalidateDisplayList(); } /** * Determines how the bitmap fills in the dimensions. * <p>When set to <code>BitmapFillMode.CLIP</code>, the bitmap * ends at the edge of the region.</p> * <p>When set to <code>BitmapFillMode.REPEAT</code>, the bitmap * repeats to fill the region.</p> * <p>When set to <code>BitmapFillMode.SCALE</code>, the bitmap * stretches to fill the region.</p> * * @default <code>BitmapFillMode.SCALE</code> * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language en_US */ /** * 确定位图填充尺寸的方式。 * <p>设置为 <code>BitmapFillMode.CLIP</code>时,位图将在边缘处被截断。</p> * <p>设置为 <code>BitmapFillMode.REPEAT</code>时,位图将重复以填充区域。</p> * <p>设置为 <code>BitmapFillMode.SCALE</code>时,位图将拉伸以填充区域。</p> * * @default <code>BitmapFillMode.SCALE</code> * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language zh_CN */ public get fillMode(): string { return this.$fillMode; } public set fillMode(value: string) { if (value == this.$fillMode) { return; } this.$fillMode = value; this.invalidateDisplayList(); } //if egret $setFillMode(value: string): boolean { let result: boolean = super.$setFillMode(value); this.invalidateDisplayList(); return result; } //endif*/ /** * @private */ private sourceChanged: boolean = false; /** * @private */ private _source: string | egret.Texture = null; /** * The source used for the bitmap fill. the value can be * a string or an instance of <code>egret.Texture</code> * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language en_US */ /** * 用于位图填充的源。可以是一个字符串或者 <code>egret.Texture</code> 对象 * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native * @language zh_CN */ public get source(): string | egret.Texture { return this._source; } public set source(value: string | egret.Texture) { if (value == this._source) { return; } this._source = value; if (this.$stage) { this.parseSource(); } else { this.sourceChanged = true; this.invalidateProperties(); } } $setTexture(value: egret.Texture): boolean { if (value == this.$texture) { return false; } let result: boolean = super.$setTexture(value); this.sourceChanged = false; this.invalidateSize(); this.invalidateDisplayList(); return result; } /** * @private * 解析source */ private parseSource(): void { this.sourceChanged = false; let source = this._source; if (source && typeof source == "string") { getAssets(<string>this._source, (data) => { if (source !== this._source) return; if (!egret.is(data, "egret.Texture")) { return; } this.$setTexture(data); if (data) { this.dispatchEventWith(egret.Event.COMPLETE); } else if (DEBUG) { egret.$warn(2301, source); } }) } else { this.$setTexture(<egret.Texture>source); } } $measureContentBounds(bounds: egret.Rectangle): void { let image = this.$texture; if (image) { let uiValues = this.$UIComponent; let width = uiValues[sys.UIKeys.width]; let height = uiValues[sys.UIKeys.height]; if (isNaN(width) || isNaN(height)) { bounds.setEmpty(); return; } if (this.$fillMode == "clip") { if (width > image.$getTextureWidth()) { width = image.$getTextureWidth(); } if (height > image.$getTextureHeight()) { height = image.$getTextureHeight(); } } bounds.setTo(0, 0, width, height); } else { bounds.setEmpty(); } } /** * @private * * @param context */ $updateRenderNode(): void { let image = this.$bitmapData; if (!image) { return; } let uiValues = this.$UIComponent; let width = uiValues[sys.UIKeys.width]; let height = uiValues[sys.UIKeys.height]; if (width === 0 || height === 0) { return; } let scale9Grid = this.scale9Grid || this.$texture["scale9Grid"]; if (scale9Grid) { if (this.$renderNode instanceof egret.sys.NormalBitmapNode) { this.$renderNode = new egret.sys.BitmapNode(); } egret.sys.BitmapNode.$updateTextureDataWithScale9Grid(<egret.sys.NormalBitmapNode>this.$renderNode, this.$bitmapData, scale9Grid, this.$bitmapX, this.$bitmapY, this.$bitmapWidth, this.$bitmapHeight, this.$offsetX, this.$offsetY, this.$textureWidth, this.$textureHeight, width, height, this.$sourceWidth, this.$sourceHeight, this.$smoothing); } else { if (this.fillMode == egret.BitmapFillMode.REPEAT && this.$renderNode instanceof egret.sys.NormalBitmapNode) { this.$renderNode = new egret.sys.BitmapNode(); } egret.sys.BitmapNode.$updateTextureData(<egret.sys.NormalBitmapNode>this.$renderNode, this.$bitmapData, this.$bitmapX, this.$bitmapY, this.$bitmapWidth, this.$bitmapHeight, this.$offsetX, this.$offsetY, this.$textureWidth, this.$textureHeight, width, height, this.$sourceWidth, this.$sourceHeight, this.$fillMode, this.$smoothing); } } //=======================UIComponent接口实现=========================== /** * @private * UIComponentImpl 定义的所有变量请不要添加任何初始值,必须统一在此处初始化。 */ private initializeUIValues: () => void; /** * @copy eui.UIComponent#createChildren * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected createChildren(): void { if (this.sourceChanged) { this.parseSource(); } } /** * @copy eui.UIComponent#childrenCreated * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected childrenCreated(): void { } /** * @copy eui.UIComponent#commitProperties * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected commitProperties(): void { sys.UIComponentImpl.prototype["commitProperties"].call(this); if (this.sourceChanged) { this.parseSource(); } } /** * @copy eui.UIComponent#measure * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected measure(): void { let texture = this.$texture; if (texture) { this.setMeasuredSize(texture.$getTextureWidth(), texture.$getTextureHeight()); } else { this.setMeasuredSize(0, 0); } } /** * @copy eui.UIComponent#updateDisplayList * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected updateDisplayList(unscaledWidth: number, unscaledHeight: number): void { this.$renderDirty = true; } /** * @copy eui.UIComponent#invalidateParentLayout * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ protected invalidateParentLayout(): void { } /** * @private */ $UIComponent: Object; /** * @private */ $includeInLayout: boolean; /** * @copy eui.UIComponent#includeInLayout * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public includeInLayout: boolean; /** * @copy eui.UIComponent#left * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public left: any; /** * @copy eui.UIComponent#right * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public right: any; /** * @copy eui.UIComponent#top * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public top: any; /** * @copy eui.UIComponent#bottom * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public bottom: any; /** * @copy eui.UIComponent#horizontalCenter * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public horizontalCenter: any; /** * @copy eui.UIComponent#verticalCenter * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public verticalCenter: any; /** * @copy eui.UIComponent#percentWidth * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public percentWidth: number; /** * @copy eui.UIComponent#percentHeight * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public percentHeight: number; /** * @copy eui.UIComponent#explicitWidth * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public explicitWidth: number; /** * @copy eui.UIComponent#explicitHeight * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public explicitHeight: number; /** * @copy eui.UIComponent#minWidth * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public minWidth: number; /** * @copy eui.UIComponent#maxWidth * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public maxWidth: number; /** * @copy eui.UIComponent#minHeight * * @version Egret 2.4 * @version eui 1.0 * @platform Web,Native */ public minHeight: number; /** * @copy eui.UIComponent#maxHeight * * @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 { } /** * @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(Image, egret.Bitmap); registerProperty(Image, "scale9Grid", "egret.Rectangle"); }