UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

135 lines (121 loc) 4.83 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 egret.native { /** * 创建一个canvas。 */ function createCanvas(width?:number, height?:number):NativeCanvas { let result = new NativeCanvas(); if (!isNaN(width) && !isNaN(height)) { result.width = width; result.height = height; } return result; } let sharedCanvas:NativeCanvas; /** * @private * NativeCanvas2D渲染器 */ export class NativeCanvasRenderBuffer implements sys.RenderBuffer { public constructor(width?:number, height?:number) { this.surface = createCanvas(width, height); this.context = this.surface.getContext("2d"); //保证rootCanvas是第一个创建的canvas } /** * 渲染上下文 */ public context:any; /** * 呈现最终绘图结果的画布 */ public surface:NativeCanvas; /** * 渲染缓冲的宽度,以像素为单位。 * @readOnly */ public get width():number { return this.surface.width; } /** * 渲染缓冲的高度,以像素为单位。 * @readOnly */ public get height():number { return this.surface.height; } /** * 改变渲染缓冲的大小并清空缓冲区 * @param width 改变后的宽 * @param height 改变后的高 * @param useMaxSize 若传入true,则将改变后的尺寸与已有尺寸对比,保留较大的尺寸。 */ public resize(width:number, height:number, useMaxSize?:boolean):void { //resize 之前要提交下绘制命令 if($supportCmdBatch) { $cmdManager.flush(); } let surface = this.surface; surface.width = width; surface.height = height; this.clear(); } /** * 获取指定区域的像素 */ public getPixels(x:number, y:number, width:number = 1, height:number = 1):number[] { return this.context.getImageData(x, y, width, height).data; } /** * 转换成base64字符串,如果图片(或者包含的图片)跨域,则返回null * @param type 转换的类型,如: "image/png","image/jpeg" */ public toDataURL(type?:string, encoderOptions?:number):string { return this.surface.toDataURL(type, encoderOptions); } /** * 清空缓冲区数据 */ public clear():void { let width = this.surface.width; let height = this.surface.height; if(width > 0 && height > 0) { this.context.setTransform(1, 0, 0, 1, 0, 0); this.context.clearRect(0, 0, width, height); } } /** * 销毁绘制对象 */ public destroy():void { this.surface.width = this.surface.height = 1; } } }