shadow$provide.module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$fill$FillGradient = function(global, require, module, exports) { function addColorStops(gradient, colorStops) { for (let i = 0; i < colorStops.length; i++) { const stop = colorStops[i]; gradient.addColorStop(stop.offset, stop.color); } } function getCanvas(width, height) { width = adapter.DOMAdapter.get().createCanvas(width, height); height = width.getContext("2d"); return {canvas:width, context:height}; } function ensureGradientOptions(args) { let options = args[0] ?? {}; if ("number" === typeof options || args[1]) { deprecation.deprecation("8.5.2", "use options object instead"), options = {type:"linear", start:{x:args[0], y:args[1]}, end:{x:args[2], y:args[3]}, textureSpace:args[4], textureSize:args[5] ?? FillGradient.defaultLinearOptions.textureSize}; } return options; } var Color = require("module$node_modules$pixi_DOT_js$lib$color$Color"), adapter = require("module$node_modules$pixi_DOT_js$lib$environment$adapter"), Matrix = require("module$node_modules$pixi_DOT_js$lib$maths$matrix$Matrix"), ImageSource = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$ImageSource"), Texture = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$Texture"), uid = require("module$node_modules$pixi_DOT_js$lib$utils$data$uid"), deprecation = require("module$node_modules$pixi_DOT_js$lib$utils$logging$deprecation"), definedProps = require("module$node_modules$pixi_DOT_js$lib$scene$container$utils$definedProps"); "use strict"; const emptyColorStops = [{offset:0, color:"white"}, {offset:1, color:"black"}], node_modules$pixi_DOT_js$lib$scene$graphics$shared$fill$FillGradient$classdecl$var28 = class { constructor(...args) { this.uid = uid.uid("fillGradient"); this._tick = 0; this.type = "linear"; this.colorStops = []; args = ensureGradientOptions(args); args = {...("radial" === args.type ? node_modules$pixi_DOT_js$lib$scene$graphics$shared$fill$FillGradient$classdecl$var28.defaultRadialOptions : node_modules$pixi_DOT_js$lib$scene$graphics$shared$fill$FillGradient$classdecl$var28.defaultLinearOptions), ...definedProps.definedProps(args)}; this._textureSize = args.textureSize; this._wrapMode = args.wrapMode; "radial" === args.type ? (this.center = args.center, this.outerCenter = args.outerCenter ?? this.center, this.innerRadius = args.innerRadius, this.outerRadius = args.outerRadius, this.scale = args.scale, this.rotation = args.rotation) : (this.start = args.start, this.end = args.end); this.textureSpace = args.textureSpace; this.type = args.type; args.colorStops.forEach(stop => { this.addColorStop(stop.offset, stop.color); }); } addColorStop(offset, color) { this.colorStops.push({offset, color:Color.Color.shared.setValue(color).toHexa()}); return this; } buildLinearGradient() { if (!this.texture) { var {x:x0, y:y0} = this.start, {x:x1, y:y1} = this.end, dx = x1 - x0, dy = y1 - y0, flip = 0 > dx || 0 > dy; "clamp-to-edge" === this._wrapMode && (0 > dx && (x0 = x1, dx *= -1), 0 > dy && (y0 = y1, dy *= -1)); var colorStops = this.colorStops.length ? this.colorStops : emptyColorStops, defaultSize = this._textureSize, {canvas, context} = getCanvas(defaultSize, 1); flip = flip ? context.createLinearGradient(this._textureSize, 0, 0, 0) : context.createLinearGradient(0, 0, this._textureSize, 0); addColorStops(flip, colorStops); context.fillStyle = flip; context.fillRect(0, 0, defaultSize, 1); this.texture = new Texture.Texture({source:new ImageSource.ImageSource({resource:canvas, addressMode:this._wrapMode})}); colorStops = Math.sqrt(dx * dx + dy * dy); dx = Math.atan2(dy, dx); dy = new Matrix.Matrix(); dy.scale(colorStops / defaultSize, 1); dy.rotate(dx); dy.translate(x0, y0); "local" === this.textureSpace && dy.scale(defaultSize, defaultSize); this.transform = dy; } } buildGradient() { this.texture || this._tick++; "linear" === this.type ? this.buildLinearGradient() : this.buildRadialGradient(); } buildRadialGradient() { if (!this.texture) { var colorStops = this.colorStops.length ? this.colorStops : emptyColorStops, defaultSize = this._textureSize, {canvas, context} = getCanvas(defaultSize, defaultSize), {x:x0, y:y0} = this.center, {x:x1, y:y1} = this.outerCenter, r1 = this.outerRadius, ox = x1 - r1, oy = y1 - r1, scale = defaultSize / (2 * r1), cx = (x0 - ox) * scale, cy = (y0 - oy) * scale, gradient = context.createRadialGradient(cx, cy, this.innerRadius * scale, (x1 - ox) * scale, (y1 - oy) * scale, r1 * scale); addColorStops(gradient, colorStops); context.fillStyle = colorStops[colorStops.length - 1].color; context.fillRect(0, 0, defaultSize, defaultSize); context.fillStyle = gradient; context.translate(cx, cy); context.rotate(this.rotation); context.scale(1, this.scale); context.translate(-cx, -cy); context.fillRect(0, 0, defaultSize, defaultSize); this.texture = new Texture.Texture({source:new ImageSource.ImageSource({resource:canvas, addressMode:this._wrapMode})}); colorStops = new Matrix.Matrix(); "local" === this.textureSpace ? colorStops.scale(2 * r1, 2 * r1) : colorStops.scale(1 / scale, 1 / scale); colorStops.translate(ox, oy); this.transform = colorStops; } } destroy() { this.texture?.destroy(!0); this.transform = this.texture = null; this.colorStops = []; this.outerCenter = this.center = this.end = this.start = null; } get styleKey() { return `fill-gradient-${this.uid}-${this._tick}`; } }; global = node_modules$pixi_DOT_js$lib$scene$graphics$shared$fill$FillGradient$classdecl$var28; global.defaultLinearOptions = {start:{x:0, y:0}, end:{x:0, y:1}, colorStops:[], textureSpace:"local", type:"linear", textureSize:256, wrapMode:"clamp-to-edge"}; global.defaultRadialOptions = {center:{x:0.5, y:0.5}, innerRadius:0, outerRadius:0.5, colorStops:[], scale:1, rotation:0, textureSpace:"local", type:"radial", textureSize:256, wrapMode:"clamp-to-edge"}; let FillGradient = global; exports.FillGradient = FillGradient; }; //# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$fill$FillGradient.js.map