@haiku/player
Version:
Haiku Player is a JavaScript library for building user interfaces
148 lines • 5.22 kB
JavaScript
"use strict";
var __assign = (this && this.__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;
};
Object.defineProperty(exports, "__esModule", { value: true });
var computeMatrix_1 = require("./layout/computeMatrix");
var computeOrientationFlexibly_1 = require("./layout/computeOrientationFlexibly");
var computeSize_1 = require("./layout/computeSize");
var ELEMENTS_2D = {
circle: true,
ellipse: true,
foreignObject: true,
g: true,
image: true,
line: true,
mesh: true,
path: true,
polygon: true,
polyline: true,
rect: true,
switch: true,
symbol: true,
text: true,
textPath: true,
tspan: true,
unknown: true,
use: true,
};
var SIZE_PROPORTIONAL = 0;
var SIZE_ABSOLUTE = 1;
var DEFAULT_DEPTH = 0;
var IDENTITY = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
var FORMATS = {
THREE: 3,
TWO: 2,
};
function initializeNodeAttributes(element) {
if (!element.attributes) {
element.attributes = {};
}
if (!element.attributes.style) {
element.attributes.style = {};
}
if (!element.layout) {
element.layout = createLayoutSpec(null, null, null);
element.layout.matrix = createMatrix();
element.layout.format = ELEMENTS_2D[element.elementName]
? FORMATS.TWO
: FORMATS.THREE;
}
return element;
}
function initializeTreeAttributes(tree, container) {
if (!tree || typeof tree === 'string') {
return;
}
initializeNodeAttributes(tree);
tree.__parent = container;
if (!tree.children || tree.children.length < 1) {
return;
}
for (var i = 0; i < tree.children.length; i++) {
initializeTreeAttributes(tree.children[i], tree);
}
}
function createLayoutSpec(ax, ay, az) {
return {
shown: true,
opacity: 1.0,
mount: { x: ax || 0, y: ay || 0, z: az || 0 },
align: { x: ax || 0, y: ay || 0, z: az || 0 },
origin: { x: ax || 0, y: ay || 0, z: az || 0 },
translation: { x: 0, y: 0, z: 0 },
rotation: { x: 0, y: 0, z: 0, w: 0 },
orientation: { x: 0, y: 0, z: 0, w: 0 },
scale: { x: 1, y: 1, z: 1 },
sizeMode: {
x: SIZE_PROPORTIONAL,
y: SIZE_PROPORTIONAL,
z: SIZE_PROPORTIONAL,
},
sizeProportional: { x: 1, y: 1, z: 1 },
sizeDifferential: { x: 0, y: 0, z: 0 },
sizeAbsolute: { x: 0, y: 0, z: 0 },
};
}
function createMatrix() {
return copyMatrix(IDENTITY);
}
function copyMatrix(m) {
return m.slice();
}
function multiplyMatrices(a, b) {
return [
a[0] * b[0] + a[1] * b[4] + a[2] * b[8] + a[3] * b[12],
a[0] * b[1] + a[1] * b[5] + a[2] * b[9] + a[3] * b[13],
a[0] * b[2] + a[1] * b[6] + a[2] * b[10] + a[3] * b[14],
a[0] * b[3] + a[1] * b[7] + a[2] * b[11] + a[3] * b[15],
a[4] * b[0] + a[5] * b[4] + a[6] * b[8] + a[7] * b[12],
a[4] * b[1] + a[5] * b[5] + a[6] * b[9] + a[7] * b[13],
a[4] * b[2] + a[5] * b[6] + a[6] * b[10] + a[7] * b[14],
a[4] * b[3] + a[5] * b[7] + a[6] * b[11] + a[7] * b[15],
a[8] * b[0] + a[9] * b[4] + a[10] * b[8] + a[11] * b[12],
a[8] * b[1] + a[9] * b[5] + a[10] * b[9] + a[11] * b[13],
a[8] * b[2] + a[9] * b[6] + a[10] * b[10] + a[11] * b[14],
a[8] * b[3] + a[9] * b[7] + a[10] * b[11] + a[11] * b[15],
a[12] * b[0] + a[13] * b[4] + a[14] * b[8] + a[15] * b[12],
a[12] * b[1] + a[13] * b[5] + a[14] * b[9] + a[15] * b[13],
a[12] * b[2] + a[13] * b[6] + a[14] * b[10] + a[15] * b[14],
a[12] * b[3] + a[13] * b[7] + a[14] * b[11] + a[15] * b[15],
];
}
function multiplyArrayOfMatrices(arrayOfMatrices) {
var product = createMatrix();
for (var i = 0; i < arrayOfMatrices.length; i++) {
product = multiplyMatrices(product, arrayOfMatrices[i]);
}
return product;
}
function computeLayout(layoutSpec, currentMatrix, parentsizeAbsoluteIn) {
delete layoutSpec.computed;
var parentsizeAbsolute = parentsizeAbsoluteIn || { x: 0, y: 0, z: 0 };
if (parentsizeAbsolute.z === undefined || parentsizeAbsolute.z === null) {
parentsizeAbsolute.z = DEFAULT_DEPTH;
}
var size = computeSize_1.default(layoutSpec, layoutSpec.sizeMode, parentsizeAbsolute);
return __assign({}, layoutSpec, { size: size, matrix: computeMatrix_1.default(layoutSpec, currentMatrix, size, parentsizeAbsolute) });
}
exports.default = {
multiplyArrayOfMatrices: multiplyArrayOfMatrices,
computeLayout: computeLayout,
createLayoutSpec: createLayoutSpec,
computeOrientationFlexibly: computeOrientationFlexibly_1.default,
createMatrix: createMatrix,
multiplyMatrices: multiplyMatrices,
copyMatrix: copyMatrix,
initializeTreeAttributes: initializeTreeAttributes,
FORMATS: FORMATS,
SIZE_ABSOLUTE: SIZE_ABSOLUTE,
SIZE_PROPORTIONAL: SIZE_PROPORTIONAL,
ATTRIBUTES: createLayoutSpec(null, null, null),
};
//# sourceMappingURL=Layout3D.js.map