66 lines
2.8 KiB
JavaScript
66 lines
2.8 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$utils$canvas$getCanvasBoundingBox = function(global, require, module, exports) {
|
|
function checkRow(data, width, y) {
|
|
for (let x = 0, index = 4 * y * width; x < width; ++x, index += 4) {
|
|
if (0 !== data[index + 3]) {
|
|
return !1;
|
|
}
|
|
}
|
|
return !0;
|
|
}
|
|
function checkColumn(data, width, x, top, bottom) {
|
|
width *= 4;
|
|
for (let y = top, index = top * width + 4 * x; y <= bottom; ++y, index += width) {
|
|
if (0 !== data[index + 3]) {
|
|
return !1;
|
|
}
|
|
}
|
|
return !0;
|
|
}
|
|
var adapter = require("module$node_modules$pixi_DOT_js$lib$environment$adapter"), pow2 = require("module$node_modules$pixi_DOT_js$lib$maths$misc$pow2"), Rectangle = require("module$node_modules$pixi_DOT_js$lib$maths$shapes$Rectangle");
|
|
"use strict";
|
|
let _internalCanvas = null, _internalContext = null;
|
|
exports.getCanvasBoundingBox = function(...args) {
|
|
var options = args[0];
|
|
options.canvas || (options = {canvas:args[0], resolution:args[1]});
|
|
var {canvas} = options;
|
|
args = Math.min(options.resolution ?? 1, 1);
|
|
const width = options.width ?? canvas.width, height = options.height ?? canvas.height;
|
|
options = options.output;
|
|
_internalCanvas || (_internalCanvas = adapter.DOMAdapter.get().createCanvas(256, 128), _internalContext = _internalCanvas.getContext("2d", {willReadFrequently:!0}), _internalContext.globalCompositeOperation = "copy", _internalContext.globalAlpha = 1);
|
|
if (_internalCanvas.width < width || _internalCanvas.height < height) {
|
|
_internalCanvas.width = pow2.nextPow2(width), _internalCanvas.height = pow2.nextPow2(height);
|
|
}
|
|
if (!_internalContext) {
|
|
throw new TypeError("Failed to get canvas 2D context");
|
|
}
|
|
_internalContext.drawImage(canvas, 0, 0, width, height, 0, 0, width * args, height * args);
|
|
canvas = _internalContext.getImageData(0, 0, width, height).data;
|
|
let left = 0, top = 0, right = width - 1, bottom = height - 1;
|
|
for (; top < height && checkRow(canvas, width, top);) {
|
|
++top;
|
|
}
|
|
if (top === height) {
|
|
return Rectangle.Rectangle.EMPTY;
|
|
}
|
|
for (; checkRow(canvas, width, bottom);) {
|
|
--bottom;
|
|
}
|
|
for (; checkColumn(canvas, width, left, top, bottom);) {
|
|
++left;
|
|
}
|
|
for (; checkColumn(canvas, width, right, top, bottom);) {
|
|
--right;
|
|
}
|
|
++right;
|
|
++bottom;
|
|
_internalContext.globalCompositeOperation = "source-over";
|
|
_internalContext.strokeRect(left, top, right - left, bottom - top);
|
|
_internalContext.globalCompositeOperation = "copy";
|
|
options ?? (options = new Rectangle.Rectangle());
|
|
options.set(left / args, top / args, (right - left) / args, (bottom - top) / args);
|
|
return options;
|
|
};
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$utils$canvas$getCanvasBoundingBox.js.map
|