@guinetik/gcanvas 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yaml +70 -0
- package/.jshintrc +4 -0
- package/.vscode/settings.json +22 -0
- package/CLAUDE.md +310 -0
- package/blackhole.jpg +0 -0
- package/demo.png +0 -0
- package/demos/CNAME +1 -0
- package/demos/animations.html +31 -0
- package/demos/basic.html +38 -0
- package/demos/baskara.html +31 -0
- package/demos/bezier.html +35 -0
- package/demos/beziersignature.html +29 -0
- package/demos/blackhole.html +28 -0
- package/demos/blob.html +35 -0
- package/demos/demos.css +289 -0
- package/demos/easing.html +28 -0
- package/demos/events.html +195 -0
- package/demos/fluent.html +647 -0
- package/demos/fractals.html +36 -0
- package/demos/genart.html +26 -0
- package/demos/gendream.html +26 -0
- package/demos/group.html +36 -0
- package/demos/home.html +587 -0
- package/demos/index.html +364 -0
- package/demos/isometric.html +34 -0
- package/demos/js/animations.js +452 -0
- package/demos/js/basic.js +204 -0
- package/demos/js/baskara.js +751 -0
- package/demos/js/bezier.js +692 -0
- package/demos/js/beziersignature.js +241 -0
- package/demos/js/blackhole/accretiondisk.obj.js +379 -0
- package/demos/js/blackhole/blackhole.obj.js +318 -0
- package/demos/js/blackhole/index.js +409 -0
- package/demos/js/blackhole/particle.js +56 -0
- package/demos/js/blackhole/starfield.obj.js +218 -0
- package/demos/js/blob.js +2263 -0
- package/demos/js/easing.js +477 -0
- package/demos/js/fluent.js +183 -0
- package/demos/js/fractals.js +931 -0
- package/demos/js/fractalworker.js +93 -0
- package/demos/js/genart.js +268 -0
- package/demos/js/gendream.js +209 -0
- package/demos/js/group.js +140 -0
- package/demos/js/info-toggle.js +25 -0
- package/demos/js/isometric.js +863 -0
- package/demos/js/kerr.js +1556 -0
- package/demos/js/lavalamp.js +590 -0
- package/demos/js/layout.js +354 -0
- package/demos/js/mondrian.js +285 -0
- package/demos/js/opacity.js +275 -0
- package/demos/js/painter.js +484 -0
- package/demos/js/particles-showcase.js +514 -0
- package/demos/js/particles.js +299 -0
- package/demos/js/patterns.js +397 -0
- package/demos/js/penrose/artifact.js +69 -0
- package/demos/js/penrose/blackhole.js +121 -0
- package/demos/js/penrose/constants.js +73 -0
- package/demos/js/penrose/game.js +943 -0
- package/demos/js/penrose/lore.js +278 -0
- package/demos/js/penrose/penrosescene.js +892 -0
- package/demos/js/penrose/ship.js +216 -0
- package/demos/js/penrose/sounds.js +211 -0
- package/demos/js/penrose/voidparticle.js +55 -0
- package/demos/js/penrose/voidscene.js +258 -0
- package/demos/js/penrose/voidship.js +144 -0
- package/demos/js/penrose/wormhole.js +46 -0
- package/demos/js/pipeline.js +555 -0
- package/demos/js/scene.js +304 -0
- package/demos/js/scenes.js +320 -0
- package/demos/js/schrodinger.js +410 -0
- package/demos/js/schwarzschild.js +1023 -0
- package/demos/js/shapes.js +628 -0
- package/demos/js/space/alien.js +171 -0
- package/demos/js/space/boom.js +98 -0
- package/demos/js/space/boss.js +353 -0
- package/demos/js/space/buff.js +73 -0
- package/demos/js/space/bullet.js +102 -0
- package/demos/js/space/constants.js +85 -0
- package/demos/js/space/game.js +1884 -0
- package/demos/js/space/hud.js +112 -0
- package/demos/js/space/laserbeam.js +179 -0
- package/demos/js/space/lightning.js +277 -0
- package/demos/js/space/minion.js +192 -0
- package/demos/js/space/missile.js +212 -0
- package/demos/js/space/player.js +430 -0
- package/demos/js/space/powerup.js +90 -0
- package/demos/js/space/starfield.js +58 -0
- package/demos/js/space/starpower.js +90 -0
- package/demos/js/spacetime.js +559 -0
- package/demos/js/svgtween.js +204 -0
- package/demos/js/tde/accretiondisk.js +418 -0
- package/demos/js/tde/blackhole.js +219 -0
- package/demos/js/tde/blackholescene.js +209 -0
- package/demos/js/tde/config.js +59 -0
- package/demos/js/tde/index.js +695 -0
- package/demos/js/tde/jets.js +290 -0
- package/demos/js/tde/lensedstarfield.js +147 -0
- package/demos/js/tde/tdestar.js +317 -0
- package/demos/js/tde/tidalstream.js +356 -0
- package/demos/js/tde_old/blackhole.obj.js +354 -0
- package/demos/js/tde_old/debris.obj.js +791 -0
- package/demos/js/tde_old/flare.obj.js +239 -0
- package/demos/js/tde_old/index.js +448 -0
- package/demos/js/tde_old/star.obj.js +812 -0
- package/demos/js/tiles.js +312 -0
- package/demos/js/tweendemo.js +79 -0
- package/demos/js/visibility.js +102 -0
- package/demos/kerr.html +28 -0
- package/demos/lavalamp.html +27 -0
- package/demos/layouts.html +37 -0
- package/demos/logo.svg +4 -0
- package/demos/loop.html +84 -0
- package/demos/mondrian.html +32 -0
- package/demos/og_image.png +0 -0
- package/demos/opacity.html +36 -0
- package/demos/painter.html +39 -0
- package/demos/particles-showcase.html +28 -0
- package/demos/particles.html +24 -0
- package/demos/patterns.html +33 -0
- package/demos/penrose-game.html +31 -0
- package/demos/pipeline.html +737 -0
- package/demos/scene.html +33 -0
- package/demos/scenes.html +96 -0
- package/demos/schrodinger.html +27 -0
- package/demos/schwarzschild.html +27 -0
- package/demos/shapes.html +16 -0
- package/demos/space.html +85 -0
- package/demos/spacetime.html +27 -0
- package/demos/svgtween.html +29 -0
- package/demos/tde.html +28 -0
- package/demos/tiles.html +28 -0
- package/demos/transforms.html +400 -0
- package/demos/tween.html +45 -0
- package/demos/visibility.html +33 -0
- package/disk_example.png +0 -0
- package/docs/README.md +222 -0
- package/docs/concepts/architecture-overview.md +204 -0
- package/docs/concepts/lifecycle.md +255 -0
- package/docs/concepts/rendering-pipeline.md +279 -0
- package/docs/concepts/tde-zorder.md +106 -0
- package/docs/concepts/two-layer-architecture.md +229 -0
- package/docs/getting-started/first-game.md +354 -0
- package/docs/getting-started/hello-world.md +269 -0
- package/docs/getting-started/installation.md +157 -0
- package/docs/modules/collision/README.md +453 -0
- package/docs/modules/fluent/README.md +1075 -0
- package/docs/modules/game/README.md +303 -0
- package/docs/modules/isometric-camera.md +210 -0
- package/docs/modules/isometric.md +275 -0
- package/docs/modules/painter/README.md +328 -0
- package/docs/modules/particle/README.md +559 -0
- package/docs/modules/shapes/README.md +221 -0
- package/docs/modules/shapes/base/euclidian.md +123 -0
- package/docs/modules/shapes/base/geometry2d.md +204 -0
- package/docs/modules/shapes/base/renderable.md +215 -0
- package/docs/modules/shapes/base/shape.md +262 -0
- package/docs/modules/shapes/base/transformable.md +243 -0
- package/docs/modules/shapes/hierarchy.md +218 -0
- package/docs/modules/state/README.md +577 -0
- package/docs/modules/util/README.md +99 -0
- package/docs/modules/util/camera3d.md +412 -0
- package/docs/modules/util/scene3d.md +395 -0
- package/index.html +17 -0
- package/jsdoc.json +50 -0
- package/package.json +55 -0
- package/readme.md +599 -0
- package/scripts/build-demo.js +69 -0
- package/scripts/bundle4llm.js +276 -0
- package/scripts/clearconsole.js +48 -0
- package/src/collision/collision-system.js +332 -0
- package/src/collision/collision.js +303 -0
- package/src/collision/index.js +10 -0
- package/src/fluent/fluent-game.js +430 -0
- package/src/fluent/fluent-go.js +1060 -0
- package/src/fluent/fluent-layer.js +152 -0
- package/src/fluent/fluent-scene.js +291 -0
- package/src/fluent/index.js +98 -0
- package/src/fluent/sketch.js +380 -0
- package/src/game/game.js +467 -0
- package/src/game/index.js +49 -0
- package/src/game/objects/go.js +220 -0
- package/src/game/objects/imagego.js +30 -0
- package/src/game/objects/index.js +54 -0
- package/src/game/objects/isometric-scene.js +260 -0
- package/src/game/objects/layoutscene.js +549 -0
- package/src/game/objects/scene.js +175 -0
- package/src/game/objects/scene3d.js +118 -0
- package/src/game/objects/text.js +221 -0
- package/src/game/objects/wrapper.js +232 -0
- package/src/game/pipeline.js +243 -0
- package/src/game/ui/button.js +396 -0
- package/src/game/ui/cursor.js +93 -0
- package/src/game/ui/fps.js +91 -0
- package/src/game/ui/index.js +5 -0
- package/src/game/ui/togglebutton.js +93 -0
- package/src/game/ui/tooltip.js +249 -0
- package/src/index.js +25 -0
- package/src/io/events.js +20 -0
- package/src/io/index.js +86 -0
- package/src/io/input.js +70 -0
- package/src/io/keys.js +152 -0
- package/src/io/mouse.js +61 -0
- package/src/io/touch.js +39 -0
- package/src/logger/debugtab.js +138 -0
- package/src/logger/index.js +3 -0
- package/src/logger/loggable.js +47 -0
- package/src/logger/logger.js +113 -0
- package/src/math/complex.js +37 -0
- package/src/math/constants.js +1 -0
- package/src/math/fractal.js +1271 -0
- package/src/math/gr.js +201 -0
- package/src/math/heat.js +202 -0
- package/src/math/index.js +12 -0
- package/src/math/noise.js +433 -0
- package/src/math/orbital.js +191 -0
- package/src/math/patterns.js +1339 -0
- package/src/math/penrose.js +259 -0
- package/src/math/quantum.js +115 -0
- package/src/math/random.js +195 -0
- package/src/math/tensor.js +1009 -0
- package/src/mixins/anchor.js +131 -0
- package/src/mixins/draggable.js +72 -0
- package/src/mixins/index.js +2 -0
- package/src/motion/bezier.js +132 -0
- package/src/motion/bounce.js +58 -0
- package/src/motion/easing.js +349 -0
- package/src/motion/float.js +130 -0
- package/src/motion/follow.js +125 -0
- package/src/motion/hop.js +52 -0
- package/src/motion/index.js +82 -0
- package/src/motion/motion.js +1124 -0
- package/src/motion/orbit.js +49 -0
- package/src/motion/oscillate.js +39 -0
- package/src/motion/parabolic.js +141 -0
- package/src/motion/patrol.js +147 -0
- package/src/motion/pendulum.js +48 -0
- package/src/motion/pulse.js +88 -0
- package/src/motion/shake.js +83 -0
- package/src/motion/spiral.js +144 -0
- package/src/motion/spring.js +150 -0
- package/src/motion/swing.js +47 -0
- package/src/motion/tween.js +92 -0
- package/src/motion/tweenetik.js +139 -0
- package/src/motion/waypoint.js +210 -0
- package/src/painter/index.js +8 -0
- package/src/painter/painter.colors.js +331 -0
- package/src/painter/painter.effects.js +230 -0
- package/src/painter/painter.img.js +229 -0
- package/src/painter/painter.js +295 -0
- package/src/painter/painter.lines.js +189 -0
- package/src/painter/painter.opacity.js +41 -0
- package/src/painter/painter.shapes.js +277 -0
- package/src/painter/painter.text.js +273 -0
- package/src/particle/emitter.js +124 -0
- package/src/particle/index.js +11 -0
- package/src/particle/particle-system.js +322 -0
- package/src/particle/particle.js +71 -0
- package/src/particle/updaters.js +170 -0
- package/src/shapes/arc.js +43 -0
- package/src/shapes/arrow.js +33 -0
- package/src/shapes/bezier.js +42 -0
- package/src/shapes/circle.js +62 -0
- package/src/shapes/clouds.js +56 -0
- package/src/shapes/cone.js +219 -0
- package/src/shapes/cross.js +70 -0
- package/src/shapes/cube.js +244 -0
- package/src/shapes/cylinder.js +254 -0
- package/src/shapes/diamond.js +48 -0
- package/src/shapes/euclidian.js +111 -0
- package/src/shapes/figure.js +115 -0
- package/src/shapes/geometry.js +220 -0
- package/src/shapes/group.js +375 -0
- package/src/shapes/heart.js +42 -0
- package/src/shapes/hexagon.js +26 -0
- package/src/shapes/image.js +192 -0
- package/src/shapes/index.js +111 -0
- package/src/shapes/line.js +29 -0
- package/src/shapes/pattern.js +90 -0
- package/src/shapes/pin.js +44 -0
- package/src/shapes/poly.js +31 -0
- package/src/shapes/prism.js +226 -0
- package/src/shapes/rect.js +35 -0
- package/src/shapes/renderable.js +333 -0
- package/src/shapes/ring.js +26 -0
- package/src/shapes/roundrect.js +95 -0
- package/src/shapes/shape.js +117 -0
- package/src/shapes/slice.js +26 -0
- package/src/shapes/sphere.js +314 -0
- package/src/shapes/sphere3d.js +537 -0
- package/src/shapes/square.js +15 -0
- package/src/shapes/star.js +99 -0
- package/src/shapes/svg.js +408 -0
- package/src/shapes/text.js +553 -0
- package/src/shapes/traceable.js +83 -0
- package/src/shapes/transform.js +357 -0
- package/src/shapes/transformable.js +172 -0
- package/src/shapes/triangle.js +26 -0
- package/src/sound/index.js +17 -0
- package/src/sound/sound.js +473 -0
- package/src/sound/synth.analyzer.js +149 -0
- package/src/sound/synth.effects.js +207 -0
- package/src/sound/synth.envelope.js +59 -0
- package/src/sound/synth.js +229 -0
- package/src/sound/synth.musical.js +160 -0
- package/src/sound/synth.noise.js +85 -0
- package/src/sound/synth.oscillators.js +293 -0
- package/src/state/index.js +10 -0
- package/src/state/state-machine.js +371 -0
- package/src/util/camera3d.js +438 -0
- package/src/util/index.js +6 -0
- package/src/util/isometric-camera.js +235 -0
- package/src/util/layout.js +317 -0
- package/src/util/position.js +147 -0
- package/src/util/tasks.js +47 -0
- package/src/util/zindex.js +287 -0
- package/src/webgl/index.js +9 -0
- package/src/webgl/shaders/sphere-shaders.js +994 -0
- package/src/webgl/webgl-renderer.js +388 -0
- package/tde.png +0 -0
- package/test/math/orbital.test.js +61 -0
- package/test/math/tensor.test.js +114 -0
- package/test/particle/emitter.test.js +204 -0
- package/test/particle/particle-system.test.js +310 -0
- package/test/particle/particle.test.js +116 -0
- package/test/particle/updaters.test.js +386 -0
- package/test/setup.js +120 -0
- package/test/shapes/euclidian.test.js +44 -0
- package/test/shapes/geometry.test.js +86 -0
- package/test/shapes/group.test.js +86 -0
- package/test/shapes/rectangle.test.js +64 -0
- package/test/shapes/transform.test.js +379 -0
- package/test/util/camera3d.test.js +428 -0
- package/test/util/scene3d.test.js +352 -0
- package/types/collision.d.ts +249 -0
- package/types/common.d.ts +155 -0
- package/types/game.d.ts +497 -0
- package/types/index.d.ts +309 -0
- package/types/io.d.ts +188 -0
- package/types/logger.d.ts +127 -0
- package/types/math.d.ts +268 -0
- package/types/mixins.d.ts +92 -0
- package/types/motion.d.ts +678 -0
- package/types/painter.d.ts +378 -0
- package/types/shapes.d.ts +864 -0
- package/types/sound.d.ts +672 -0
- package/types/state.d.ts +251 -0
- package/types/util.d.ts +253 -0
- package/vite.config.js +50 -0
- package/vitest.config.js +13 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GCanvas Painter Module
|
|
3
|
+
* Static utility class for canvas drawing operations.
|
|
4
|
+
* @module painter
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Point } from './common';
|
|
8
|
+
import { Logger } from './logger';
|
|
9
|
+
|
|
10
|
+
// ==========================================================================
|
|
11
|
+
// Main Painter Class
|
|
12
|
+
// ==========================================================================
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Static utility class centralizing all canvas drawing operations.
|
|
16
|
+
* Must be initialized with a canvas context before use.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Initialize Painter
|
|
20
|
+
* Painter.init(canvas.getContext('2d'));
|
|
21
|
+
*
|
|
22
|
+
* // Draw shapes
|
|
23
|
+
* Painter.shapes.rect(10, 10, 100, 50, 'red');
|
|
24
|
+
* Painter.shapes.fillCircle(200, 100, 30, 'blue');
|
|
25
|
+
*/
|
|
26
|
+
export class Painter {
|
|
27
|
+
/** The canvas 2D rendering context */
|
|
28
|
+
static ctx: CanvasRenderingContext2D;
|
|
29
|
+
/** Logger instance */
|
|
30
|
+
static logger: Logger;
|
|
31
|
+
|
|
32
|
+
/** Color utilities */
|
|
33
|
+
static readonly colors: typeof PainterColors;
|
|
34
|
+
/** Visual effects utilities */
|
|
35
|
+
static readonly effects: typeof PainterEffects;
|
|
36
|
+
/** Image drawing utilities */
|
|
37
|
+
static readonly img: typeof PainterImages;
|
|
38
|
+
/** Line drawing utilities */
|
|
39
|
+
static readonly lines: typeof PainterLines;
|
|
40
|
+
/** Opacity management utilities */
|
|
41
|
+
static readonly opacity: typeof PainterOpacity;
|
|
42
|
+
/** Shape drawing utilities */
|
|
43
|
+
static readonly shapes: typeof PainterShapes;
|
|
44
|
+
/** Text drawing utilities */
|
|
45
|
+
static readonly text: typeof PainterText;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Initialize Painter with a canvas context.
|
|
49
|
+
* @param ctx - The 2D rendering context
|
|
50
|
+
*/
|
|
51
|
+
static init(ctx: CanvasRenderingContext2D): void;
|
|
52
|
+
|
|
53
|
+
/** Save the current canvas state */
|
|
54
|
+
static save(): void;
|
|
55
|
+
/** Restore the previously saved canvas state */
|
|
56
|
+
static restore(): void;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Translate to a position (resets previous translation).
|
|
60
|
+
* @param x - X position
|
|
61
|
+
* @param y - Y position
|
|
62
|
+
*/
|
|
63
|
+
static translateTo(x: number, y: number): void;
|
|
64
|
+
|
|
65
|
+
/** Reset translation to origin */
|
|
66
|
+
static resetPosition(): void;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Execute a callback at a specific position.
|
|
70
|
+
* Saves state, translates, executes callback, then restores.
|
|
71
|
+
* @param x - X position
|
|
72
|
+
* @param y - Y position
|
|
73
|
+
* @param callback - Function to execute at position
|
|
74
|
+
*/
|
|
75
|
+
static withPosition(x: number, y: number, callback: () => void): void;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Clear a rectangular area of the canvas.
|
|
79
|
+
* @param x - X position (default: 0)
|
|
80
|
+
* @param y - Y position (default: 0)
|
|
81
|
+
* @param width - Width (default: canvas width)
|
|
82
|
+
* @param height - Height (default: canvas height)
|
|
83
|
+
*/
|
|
84
|
+
static clear(x?: number, y?: number, width?: number, height?: number): void;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Translate the canvas context.
|
|
88
|
+
* @param x - X offset
|
|
89
|
+
* @param y - Y offset
|
|
90
|
+
*/
|
|
91
|
+
static translate(x: number, y: number): void;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Rotate the canvas context.
|
|
95
|
+
* @param angle - Rotation angle in radians
|
|
96
|
+
*/
|
|
97
|
+
static rotate(angle: number): void;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Scale the canvas context.
|
|
101
|
+
* @param x - X scale factor
|
|
102
|
+
* @param y - Y scale factor
|
|
103
|
+
*/
|
|
104
|
+
static scale(x: number, y: number): void;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ==========================================================================
|
|
108
|
+
// Painter Sub-Modules
|
|
109
|
+
// ==========================================================================
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Color manipulation utilities.
|
|
113
|
+
*/
|
|
114
|
+
export class PainterColors {
|
|
115
|
+
/**
|
|
116
|
+
* Convert hex color to RGB object.
|
|
117
|
+
* @param hex - Hex color string (e.g., "#ff0000")
|
|
118
|
+
* @returns RGB values or null if invalid
|
|
119
|
+
*/
|
|
120
|
+
static hexToRgb(hex: string): { r: number; g: number; b: number } | null;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Convert RGB values to hex string.
|
|
124
|
+
* @param r - Red (0-255)
|
|
125
|
+
* @param g - Green (0-255)
|
|
126
|
+
* @param b - Blue (0-255)
|
|
127
|
+
* @returns Hex color string
|
|
128
|
+
*/
|
|
129
|
+
static rgbToHex(r: number, g: number, b: number): string;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Lighten a color.
|
|
133
|
+
* @param color - Color string
|
|
134
|
+
* @param amount - Lighten amount (0-1)
|
|
135
|
+
* @returns Lightened color
|
|
136
|
+
*/
|
|
137
|
+
static lighten(color: string, amount: number): string;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Darken a color.
|
|
141
|
+
* @param color - Color string
|
|
142
|
+
* @param amount - Darken amount (0-1)
|
|
143
|
+
* @returns Darkened color
|
|
144
|
+
*/
|
|
145
|
+
static darken(color: string, amount: number): string;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Visual effects utilities.
|
|
150
|
+
*/
|
|
151
|
+
export class PainterEffects {
|
|
152
|
+
/**
|
|
153
|
+
* Set the canvas blend mode.
|
|
154
|
+
* @param mode - Composite operation mode
|
|
155
|
+
*/
|
|
156
|
+
static setBlendMode(mode: GlobalCompositeOperation): void;
|
|
157
|
+
|
|
158
|
+
/** Reset blend mode to default (source-over) */
|
|
159
|
+
static resetBlendMode(): void;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Image drawing utilities.
|
|
164
|
+
*/
|
|
165
|
+
export class PainterImages {
|
|
166
|
+
/**
|
|
167
|
+
* Draw an image to the canvas.
|
|
168
|
+
* @param image - Image or canvas element
|
|
169
|
+
* @param x - X position
|
|
170
|
+
* @param y - Y position
|
|
171
|
+
* @param width - Optional width (defaults to image width)
|
|
172
|
+
* @param height - Optional height (defaults to image height)
|
|
173
|
+
*/
|
|
174
|
+
static drawImage(
|
|
175
|
+
image: HTMLImageElement | HTMLCanvasElement,
|
|
176
|
+
x: number,
|
|
177
|
+
y: number,
|
|
178
|
+
width?: number,
|
|
179
|
+
height?: number
|
|
180
|
+
): void;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Line drawing utilities.
|
|
185
|
+
*/
|
|
186
|
+
export class PainterLines {
|
|
187
|
+
/**
|
|
188
|
+
* Draw a solid line.
|
|
189
|
+
* @param x1 - Start X
|
|
190
|
+
* @param y1 - Start Y
|
|
191
|
+
* @param x2 - End X
|
|
192
|
+
* @param y2 - End Y
|
|
193
|
+
* @param color - Line color
|
|
194
|
+
* @param lineWidth - Line width (default: 1)
|
|
195
|
+
*/
|
|
196
|
+
static line(
|
|
197
|
+
x1: number,
|
|
198
|
+
y1: number,
|
|
199
|
+
x2: number,
|
|
200
|
+
y2: number,
|
|
201
|
+
color: string,
|
|
202
|
+
lineWidth?: number
|
|
203
|
+
): void;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Draw a dashed line.
|
|
207
|
+
* @param x1 - Start X
|
|
208
|
+
* @param y1 - Start Y
|
|
209
|
+
* @param x2 - End X
|
|
210
|
+
* @param y2 - End Y
|
|
211
|
+
* @param color - Line color
|
|
212
|
+
* @param dashArray - Dash pattern (e.g., [5, 5])
|
|
213
|
+
* @param lineWidth - Line width (default: 1)
|
|
214
|
+
*/
|
|
215
|
+
static dashedLine(
|
|
216
|
+
x1: number,
|
|
217
|
+
y1: number,
|
|
218
|
+
x2: number,
|
|
219
|
+
y2: number,
|
|
220
|
+
color: string,
|
|
221
|
+
dashArray: number[],
|
|
222
|
+
lineWidth?: number
|
|
223
|
+
): void;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Opacity/transparency management utilities.
|
|
228
|
+
*/
|
|
229
|
+
export class PainterOpacity {
|
|
230
|
+
/**
|
|
231
|
+
* Push a new opacity value (multiplies with current).
|
|
232
|
+
* @param opacity - Opacity value (0-1)
|
|
233
|
+
*/
|
|
234
|
+
static pushOpacity(opacity: number): void;
|
|
235
|
+
|
|
236
|
+
/** Pop the most recent opacity value */
|
|
237
|
+
static popOpacity(): void;
|
|
238
|
+
|
|
239
|
+
/** Save the current opacity state */
|
|
240
|
+
static saveOpacityState(): void;
|
|
241
|
+
|
|
242
|
+
/** Restore the previously saved opacity state */
|
|
243
|
+
static restoreOpacityState(): void;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Shape drawing utilities.
|
|
248
|
+
*/
|
|
249
|
+
export class PainterShapes {
|
|
250
|
+
/**
|
|
251
|
+
* Draw a filled rectangle.
|
|
252
|
+
* @param x - X position
|
|
253
|
+
* @param y - Y position
|
|
254
|
+
* @param width - Width
|
|
255
|
+
* @param height - Height
|
|
256
|
+
* @param color - Fill color
|
|
257
|
+
*/
|
|
258
|
+
static rect(x: number, y: number, width: number, height: number, color: string): void;
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Draw a stroked rectangle.
|
|
262
|
+
* @param x - X position
|
|
263
|
+
* @param y - Y position
|
|
264
|
+
* @param width - Width
|
|
265
|
+
* @param height - Height
|
|
266
|
+
* @param color - Stroke color
|
|
267
|
+
* @param lineWidth - Line width (default: 1)
|
|
268
|
+
*/
|
|
269
|
+
static outlineRect(
|
|
270
|
+
x: number,
|
|
271
|
+
y: number,
|
|
272
|
+
width: number,
|
|
273
|
+
height: number,
|
|
274
|
+
color: string,
|
|
275
|
+
lineWidth?: number
|
|
276
|
+
): void;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Draw a filled rounded rectangle.
|
|
280
|
+
* @param x - X position
|
|
281
|
+
* @param y - Y position
|
|
282
|
+
* @param width - Width
|
|
283
|
+
* @param height - Height
|
|
284
|
+
* @param radius - Corner radius
|
|
285
|
+
* @param color - Fill color
|
|
286
|
+
*/
|
|
287
|
+
static roundedRect(
|
|
288
|
+
x: number,
|
|
289
|
+
y: number,
|
|
290
|
+
width: number,
|
|
291
|
+
height: number,
|
|
292
|
+
radius: number,
|
|
293
|
+
color: string
|
|
294
|
+
): void;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Draw a filled circle.
|
|
298
|
+
* @param x - Center X
|
|
299
|
+
* @param y - Center Y
|
|
300
|
+
* @param radius - Radius
|
|
301
|
+
* @param color - Fill color
|
|
302
|
+
*/
|
|
303
|
+
static fillCircle(x: number, y: number, radius: number, color: string): void;
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Draw a stroked circle.
|
|
307
|
+
* @param x - Center X
|
|
308
|
+
* @param y - Center Y
|
|
309
|
+
* @param radius - Radius
|
|
310
|
+
* @param color - Stroke color
|
|
311
|
+
* @param lineWidth - Line width (default: 1)
|
|
312
|
+
*/
|
|
313
|
+
static strokeCircle(
|
|
314
|
+
x: number,
|
|
315
|
+
y: number,
|
|
316
|
+
radius: number,
|
|
317
|
+
color: string,
|
|
318
|
+
lineWidth?: number
|
|
319
|
+
): void;
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Draw an arc.
|
|
323
|
+
* @param x - Center X
|
|
324
|
+
* @param y - Center Y
|
|
325
|
+
* @param radius - Radius
|
|
326
|
+
* @param startAngle - Start angle in radians
|
|
327
|
+
* @param endAngle - End angle in radians
|
|
328
|
+
* @param color - Stroke color
|
|
329
|
+
* @param lineWidth - Line width (default: 1)
|
|
330
|
+
*/
|
|
331
|
+
static arc(
|
|
332
|
+
x: number,
|
|
333
|
+
y: number,
|
|
334
|
+
radius: number,
|
|
335
|
+
startAngle: number,
|
|
336
|
+
endAngle: number,
|
|
337
|
+
color: string,
|
|
338
|
+
lineWidth?: number
|
|
339
|
+
): void;
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Draw a filled polygon.
|
|
343
|
+
* @param points - Array of points
|
|
344
|
+
* @param color - Fill color
|
|
345
|
+
*/
|
|
346
|
+
static polygon(points: Point[], color: string): void;
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Draw a stroked polygon.
|
|
350
|
+
* @param points - Array of points
|
|
351
|
+
* @param color - Stroke color
|
|
352
|
+
* @param lineWidth - Line width (default: 1)
|
|
353
|
+
*/
|
|
354
|
+
static outlinePolygon(points: Point[], color: string, lineWidth?: number): void;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* Text drawing utilities.
|
|
359
|
+
*/
|
|
360
|
+
export class PainterText {
|
|
361
|
+
/**
|
|
362
|
+
* Draw text.
|
|
363
|
+
* @param text - Text string
|
|
364
|
+
* @param x - X position
|
|
365
|
+
* @param y - Y position
|
|
366
|
+
* @param color - Text color
|
|
367
|
+
* @param font - CSS font string (optional)
|
|
368
|
+
*/
|
|
369
|
+
static text(text: string, x: number, y: number, color: string, font?: string): void;
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Measure text dimensions.
|
|
373
|
+
* @param text - Text string
|
|
374
|
+
* @param font - CSS font string (optional)
|
|
375
|
+
* @returns Text metrics
|
|
376
|
+
*/
|
|
377
|
+
static measureText(text: string, font?: string): TextMetrics;
|
|
378
|
+
}
|