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">
1 lines • 13.3 kB
Source Map (JSON)
{"version":3,"file":"CanvasNineSliceSpritePipe.mjs","sources":["../../../../src/scene/sprite-nine-slice/canvas/CanvasNineSliceSpritePipe.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { canvasUtils } from '../../../rendering/renderers/canvas/utils/canvasUtils';\nimport { bgr2rgb } from '../../../scene/container/container-mixins/getGlobalMixin';\nimport { multiplyHexColors } from '../../../scene/container/utils/multiplyHexColors';\n\nimport type { CanvasRenderer } from '../../../rendering/renderers/canvas/CanvasRenderer';\nimport type { InstructionSet } from '../../../rendering/renderers/shared/instructions/InstructionSet';\nimport type { RenderPipe } from '../../../rendering/renderers/shared/instructions/RenderPipe';\nimport type { Renderer } from '../../../rendering/renderers/types';\nimport type { NineSliceSprite } from '../NineSliceSprite';\n\n/**\n * The NineSliceSpritePipe is a render pipe for rendering NineSliceSprites with Canvas2D.\n * @internal\n */\nexport class CanvasNineSliceSpritePipe implements RenderPipe<NineSliceSprite>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.CanvasPipes,\n ],\n name: 'nineSliceSprite',\n } as const;\n\n private _renderer: CanvasRenderer;\n\n constructor(renderer: Renderer)\n {\n this._renderer = renderer as CanvasRenderer;\n }\n\n public validateRenderable(_sprite: NineSliceSprite): boolean\n {\n return false;\n }\n\n public addRenderable(sprite: NineSliceSprite, instructionSet: InstructionSet)\n {\n this._renderer.renderPipes.batch.break(instructionSet);\n instructionSet.add(sprite);\n }\n\n public updateRenderable(_sprite: NineSliceSprite)\n {\n // no-op for canvas\n }\n\n public execute(sprite: NineSliceSprite)\n {\n const renderer = this._renderer;\n const contextSystem = renderer.canvasContext;\n const context = contextSystem.activeContext;\n\n context.save();\n\n const transform = sprite.groupTransform;\n const roundPixels = (renderer._roundPixels | sprite._roundPixels) as 0 | 1;\n\n contextSystem.setContextTransform(transform, roundPixels === 1);\n contextSystem.setBlendMode(sprite.groupBlendMode);\n\n const globalColor = renderer.globalUniforms.globalUniformData?.worldColor ?? 0xFFFFFFFF;\n const groupColorAlpha = sprite.groupColorAlpha;\n\n const globalAlpha = ((globalColor >>> 24) & 0xFF) / 255;\n const groupAlphaValue = ((groupColorAlpha >>> 24) & 0xFF) / 255;\n\n const filterAlpha = (renderer.filter as { alphaMultiplier?: number } | null)?.alphaMultiplier ?? 1;\n const alpha = globalAlpha * groupAlphaValue * filterAlpha;\n\n if (alpha <= 0)\n {\n context.restore();\n\n return;\n }\n\n context.globalAlpha = alpha;\n\n const globalTint = globalColor & 0xFFFFFF;\n const groupTintBGR = groupColorAlpha & 0xFFFFFF;\n\n const tint = bgr2rgb(multiplyHexColors(groupTintBGR, globalTint));\n\n const texture = sprite.texture;\n\n const drawSource = canvasUtils.getCanvasSource(texture);\n\n if (!drawSource)\n {\n context.restore();\n\n return;\n }\n\n const smoothProperty = contextSystem.smoothProperty;\n const shouldSmooth = texture.source.style.scaleMode !== 'nearest';\n\n if (context[smoothProperty] !== shouldSmooth)\n {\n context[smoothProperty] = shouldSmooth;\n }\n\n // Use getTintedCanvas when tinted OR when texture is rotated (handles rotation compensation)\n const needsProcessing = tint !== 0xFFFFFF || texture.rotate !== 0;\n const finalSource = needsProcessing\n ? canvasUtils.getTintedCanvas({ texture }, tint) as CanvasImageSource\n : drawSource;\n\n const {\n leftWidth,\n topHeight,\n rightWidth,\n bottomHeight,\n width,\n height,\n } = sprite;\n\n const totalBorderWidth = leftWidth + rightWidth;\n const totalBorderHeight = topHeight + bottomHeight;\n const scale = Math.min(\n totalBorderWidth > width ? width / totalBorderWidth : 1,\n totalBorderHeight > height ? height / totalBorderHeight : 1,\n 1,\n );\n\n const destLeftWidth = leftWidth * scale;\n const destRightWidth = rightWidth * scale;\n const destTopHeight = topHeight * scale;\n const destBottomHeight = bottomHeight * scale;\n const destCenterWidth = Math.max(0, width - destLeftWidth - destRightWidth);\n const destCenterHeight = Math.max(0, height - destTopHeight - destBottomHeight);\n\n const anchor = sprite.anchor;\n\n const resolution = texture.source._resolution ?? texture.source.resolution ?? 1;\n let sx = (texture.frame.x) * resolution;\n let sy = (texture.frame.y) * resolution;\n\n const dx = -anchor.x * width;\n const dy = -anchor.y * height;\n\n const lw = leftWidth * resolution;\n const tw = topHeight * resolution;\n const rw = rightWidth * resolution;\n const bw = bottomHeight * resolution;\n\n let sw = (texture.frame.width) * resolution;\n let sh = (texture.frame.height) * resolution;\n\n if (needsProcessing)\n {\n sx = 0;\n sy = 0;\n sw = (finalSource as any).width;\n sh = (finalSource as any).height;\n }\n\n // Top-left\n context.drawImage(finalSource, sx, sy, lw, tw, dx, dy, destLeftWidth, destTopHeight);\n // Top-center\n context.drawImage(\n finalSource,\n sx + lw, sy,\n sw - lw - rw, tw,\n dx + destLeftWidth, dy,\n destCenterWidth, destTopHeight\n );\n // Top-right\n context.drawImage(\n finalSource,\n sx + sw - rw, sy,\n rw, tw,\n dx + width - destRightWidth, dy,\n destRightWidth, destTopHeight\n );\n\n // Middle-left\n context.drawImage(\n finalSource,\n sx, sy + tw,\n lw, sh - tw - bw,\n dx, dy + destTopHeight,\n destLeftWidth, destCenterHeight\n );\n // Middle-center\n context.drawImage(\n finalSource,\n sx + lw, sy + tw,\n sw - lw - rw, sh - tw - bw,\n dx + destLeftWidth, dy + destTopHeight,\n destCenterWidth, destCenterHeight\n );\n // Middle-right\n context.drawImage(\n finalSource,\n sx + sw - rw, sy + tw,\n rw, sh - tw - bw,\n dx + width - destRightWidth, dy + destTopHeight,\n destRightWidth, destCenterHeight\n );\n\n // Bottom-left\n context.drawImage(\n finalSource,\n sx, sy + sh - bw,\n lw, bw,\n dx, dy + height - destBottomHeight,\n destLeftWidth, destBottomHeight\n );\n // Bottom-center\n context.drawImage(\n finalSource,\n sx + lw, sy + sh - bw,\n sw - lw - rw, bw,\n dx + destLeftWidth, dy + height - destBottomHeight,\n destCenterWidth, destBottomHeight\n );\n // Bottom-right\n context.drawImage(\n finalSource,\n sx + sw - rw, sy + sh - bw,\n rw, bw,\n dx + width - destRightWidth, dy + height - destBottomHeight,\n destRightWidth, destBottomHeight\n );\n\n context.restore();\n }\n\n public destroy()\n {\n this._renderer = null;\n }\n}\n"],"names":[],"mappings":"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"}