{"version":3,"file":"Graphics.mjs","sources":["../../../../src/scene/graphics/shared/Graphics.ts"],"sourcesContent":["import { deprecation, v8_0_0 } from '../../../utils/logging/deprecation';\nimport { ViewContainer, type ViewContainerOptions } from '../../view/ViewContainer';\nimport { GraphicsContext } from './GraphicsContext';\nimport { type GraphicsGpuData } from './GraphicsPipe';\n\nimport type { ColorSource } from '../../../color/Color';\nimport type { Matrix } from '../../../maths/matrix/Matrix';\nimport type { PointData } from '../../../maths/point/PointData';\nimport type { Instruction } from '../../../rendering/renderers/shared/instructions/Instruction';\nimport type { Texture } from '../../../rendering/renderers/shared/texture/Texture';\nimport type { Bounds } from '../../container/bounds/Bounds';\nimport type { ContextDestroyOptions, DestroyOptions } from '../../container/destroyTypes';\nimport type { FillInput, FillStyle, StrokeStyle } from './FillTypes';\nimport type { GraphicsPath } from './path/GraphicsPath';\nimport type { RoundedPoint } from './path/roundShape';\n\n/**\n * Constructor options used for Graphics instances.\n * Configures the initial state and behavior of a Graphics object.\n * @example\n * ```ts\n * const graphics = new Graphics({\n * roundPixels: true,\n * position: { x: 100.5, y: 100.5 }\n * });\n *\n * // Reuse graphics context\n * const sharedContext = new GraphicsContext();\n * const graphics1 = new Graphics({ context: sharedContext });\n * const graphics2 = new Graphics({ context: sharedContext });\n * ```\n * @see {@link Graphics} For the graphics class implementation\n * @see {@link GraphicsContext} For the graphics context API\n * @category scene\n * @standard\n */\nexport interface GraphicsOptions extends PixiMixins.GraphicsOptions, ViewContainerOptions\n{\n /**\n * The GraphicsContext to use, useful for reuse and optimisation\n * If not provided, a new GraphicsContext will be created.\n * @example\n * ```ts\n * const sharedContext = new GraphicsContext();\n * const graphics1 = new Graphics({ context: sharedContext });\n * const graphics2 = new Graphics({ context: sharedContext });\n * ```\n */\n context?: GraphicsContext;\n /**\n * Whether or not to round the x/y position.\n * @default false\n * @example\n * ```ts\n * const graphics = new Graphics({ roundPixels: true });\n * ```\n */\n roundPixels?: boolean;\n}\n// eslint-disable-next-line requireExport/require-export-jsdoc, requireMemberAPI/require-member-api-doc\nexport interface Graphics extends PixiMixins.Graphics, ViewContainer {}\n\n/**\n * The Graphics class is primarily used to render primitive shapes such as lines, circles and\n * rectangles to the display, and to color and fill them. It can also be used to create complex\n * masks and hit areas for interaction.\n * @example\n * ```ts\n * // Create a new graphics object\n * const graphics = new Graphics();\n *\n * // Draw a filled rectangle with a stroke\n * graphics\n * .rect(0, 0, 100, 100)\n * .fill({ color: 0xff0000 }) // Fill with red\n * .stroke({ width: 2, color: 0x000000 }); // Stroke with black\n *\n * // Draw a complex shape\n * graphics\n * .moveTo(50, 50)\n * .lineTo(100, 100)\n * .arc(100, 100, 50, 0, Math.PI)\n * .closePath()\n * .fill({ color: 0x00ff00, alpha: 0.5 }); // Fill the shape\n *\n * // Use as a mask\n * sprite.mask = graphics;\n * ```\n * @see {@link GraphicsContext} For the underlying drawing API\n * @see {@link GraphicsPath} For path creation\n * @category scene\n * @standard\n */\nexport class Graphics extends ViewContainer implements Instruction\n{\n /** @internal */\n public override readonly renderPipeId: string = 'graphics';\n /** @internal */\n public batched: boolean;\n\n private _context: GraphicsContext;\n private readonly _ownedContext: GraphicsContext;\n\n /**\n * Creates a new Graphics object.\n * @param options - Options for the Graphics.\n */\n constructor(options?: GraphicsOptions | GraphicsContext)\n {\n if (options instanceof GraphicsContext)\n {\n options = { context: options };\n }\n\n const { context, roundPixels, ...rest } = options || {};\n\n super({\n label: 'Graphics',\n ...rest\n });\n\n if (!context)\n {\n this._context = this._ownedContext = new GraphicsContext();\n }\n else\n {\n this._context = context;\n }\n\n this._context.on('update', this.onViewUpdate, this);\n\n this.didViewUpdate = true;\n\n this.allowChildren = false;\n this.roundPixels = roundPixels ?? false;\n }\n\n set context(context: GraphicsContext)\n {\n if (context === this._context) return;\n\n this._context.off('update', this.onViewUpdate, this);\n\n this._context = context;\n\n // TODO store this bound function somewhere else..\n this._context.on('update', this.onViewUpdate, this);\n\n this.onViewUpdate();\n }\n\n /**\n * The underlying graphics context used for drawing operations.\n * Controls how shapes and paths are rendered.\n * @example\n * ```ts\n * // Create a shared context\n * const sharedContext = new GraphicsContext();\n *\n * // Create graphics objects sharing the same context\n * const graphics1 = new Graphics();\n * const graphics2 = new Graphics();\n *\n * // Assign shared context\n * graphics1.context = sharedContext;\n * graphics2.context = sharedContext;\n *\n * // Both graphics will show the same shapes\n * sharedContext\n * .rect(0, 0, 100, 100)\n * .fill({ color: 0xff0000 });\n * ```\n * @see {@link GraphicsContext} For drawing operations\n * @see {@link GraphicsOptions} For context configuration\n */\n get context(): GraphicsContext\n {\n return this._context;\n }\n\n /**\n * The local bounds of the graphics object.\n * Returns the boundaries after all graphical operations but before any transforms.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a shape\n * graphics\n * .rect(0, 0, 100, 100)\n * .fill({ color: 0xff0000 });\n *\n * // Get bounds information\n * const bounds = graphics.bounds;\n * console.log(bounds.width); // 100\n * console.log(bounds.height); // 100\n * ```\n * @readonly\n * @see {@link Bounds} For bounds operations\n * @see {@link Container#getBounds} For transformed bounds\n */\n override get bounds(): Bounds\n {\n return this._context.bounds;\n }\n\n /**\n * Graphics objects do not need to update their bounds as the context handles this.\n * @private\n */\n protected updateBounds(): void { /** */ }\n\n /**\n * Checks if the object contains the given point.\n * Returns true if the point lies within the Graphics object's rendered area.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a shape\n * graphics\n * .rect(0, 0, 100, 100)\n * .fill({ color: 0xff0000 });\n *\n * // Check point intersection\n * if (graphics.containsPoint({ x: 50, y: 50 })) {\n * console.log('Point is inside rectangle!');\n * }\n * ```\n * @param point - The point to check in local coordinates\n * @returns True if the point is inside the Graphics object\n * @see {@link Graphics#bounds} For bounding box checks\n * @see {@link PointData} For point data structure\n */\n public override containsPoint(point: PointData)\n {\n return this._context.containsPoint(point);\n }\n\n /**\n * Destroys this graphics renderable and optionally its context.\n * @param options - Options parameter. A boolean will act as if all options\n *\n * If the context was created by this graphics and `destroy(false)` or `destroy()` is called\n * then the context will still be destroyed.\n *\n * If you want to explicitly not destroy this context that this graphics created,\n * then you should pass destroy({ context: false })\n *\n * If the context was passed in as an argument to the constructor then it will not be destroyed\n * @example\n * ```ts\n * // Destroy the graphics and its context\n * graphics.destroy();\n * graphics.destroy(true);\n * graphics.destroy({ context: true, texture: true, textureSource: true });\n * ```\n */\n public override destroy(options?: DestroyOptions): void\n {\n if (this._ownedContext && !options)\n {\n this._ownedContext.destroy(options);\n }\n else if (options === true || (options as ContextDestroyOptions)?.context === true)\n {\n this._context.destroy(options);\n }\n\n (this._ownedContext as null) = null;\n this._context = null;\n\n super.destroy(options);\n }\n\n private _callContextMethod(method: keyof GraphicsContext, args: any[]): this\n {\n (this.context as any)[method](...args);\n\n return this;\n }\n\n // --------------------------------------- GraphicsContext methods ---------------------------------------\n /**\n * Sets the current fill style of the graphics context.\n * The fill style can be a color, gradient, pattern, or a complex style object.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Basic color fill\n * graphics\n * .setFillStyle({ color: 0xff0000 }) // Red fill\n * .rect(0, 0, 100, 100)\n * .fill();\n *\n * // Gradient fill\n * const gradient = new FillGradient({\n * end: { x: 1, y: 0 },\n * colorStops: [\n * { offset: 0, color: 0xff0000 }, // Red at start\n * { offset: 0.5, color: 0x00ff00 }, // Green at middle\n * { offset: 1, color: 0x0000ff }, // Blue at end\n * ],\n * });\n *\n * graphics\n * .setFillStyle(gradient)\n * .circle(100, 100, 50)\n * .fill();\n *\n * // Pattern fill\n * const pattern = new FillPattern(texture);\n * graphics\n * .setFillStyle({\n * fill: pattern,\n * alpha: 0.5\n * })\n * .rect(0, 0, 200, 200)\n * .fill();\n * ```\n * @param {FillInput} args - The fill style to apply\n * @returns The Graphics instance for chaining\n * @see {@link FillStyle} For fill style options\n * @see {@link FillGradient} For gradient fills\n * @see {@link FillPattern} For pattern fills\n */\n public setFillStyle(...args: Parameters): this\n {\n return this._callContextMethod('setFillStyle', args);\n }\n\n /**\n * Sets the current stroke style of the graphics context.\n * Similar to fill styles, stroke styles can encompass colors, gradients, patterns, or more detailed configurations.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Basic color stroke\n * graphics\n * .setStrokeStyle({\n * width: 2,\n * color: 0x000000\n * })\n * .rect(0, 0, 100, 100)\n * .stroke();\n *\n * // Complex stroke style\n * graphics\n * .setStrokeStyle({\n * width: 4,\n * color: 0xff0000,\n * alpha: 0.5,\n * join: 'round',\n * cap: 'round',\n * alignment: 0.5\n * })\n * .circle(100, 100, 50)\n * .stroke();\n *\n * // Gradient stroke\n * const gradient = new FillGradient({\n * end: { x: 1, y: 0 },\n * colorStops: [\n * { offset: 0, color: 0xff0000 }, // Red at start\n * { offset: 0.5, color: 0x00ff00 }, // Green at middle\n * { offset: 1, color: 0x0000ff }, // Blue at end\n * ],\n * });\n *\n * graphics\n * .setStrokeStyle({\n * width: 10,\n * fill: gradient\n * })\n * .poly([0,0, 100,50, 0,100])\n * .stroke();\n * ```\n * @param {StrokeInput} args - The stroke style to apply\n * @returns The Graphics instance for chaining\n * @see {@link StrokeStyle} For stroke style options\n * @see {@link FillGradient} For gradient strokes\n * @see {@link FillPattern} For pattern strokes\n */\n public setStrokeStyle(...args: Parameters): this\n {\n return this._callContextMethod('setStrokeStyle', args);\n }\n\n /**\n * Fills the current or given path with the current fill style or specified style.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Fill with direct color\n * graphics\n * .circle(50, 50, 25)\n * .fill('red'); // Red fill\n *\n * // Fill with texture\n * graphics\n * .rect(0, 0, 100, 100)\n * .fill(myTexture); // Fill with texture\n *\n * // Fill with complex style\n * graphics\n * .rect(0, 0, 100, 100)\n * .fill({\n * color: 0x00ff00,\n * alpha: 0.5,\n * texture: myTexture,\n * matrix: new Matrix()\n * });\n *\n * // Fill with gradient\n * const gradient = new FillGradient({\n * end: { x: 1, y: 0 },\n * colorStops: [\n * { offset: 0, color: 0xff0000 },\n * { offset: 0.5, color: 0x00ff00 },\n * { offset: 1, color: 0x0000ff },\n * ],\n * });\n *\n * graphics\n * .circle(100, 100, 50)\n * .fill(gradient);\n * ```\n * @param {FillInput} style - The style to fill the path with. Can be:\n * - A ColorSource\n * - A gradient\n * - A pattern\n * - A complex style object\n * If omitted, uses current fill style.\n * @returns The Graphics instance for chaining\n * @see {@link FillStyle} For fill style options\n * @see {@link FillGradient} For gradient fills\n * @see {@link FillPattern} For pattern fills\n */\n public fill(style?: FillInput): this;\n /** @deprecated 8.0.0 */\n public fill(color: ColorSource, alpha?: number): this;\n public fill(...args: [FillStyle | ColorSource, number?]): this\n {\n return this._callContextMethod('fill', args);\n }\n /**\n * Strokes the current path with the current stroke style or specified style.\n * Outlines the shape using the stroke settings.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Stroke with direct color\n * graphics\n * .circle(50, 50, 25)\n * .stroke({\n * width: 2,\n * color: 0xff0000\n * }); // 2px red stroke\n *\n * // Fill with texture\n * graphics\n * .rect(0, 0, 100, 100)\n * .stroke(myTexture); // Fill with texture\n *\n * // Stroke with gradient\n * const gradient = new FillGradient({\n * end: { x: 1, y: 0 },\n * colorStops: [\n * { offset: 0, color: 0xff0000 },\n * { offset: 0.5, color: 0x00ff00 },\n * { offset: 1, color: 0x0000ff },\n * ],\n * });\n *\n * graphics\n * .rect(0, 0, 100, 100)\n * .stroke({\n * width: 4,\n * fill: gradient,\n * alignment: 0.5,\n * join: 'round'\n * });\n * ```\n * @param {StrokeStyle} args - Optional stroke style to apply. Can be:\n * - A stroke style object with width, color, etc.\n * - A gradient\n * - A pattern\n * If omitted, uses current stroke style.\n * @returns The Graphics instance for chaining\n * @see {@link StrokeStyle} For stroke style options\n * @see {@link FillGradient} For gradient strokes\n * @see {@link setStrokeStyle} For setting default stroke style\n */\n public stroke(...args: Parameters): this\n {\n return this._callContextMethod('stroke', args);\n }\n /**\n * Adds a texture to the graphics context. This method supports multiple ways to draw textures\n * including basic textures, tinted textures, and textures with custom dimensions.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Basic texture drawing\n * graphics.texture(myTexture);\n *\n * // Tinted texture with position\n * graphics.texture(myTexture, 0xff0000); // Red tint\n *\n * // Texture with custom position and dimensions\n * graphics\n * .texture(\n * myTexture, // texture\n * 0xffffff, // white tint\n * 100, 100, // position\n * 200, 150 // dimensions\n * );\n * ```\n * Basic texture drawing:\n * @param texture - The Texture object to use.\n * @returns The instance of the current Graphics for chaining.\n *\n * Extended texture drawing:\n * @param texture - The Texture object to use.\n * tint - A ColorSource to tint the texture (defaults to white).\n * dx - The x-coordinate for the texture placement.\n * dy - The y-coordinate for the texture placement.\n * dw - The width to draw the texture (defaults to texture width).\n * dh - The height to draw the texture (defaults to texture height).\n * @returns The instance of the current Graphics for chaining.\n * @see {@link Texture} For texture creation\n * @see {@link FillPattern} For pattern fills\n */\n public texture(texture: Texture): this;\n public texture(texture: Texture, tint?: ColorSource, dx?: number, dy?: number, dw?: number, dh?: number): this;\n public texture(...args: [Texture, number?, number?, number?, number?, number?]): this\n {\n return this._callContextMethod('texture', args);\n }\n /**\n * Resets the current path. Any previous path and its commands are discarded and a new path is\n * started. This is typically called before beginning a new shape or series of drawing commands.\n * @example\n * ```ts\n * const graphics = new Graphics();\n * graphics\n * .circle(150, 150, 50)\n * .fill({ color: 0x00ff00 })\n * .beginPath() // Starts a new path\n * .circle(250, 150, 50)\n * .fill({ color: 0x0000ff });\n * ```\n * @returns The Graphics instance for chaining\n * @see {@link Graphics#moveTo} For starting a new subpath\n * @see {@link Graphics#closePath} For closing the current path\n */\n public beginPath(): this\n {\n return this._callContextMethod('beginPath', []);\n }\n /**\n * Applies a cutout to the last drawn shape. This is used to create holes or complex shapes by\n * subtracting a path from the previously drawn path.\n *\n * If a hole is not completely in a shape, it will fail to cut correctly.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw outer circle\n * graphics\n * .circle(100, 100, 50)\n * .fill({ color: 0xff0000 });\n * .circle(100, 100, 25) // Inner circle\n * .cut() // Cuts out the inner circle from the outer circle\n * ```\n */\n public cut(): this\n {\n return this._callContextMethod('cut', []);\n }\n /**\n * Adds an arc to the current path, which is centered at (x, y) with the specified radius,\n * starting and ending angles, and direction.\n * @example\n * ```ts\n * // Draw a simple arc (quarter circle)\n * const graphics = new Graphics();\n * graphics\n * .arc(100, 100, 50, 0, Math.PI/2)\n * .stroke({ width: 2, color: 0xff0000 });\n *\n * // Draw a full circle using an arc\n * graphics\n * .arc(200, 200, 30, 0, Math.PI * 2)\n * .stroke({ color: 0x00ff00 });\n *\n * // Draw a counterclockwise arc\n * graphics\n * .arc(150, 150, 40, Math.PI, 0, true)\n * .stroke({ width: 2, color: 0x0000ff });\n * ```\n * @param x - The x-coordinate of the arc's center\n * @param y - The y-coordinate of the arc's center\n * @param radius - The arc's radius (must be positive)\n * @param startAngle - The starting point of the arc, in radians\n * @param endAngle - The end point of the arc, in radians\n * @param counterclockwise - Optional. If true, draws the arc counterclockwise.\n * If false (default), draws clockwise.\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#circle} For drawing complete circles\n * @see {@link Graphics#arcTo} For drawing arcs between points\n * @see {@link Graphics#arcToSvg} For SVG-style arc drawing\n */\n public arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): this;\n public arc(...args: Parameters): this\n {\n return this._callContextMethod('arc', args);\n }\n /**\n * Adds an arc to the current path that connects two points using a radius.\n * The arc is drawn between the current point and the specified end point,\n * using the given control point to determine the curve of the arc.\n * @example\n * ```ts\n * // Draw a simple curved corner\n * const graphics = new Graphics();\n * graphics\n * .moveTo(50, 50)\n * .arcTo(100, 50, 100, 100, 20) // Rounded corner with 20px radius\n * .stroke({ width: 2, color: 0xff0000 });\n *\n * // Create a rounded rectangle using arcTo\n * graphics\n * .moveTo(150, 150)\n * .arcTo(250, 150, 250, 250, 30) // Top right corner\n * .arcTo(250, 250, 150, 250, 30) // Bottom right corner\n * .arcTo(150, 250, 150, 150, 30) // Bottom left corner\n * .arcTo(150, 150, 250, 150, 30) // Top left corner\n * .fill({ color: 0x00ff00 });\n * ```\n * @param x1 - The x-coordinate of the control point\n * @param y1 - The y-coordinate of the control point\n * @param x2 - The x-coordinate of the end point\n * @param y2 - The y-coordinate of the end point\n * @param radius - The radius of the arc in pixels (must be positive)\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#arc} For drawing arcs using center point and angles\n * @see {@link Graphics#arcToSvg} For SVG-style arc drawing\n * @see {@link Graphics#roundRect} For drawing rectangles with rounded corners\n */\n public arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;\n public arcTo(...args: Parameters): this\n {\n return this._callContextMethod('arcTo', args);\n }\n /**\n * Adds an SVG-style arc to the path, allowing for elliptical arcs based on the SVG spec.\n * This is particularly useful when converting SVG paths to Graphics or creating complex curved shapes.\n * @example\n * ```ts\n * // Draw a simple elliptical arc\n * const graphics = new Graphics();\n * graphics\n * .moveTo(100, 100)\n * .arcToSvg(50, 30, 0, 0, 1, 200, 100)\n * .stroke({ width: 2, color: 0xff0000 });\n *\n * // Create a complex path with rotated elliptical arc\n * graphics\n * .moveTo(150, 150)\n * .arcToSvg(\n * 60, // rx\n * 30, // ry\n * 45, // x-axis rotation (45 degrees)\n * 1, // large arc flag\n * 0, // sweep flag\n * 250, // end x\n * 200 // end y\n * )\n * .stroke({ width: 4, color: 0x00ff00 });\n *\n * // Chain multiple arcs for complex shapes\n * graphics\n * .moveTo(300, 100)\n * .arcToSvg(40, 20, 0, 0, 1, 350, 150)\n * .arcToSvg(40, 20, 0, 0, 1, 300, 200)\n * .fill({ color: 0x0000ff, alpha: 0.5 });\n * ```\n * @param rx - The x-radius of the ellipse (must be non-negative)\n * @param ry - The y-radius of the ellipse (must be non-negative)\n * @param xAxisRotation - The rotation of the ellipse's x-axis relative to the x-axis, in degrees\n * @param largeArcFlag - Either 0 or 1, determines if the larger of the two possible arcs is chosen (1) or not (0)\n * @param sweepFlag - Either 0 or 1, determines if the arc should be swept in\n * a positive angle direction (1) or negative (0)\n * @param x - The x-coordinate of the arc's end point\n * @param y - The y-coordinate of the arc's end point\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#arc} For simple circular arcs\n * @see {@link Graphics#arcTo} For connecting points with circular arcs\n * @see {@link Graphics#svg} For parsing complete SVG paths\n */\n public arcToSvg(\n rx: number, ry: number, xAxisRotation: number, largeArcFlag: number, sweepFlag: number, x: number, y: number\n ): this;\n public arcToSvg(...args: Parameters): this\n {\n return this._callContextMethod('arcToSvg', args);\n }\n /**\n * Adds a cubic Bézier curve to the path, from the current point to the specified end point.\n * The curve is influenced by two control points that define its shape and curvature.\n * @example\n * ```ts\n * // Draw a simple curved line\n * const graphics = new Graphics();\n * graphics\n * .moveTo(50, 50)\n * .bezierCurveTo(\n * 100, 25, // First control point\n * 150, 75, // Second control point\n * 200, 50 // End point\n * )\n * .stroke({ width: 2, color: 0xff0000 });\n *\n * // Adjust curve smoothness\n * graphics\n * .moveTo(50, 200)\n * .bezierCurveTo(\n * 100, 150,\n * 200, 250,\n * 250, 200,\n * 0.5 // Smoothness factor\n * )\n * .stroke({ width: 4, color: 0x0000ff });\n * ```\n * @param cp1x - The x-coordinate of the first control point\n * @param cp1y - The y-coordinate of the first control point\n * @param cp2x - The x-coordinate of the second control point\n * @param cp2y - The y-coordinate of the second control point\n * @param x - The x-coordinate of the end point\n * @param y - The y-coordinate of the end point\n * @param smoothness - Optional parameter to adjust the curve's smoothness (0-1)\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#quadraticCurveTo} For simpler curves with one control point\n * @see {@link Graphics#arc} For circular arcs\n * @see {@link Graphics#arcTo} For connecting points with circular arcs\n */\n public bezierCurveTo(\n cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number, smoothness?: number\n ): this;\n public bezierCurveTo(...args: Parameters): this\n {\n return this._callContextMethod('bezierCurveTo', args);\n }\n /**\n * Closes the current path by drawing a straight line back to the start point.\n *\n * This is useful for completing shapes and ensuring they are properly closed for fills.\n * @example\n * ```ts\n * // Create a triangle with closed path\n * const graphics = new Graphics();\n * graphics\n * .moveTo(50, 50)\n * .lineTo(100, 100)\n * .lineTo(0, 100)\n * .closePath()\n * ```\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#beginPath} For starting a new path\n * @see {@link Graphics#fill} For filling closed paths\n * @see {@link Graphics#stroke} For stroking paths\n */\n public closePath(): this\n {\n return this._callContextMethod('closePath', []);\n }\n /**\n * Draws an ellipse at the specified location and with the given x and y radii.\n * An optional transformation can be applied, allowing for rotation, scaling, and translation.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a basic ellipse\n * graphics\n * .ellipse(100, 100, 50, 30)\n * .fill({ color: 0xff0000 });\n *\n * // Draw an ellipse with stroke\n * graphics\n * .ellipse(200, 100, 70, 40)\n * .stroke({ width: 2, color: 0x00ff00 });\n * ```\n * @param x - The x-coordinate of the center of the ellipse\n * @param y - The y-coordinate of the center of the ellipse\n * @param radiusX - The horizontal radius of the ellipse\n * @param radiusY - The vertical radius of the ellipse\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#circle} For drawing perfect circles\n * @see {@link Graphics#arc} For drawing partial circular arcs\n */\n public ellipse(x: number, y: number, radiusX: number, radiusY: number): this;\n public ellipse(...args: Parameters): this\n {\n return this._callContextMethod('ellipse', args);\n }\n /**\n * Draws a circle shape at the specified location with the given radius.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a simple filled circle\n * graphics\n * .circle(100, 100, 50)\n * .fill({ color: 0xff0000 });\n *\n * // Draw a circle with gradient fill\n * const gradient = new FillGradient({\n * end: { x: 1, y: 0 },\n * colorStops: [\n * { offset: 0, color: 0xff0000 }, // Red at start\n * { offset: 0.5, color: 0x00ff00 }, // Green at middle\n * { offset: 1, color: 0x0000ff }, // Blue at end\n * ],\n * });\n *\n * graphics\n * .circle(250, 100, 40)\n * .fill({ fill: gradient });\n * ```\n * @param x - The x-coordinate of the center of the circle\n * @param y - The y-coordinate of the center of the circle\n * @param radius - The radius of the circle\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#ellipse} For drawing ellipses\n * @see {@link Graphics#arc} For drawing partial circles\n */\n public circle(x: number, y: number, radius: number): this;\n public circle(...args: Parameters): this\n {\n return this._callContextMethod('circle', args);\n }\n /**\n * Adds another `GraphicsPath` to this path, optionally applying a transformation.\n * This allows for reuse of complex paths and shapes across different graphics instances.\n * @example\n * ```ts\n * const graphics = new Graphics();\n * // Create a reusable path\n * const heartPath = new GraphicsPath()\n * .moveTo(0, 0)\n * .bezierCurveTo(-50, -25, -50, -75, 0, -100)\n * .bezierCurveTo(50, -75, 50, -25, 0, 0);\n *\n * // Use the path multiple times\n * graphics\n * .path(heartPath)\n * .fill({ color: 0xff0000 })\n * .translateTransform(200, 200)\n * .path(heartPath)\n * .fill({ color: 0xff0000, alpha: 0.5 });\n * ```\n * @param path - The `GraphicsPath` to add to the current path\n * @returns The Graphics instance for method chaining\n * @see {@link GraphicsPath} For creating reusable paths\n * @see {@link Matrix} For creating transformations\n * @see {@link Graphics#transform} For applying transformations\n */\n public path(path: GraphicsPath): this;\n public path(...args: Parameters): this\n {\n return this._callContextMethod('path', args);\n }\n /**\n * Connects the current point to a new point with a straight line.\n * Any subsequent drawing commands will start from this new point.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a triangle\n * graphics\n * .moveTo(50, 50)\n * .lineTo(100, 100)\n * .lineTo(0, 100)\n * .fill({ color: 0xff0000 });\n *\n * // Create a complex shape with multiple lines\n * graphics\n * .moveTo(200, 50)\n * .lineTo(250, 50)\n * .lineTo(250, 100)\n * .lineTo(200, 100)\n * .stroke({ width: 2, color: 0x00ff00 });\n * ```\n * @param x - The x-coordinate of the line's end point\n * @param y - The y-coordinate of the line's end point\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#moveTo} For starting a new sub-path\n */\n public lineTo(x: number, y: number): this;\n public lineTo(...args: Parameters): this\n {\n return this._callContextMethod('lineTo', args);\n }\n /**\n * Sets the starting point for a new sub-path.\n *\n * Moves the \"pen\" to a new location without drawing a line.\n * Any subsequent drawing commands will start from this point.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Create multiple separate lines\n * graphics\n * .moveTo(50, 50)\n * .lineTo(100, 50)\n * .moveTo(50, 100) // Start a new line\n * .lineTo(100, 100)\n * .stroke({ width: 2, color: 0xff0000 });\n *\n * // Create disconnected shapes\n * graphics\n * .moveTo(150, 50)\n * .rect(150, 50, 50, 50)\n * .fill({ color: 0x00ff00 })\n * .moveTo(250, 50) // Start a new shape\n * .circle(250, 75, 25)\n * .fill({ color: 0x0000ff });\n *\n * // Position before curved paths\n * graphics\n * .moveTo(300, 50)\n * .bezierCurveTo(\n * 350, 25, // Control point 1\n * 400, 75, // Control point 2\n * 450, 50 // End point\n * )\n * .stroke({ width: 3, color: 0xff00ff });\n * ```\n * @param x - The x-coordinate to move to\n * @param y - The y-coordinate to move to\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#lineTo} For drawing lines\n * @see {@link Graphics#beginPath} For starting a completely new path\n */\n public moveTo(x: number, y: number): this;\n public moveTo(...args: Parameters): this\n {\n return this._callContextMethod('moveTo', args);\n }\n /**\n * Adds a quadratic curve to the path. It requires two points: the control point and the end point.\n * The starting point is the last point in the current path.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a simple curve\n * graphics\n * .moveTo(50, 50)\n * .quadraticCurveTo(100, 25, 150, 50)\n * .stroke({ width: 2, color: 0xff0000 });\n *\n * // Adjust curve smoothness\n * graphics\n * .moveTo(50, 200)\n * .quadraticCurveTo(\n * 150, 150, // Control point\n * 250, 200, // End point\n * 0.5 // Smoothness factor\n * )\n * .stroke({\n * width: 4,\n * color: 0x0000ff,\n * alpha: 0.7\n * });\n * ```\n * @param cpx - The x-coordinate of the control point\n * @param cpy - The y-coordinate of the control point\n * @param x - The x-coordinate of the end point\n * @param y - The y-coordinate of the end point\n * @param smoothness - Optional parameter to adjust the curve's smoothness (0-1)\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#bezierCurveTo} For curves with two control points\n * @see {@link Graphics#arc} For circular arcs\n * @see {@link Graphics#arcTo} For connecting points with circular arcs\n */\n public quadraticCurveTo(cpx: number, cpy: number, x: number, y: number, smoothness?: number): this;\n public quadraticCurveTo(...args: Parameters): this\n {\n return this._callContextMethod('quadraticCurveTo', args);\n }\n /**\n * Draws a rectangle shape.\n *\n * This method adds a new rectangle path to the current drawing.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a simple filled rectangle\n * graphics\n * .rect(50, 50, 100, 75)\n * .fill({ color: 0xff0000 });\n *\n * // Rectangle with stroke\n * graphics\n * .rect(200, 50, 100, 75)\n * .stroke({ width: 2, color: 0x00ff00 });\n * ```\n * @param x - The x-coordinate of the top-left corner of the rectangle\n * @param y - The y-coordinate of the top-left corner of the rectangle\n * @param w - The width of the rectangle\n * @param h - The height of the rectangle\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#roundRect} For drawing rectangles with rounded corners\n * @see {@link Graphics#filletRect} For drawing rectangles with filleted corners\n * @see {@link Graphics#chamferRect} For drawing rectangles with chamfered corners\n */\n\n public rect(x: number, y: number, w: number, h: number): this;\n public rect(...args: Parameters): this\n {\n return this._callContextMethod('rect', args);\n }\n /**\n * Draws a rectangle with rounded corners. The corner radius can be specified to\n * determine how rounded the corners should be.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Basic rounded rectangle\n * graphics\n * .roundRect(50, 50, 100, 75, 15)\n * .fill({ color: 0xff0000 });\n * ```\n * @param x - The x-coordinate of the top-left corner of the rectangle\n * @param y - The y-coordinate of the top-left corner of the rectangle\n * @param w - The width of the rectangle\n * @param h - The height of the rectangle\n * @param radius - The radius of the rectangle's corners (must be non-negative)\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#rect} For drawing rectangles with sharp corners\n * @see {@link Graphics#filletRect} For drawing rectangles with filleted corners\n * @see {@link Graphics#chamferRect} For drawing rectangles with chamfered corners\n */\n public roundRect(x: number, y: number, w: number, h: number, radius?: number): this;\n public roundRect(...args: Parameters): this\n {\n return this._callContextMethod('roundRect', args);\n }\n /**\n * Draws a polygon shape by specifying a sequence of points. This method allows for the creation of complex polygons,\n * which can be both open and closed.\n *\n * An optional transformation can be applied, enabling the polygon to be scaled,\n * rotated, or translated as needed.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a triangle using array of numbers [x1,y1, x2,y2, x3,y3]\n * graphics\n * .poly([50,50, 100,100, 0,100], true)\n * .fill({ color: 0xff0000 });\n *\n * // Draw a polygon using point objects\n * graphics\n * .poly([\n * { x: 200, y: 50 },\n * { x: 250, y: 100 },\n * { x: 200, y: 150 },\n * { x: 150, y: 100 }\n * ])\n * .fill({ color: 0x00ff00 });\n *\n * // Draw an open polygon with stroke\n * graphics\n * .poly([300,50, 350,50, 350,100, 300,100], false)\n * .stroke({\n * width: 2,\n * color: 0x0000ff,\n * join: 'round'\n * });\n * ```\n * @param points - An array of numbers [x1,y1, x2,y2, ...] or an array of point objects [{x,y}, ...]\n * representing the vertices of the polygon in sequence\n * @param close - Whether to close the polygon path by connecting the last point to the first.\n * Default is true.\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#regularPoly} For drawing regular polygons\n * @see {@link Graphics#roundPoly} For drawing polygons with rounded corners\n * @see {@link Graphics#star} For drawing star shapes\n */\n public poly(points: number[] | PointData[], close?: boolean): this;\n public poly(...args: Parameters): this\n {\n return this._callContextMethod('poly', args);\n }\n /**\n * Draws a regular polygon with a specified number of sides. All sides and angles are equal,\n * making shapes like triangles, squares, pentagons, etc.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a simple triangle (3 sides)\n * graphics\n * .regularPoly(100, 100, 50, 3)\n * .fill({ color: 0xff0000 });\n *\n * // Draw a hexagon (6 sides) with rotation\n * graphics\n * .regularPoly(\n * 250, 100, // center position\n * 40, // radius\n * 6, // sides\n * Math.PI / 6 // rotation (30 degrees)\n * )\n * .fill({ color: 0x00ff00 })\n * .stroke({ width: 2, color: 0x000000 });\n *\n * // Draw an octagon (8 sides) with transform\n * const transform = new Matrix()\n * .scale(1.5, 1) // stretch horizontally\n * .rotate(Math.PI/4); // rotate 45 degrees\n *\n * graphics\n * .regularPoly(400, 100, 30, 8, 0, transform)\n * .fill({ color: 0x0000ff, alpha: 0.5 });\n * ```\n * @param x - The x-coordinate of the center of the polygon\n * @param y - The y-coordinate of the center of the polygon\n * @param radius - The radius of the circumscribed circle of the polygon\n * @param sides - The number of sides of the polygon (must be 3 or more)\n * @param rotation - The rotation angle of the polygon in radians (default: 0)\n * @param transform - Optional Matrix to transform the polygon's shape\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#poly} For drawing custom polygons\n * @see {@link Graphics#roundPoly} For drawing polygons with rounded corners\n * @see {@link Graphics#star} For drawing star shapes\n */\n public regularPoly(x: number, y: number, radius: number, sides: number, rotation?: number, transform?: Matrix): this;\n public regularPoly(...args: Parameters): this\n {\n return this._callContextMethod('regularPoly', args);\n }\n /**\n * Draws a polygon with rounded corners.\n *\n * Similar to `regularPoly` but with the ability to round the corners of the polygon.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a basic rounded triangle\n * graphics\n * .roundPoly(100, 100, 50, 3, 10)\n * .fill({ color: 0xff0000 });\n *\n * // Draw a rounded hexagon with rotation\n * graphics\n * .roundPoly(\n * 250, 150, // center position\n * 40, // radius\n * 6, // sides\n * 8, // corner radius\n * Math.PI / 6 // rotation (30 degrees)\n * )\n * .fill({ color: 0x00ff00 })\n * .stroke({ width: 2, color: 0x000000 });\n * ```\n * @param x - The x-coordinate of the center of the polygon\n * @param y - The y-coordinate of the center of the polygon\n * @param radius - The radius of the circumscribed circle of the polygon\n * @param sides - The number of sides of the polygon (must be 3 or more)\n * @param corner - The radius of the corner rounding (must be non-negative)\n * @param rotation - The rotation angle of the polygon in radians (default: 0)\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#regularPoly} For drawing polygons without rounded corners\n * @see {@link Graphics#poly} For drawing custom polygons\n * @see {@link Graphics#roundRect} For drawing rectangles with rounded corners\n */\n public roundPoly(x: number, y: number, radius: number, sides: number, corner: number, rotation?: number): this;\n public roundPoly(...args: Parameters): this\n {\n return this._callContextMethod('roundPoly', args);\n }\n /**\n * Draws a shape with rounded corners. This function supports custom radius for each corner of the shape.\n * Optionally, corners can be rounded using a quadratic curve instead of an arc, providing a different aesthetic.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a custom shape with rounded corners\n * graphics\n * .roundShape([\n * { x: 100, y: 100, radius: 20 },\n * { x: 200, y: 100, radius: 10 },\n * { x: 200, y: 200, radius: 15 },\n * { x: 100, y: 200, radius: 5 }\n * ], 10)\n * .fill({ color: 0xff0000 });\n *\n * // Using quadratic curves for corners\n * graphics\n * .roundShape([\n * { x: 250, y: 100 },\n * { x: 350, y: 100 },\n * { x: 350, y: 200 },\n * { x: 250, y: 200 }\n * ], 15, true, 0.5)\n * .fill({ color: 0x00ff00 })\n * .stroke({ width: 2, color: 0x000000 });\n *\n * // Shape with varying corner radii\n * graphics\n * .roundShape([\n * { x: 400, y: 100, radius: 30 },\n * { x: 500, y: 100, radius: 5 },\n * { x: 450, y: 200, radius: 15 }\n * ], 10)\n * .fill({ color: 0x0000ff, alpha: 0.5 });\n * ```\n * @param points - An array of `RoundedPoint` representing the corners of the shape.\n * Each point can have its own radius or use the default.\n * A minimum of 3 points is required.\n * @param radius - The default radius for corners without a specific radius defined.\n * Applied to any point that doesn't specify its own radius.\n * @param useQuadratic - When true, corners are drawn using quadratic curves instead\n * of arcs, creating a different visual style. Defaults to false.\n * @param smoothness - Controls the smoothness of quadratic corners when useQuadratic\n * is true. Values range from 0-1, higher values create smoother curves.\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#roundRect} For drawing rectangles with rounded corners\n * @see {@link Graphics#roundPoly} For drawing regular polygons with rounded corners\n */\n public roundShape(points: RoundedPoint[], radius: number, useQuadratic?: boolean, smoothness?: number): this;\n public roundShape(...args: Parameters): this\n {\n return this._callContextMethod('roundShape', args);\n }\n /**\n * Draws a rectangle with fillet corners. Unlike rounded rectangles, this supports negative corner\n * radii which create external rounded corners rather than internal ones.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a rectangle with internal fillets\n * graphics\n * .filletRect(50, 50, 100, 80, 15)\n * .fill({ color: 0xff0000 });\n *\n * // Draw a rectangle with external fillets\n * graphics\n * .filletRect(200, 50, 100, 80, -20)\n * .fill({ color: 0x00ff00 })\n * .stroke({ width: 2, color: 0x000000 });\n * ```\n * @param x - The x-coordinate of the top-left corner of the rectangle\n * @param y - The y-coordinate of the top-left corner of the rectangle\n * @param width - The width of the rectangle\n * @param height - The height of the rectangle\n * @param fillet - The radius of the corner fillets (can be positive or negative)\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#roundRect} For standard rounded corners\n * @see {@link Graphics#chamferRect} For angled corners\n */\n public filletRect(x: number, y: number, width: number, height: number, fillet: number): this;\n public filletRect(...args: Parameters): this\n {\n return this._callContextMethod('filletRect', args);\n }\n /**\n * Draws a rectangle with chamfered (angled) corners. Each corner is cut off at\n * a 45-degree angle based on the chamfer size.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a basic chamfered rectangle\n * graphics\n * .chamferRect(50, 50, 100, 80, 15)\n * .fill({ color: 0xff0000 });\n *\n * // Add transform and stroke\n * const transform = new Matrix()\n * .rotate(Math.PI / 4); // 45 degrees\n *\n * graphics\n * .chamferRect(200, 50, 100, 80, 20, transform)\n * .fill({ color: 0x00ff00 })\n * .stroke({ width: 2, color: 0x000000 });\n * ```\n * @param x - The x-coordinate of the top-left corner of the rectangle\n * @param y - The y-coordinate of the top-left corner of the rectangle\n * @param width - The width of the rectangle\n * @param height - The height of the rectangle\n * @param chamfer - The size of the corner chamfers (must be non-zero)\n * @param transform - Optional Matrix to transform the rectangle\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#roundRect} For rounded corners\n * @see {@link Graphics#filletRect} For rounded corners with negative radius support\n */\n public chamferRect(x: number, y: number, width: number, height: number, chamfer: number, transform?: Matrix): this;\n public chamferRect(...args: Parameters): this\n {\n return this._callContextMethod('chamferRect', args);\n }\n /**\n * Draws a star shape centered at a specified location. This method allows for the creation\n * of stars with a variable number of points, outer radius, optional inner radius, and rotation.\n *\n * The star is drawn as a closed polygon with alternating outer and inner vertices to create the star's points.\n * An optional transformation can be applied to scale, rotate, or translate the star as needed.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw a basic 5-pointed star\n * graphics\n * .star(100, 100, 5, 50)\n * .fill({ color: 0xff0000 });\n *\n * // Star with custom inner radius\n * graphics\n * .star(250, 100, 6, 50, 20)\n * .fill({ color: 0x00ff00 })\n * .stroke({ width: 2, color: 0x000000 });\n * ```\n * @param x - The x-coordinate of the center of the star\n * @param y - The y-coordinate of the center of the star\n * @param points - The number of points on the star (must be >= 3)\n * @param radius - The outer radius of the star (distance from center to point tips)\n * @param innerRadius - Optional. The inner radius of the star (distance from center to inner vertices).\n * If not specified, defaults to half of the outer radius\n * @param rotation - Optional. The rotation of the star in radians. Default is 0,\n * which aligns one point straight up\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#regularPoly} For drawing regular polygons\n * @see {@link Graphics#poly} For drawing custom polygons\n * @see {@link Graphics#path} For creating custom shapes\n */\n public star(x: number, y: number, points: number, radius: number, innerRadius?: number, rotation?: number): this;\n public star(...args: Parameters): this\n {\n return this._callContextMethod('star', args);\n }\n /**\n * Parses and renders an SVG string into the graphics context. This allows for complex shapes\n * and paths defined in SVG format to be drawn within the graphics context.\n * @example\n * ```ts\n * const graphics = new Graphics();\n * graphics\n * .svg(`\n * \n * \n * `)\n * .stroke({ width: 2, color: 0x000000 });\n * ```\n * @param svg - The SVG string to be parsed and rendered\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#path} For adding custom paths\n * @see {@link Graphics#fill} For filling shapes after SVG parsing\n * @see {@link Graphics#stroke} For stroking shapes after SVG parsing\n */\n public svg(svg: string): this;\n public svg(...args: Parameters): this\n {\n return this._callContextMethod('svg', args);\n }\n /**\n * Restores the most recently saved graphics state by popping the top of the graphics state stack.\n * This includes transformations, fill styles, and stroke styles.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Save current state\n * graphics.save();\n *\n * // Make temporary changes\n * graphics\n * .translateTransform(100, 100)\n * .setFillStyle({ color: 0xff0000 })\n * .circle(0, 0, 50)\n * .fill();\n *\n * // Restore to previous state\n * graphics.restore();\n *\n * // Draw with original transform and styles\n * graphics\n * .circle(50, 50, 30)\n * .fill();\n * ```\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#save} For saving the current state\n */\n public restore(): this;\n public restore(...args: Parameters): this\n {\n return this._callContextMethod('restore', args);\n }\n /**\n * Saves the current graphics state onto a stack. The state includes:\n * - Current transformation matrix\n * - Current fill style\n * - Current stroke style\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Save state before complex operations\n * graphics.save();\n *\n * // Create transformed and styled shape\n * graphics\n * .translateTransform(100, 100)\n * .rotateTransform(Math.PI / 4)\n * .setFillStyle({\n * color: 0xff0000,\n * alpha: 0.5\n * })\n * .rect(-25, -25, 50, 50)\n * .fill();\n *\n * // Restore to original state\n * graphics.restore();\n *\n * // Continue drawing with previous state\n * graphics\n * .circle(50, 50, 25)\n * .fill();\n * ```\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#restore} For restoring the saved state\n * @see {@link Graphics#setTransform} For setting transformations\n */\n public save(): this\n {\n return this._callContextMethod('save', []);\n }\n /**\n * Returns the current transformation matrix of the graphics context.\n * This matrix represents all accumulated transformations including translate, scale, and rotate.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Apply some transformations\n * graphics\n * .translateTransform(100, 100)\n * .rotateTransform(Math.PI / 4);\n *\n * // Get the current transform matrix\n * const matrix = graphics.getTransform();\n * console.log(matrix.tx, matrix.ty); // 100, 100\n *\n * // Use the matrix for other operations\n * graphics\n * .setTransform(matrix)\n * .circle(0, 0, 50)\n * .fill({ color: 0xff0000 });\n * ```\n * @returns The current transformation matrix.\n * @see {@link Graphics#setTransform} For setting the transform matrix\n * @see {@link Matrix} For matrix operations\n */\n public getTransform(): Matrix\n {\n return this.context.getTransform();\n }\n /**\n * Resets the current transformation matrix to the identity matrix, effectively removing\n * any transformations (rotation, scaling, translation) previously applied.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Apply transformations\n * graphics\n * .translateTransform(100, 100)\n * .scaleTransform(2, 2)\n * .circle(0, 0, 25)\n * .fill({ color: 0xff0000 });\n * // Reset transform to default state\n * graphics\n * .resetTransform()\n * .circle(50, 50, 25) // Will draw at actual coordinates\n * .fill({ color: 0x00ff00 });\n * ```\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#getTransform} For getting the current transform\n * @see {@link Graphics#setTransform} For setting a specific transform\n * @see {@link Graphics#save} For saving the current transform state\n * @see {@link Graphics#restore} For restoring a previous transform state\n */\n public resetTransform(): this\n {\n return this._callContextMethod('resetTransform', []);\n }\n /**\n * Applies a rotation transformation to the graphics context around the current origin.\n * Positive angles rotate clockwise, while negative angles rotate counterclockwise.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Rotate 45 degrees clockwise\n * graphics\n * .rotateTransform(Math.PI / 4)\n * .rect(-25, -25, 50, 50)\n * .fill({ color: 0xff0000 });\n * ```\n * @param angle - The angle of rotation in radians\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#scaleTransform} For scaling transformations\n * @see {@link Graphics#translateTransform} For position transformations\n */\n public rotateTransform(angle: number): this;\n public rotateTransform(...args: Parameters): this\n {\n return this._callContextMethod('rotate', args);\n }\n /**\n * Applies a scaling transformation to the graphics context, scaling drawings by x horizontally\n * and by y vertically relative to the current origin.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Uniform scaling\n * graphics\n * .scaleTransform(2) // Scale both dimensions by 2\n * .circle(0, 0, 25)\n * .fill({ color: 0xff0000 });\n *\n * // Non-uniform scaling\n * graphics\n * .scaleTransform(0.5, 2) // Half width, double height\n * .rect(100, 100, 50, 50)\n * .fill({ color: 0x00ff00 });\n * ```\n * @param x - The scale factor in the horizontal direction\n * @param y - The scale factor in the vertical direction. If omitted, equals x\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#rotateTransform} For rotation transformations\n * @see {@link Graphics#translateTransform} For position transformations\n */\n public scaleTransform(x: number, y?: number): this;\n public scaleTransform(...args: Parameters): this\n {\n return this._callContextMethod('scale', args);\n }\n /**\n * Sets the current transformation matrix of the graphics context.\n *\n * This method can either\n * take a Matrix object or individual transform values to create a new transformation matrix.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Using a Matrix object\n * const matrix = new Matrix()\n * .translate(100, 100)\n * .rotate(Math.PI / 4);\n *\n * graphics\n * .setTransform(matrix)\n * .rect(0, 0, 50, 50)\n * .fill({ color: 0xff0000 });\n *\n * // Using individual transform values\n * graphics\n * .setTransform(\n * 2, 0, // scale x by 2\n * 0, 1, // no skew\n * 100, 100 // translate x,y by 100\n * )\n * .circle(0, 0, 25)\n * .fill({ color: 0x00ff00 });\n * ```\n * @param transform - The matrix to set as the current transformation matrix.\n * @returns The instance of the current GraphicsContext for method chaining.\n */\n public setTransform(transform: Matrix): this;\n /**\n * Sets the current transformation matrix of the graphics context to the specified matrix or values.\n * This replaces the current transformation matrix.\n * @param a - The value for the a property of the matrix, or a Matrix object to use directly.\n * @param b - The value for the b property of the matrix.\n * @param c - The value for the c property of the matrix.\n * @param d - The value for the d property of the matrix.\n * @param dx - The value for the tx (translate x) property of the matrix.\n * @param dy - The value for the ty (translate y) property of the matrix.\n * @returns The instance of the current GraphicsContext for method chaining.\n */\n public setTransform(a: number, b: number, c: number, d: number, dx: number, dy: number): this;\n public setTransform(a: number | Matrix, b?: number, c?: number, d?: number, dx?: number, dy?: number): this;\n public setTransform(...args: [Matrix] | [number, number, number, number, number, number]): this\n {\n return this._callContextMethod('setTransform', args);\n }\n /**\n * Applies a transformation matrix to the current graphics context by multiplying\n * the current matrix with the specified matrix. This allows for complex transformations\n * combining multiple operations.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Using a Matrix object\n * const matrix = new Matrix()\n * .scale(2, 1) // Scale horizontally\n * .rotate(Math.PI/6); // Rotate 30 degrees\n *\n * graphics\n * .transform(matrix)\n * .rect(0, 0, 50, 50)\n * .fill({ color: 0xff0000 });\n *\n * // Using individual transform values\n * graphics\n * .transform(\n * 1, 0.5, // Skew horizontally\n * 0, 1, // No vertical skew\n * 100, 100 // Translate\n * )\n * .circle(0, 0, 25)\n * .fill({ color: 0x00ff00 });\n * ```\n * @param transform - The matrix to apply to the current transformation.\n * @returns The instance of the current GraphicsContext for method chaining.\n */\n public transform(transform: Matrix): this;\n /**\n * Applies the specified transformation matrix to the current graphics context by multiplying\n * the current matrix with the specified matrix.\n * @param a - The value for the a property of the matrix, or a Matrix object to use directly.\n * @param b - The value for the b property of the matrix.\n * @param c - The value for the c property of the matrix.\n * @param d - The value for the d property of the matrix.\n * @param dx - The value for the tx (translate x) property of the matrix.\n * @param dy - The value for the ty (translate y) property of the matrix.\n * @returns The instance of the current GraphicsContext for method chaining.\n */\n public transform(a: number, b: number, c: number, d: number, dx: number, dy: number): this;\n public transform(a: number | Matrix, b?: number, c?: number, d?: number, dx?: number, dy?: number): this;\n public transform(...args: [Matrix] | [number, number, number, number, number, number]): this\n {\n return this._callContextMethod('transform', args);\n }\n /**\n * Applies a translation transformation to the graphics context, moving the origin by the specified amounts.\n * This affects all subsequent drawing operations.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Basic translation\n * graphics\n * .translateTransform(100, 100)\n * .circle(0, 0, 25)\n * .fill({ color: 0xff0000 });\n * ```\n * @param x - The amount to translate in the horizontal direction\n * @param y - The amount to translate in the vertical direction. If omitted, equals x\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#setTransform} For setting absolute transformations\n * @see {@link Graphics#transform} For applying complex transformations\n * @see {@link Graphics#save} For saving the current transform state\n */\n public translateTransform(x: number, y?: number): this;\n public translateTransform(...args: Parameters): this\n {\n return this._callContextMethod('translate', args);\n }\n /**\n * Clears all drawing commands from the graphics context, effectively resetting it.\n * This includes clearing the current path, fill style, stroke style, and transformations.\n *\n * > [!NOTE] Graphics objects are not designed to be continuously cleared and redrawn.\n * > Instead, they are intended to be used for static or semi-static graphics that\n * > can be redrawn as needed. Frequent clearing and redrawing may lead to performance issues.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Draw some shapes\n * graphics\n * .circle(100, 100, 50)\n * .fill({ color: 0xff0000 })\n * .rect(200, 100, 100, 50)\n * .fill({ color: 0x00ff00 });\n *\n * // Clear all graphics\n * graphics.clear();\n *\n * // Start fresh with new shapes\n * graphics\n * .circle(150, 150, 30)\n * .fill({ color: 0x0000ff });\n * ```\n * @returns The Graphics instance for method chaining\n * @see {@link Graphics#beginPath} For starting a new path without clearing styles\n * @see {@link Graphics#save} For saving the current state\n * @see {@link Graphics#restore} For restoring a previous state\n */\n public clear(): this\n {\n return this._callContextMethod('clear', []);\n }\n /**\n * Gets or sets the current fill style for the graphics context. The fill style determines\n * how shapes are filled when using the fill() method.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Basic color fill\n * graphics.fillStyle = {\n * color: 0xff0000, // Red\n * alpha: 1\n * };\n *\n * // Using gradients\n * const gradient = new FillGradient({\n * end: { x: 0, y: 1 }, // Vertical gradient\n * stops: [\n * { offset: 0, color: 0xff0000, alpha: 1 }, // Start color\n * { offset: 1, color: 0x0000ff, alpha: 1 } // End color\n * ]\n * });\n *\n * graphics.fillStyle = {\n * fill: gradient,\n * alpha: 0.8\n * };\n *\n * // Using patterns\n * graphics.fillStyle = {\n * texture: myTexture,\n * alpha: 1,\n * matrix: new Matrix()\n * .scale(0.5, 0.5)\n * .rotate(Math.PI / 4)\n * };\n * ```\n * @type {ConvertedFillStyle}\n * @see {@link FillStyle} For all available fill style options\n * @see {@link FillGradient} For creating gradient fills\n * @see {@link Graphics#fill} For applying the fill to paths\n */\n get fillStyle(): GraphicsContext['fillStyle']\n {\n return this._context.fillStyle;\n }\n set fillStyle(value: FillInput)\n {\n this._context.fillStyle = value;\n }\n /**\n * Gets or sets the current stroke style for the graphics context. The stroke style determines\n * how paths are outlined when using the stroke() method.\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Basic stroke style\n * graphics.strokeStyle = {\n * width: 2,\n * color: 0xff0000,\n * alpha: 1\n * };\n *\n * // Using with gradients\n * const gradient = new FillGradient({\n * end: { x: 0, y: 1 },\n * stops: [\n * { offset: 0, color: 0xff0000, alpha: 1 },\n * { offset: 1, color: 0x0000ff, alpha: 1 }\n * ]\n * });\n *\n * graphics.strokeStyle = {\n * width: 4,\n * fill: gradient,\n * alignment: 0.5,\n * join: 'round',\n * cap: 'round'\n * };\n *\n * // Complex stroke settings\n * graphics.strokeStyle = {\n * width: 6,\n * color: 0x00ff00,\n * alpha: 0.5,\n * join: 'miter',\n * miterLimit: 10,\n * };\n * ```\n * @see {@link StrokeStyle} For all available stroke style options\n * @see {@link Graphics#stroke} For applying the stroke to paths\n */\n get strokeStyle(): GraphicsContext['strokeStyle']\n {\n return this._context.strokeStyle;\n }\n set strokeStyle(value: StrokeStyle)\n {\n this._context.strokeStyle = value;\n }\n\n /**\n * Creates a new Graphics object that copies the current graphics content.\n * The clone can either share the same context (shallow clone) or have its own independent\n * context (deep clone).\n * @example\n * ```ts\n * const graphics = new Graphics();\n *\n * // Create original graphics content\n * graphics\n * .circle(100, 100, 50)\n * .fill({ color: 0xff0000 });\n *\n * // Create a shallow clone (shared context)\n * const shallowClone = graphics.clone();\n *\n * // Changes to original affect the clone\n * graphics\n * .circle(200, 100, 30)\n * .fill({ color: 0x00ff00 });\n *\n * // Create a deep clone (independent context)\n * const deepClone = graphics.clone(true);\n *\n * // Modify deep clone independently\n * deepClone\n * .translateTransform(100, 100)\n * .circle(0, 0, 40)\n * .fill({ color: 0x0000ff });\n * ```\n * @param deep - Whether to create a deep clone of the graphics object.\n * If false (default), the context will be shared between objects.\n * If true, creates an independent copy of the context.\n * @returns A new Graphics instance with either shared or copied context\n * @see {@link Graphics#context} For accessing the underlying graphics context\n * @see {@link GraphicsContext} For understanding the shared context behavior\n */\n public clone(deep = false): Graphics\n {\n if (deep)\n {\n return new Graphics(this._context.clone());\n }\n\n (this._ownedContext as null) = null;\n const clone = new Graphics(this._context);\n\n return clone;\n }\n\n // -------- v7 deprecations ---------\n\n /**\n * @param width\n * @param color\n * @param alpha\n * @deprecated since 8.0.0 Use {@link Graphics#setStrokeStyle} instead\n */\n public lineStyle(width?: number, color?: ColorSource, alpha?: number): this\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'Graphics#lineStyle is no longer needed. Use Graphics#setStrokeStyle to set the stroke style.');\n // #endif\n\n const strokeStyle: Partial = {};\n\n // avoid undefined assignment\n width && (strokeStyle.width = width);\n color && (strokeStyle.color = color);\n alpha && (strokeStyle.alpha = alpha);\n\n this.context.strokeStyle = strokeStyle;\n\n return this;\n }\n\n /**\n * @param color\n * @param alpha\n * @deprecated since 8.0.0 Use {@link Graphics#fill} instead\n */\n public beginFill(color: ColorSource, alpha?: number)\n {\n // #if _DEBUG\n // eslint-disable-next-line max-len\n deprecation(v8_0_0, 'Graphics#beginFill is no longer needed. Use Graphics#fill to fill the shape with the desired style.');\n // #endif\n\n const fillStyle: Partial = {};\n\n // avoid undefined assignment\n if (color !== undefined) fillStyle.color = color;\n if (alpha !== undefined) fillStyle.alpha = alpha;\n\n this.context.fillStyle = fillStyle;\n\n return this;\n }\n\n /**\n * @deprecated since 8.0.0 Use {@link Graphics#fill} instead\n */\n public endFill()\n {\n // #if _DEBUG\n // eslint-disable-next-line max-len\n deprecation(v8_0_0, 'Graphics#endFill is no longer needed. Use Graphics#fill to fill the shape with the desired style.');\n // #endif\n\n this.context.fill();\n const strokeStyle = this.context.strokeStyle;\n\n if (strokeStyle.width !== GraphicsContext.defaultStrokeStyle.width\n || strokeStyle.color !== GraphicsContext.defaultStrokeStyle.color\n || strokeStyle.alpha !== GraphicsContext.defaultStrokeStyle.alpha)\n {\n this.context.stroke();\n }\n\n return this;\n }\n\n /**\n * @param {...any} args\n * @deprecated since 8.0.0 Use {@link Graphics#circle} instead\n */\n public drawCircle(...args: Parameters): this\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'Graphics#drawCircle has been renamed to Graphics#circle');\n // #endif\n\n return this._callContextMethod('circle', args);\n }\n\n /**\n * @param {...any} args\n * @deprecated since 8.0.0 Use {@link Graphics#ellipse} instead\n */\n public drawEllipse(...args: Parameters): this\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'Graphics#drawEllipse has been renamed to Graphics#ellipse');\n // #endif\n\n return this._callContextMethod('ellipse', args);\n }\n\n /**\n * @param {...any} args\n * @deprecated since 8.0.0 Use {@link Graphics#poly} instead\n */\n public drawPolygon(...args: Parameters): this\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'Graphics#drawPolygon has been renamed to Graphics#poly');\n // #endif\n\n return this._callContextMethod('poly', args);\n }\n\n /**\n * @param {...any} args\n * @deprecated since 8.0.0 Use {@link Graphics#rect} instead\n */\n public drawRect(...args: Parameters): this\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'Graphics#drawRect has been renamed to Graphics#rect');\n // #endif\n\n return this._callContextMethod('rect', args);\n }\n\n /**\n * @param {...any} args\n * @deprecated since 8.0.0 Use {@link Graphics#roundRect} instead\n */\n public drawRoundedRect(...args: Parameters): this\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'Graphics#drawRoundedRect has been renamed to Graphics#roundRect');\n // #endif\n\n return this._callContextMethod('roundRect', args);\n }\n\n /**\n * @param {...any} args\n * @deprecated since 8.0.0 Use {@link Graphics#star} instead\n */\n public drawStar(...args: Parameters): this\n {\n // #if _DEBUG\n deprecation(v8_0_0, 'Graphics#drawStar has been renamed to Graphics#star');\n // #endif\n\n return this._callContextMethod('star', args);\n }\n}\n"],"names":[],"mappings":"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"}