openfl
Version:
A fast, productive library for 2D cross-platform development.
148 lines (131 loc) • 5.21 kB
JavaScript
// 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;