pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
47 lines (44 loc) • 1.69 kB
JavaScript
import { Matrix } from '../../../../maths/matrix/Matrix.mjs';
import { Rectangle } from '../../../../maths/shapes/Rectangle.mjs';
import { FillGradient } from '../fill/FillGradient.mjs';
;
const tempTextureMatrix = new Matrix();
const tempRect = new Rectangle();
function generateTextureMatrix(out, style, shape, matrix) {
const textureMatrix = style.matrix ? out.copyFrom(style.matrix).invert() : out.identity();
if (style.textureSpace === "local") {
const bounds = shape.getBounds(tempRect);
if (style.width) {
bounds.pad(style.width);
}
const { x: tx, y: ty } = bounds;
const sx = 1 / bounds.width;
const sy = 1 / bounds.height;
const mTx = -tx * sx;
const mTy = -ty * sy;
const a1 = textureMatrix.a;
const b1 = textureMatrix.b;
const c1 = textureMatrix.c;
const d1 = textureMatrix.d;
textureMatrix.a *= sx;
textureMatrix.b *= sx;
textureMatrix.c *= sy;
textureMatrix.d *= sy;
textureMatrix.tx = mTx * a1 + mTy * c1 + textureMatrix.tx;
textureMatrix.ty = mTx * b1 + mTy * d1 + textureMatrix.ty;
} else {
textureMatrix.translate(style.texture.frame.x, style.texture.frame.y);
textureMatrix.scale(1 / style.texture.source.width, 1 / style.texture.source.height);
}
const sourceStyle = style.texture.source.style;
if (!(style.fill instanceof FillGradient) && sourceStyle.addressMode === "clamp-to-edge") {
sourceStyle.addressMode = "repeat";
sourceStyle.update();
}
if (matrix) {
textureMatrix.append(tempTextureMatrix.copyFrom(matrix).invert());
}
return textureMatrix;
}
export { generateTextureMatrix };
//# sourceMappingURL=generateTextureFillMatrix.mjs.map