UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

148 lines (131 loc) 5.21 kB
// Class: openfl.display._internal.CairoTilemap var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../../hxClasses_stub").default; var $hxEnums = require("./../../../hxEnums_stub").default; var $import = require("./../../../import_stub").default; function openfl_geom_Rectangle() {return require("./../../../openfl/geom/Rectangle");} function lime_math__$Matrix3_Matrix3_$Impl_$() {return require("./../../../lime/math/_Matrix3/Matrix3_Impl_");} function openfl_geom_Matrix() {return require("./../../../openfl/geom/Matrix");} function lime_graphics_cairo__$CairoPattern_CairoPattern_$Impl_$() {return require("./../../../lime/graphics/cairo/_CairoPattern/CairoPattern_Impl_");} // Constructor var CairoTilemap = function(){} // Meta CairoTilemap.__name__ = "openfl.display._internal.CairoTilemap"; CairoTilemap.__isInterface__ = false; CairoTilemap.prototype = { }; CairoTilemap.prototype.__class__ = CairoTilemap.prototype.constructor = $hxClasses["openfl.display._internal.CairoTilemap"] = CairoTilemap; // Init // Statics CairoTilemap.render = function(tilemap,renderer) { if(!tilemap.__renderable || tilemap.__group.__tiles.length == 0) { return; } var alpha = renderer.__getAlpha(tilemap.__worldAlpha); if(alpha <= 0) { return; } renderer.__setBlendMode(tilemap.__worldBlendMode); renderer.__pushMaskObject(tilemap); var rect = (openfl_geom_Rectangle().default).__pool.get(); rect.setTo(0,0,tilemap.__width,tilemap.__height); renderer.__pushMaskRect(rect,tilemap.__renderTransform); CairoTilemap.renderTileContainer(tilemap.__group,renderer,tilemap.__renderTransform,tilemap.__tileset,renderer.__allowSmoothing && tilemap.smoothing,tilemap.tileAlphaEnabled,alpha,tilemap.tileBlendModeEnabled,tilemap.__worldBlendMode,null,null,null,rect,(lime_math__$Matrix3_Matrix3_$Impl_$().default)._new()); renderer.__popMaskRect(); renderer.__popMaskObject(tilemap); (openfl_geom_Rectangle().default).__pool.release(rect); } CairoTilemap.renderTileContainer = function(group,renderer,parentTransform,defaultTileset,smooth,alphaEnabled,worldAlpha,blendModeEnabled,defaultBlendMode,cacheBitmapData,surface,pattern,rect,matrix) { var cairo = renderer.cairo; var tileTransform = (openfl_geom_Matrix().default).__pool.get(); var tiles = group.__tiles; var tileset; var alpha; var visible; var blendMode = null; var id; var tileData; var tileRect; var bitmapData; var _g = 0; while(_g < tiles.length) { var tile = tiles[_g]; ++_g; tileTransform.setTo(1,0,0,1,-tile.get_originX(),-tile.get_originY()); tileTransform.concat(tile.get_matrix()); tileTransform.concat(parentTransform); tileset = tile.get_tileset() != null ? tile.get_tileset() : defaultTileset; alpha = tile.get_alpha() * worldAlpha; visible = tile.get_visible(); if(!visible || alpha <= 0) { continue; } if(!alphaEnabled) { alpha = 1; } if(blendModeEnabled) { blendMode = tile.__blendMode != null ? tile.__blendMode : defaultBlendMode; } if(tile.__length > 0) { CairoTilemap.renderTileContainer(tile,renderer,tileTransform,tileset,smooth,alphaEnabled,alpha,blendModeEnabled,blendMode,cacheBitmapData,surface,pattern,rect,matrix); } else { if(tileset == null) { continue; } id = tile.get_id(); if(id == -1) { tileRect = tile.__rect; if(tileRect == null || tileRect.width <= 0 || tileRect.height <= 0) { continue; } } else { tileData = tileset.__data[id]; if(tileData == null) { continue; } rect.setTo(tileData.x,tileData.y,tileData.width,tileData.height); tileRect = rect; } bitmapData = tileset.__bitmapData; if(bitmapData == null || bitmapData.image == null) { continue; } if(bitmapData != cacheBitmapData) { surface = bitmapData.getSurface(); pattern = (lime_graphics_cairo__$CairoPattern_CairoPattern_$Impl_$().default).createForSurface(surface); (lime_graphics_cairo__$CairoPattern_CairoPattern_$Impl_$().default).set_filter(pattern,smooth ? 1 : 3); cairo.set_source(pattern); cacheBitmapData = bitmapData; } if(blendModeEnabled) { renderer.__setBlendMode(blendMode); } renderer.applyMatrix(tileTransform,cairo); matrix[6] = tileRect.x; matrix[7] = tileRect.y; (lime_graphics_cairo__$CairoPattern_CairoPattern_$Impl_$().default).set_matrix(pattern,matrix); cairo.set_source(pattern); cairo.save(); cairo.newPath(); cairo.rectangle(0,0,tileRect.width,tileRect.height); cairo.clip(); if(alpha == 1) { cairo.paint(); } else { cairo.paintWithAlpha(alpha); } cairo.restore(); } } (openfl_geom_Matrix().default).__pool.release(tileTransform); } CairoTilemap.renderDrawable = function(tilemap,renderer) { } CairoTilemap.renderDrawableMask = function(tilemap,renderer) { } CairoTilemap.__meta__ = { obj : { SuppressWarnings : ["checkstyle:FieldDocComment"]}, statics : { renderTileContainer : { SuppressWarnings : ["checkstyle:Dynamic"]}}} // Export exports.default = CairoTilemap;