ag-grid-enterprise
Version:
AG Grid Enterprise Features
657 lines • 31 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Scene = void 0;
var hdpiCanvas_1 = require("../canvas/hdpiCanvas");
var node_1 = require("./node");
var id_1 = require("../util/id");
var group_1 = require("./group");
var hdpiOffscreenCanvas_1 = require("../canvas/hdpiOffscreenCanvas");
var window_1 = require("../util/window");
var compare_1 = require("../util/compare");
var sceneDebugOptions_1 = require("./sceneDebugOptions");
var logger_1 = require("../util/logger");
function buildSceneNodeHighlight() {
var _a;
var config = (_a = window_1.windowValue('agChartsSceneDebug')) !== null && _a !== void 0 ? _a : [];
if (typeof config === 'string') {
config = [config];
}
var result = [];
config.forEach(function (name) {
if (name === 'layout') {
result.push('seriesRoot', 'legend', 'root', /.*Axis-\d+-axis.*/);
}
else {
result.push(name);
}
});
return result;
}
var Scene = /** @class */ (function () {
function Scene(opts) {
var _a, _b, _c;
this.id = id_1.createId(this);
this.layers = [];
this._nextZIndex = 0;
this._nextLayerId = 0;
this._dirty = false;
this._root = null;
this.debug = {
dirtyTree: false,
stats: false,
renderBoundingBoxes: false,
consoleLog: false,
level: sceneDebugOptions_1.SceneDebugLevel.SUMMARY,
sceneNodeHighlight: [],
};
var _d = opts.document, document = _d === void 0 ? window.document : _d, _e = opts.mode, mode = _e === void 0 ? (_a = window_1.windowValue('agChartsSceneRenderModel')) !== null && _a !== void 0 ? _a : 'adv-composite' : _e, width = opts.width, height = opts.height, _f = opts.overrideDevicePixelRatio, overrideDevicePixelRatio = _f === void 0 ? undefined : _f;
this.overrideDevicePixelRatio = overrideDevicePixelRatio;
this.opts = { document: document, mode: mode };
this.debug.consoleLog = [true, 'scene'].includes(window_1.windowValue('agChartsDebug'));
this.debug.level = ['scene'].includes(window_1.windowValue('agChartsDebug'))
? sceneDebugOptions_1.SceneDebugLevel.DETAILED
: sceneDebugOptions_1.SceneDebugLevel.SUMMARY;
this.debug.stats = (_b = window_1.windowValue('agChartsSceneStats')) !== null && _b !== void 0 ? _b : false;
this.debug.dirtyTree = (_c = window_1.windowValue('agChartsSceneDirtyTree')) !== null && _c !== void 0 ? _c : false;
this.debug.sceneNodeHighlight = buildSceneNodeHighlight();
this.canvas = new hdpiCanvas_1.HdpiCanvas({ document: document, width: width, height: height, overrideDevicePixelRatio: overrideDevicePixelRatio });
}
Object.defineProperty(Scene.prototype, "container", {
get: function () {
return this.canvas.container;
},
set: function (value) {
this.canvas.container = value;
},
enumerable: false,
configurable: true
});
Scene.prototype.download = function (fileName, fileFormat) {
this.canvas.download(fileName, fileFormat);
};
Scene.prototype.getDataURL = function (type) {
return this.canvas.getDataURL(type);
};
Object.defineProperty(Scene.prototype, "width", {
get: function () {
return this.pendingSize ? this.pendingSize[0] : this.canvas.width;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Scene.prototype, "height", {
get: function () {
return this.pendingSize ? this.pendingSize[1] : this.canvas.height;
},
enumerable: false,
configurable: true
});
Scene.prototype.resize = function (width, height) {
width = Math.round(width);
height = Math.round(height);
// HdpiCanvas doesn't allow width/height <= 0.
var lessThanZero = width <= 0 || height <= 0;
var nan = isNaN(width) || isNaN(height);
var unchanged = width === this.width && height === this.height;
if (unchanged || nan || lessThanZero) {
return false;
}
this.pendingSize = [width, height];
this.markDirty();
return true;
};
Scene.prototype.addLayer = function (opts) {
var _a;
var mode = this.opts.mode;
var layeredModes = ['composite', 'dom-composite', 'adv-composite'];
if (!layeredModes.includes(mode)) {
return undefined;
}
var _b = opts.zIndex, zIndex = _b === void 0 ? this._nextZIndex++ : _b, name = opts.name, zIndexSubOrder = opts.zIndexSubOrder, getComputedOpacity = opts.getComputedOpacity, getVisibility = opts.getVisibility;
var _c = this, width = _c.width, height = _c.height, overrideDevicePixelRatio = _c.overrideDevicePixelRatio;
var domLayer = mode === 'dom-composite';
var advLayer = mode === 'adv-composite';
var canvas = !advLayer || !hdpiOffscreenCanvas_1.HdpiOffscreenCanvas.isSupported()
? new hdpiCanvas_1.HdpiCanvas({
document: this.opts.document,
width: width,
height: height,
domLayer: domLayer,
zIndex: zIndex,
name: name,
overrideDevicePixelRatio: overrideDevicePixelRatio,
})
: new hdpiOffscreenCanvas_1.HdpiOffscreenCanvas({
width: width,
height: height,
overrideDevicePixelRatio: overrideDevicePixelRatio,
});
var newLayer = {
id: this._nextLayerId++,
name: name,
zIndex: zIndex,
zIndexSubOrder: zIndexSubOrder,
canvas: canvas,
getComputedOpacity: getComputedOpacity,
getVisibility: getVisibility,
};
if (zIndex >= this._nextZIndex) {
this._nextZIndex = zIndex + 1;
}
this.layers.push(newLayer);
this.sortLayers();
if (domLayer) {
var domCanvases = this.layers
.map(function (v) { return v.canvas; })
.filter(function (v) { return v instanceof hdpiCanvas_1.HdpiCanvas; });
var newLayerIndex = domCanvases.findIndex(function (v) { return v === canvas; });
var lastLayer = (_a = domCanvases[newLayerIndex - 1]) !== null && _a !== void 0 ? _a : this.canvas;
lastLayer.element.insertAdjacentElement('afterend', canvas.element);
}
if (this.debug.consoleLog) {
logger_1.Logger.debug('Scene.addLayer() - layers', this.layers);
}
return newLayer.canvas;
};
Scene.prototype.removeLayer = function (canvas) {
var index = this.layers.findIndex(function (l) { return l.canvas === canvas; });
if (index >= 0) {
this.layers.splice(index, 1);
canvas.destroy();
this.markDirty();
if (this.debug.consoleLog) {
logger_1.Logger.debug('Scene.removeLayer() - layers', this.layers);
}
}
};
Scene.prototype.moveLayer = function (canvas, newZIndex, newZIndexSubOrder) {
var layer = this.layers.find(function (l) { return l.canvas === canvas; });
if (layer) {
layer.zIndex = newZIndex;
layer.zIndexSubOrder = newZIndexSubOrder;
this.sortLayers();
this.markDirty();
if (this.debug.consoleLog) {
logger_1.Logger.debug('Scene.moveLayer() - layers', this.layers);
}
}
};
Scene.prototype.sortLayers = function () {
this.layers.sort(function (a, b) {
var _a, _b;
return compare_1.compoundAscending(__spreadArray(__spreadArray([a.zIndex], __read(((_a = a.zIndexSubOrder) !== null && _a !== void 0 ? _a : [undefined, undefined]))), [a.id]), __spreadArray(__spreadArray([b.zIndex], __read(((_b = b.zIndexSubOrder) !== null && _b !== void 0 ? _b : [undefined, undefined]))), [b.id]), compare_1.ascendingStringNumberUndefined);
});
};
Scene.prototype.markDirty = function () {
this._dirty = true;
};
Object.defineProperty(Scene.prototype, "dirty", {
get: function () {
return this._dirty;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Scene.prototype, "root", {
get: function () {
return this._root;
},
set: function (node) {
var _this = this;
if (node === this._root) {
return;
}
if (this._root) {
this._root._setLayerManager();
}
this._root = node;
if (node) {
// If `node` is the root node of another scene ...
if (node.parent === null && node.layerManager && node.layerManager !== this) {
node.layerManager.root = null;
}
node._setLayerManager({
addLayer: function (opts) { return _this.addLayer(opts); },
moveLayer: function () {
var opts = [];
for (var _i = 0; _i < arguments.length; _i++) {
opts[_i] = arguments[_i];
}
return _this.moveLayer.apply(_this, __spreadArray([], __read(opts)));
},
removeLayer: function () {
var opts = [];
for (var _i = 0; _i < arguments.length; _i++) {
opts[_i] = arguments[_i];
}
return _this.removeLayer.apply(_this, __spreadArray([], __read(opts)));
},
markDirty: function () { return _this.markDirty(); },
canvas: this.canvas,
debug: __assign(__assign({}, this.debug), { consoleLog: this.debug.level >= sceneDebugOptions_1.SceneDebugLevel.DETAILED }),
});
}
this.markDirty();
},
enumerable: false,
configurable: true
});
/** Alternative to destroy() that preserves re-usable resources. */
Scene.prototype.strip = function () {
var e_1, _a;
var layers = this.layers;
try {
for (var layers_1 = __values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) {
var layer = layers_1_1.value;
layer.canvas.destroy();
delete layer['canvas'];
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1);
}
finally { if (e_1) throw e_1.error; }
}
layers.splice(0, layers.length);
this.root = null;
this._dirty = false;
this.canvas.context.resetTransform();
};
Scene.prototype.destroy = function () {
this.container = undefined;
this.strip();
this.canvas.destroy();
Object.assign(this, { canvas: undefined, ctx: undefined });
};
Scene.prototype.render = function (opts) {
var _a;
return __awaiter(this, void 0, void 0, function () {
var _b, _c, debugSplitTimes, _d, extraDebugStats, _e, canvas, ctx, root, layers, pendingSize, mode, renderCtx, canvasCleared, _f, dirtyTree, paths;
var _g;
return __generator(this, function (_h) {
_b = opts !== null && opts !== void 0 ? opts : {}, _c = _b.debugSplitTimes, debugSplitTimes = _c === void 0 ? [performance.now()] : _c, _d = _b.extraDebugStats, extraDebugStats = _d === void 0 ? {} : _d;
_e = this, canvas = _e.canvas, ctx = _e.canvas.context, root = _e.root, layers = _e.layers, pendingSize = _e.pendingSize, mode = _e.opts.mode;
if (pendingSize) {
(_g = this.canvas).resize.apply(_g, __spreadArray([], __read(pendingSize)));
this.layers.forEach(function (layer) {
var _a;
return (_a = layer.canvas).resize.apply(_a, __spreadArray([], __read(pendingSize)));
});
this.pendingSize = undefined;
}
if (root && !root.visible) {
this._dirty = false;
return [2 /*return*/];
}
if (root && !this.dirty) {
if (this.debug.consoleLog) {
logger_1.Logger.debug('Scene.render() - no-op', {
redrawType: node_1.RedrawType[root.dirty],
tree: this.buildTree(root),
});
}
this.debugStats(debugSplitTimes, ctx, undefined, extraDebugStats);
return [2 /*return*/];
}
renderCtx = {
ctx: ctx,
forceRender: true,
resized: !!pendingSize,
debugNodes: {},
};
if (this.debug.stats === 'detailed') {
renderCtx.stats = { layersRendered: 0, layersSkipped: 0, nodesRendered: 0, nodesSkipped: 0 };
}
canvasCleared = false;
if (!root || root.dirty >= node_1.RedrawType.TRIVIAL) {
// start with a blank canvas, clear previous drawing
canvasCleared = true;
canvas.clear();
}
if (root && this.debug.dirtyTree) {
_f = this.buildDirtyTree(root), dirtyTree = _f.dirtyTree, paths = _f.paths;
logger_1.Logger.debug('Scene.render() - dirtyTree', { dirtyTree: dirtyTree, paths: paths });
}
if (root && canvasCleared) {
if (this.debug.consoleLog) {
logger_1.Logger.debug('Scene.render() - before', {
redrawType: node_1.RedrawType[root.dirty],
canvasCleared: canvasCleared,
tree: this.buildTree(root),
});
}
if (root.visible) {
ctx.save();
root.render(renderCtx);
ctx.restore();
}
}
if (mode !== 'dom-composite' && layers.length > 0 && canvasCleared) {
this.sortLayers();
ctx.save();
ctx.setTransform(1 / canvas.pixelRatio, 0, 0, 1 / canvas.pixelRatio, 0, 0);
layers.forEach(function (_a) {
var _b = _a.canvas, imageSource = _b.imageSource, enabled = _b.enabled, getComputedOpacity = _a.getComputedOpacity, getVisibility = _a.getVisibility;
if (!enabled || !getVisibility()) {
return;
}
ctx.globalAlpha = getComputedOpacity();
ctx.drawImage(imageSource, 0, 0);
});
ctx.restore();
}
// Check for save/restore depth of zero!
(_a = ctx.verifyDepthZero) === null || _a === void 0 ? void 0 : _a.call(ctx);
this._dirty = false;
this.debugStats(debugSplitTimes, ctx, renderCtx.stats, extraDebugStats);
this.debugSceneNodeHighlight(ctx, this.debug.sceneNodeHighlight, renderCtx.debugNodes);
if (root && this.debug.consoleLog) {
logger_1.Logger.debug('Scene.render() - after', {
redrawType: node_1.RedrawType[root.dirty],
canvasCleared: canvasCleared,
tree: this.buildTree(root),
});
}
return [2 /*return*/];
});
});
};
Scene.prototype.debugStats = function (debugSplitTimes, ctx, renderCtxStats, extraDebugStats) {
var e_2, _a;
if (extraDebugStats === void 0) { extraDebugStats = {}; }
var end = performance.now();
if (this.debug.stats) {
var start = debugSplitTimes[0];
debugSplitTimes.push(end);
var pct = function (rendered, skipped) {
var total = rendered + skipped;
return rendered + " / " + total + " (" + Math.round((100 * rendered) / total) + "%)";
};
var time_1 = function (start, end) {
return Math.round((end - start) * 100) / 100 + "ms";
};
var _b = renderCtxStats !== null && renderCtxStats !== void 0 ? renderCtxStats : {}, _c = _b.layersRendered, layersRendered = _c === void 0 ? 0 : _c, _d = _b.layersSkipped, layersSkipped = _d === void 0 ? 0 : _d, _e = _b.nodesRendered, nodesRendered = _e === void 0 ? 0 : _e, _f = _b.nodesSkipped, nodesSkipped = _f === void 0 ? 0 : _f;
var splits = debugSplitTimes
.map(function (t, i) { return (i > 0 ? time_1(debugSplitTimes[i - 1], t) : null); })
.filter(function (v) { return v != null; })
.join(' + ');
var extras = Object.entries(extraDebugStats)
.map(function (_a) {
var _b = __read(_a, 2), k = _b[0], v = _b[1];
return k + ": " + v;
})
.join(' ; ');
var stats = [
time_1(start, end) + " (" + splits + ")",
"" + extras,
this.debug.stats === 'detailed' ? "Layers: " + pct(layersRendered, layersSkipped) : null,
this.debug.stats === 'detailed' ? "Nodes: " + pct(nodesRendered, nodesSkipped) : null,
].filter(function (v) { return v != null; });
var statsSize = stats.map(function (t) { return [t, hdpiCanvas_1.HdpiCanvas.getTextSize(t, ctx.font)]; });
var width = Math.max.apply(Math, __spreadArray([], __read(statsSize.map(function (_a) {
var _b = __read(_a, 2), width = _b[1].width;
return width;
}))));
var height = statsSize.reduce(function (total, _a) {
var _b = __read(_a, 2), height = _b[1].height;
return total + height;
}, 0);
ctx.save();
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, width, height);
ctx.fillStyle = 'black';
var y = 0;
try {
for (var statsSize_1 = __values(statsSize), statsSize_1_1 = statsSize_1.next(); !statsSize_1_1.done; statsSize_1_1 = statsSize_1.next()) {
var _g = __read(statsSize_1_1.value, 2), stat = _g[0], size = _g[1];
y += size.height;
ctx.fillText(stat, 2, y);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (statsSize_1_1 && !statsSize_1_1.done && (_a = statsSize_1.return)) _a.call(statsSize_1);
}
finally { if (e_2) throw e_2.error; }
}
ctx.restore();
}
};
Scene.prototype.debugSceneNodeHighlight = function (ctx, sceneNodeHighlight, debugNodes) {
var e_3, _a, e_4, _b, e_5, _c;
var _d;
var regexpPredicate = function (matcher) { return function (n) {
if (matcher.test(n.id)) {
return true;
}
return n instanceof group_1.Group && n.name != null && matcher.test(n.name);
}; };
var stringPredicate = function (match) { return function (n) {
if (match === n.id) {
return true;
}
return n instanceof group_1.Group && n.name != null && match === n.name;
}; };
try {
for (var sceneNodeHighlight_1 = __values(sceneNodeHighlight), sceneNodeHighlight_1_1 = sceneNodeHighlight_1.next(); !sceneNodeHighlight_1_1.done; sceneNodeHighlight_1_1 = sceneNodeHighlight_1.next()) {
var next = sceneNodeHighlight_1_1.value;
if (typeof next === 'string' && debugNodes[next] != null)
continue;
var predicate = typeof next === 'string' ? stringPredicate(next) : regexpPredicate(next);
var nodes = (_d = this.root) === null || _d === void 0 ? void 0 : _d.findNodes(predicate);
if (!nodes || nodes.length === 0) {
logger_1.Logger.debug("Scene.render() - no debugging node with id [" + next + "] in scene graph.");
continue;
}
try {
for (var nodes_1 = (e_4 = void 0, __values(nodes)), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
var node = nodes_1_1.value;
if (node instanceof group_1.Group && node.name) {
debugNodes[node.name] = node;
}
else {
debugNodes[node.id] = node;
}
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (nodes_1_1 && !nodes_1_1.done && (_b = nodes_1.return)) _b.call(nodes_1);
}
finally { if (e_4) throw e_4.error; }
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (sceneNodeHighlight_1_1 && !sceneNodeHighlight_1_1.done && (_a = sceneNodeHighlight_1.return)) _a.call(sceneNodeHighlight_1);
}
finally { if (e_3) throw e_3.error; }
}
ctx.save();
try {
for (var _e = __values(Object.entries(debugNodes)), _f = _e.next(); !_f.done; _f = _e.next()) {
var _g = __read(_f.value, 2), name_1 = _g[0], node = _g[1];
var bbox = node.computeTransformedBBox();
if (!bbox) {
logger_1.Logger.debug("Scene.render() - no bbox for debugged node [" + name_1 + "].");
continue;
}
ctx.globalAlpha = 0.8;
ctx.strokeStyle = 'red';
ctx.lineWidth = 1;
ctx.strokeRect(bbox.x, bbox.y, bbox.width, bbox.height);
ctx.fillStyle = 'red';
ctx.strokeStyle = 'white';
ctx.font = '16px sans-serif';
ctx.textBaseline = 'top';
ctx.textAlign = 'left';
ctx.lineWidth = 2;
ctx.strokeText(name_1, bbox.x, bbox.y, bbox.width);
ctx.fillText(name_1, bbox.x, bbox.y, bbox.width);
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (_f && !_f.done && (_c = _e.return)) _c.call(_e);
}
finally { if (e_5) throw e_5.error; }
}
ctx.restore();
};
Scene.prototype.buildTree = function (node) {
var _this = this;
var _a, _b;
var name = (_a = (node instanceof group_1.Group ? node.name : null)) !== null && _a !== void 0 ? _a : node.id;
return __assign(__assign({ name: name, node: node, dirty: node_1.RedrawType[node.dirty] }, (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.isVirtual)
? {
virtualParentDirty: node_1.RedrawType[node.parent.dirty],
virtualParent: node.parent,
}
: {})), node.children
.map(function (c) { return _this.buildTree(c); })
.reduce(function (result, childTree) {
var treeNodeName = childTree.name;
var _a = childTree.node, visible = _a.visible, opacity = _a.opacity, zIndex = _a.zIndex, zIndexSubOrder = _a.zIndexSubOrder, childNode = childTree.node, virtualParent = childTree.virtualParent;
if (!visible || opacity <= 0) {
treeNodeName = "(" + treeNodeName + ")";
}
if (childNode instanceof group_1.Group && childNode.isLayer()) {
treeNodeName = "*" + treeNodeName + "*";
}
var key = [
"" + (treeNodeName !== null && treeNodeName !== void 0 ? treeNodeName : '<unknown>'),
"z: " + zIndex,
zIndexSubOrder &&
"zo: " + zIndexSubOrder
.map(function (v) { return (typeof v === 'function' ? v() + " (fn)" : v); })
.join(' / '),
virtualParent && "(virtual parent)",
]
.filter(function (v) { return !!v; })
.join(' ');
var selectedKey = key;
var index = 1;
while (result[selectedKey] != null && index < 100) {
selectedKey = key + " (" + index++ + ")";
}
result[selectedKey] = childTree;
return result;
}, {}));
};
Scene.prototype.buildDirtyTree = function (node) {
var _this = this;
var _a;
if (node.dirty === node_1.RedrawType.NONE) {
return { dirtyTree: {}, paths: [] };
}
var childrenDirtyTree = node.children.map(function (c) { return _this.buildDirtyTree(c); }).filter(function (c) { return c.paths.length > 0; });
var name = (_a = (node instanceof group_1.Group ? node.name : null)) !== null && _a !== void 0 ? _a : node.id;
var paths = childrenDirtyTree.length === 0
? [name]
: childrenDirtyTree
.map(function (c) { return c.paths; })
.reduce(function (r, p) { return r.concat(p); }, [])
.map(function (p) { return name + "." + p; });
return {
dirtyTree: __assign({ name: name, node: node, dirty: node_1.RedrawType[node.dirty] }, childrenDirtyTree
.map(function (c) { return c.dirtyTree; })
.filter(function (t) { return t.dirty !== undefined; })
.reduce(function (result, childTree) {
var _a;
result[(_a = childTree.name) !== null && _a !== void 0 ? _a : '<unknown>'] = childTree;
return result;
}, {})),
paths: paths,
};
};
Scene.className = 'Scene';
return Scene;
}());
exports.Scene = Scene;
//# sourceMappingURL=scene.js.map