@gtkx/cairo 1.2.2

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.
Files changed (86) hide show
  1. package/dist/context.d.ts +229 -0
  2. package/dist/context.d.ts.map +1 -0
  3. package/dist/context.js +646 -0
  4. package/dist/context.js.map +1 -0
  5. package/dist/device.d.ts +21 -0
  6. package/dist/device.d.ts.map +1 -0
  7. package/dist/device.js +39 -0
  8. package/dist/device.js.map +1 -0
  9. package/dist/enums.d.ts +526 -0
  10. package/dist/enums.d.ts.map +1 -0
  11. package/dist/enums.js +482 -0
  12. package/dist/enums.js.map +1 -0
  13. package/dist/font-face.d.ts +55 -0
  14. package/dist/font-face.d.ts.map +1 -0
  15. package/dist/font-face.js +103 -0
  16. package/dist/font-face.js.map +1 -0
  17. package/dist/font-options.d.ts +43 -0
  18. package/dist/font-options.d.ts.map +1 -0
  19. package/dist/font-options.js +95 -0
  20. package/dist/font-options.js.map +1 -0
  21. package/dist/index.d.ts +29 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +27 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/lib.d.ts +36 -0
  26. package/dist/lib.d.ts.map +1 -0
  27. package/dist/lib.js +120 -0
  28. package/dist/lib.js.map +1 -0
  29. package/dist/matrix.d.ts +40 -0
  30. package/dist/matrix.d.ts.map +1 -0
  31. package/dist/matrix.js +93 -0
  32. package/dist/matrix.js.map +1 -0
  33. package/dist/path.d.ts +14 -0
  34. package/dist/path.d.ts.map +1 -0
  35. package/dist/path.js +67 -0
  36. package/dist/path.js.map +1 -0
  37. package/dist/pattern.d.ts +95 -0
  38. package/dist/pattern.d.ts.map +1 -0
  39. package/dist/pattern.js +250 -0
  40. package/dist/pattern.js.map +1 -0
  41. package/dist/region.d.ts +59 -0
  42. package/dist/region.d.ts.map +1 -0
  43. package/dist/region.js +154 -0
  44. package/dist/region.js.map +1 -0
  45. package/dist/scaled-font.d.ts +43 -0
  46. package/dist/scaled-font.d.ts.map +1 -0
  47. package/dist/scaled-font.js +156 -0
  48. package/dist/scaled-font.js.map +1 -0
  49. package/dist/structs.d.ts +120 -0
  50. package/dist/structs.d.ts.map +1 -0
  51. package/dist/structs.js +185 -0
  52. package/dist/structs.js.map +1 -0
  53. package/dist/surface.d.ts +98 -0
  54. package/dist/surface.d.ts.map +1 -0
  55. package/dist/surface.js +274 -0
  56. package/dist/surface.js.map +1 -0
  57. package/dist/text.d.ts +10 -0
  58. package/dist/text.d.ts.map +1 -0
  59. package/dist/text.js +45 -0
  60. package/dist/text.js.map +1 -0
  61. package/dist/types.d.ts +245 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +2 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/version.d.ts +9 -0
  66. package/dist/version.d.ts.map +1 -0
  67. package/dist/version.js +13 -0
  68. package/dist/version.js.map +1 -0
  69. package/package.json +64 -0
  70. package/src/context.ts +899 -0
  71. package/src/device.ts +50 -0
  72. package/src/enums.ts +571 -0
  73. package/src/font-face.ts +157 -0
  74. package/src/font-options.ts +142 -0
  75. package/src/index.ts +28 -0
  76. package/src/lib.ts +186 -0
  77. package/src/matrix.ts +135 -0
  78. package/src/path.ts +87 -0
  79. package/src/pattern.ts +423 -0
  80. package/src/region.ts +216 -0
  81. package/src/scaled-font.ts +268 -0
  82. package/src/structs.ts +306 -0
  83. package/src/surface.ts +411 -0
  84. package/src/text.ts +56 -0
  85. package/src/types.ts +290 -0
  86. package/src/version.ts +16 -0
package/dist/matrix.js ADDED
@@ -0,0 +1,93 @@
1
+ import { alloc, getHandle, setHandle, t, wrapHandle } from "@gtkx/runtime";
2
+ import { bindCairo, MATRIX_T } from "./lib.js";
3
+ const MATRIX_SIZE = 48;
4
+ const cairoMatrixInit = bindCairo("cairo_matrix_init", [MATRIX_T, t.float64, t.float64, t.float64, t.float64, t.float64, t.float64], t.void);
5
+ const cairoMatrixInitIdentity = bindCairo("cairo_matrix_init_identity", [MATRIX_T], t.void);
6
+ const cairoMatrixInitTranslate = bindCairo("cairo_matrix_init_translate", [MATRIX_T, t.float64, t.float64], t.void);
7
+ const cairoMatrixInitScale = bindCairo("cairo_matrix_init_scale", [MATRIX_T, t.float64, t.float64], t.void);
8
+ const cairoMatrixInitRotate = bindCairo("cairo_matrix_init_rotate", [MATRIX_T, t.float64], t.void);
9
+ const cairoMatrixMultiply = bindCairo("cairo_matrix_multiply", [MATRIX_T, MATRIX_T, MATRIX_T], t.void);
10
+ const cairoMatrixTranslate = bindCairo("cairo_matrix_translate", [MATRIX_T, t.float64, t.float64], t.void);
11
+ const cairoMatrixScale = bindCairo("cairo_matrix_scale", [MATRIX_T, t.float64, t.float64], t.void);
12
+ const cairoMatrixRotate = bindCairo("cairo_matrix_rotate", [MATRIX_T, t.float64], t.void);
13
+ const cairoMatrixInvert = bindCairo("cairo_matrix_invert", [MATRIX_T], t.int32);
14
+ const cairoMatrixTransformPoint = bindCairo("cairo_matrix_transform_point", [MATRIX_T, t.ref(t.float64), t.ref(t.float64)], t.void);
15
+ const cairoMatrixTransformDistance = bindCairo("cairo_matrix_transform_distance", [MATRIX_T, t.ref(t.float64), t.ref(t.float64)], t.void);
16
+ const allocMatrix = () => {
17
+ const handle = alloc(MATRIX_SIZE);
18
+ return { handle, matrix: wrapHandle(handle, Matrix) };
19
+ };
20
+ /**
21
+ * An affine transformation (`cairo_matrix_t`) mapping user space to device space:
22
+ * `x' = xx * x + xy * y + x0` and `y' = yx * x + yy * y + y0`.
23
+ */
24
+ class Matrix {
25
+ /** Returns the identity transformation. */
26
+ static initIdentity() {
27
+ const { handle, matrix } = allocMatrix();
28
+ cairoMatrixInitIdentity(handle);
29
+ return matrix;
30
+ }
31
+ /** Returns a transformation translating by `tx` and `ty`. */
32
+ static initTranslate(tx, ty) {
33
+ const { handle, matrix } = allocMatrix();
34
+ cairoMatrixInitTranslate(handle, tx, ty);
35
+ return matrix;
36
+ }
37
+ /** Returns a transformation scaling by `sx` and `sy`. */
38
+ static initScale(sx, sy) {
39
+ const { handle, matrix } = allocMatrix();
40
+ cairoMatrixInitScale(handle, sx, sy);
41
+ return matrix;
42
+ }
43
+ /** Returns a transformation rotating by `radians`, positive angles turning from the X axis toward the Y axis. */
44
+ static initRotate(radians) {
45
+ const { handle, matrix } = allocMatrix();
46
+ cairoMatrixInitRotate(handle, radians);
47
+ return matrix;
48
+ }
49
+ /** Returns the product of `a` and `b`: the transformation that applies `a` first, then `b`. */
50
+ static multiply(a, b) {
51
+ const { handle, matrix } = allocMatrix();
52
+ cairoMatrixMultiply(handle, getHandle(a), getHandle(b));
53
+ return matrix;
54
+ }
55
+ /** Creates a matrix from its six affine components. */
56
+ constructor(xx, yx, xy, yy, x0, y0) {
57
+ const handle = alloc(MATRIX_SIZE);
58
+ setHandle(this, handle);
59
+ cairoMatrixInit(handle, xx, yx, xy, yy, x0, y0);
60
+ }
61
+ /** Applies a translation by `tx` and `ty` before the existing transformation. */
62
+ translate(tx, ty) {
63
+ cairoMatrixTranslate(getHandle(this), tx, ty);
64
+ }
65
+ /** Applies a scaling by `sx` and `sy` before the existing transformation. */
66
+ scale(sx, sy) {
67
+ cairoMatrixScale(getHandle(this), sx, sy);
68
+ }
69
+ /** Applies a rotation by `radians` before the existing transformation. */
70
+ rotate(radians) {
71
+ cairoMatrixRotate(getHandle(this), radians);
72
+ }
73
+ /** Replaces the matrix with its inverse, returning `Status.INVALID_MATRIX` when it has none. */
74
+ invert() {
75
+ return cairoMatrixInvert(getHandle(this));
76
+ }
77
+ /** Transforms the point `(x, y)`, translation included. */
78
+ transformPoint(x, y) {
79
+ const xRef = { value: x };
80
+ const yRef = { value: y };
81
+ cairoMatrixTransformPoint(getHandle(this), xRef, yRef);
82
+ return { x: xRef.value, y: yRef.value };
83
+ }
84
+ /** Transforms the distance vector `(dx, dy)`, ignoring translation. */
85
+ transformDistance(dx, dy) {
86
+ const dxRef = { value: dx };
87
+ const dyRef = { value: dy };
88
+ cairoMatrixTransformDistance(getHandle(this), dxRef, dyRef);
89
+ return { dx: dxRef.value, dy: dyRef.value };
90
+ }
91
+ }
92
+ export { allocMatrix, Matrix };
93
+ //# sourceMappingURL=matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../src/matrix.ts"],"names":[],"mappings":"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","sourcesContent":["import { alloc, type ExternalObject, getHandle, type Handle, setHandle, t, wrapHandle } from \"@gtkx/runtime\";\nimport type { Status } from \"./enums.js\";\nimport type { Distance, Point } from \"./types.js\";\nimport { bindCairo, MATRIX_T } from \"./lib.js\";\n\ntype MatrixAllocation = { handle: ExternalObject<Handle>; matrix: Matrix };\n\nconst MATRIX_SIZE = 48;\n\nconst cairoMatrixInit = bindCairo(\n \"cairo_matrix_init\",\n [MATRIX_T, t.float64, t.float64, t.float64, t.float64, t.float64, t.float64],\n t.void,\n);\n\nconst cairoMatrixInitIdentity = bindCairo(\"cairo_matrix_init_identity\", [MATRIX_T], t.void);\nconst cairoMatrixInitTranslate = bindCairo(\"cairo_matrix_init_translate\", [MATRIX_T, t.float64, t.float64], t.void);\nconst cairoMatrixInitScale = bindCairo(\"cairo_matrix_init_scale\", [MATRIX_T, t.float64, t.float64], t.void);\nconst cairoMatrixInitRotate = bindCairo(\"cairo_matrix_init_rotate\", [MATRIX_T, t.float64], t.void);\nconst cairoMatrixMultiply = bindCairo(\"cairo_matrix_multiply\", [MATRIX_T, MATRIX_T, MATRIX_T], t.void);\nconst cairoMatrixTranslate = bindCairo(\"cairo_matrix_translate\", [MATRIX_T, t.float64, t.float64], t.void);\nconst cairoMatrixScale = bindCairo(\"cairo_matrix_scale\", [MATRIX_T, t.float64, t.float64], t.void);\nconst cairoMatrixRotate = bindCairo(\"cairo_matrix_rotate\", [MATRIX_T, t.float64], t.void);\nconst cairoMatrixInvert = bindCairo(\"cairo_matrix_invert\", [MATRIX_T], t.int32);\n\nconst cairoMatrixTransformPoint = bindCairo(\n \"cairo_matrix_transform_point\",\n [MATRIX_T, t.ref(t.float64), t.ref(t.float64)],\n t.void,\n);\n\nconst cairoMatrixTransformDistance = bindCairo(\n \"cairo_matrix_transform_distance\",\n [MATRIX_T, t.ref(t.float64), t.ref(t.float64)],\n t.void,\n);\n\nconst allocMatrix = (): MatrixAllocation => {\n const handle = alloc(MATRIX_SIZE);\n\n return { handle, matrix: wrapHandle(handle, Matrix) };\n};\n\n/**\n * An affine transformation (`cairo_matrix_t`) mapping user space to device space:\n * `x' = xx * x + xy * y + x0` and `y' = yx * x + yy * y + y0`.\n */\nclass Matrix {\n /** Returns the identity transformation. */\n static initIdentity(): Matrix {\n const { handle, matrix } = allocMatrix();\n cairoMatrixInitIdentity(handle);\n\n return matrix;\n }\n\n /** Returns a transformation translating by `tx` and `ty`. */\n static initTranslate(tx: number, ty: number): Matrix {\n const { handle, matrix } = allocMatrix();\n cairoMatrixInitTranslate(handle, tx, ty);\n\n return matrix;\n }\n\n /** Returns a transformation scaling by `sx` and `sy`. */\n static initScale(sx: number, sy: number): Matrix {\n const { handle, matrix } = allocMatrix();\n cairoMatrixInitScale(handle, sx, sy);\n\n return matrix;\n }\n\n /** Returns a transformation rotating by `radians`, positive angles turning from the X axis toward the Y axis. */\n static initRotate(radians: number): Matrix {\n const { handle, matrix } = allocMatrix();\n cairoMatrixInitRotate(handle, radians);\n\n return matrix;\n }\n\n /** Returns the product of `a` and `b`: the transformation that applies `a` first, then `b`. */\n static multiply(a: Matrix, b: Matrix): Matrix {\n const { handle, matrix } = allocMatrix();\n cairoMatrixMultiply(handle, getHandle(a), getHandle(b));\n\n return matrix;\n }\n\n /** Creates a matrix from its six affine components. */\n constructor(xx: number, yx: number, xy: number, yy: number, x0: number, y0: number) {\n const handle = alloc(MATRIX_SIZE);\n setHandle(this, handle);\n cairoMatrixInit(handle, xx, yx, xy, yy, x0, y0);\n }\n\n /** Applies a translation by `tx` and `ty` before the existing transformation. */\n translate(tx: number, ty: number): void {\n cairoMatrixTranslate(getHandle(this), tx, ty);\n }\n\n /** Applies a scaling by `sx` and `sy` before the existing transformation. */\n scale(sx: number, sy: number): void {\n cairoMatrixScale(getHandle(this), sx, sy);\n }\n\n /** Applies a rotation by `radians` before the existing transformation. */\n rotate(radians: number): void {\n cairoMatrixRotate(getHandle(this), radians);\n }\n\n /** Replaces the matrix with its inverse, returning `Status.INVALID_MATRIX` when it has none. */\n invert(): Status {\n return cairoMatrixInvert(getHandle(this)) as Status;\n }\n\n /** Transforms the point `(x, y)`, translation included. */\n transformPoint(x: number, y: number): Point {\n const xRef = { value: x };\n const yRef = { value: y };\n cairoMatrixTransformPoint(getHandle(this), xRef, yRef);\n\n return { x: xRef.value, y: yRef.value };\n }\n\n /** Transforms the distance vector `(dx, dy)`, ignoring translation. */\n transformDistance(dx: number, dy: number): Distance {\n const dxRef = { value: dx };\n const dyRef = { value: dy };\n cairoMatrixTransformDistance(getHandle(this), dxRef, dyRef);\n\n return { dx: dxRef.value, dy: dyRef.value };\n }\n}\n\nexport { allocMatrix, Matrix };\n"]}
package/dist/path.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { type ExternalObject, type Handle } from "@gtkx/runtime";
2
+ import type { PathData } from "./types.js";
3
+ type PathBuffer = ExternalObject<Handle>;
4
+ declare const parsePath: (pathHandle: PathBuffer) => PathData[];
5
+ /**
6
+ * A cairo path (`cairo_path_t`). Instances come from the bindings that hand one back, and the bindings that take
7
+ * one, such as `Gsk.PathBuilder.addCairoPath`, accept it as is.
8
+ */
9
+ declare abstract class Path {
10
+ /** Reads the segments of the path in drawing order. */
11
+ toData(): PathData[];
12
+ }
13
+ export { parsePath, Path };
14
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAa,KAAK,MAAM,EAAW,MAAM,eAAe,CAAC;AACrF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,KAAK,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AA8CzC,QAAA,MAAM,SAAS,GAAI,YAAY,UAAU,KAAG,QAAQ,EAuBnD,CAAC;AAEF;;;GAGG;AACH,uBAAe,IAAI;IACf,uDAAuD;IACvD,MAAM,IAAI,QAAQ,EAAE;CAGvB;AAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC"}
package/dist/path.js ADDED
@@ -0,0 +1,67 @@
1
+ import { getHandle, read, t } from "@gtkx/runtime";
2
+ import { PathDataType } from "./enums.js";
3
+ const ELEMENT_SIZE = 16;
4
+ const DATA_OFFSET = 8;
5
+ const NUM_DATA_OFFSET = 16;
6
+ const readPoint = (data, base) => ({
7
+ x: read(data, t.float64, base),
8
+ y: read(data, t.float64, base + 8),
9
+ });
10
+ const readMoveTo = (data, base) => ({ type: "moveTo", ...readPoint(data, base + ELEMENT_SIZE) });
11
+ const readLineTo = (data, base) => ({ type: "lineTo", ...readPoint(data, base + ELEMENT_SIZE) });
12
+ const readCurveTo = (data, base) => {
13
+ const first = readPoint(data, base + ELEMENT_SIZE);
14
+ const second = readPoint(data, base + ELEMENT_SIZE * 2);
15
+ const third = readPoint(data, base + ELEMENT_SIZE * 3);
16
+ return { type: "curveTo", x1: first.x, y1: first.y, x2: second.x, y2: second.y, x3: third.x, y3: third.y };
17
+ };
18
+ const readClosePath = () => ({ type: "closePath" });
19
+ const segmentReaderFor = (headerType) => {
20
+ switch (headerType) {
21
+ case PathDataType.MOVE_TO: {
22
+ return readMoveTo;
23
+ }
24
+ case PathDataType.LINE_TO: {
25
+ return readLineTo;
26
+ }
27
+ case PathDataType.CURVE_TO: {
28
+ return readCurveTo;
29
+ }
30
+ case PathDataType.CLOSE_PATH: {
31
+ return readClosePath;
32
+ }
33
+ default: {
34
+ return null;
35
+ }
36
+ }
37
+ };
38
+ const parsePath = (pathHandle) => {
39
+ const numData = read(pathHandle, t.int32, NUM_DATA_OFFSET);
40
+ if (numData === 0) {
41
+ return [];
42
+ }
43
+ const data = read(pathHandle, t.struct("borrowed", { size: numData * ELEMENT_SIZE }), DATA_OFFSET);
44
+ const segments = [];
45
+ let index = 0;
46
+ while (index < numData) {
47
+ const base = index * ELEMENT_SIZE;
48
+ const reader = segmentReaderFor(read(data, t.int32, base));
49
+ if (reader !== null) {
50
+ segments.push(reader(data, base));
51
+ }
52
+ index += read(data, t.int32, base + 4);
53
+ }
54
+ return segments;
55
+ };
56
+ /**
57
+ * A cairo path (`cairo_path_t`). Instances come from the bindings that hand one back, and the bindings that take
58
+ * one, such as `Gsk.PathBuilder.addCairoPath`, accept it as is.
59
+ */
60
+ class Path {
61
+ /** Reads the segments of the path in drawing order. */
62
+ toData() {
63
+ return parsePath(getHandle(this));
64
+ }
65
+ }
66
+ export { parsePath, Path };
67
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ExternalObject, getHandle, type Handle, read, t } from \"@gtkx/runtime\";\nimport type { PathData } from \"./types.js\";\nimport { PathDataType } from \"./enums.js\";\n\ntype PathBuffer = ExternalObject<Handle>;\ntype Point = { x: number; y: number };\ntype SegmentReader = (data: PathBuffer, base: number) => PathData;\n\nconst ELEMENT_SIZE = 16;\nconst DATA_OFFSET = 8;\nconst NUM_DATA_OFFSET = 16;\n\nconst readPoint = (data: PathBuffer, base: number): Point => ({\n x: read(data, t.float64, base) as number,\n y: read(data, t.float64, base + 8) as number,\n});\n\nconst readMoveTo: SegmentReader = (data, base) => ({ type: \"moveTo\", ...readPoint(data, base + ELEMENT_SIZE) });\nconst readLineTo: SegmentReader = (data, base) => ({ type: \"lineTo\", ...readPoint(data, base + ELEMENT_SIZE) });\n\nconst readCurveTo: SegmentReader = (data, base) => {\n const first = readPoint(data, base + ELEMENT_SIZE);\n const second = readPoint(data, base + ELEMENT_SIZE * 2);\n const third = readPoint(data, base + ELEMENT_SIZE * 3);\n\n return { type: \"curveTo\", x1: first.x, y1: first.y, x2: second.x, y2: second.y, x3: third.x, y3: third.y };\n};\n\nconst readClosePath: SegmentReader = () => ({ type: \"closePath\" });\n\nconst segmentReaderFor = (headerType: PathDataType): SegmentReader | null => {\n switch (headerType) {\n case PathDataType.MOVE_TO: {\n return readMoveTo;\n }\n case PathDataType.LINE_TO: {\n return readLineTo;\n }\n case PathDataType.CURVE_TO: {\n return readCurveTo;\n }\n case PathDataType.CLOSE_PATH: {\n return readClosePath;\n }\n default: {\n return null;\n }\n }\n};\n\nconst parsePath = (pathHandle: PathBuffer): PathData[] => {\n const numData = read(pathHandle, t.int32, NUM_DATA_OFFSET) as number;\n\n if (numData === 0) {\n return [];\n }\n\n const data = read(pathHandle, t.struct(\"borrowed\", { size: numData * ELEMENT_SIZE }), DATA_OFFSET) as PathBuffer;\n const segments: PathData[] = [];\n let index = 0;\n\n while (index < numData) {\n const base = index * ELEMENT_SIZE;\n const reader = segmentReaderFor(read(data, t.int32, base) as PathDataType);\n\n if (reader !== null) {\n segments.push(reader(data, base));\n }\n\n index += read(data, t.int32, base + 4) as number;\n }\n\n return segments;\n};\n\n/**\n * A cairo path (`cairo_path_t`). Instances come from the bindings that hand one back, and the bindings that take\n * one, such as `Gsk.PathBuilder.addCairoPath`, accept it as is.\n */\nabstract class Path {\n /** Reads the segments of the path in drawing order. */\n toData(): PathData[] {\n return parsePath(getHandle(this));\n }\n}\n\nexport { parsePath, Path };\n"]}
@@ -0,0 +1,95 @@
1
+ import type { Surface } from "./surface.js";
2
+ import type { ColorStop, LinearPoints, PathData, Point, RadialCircles, RgbaColor } from "./types.js";
3
+ import { type Extend, type Filter, PatternType, type Status } from "./enums.js";
4
+ import { Matrix } from "./matrix.js";
5
+ /**
6
+ * A cairo pattern (`cairo_pattern_t`): the source a context paints with, such as a solid color, a gradient,
7
+ * a mesh or another surface. Patterns come from the `create*` statics or from a context, and wrap as the
8
+ * concrete class their type reports (`instanceof LinearPattern` for a linear gradient).
9
+ */
10
+ declare abstract class Pattern {
11
+ /** Creates an opaque solid-color pattern. */
12
+ static createRgb(red: number, green: number, blue: number): Pattern;
13
+ /** Creates a translucent solid-color pattern. */
14
+ static createRgba(red: number, green: number, blue: number, alpha: number): Pattern;
15
+ /** Creates a linear gradient between `(x0, y0)` and `(x1, y1)`; add stops with `addColorStopRgba`. */
16
+ static createLinear(x0: number, y0: number, x1: number, y1: number): LinearPattern;
17
+ /** Creates a radial gradient between two circles; add stops with `addColorStopRgba`. */
18
+ static createRadial(cx0: number, cy0: number, radius0: number, cx1: number, cy1: number, radius1: number): RadialPattern;
19
+ /** Creates an empty mesh gradient; describe its patches with the `MeshPattern` methods. */
20
+ static createMesh(): MeshPattern;
21
+ /** Creates a pattern that paints with the content of `surface`. */
22
+ static createForSurface(surface: Surface): Pattern;
23
+ /** GType of `CairoPattern`, the boxed type this class is registered under. */
24
+ __type__: bigint;
25
+ /** Adds an opaque color stop at `offset` (0 to 1) to a gradient pattern. */
26
+ addColorStopRgb(offset: number, red: number, green: number, blue: number): void;
27
+ /** Adds a translucent color stop at `offset` (0 to 1) to a gradient pattern. */
28
+ addColorStopRgba(offset: number, red: number, green: number, blue: number, alpha: number): void;
29
+ /** Returns how many color stops a gradient pattern has. */
30
+ getColorStopCount(): number;
31
+ /** Returns the color stop at `index` of a gradient pattern. */
32
+ getColorStopRgba(index: number): ColorStop;
33
+ /** Returns the color of a solid pattern. */
34
+ getRgba(): RgbaColor;
35
+ /** Returns the error status of the pattern, `Status.SUCCESS` when it is usable. */
36
+ status(): Status;
37
+ /** Sets how the pattern is extended outside its natural area. */
38
+ setExtend(extend: Extend): void;
39
+ /** Returns how the pattern is extended outside its natural area. */
40
+ getExtend(): Extend;
41
+ /** Sets the filter used when the pattern is resampled. */
42
+ setFilter(filter: Filter): void;
43
+ /** Returns the filter used when the pattern is resampled. */
44
+ getFilter(): Filter;
45
+ /** Sets the transformation from user space to pattern space. */
46
+ setMatrix(matrix: Matrix): void;
47
+ /** Returns the transformation from user space to pattern space. */
48
+ getMatrix(): Matrix;
49
+ /** Returns the kind of pattern this is. */
50
+ getType(): PatternType;
51
+ /** Returns the reference count of the pattern. */
52
+ getReferenceCount(): number;
53
+ }
54
+ /** A linear gradient pattern, created with `Pattern.createLinear`. */
55
+ declare class LinearPattern extends Pattern {
56
+ /** Returns the two end points of the gradient. */
57
+ getLinearPoints(): LinearPoints;
58
+ }
59
+ /** A radial gradient pattern, created with `Pattern.createRadial`. */
60
+ declare class RadialPattern extends Pattern {
61
+ /** Returns the two circles of the gradient. */
62
+ getRadialCircles(): RadialCircles;
63
+ }
64
+ /**
65
+ * A mesh gradient pattern, created with `Pattern.createMesh`: a set of Coons patches, each described between
66
+ * `beginPatch` and `endPatch` by a path of up to four sides and the colors of its corners.
67
+ */
68
+ declare class MeshPattern extends Pattern {
69
+ /** Starts describing a new patch. */
70
+ beginPatch(): void;
71
+ /** Finishes the patch being described. */
72
+ endPatch(): void;
73
+ /** Sets the first corner of the patch being described. */
74
+ moveTo(x: number, y: number): void;
75
+ /** Adds a straight side from the previous corner to `(x, y)`. */
76
+ lineTo(x: number, y: number): void;
77
+ /** Adds a curved side from the previous corner through two control points to `(x3, y3)`. */
78
+ curveTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): void;
79
+ /** Sets an interior control point (0 to 3) of the patch being described. */
80
+ setControlPoint(pointNum: number, x: number, y: number): void;
81
+ /** Sets the opaque color of a corner (0 to 3) of the patch being described. */
82
+ setCornerColorRgb(cornerNum: number, red: number, green: number, blue: number): void;
83
+ /** Sets the translucent color of a corner (0 to 3) of the patch being described. */
84
+ setCornerColorRgba(cornerNum: number, red: number, green: number, blue: number, alpha: number): void;
85
+ /** Returns how many patches have been finished. */
86
+ getPatchCount(): number;
87
+ /** Returns the path around patch `patchNum`. */
88
+ getPath(patchNum: number): PathData[];
89
+ /** Returns control point `pointNum` of patch `patchNum`. */
90
+ getControlPoint(patchNum: number, pointNum: number): Point;
91
+ /** Returns the color of corner `cornerNum` of patch `patchNum`. */
92
+ getCornerColorRgba(patchNum: number, cornerNum: number): RgbaColor;
93
+ }
94
+ export { LinearPattern, MeshPattern, Pattern, RadialPattern };
95
+ //# sourceMappingURL=pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ import { getHandle, registerWrapperClass, registerWrapperClassResolver, t, wrapHandle, } from "@gtkx/runtime";
2
+ import { PatternType } from "./enums.js";
3
+ import { bindCairo, cairoGType, MATRIX_T, PATH_T, PATTERN_FULL_T, PATTERN_T, SURFACE_T, } from "./lib.js";
4
+ import { allocMatrix, Matrix } from "./matrix.js";
5
+ import { parsePath } from "./path.js";
6
+ const PATTERN_TYPE = cairoGType("cairo_gobject_pattern_get_type");
7
+ const FOUR_DOUBLES_OUT = [t.ref(t.float64), t.ref(t.float64), t.ref(t.float64), t.ref(t.float64)];
8
+ const POINT_ARGS = [PATTERN_T, t.float64, t.float64];
9
+ const cairoPatternCreateRgb = bindCairo("cairo_pattern_create_rgb", [t.float64, t.float64, t.float64], PATTERN_FULL_T);
10
+ const cairoPatternCreateRgba = bindCairo("cairo_pattern_create_rgba", [t.float64, t.float64, t.float64, t.float64], PATTERN_FULL_T);
11
+ const cairoPatternCreateLinear = bindCairo("cairo_pattern_create_linear", [t.float64, t.float64, t.float64, t.float64], PATTERN_FULL_T);
12
+ const cairoPatternCreateRadial = bindCairo("cairo_pattern_create_radial", [t.float64, t.float64, t.float64, t.float64, t.float64, t.float64], PATTERN_FULL_T);
13
+ const cairoPatternCreateMesh = bindCairo("cairo_pattern_create_mesh", [], PATTERN_FULL_T);
14
+ const cairoPatternCreateForSurface = bindCairo("cairo_pattern_create_for_surface", [SURFACE_T], PATTERN_FULL_T);
15
+ const cairoPatternAddColorStopRgb = bindCairo("cairo_pattern_add_color_stop_rgb", [PATTERN_T, t.float64, t.float64, t.float64, t.float64], t.void);
16
+ const cairoPatternAddColorStopRgba = bindCairo("cairo_pattern_add_color_stop_rgba", [PATTERN_T, t.float64, t.float64, t.float64, t.float64, t.float64], t.void);
17
+ const cairoPatternGetColorStopCount = bindCairo("cairo_pattern_get_color_stop_count", [PATTERN_T, t.ref(t.int32)], t.int32);
18
+ const cairoPatternGetColorStopRgba = bindCairo("cairo_pattern_get_color_stop_rgba", [PATTERN_T, t.int32, t.ref(t.float64), ...FOUR_DOUBLES_OUT], t.int32);
19
+ const cairoPatternGetRgba = bindCairo("cairo_pattern_get_rgba", [PATTERN_T, ...FOUR_DOUBLES_OUT], t.int32);
20
+ const cairoPatternStatus = bindCairo("cairo_pattern_status", [PATTERN_T], t.int32);
21
+ const cairoPatternSetExtend = bindCairo("cairo_pattern_set_extend", [PATTERN_T, t.int32], t.void);
22
+ const cairoPatternGetExtend = bindCairo("cairo_pattern_get_extend", [PATTERN_T], t.int32);
23
+ const cairoPatternSetFilter = bindCairo("cairo_pattern_set_filter", [PATTERN_T, t.int32], t.void);
24
+ const cairoPatternGetFilter = bindCairo("cairo_pattern_get_filter", [PATTERN_T], t.int32);
25
+ const cairoPatternSetMatrix = bindCairo("cairo_pattern_set_matrix", [PATTERN_T, MATRIX_T], t.void);
26
+ const cairoPatternGetMatrix = bindCairo("cairo_pattern_get_matrix", [PATTERN_T, MATRIX_T], t.void);
27
+ const cairoPatternGetType = bindCairo("cairo_pattern_get_type", [PATTERN_T], t.int32);
28
+ const cairoPatternGetReferenceCount = bindCairo("cairo_pattern_get_reference_count", [PATTERN_T], t.int32);
29
+ const cairoPatternGetLinearPoints = bindCairo("cairo_pattern_get_linear_points", [PATTERN_T, ...FOUR_DOUBLES_OUT], t.int32);
30
+ const cairoPatternGetRadialCircles = bindCairo("cairo_pattern_get_radial_circles", [PATTERN_T, ...FOUR_DOUBLES_OUT, t.ref(t.float64), t.ref(t.float64)], t.int32);
31
+ const cairoMeshPatternBeginPatch = bindCairo("cairo_mesh_pattern_begin_patch", [PATTERN_T], t.void);
32
+ const cairoMeshPatternEndPatch = bindCairo("cairo_mesh_pattern_end_patch", [PATTERN_T], t.void);
33
+ const cairoMeshPatternMoveTo = bindCairo("cairo_mesh_pattern_move_to", POINT_ARGS, t.void);
34
+ const cairoMeshPatternLineTo = bindCairo("cairo_mesh_pattern_line_to", POINT_ARGS, t.void);
35
+ const cairoMeshPatternCurveTo = bindCairo("cairo_mesh_pattern_curve_to", [PATTERN_T, t.float64, t.float64, t.float64, t.float64, t.float64, t.float64], t.void);
36
+ const cairoMeshPatternSetControlPoint = bindCairo("cairo_mesh_pattern_set_control_point", [PATTERN_T, t.int32, t.float64, t.float64], t.void);
37
+ const cairoMeshPatternSetCornerColorRgb = bindCairo("cairo_mesh_pattern_set_corner_color_rgb", [PATTERN_T, t.int32, t.float64, t.float64, t.float64], t.void);
38
+ const cairoMeshPatternSetCornerColorRgba = bindCairo("cairo_mesh_pattern_set_corner_color_rgba", [PATTERN_T, t.int32, t.float64, t.float64, t.float64, t.float64], t.void);
39
+ const cairoMeshPatternGetPatchCount = bindCairo("cairo_mesh_pattern_get_patch_count", [PATTERN_T, t.ref(t.int32)], t.int32);
40
+ const cairoMeshPatternGetPath = bindCairo("cairo_mesh_pattern_get_path", [PATTERN_T, t.int32], PATH_T);
41
+ const cairoMeshPatternGetControlPoint = bindCairo("cairo_mesh_pattern_get_control_point", [PATTERN_T, t.int32, t.int32, t.ref(t.float64), t.ref(t.float64)], t.int32);
42
+ const cairoMeshPatternGetCornerColorRgba = bindCairo("cairo_mesh_pattern_get_corner_color_rgba", [PATTERN_T, t.int32, t.int32, ...FOUR_DOUBLES_OUT], t.int32);
43
+ const wrapPattern = (handle) => wrapHandle(handle, Pattern);
44
+ const readRgba = (fill) => {
45
+ const red = { value: 0 };
46
+ const green = { value: 0 };
47
+ const blue = { value: 0 };
48
+ const alpha = { value: 0 };
49
+ fill(red, green, blue, alpha);
50
+ return { red: red.value, green: green.value, blue: blue.value, alpha: alpha.value };
51
+ };
52
+ const readCount = (boundFn, self) => {
53
+ const count = { value: 0 };
54
+ boundFn(getHandle(self), count);
55
+ return count.value;
56
+ };
57
+ const patternClassFor = (handle) => {
58
+ const type = cairoPatternGetType(handle);
59
+ if (type === PatternType.LINEAR) {
60
+ return LinearPattern;
61
+ }
62
+ if (type === PatternType.RADIAL) {
63
+ return RadialPattern;
64
+ }
65
+ if (type === PatternType.MESH) {
66
+ return MeshPattern;
67
+ }
68
+ return Pattern;
69
+ };
70
+ /**
71
+ * A cairo pattern (`cairo_pattern_t`): the source a context paints with, such as a solid color, a gradient,
72
+ * a mesh or another surface. Patterns come from the `create*` statics or from a context, and wrap as the
73
+ * concrete class their type reports (`instanceof LinearPattern` for a linear gradient).
74
+ */
75
+ class Pattern {
76
+ static {
77
+ registerWrapperClass(this, PATTERN_TYPE);
78
+ registerWrapperClassResolver(this, patternClassFor);
79
+ }
80
+ /** Creates an opaque solid-color pattern. */
81
+ static createRgb(red, green, blue) {
82
+ return wrapPattern(cairoPatternCreateRgb(red, green, blue));
83
+ }
84
+ /** Creates a translucent solid-color pattern. */
85
+ static createRgba(red, green, blue, alpha) {
86
+ return wrapPattern(cairoPatternCreateRgba(red, green, blue, alpha));
87
+ }
88
+ /** Creates a linear gradient between `(x0, y0)` and `(x1, y1)`; add stops with `addColorStopRgba`. */
89
+ static createLinear(x0, y0, x1, y1) {
90
+ return wrapHandle(cairoPatternCreateLinear(x0, y0, x1, y1), LinearPattern);
91
+ }
92
+ /** Creates a radial gradient between two circles; add stops with `addColorStopRgba`. */
93
+ static createRadial(cx0, cy0, radius0, cx1, cy1, radius1) {
94
+ const handle = cairoPatternCreateRadial(cx0, cy0, radius0, cx1, cy1, radius1);
95
+ return wrapHandle(handle, RadialPattern);
96
+ }
97
+ /** Creates an empty mesh gradient; describe its patches with the `MeshPattern` methods. */
98
+ static createMesh() {
99
+ return wrapHandle(cairoPatternCreateMesh(), MeshPattern);
100
+ }
101
+ /** Creates a pattern that paints with the content of `surface`. */
102
+ static createForSurface(surface) {
103
+ return wrapPattern(cairoPatternCreateForSurface(getHandle(surface)));
104
+ }
105
+ /** Adds an opaque color stop at `offset` (0 to 1) to a gradient pattern. */
106
+ addColorStopRgb(offset, red, green, blue) {
107
+ cairoPatternAddColorStopRgb(getHandle(this), offset, red, green, blue);
108
+ }
109
+ /** Adds a translucent color stop at `offset` (0 to 1) to a gradient pattern. */
110
+ addColorStopRgba(offset, red, green, blue, alpha) {
111
+ cairoPatternAddColorStopRgba(getHandle(this), offset, red, green, blue, alpha);
112
+ }
113
+ /** Returns how many color stops a gradient pattern has. */
114
+ getColorStopCount() {
115
+ return readCount(cairoPatternGetColorStopCount, this);
116
+ }
117
+ /** Returns the color stop at `index` of a gradient pattern. */
118
+ getColorStopRgba(index) {
119
+ const offset = { value: 0 };
120
+ const color = readRgba((...refs) => cairoPatternGetColorStopRgba(getHandle(this), index, offset, ...refs));
121
+ return { offset: offset.value, ...color };
122
+ }
123
+ /** Returns the color of a solid pattern. */
124
+ getRgba() {
125
+ return readRgba((...refs) => cairoPatternGetRgba(getHandle(this), ...refs));
126
+ }
127
+ /** Returns the error status of the pattern, `Status.SUCCESS` when it is usable. */
128
+ status() {
129
+ return cairoPatternStatus(getHandle(this));
130
+ }
131
+ /** Sets how the pattern is extended outside its natural area. */
132
+ setExtend(extend) {
133
+ cairoPatternSetExtend(getHandle(this), extend);
134
+ }
135
+ /** Returns how the pattern is extended outside its natural area. */
136
+ getExtend() {
137
+ return cairoPatternGetExtend(getHandle(this));
138
+ }
139
+ /** Sets the filter used when the pattern is resampled. */
140
+ setFilter(filter) {
141
+ cairoPatternSetFilter(getHandle(this), filter);
142
+ }
143
+ /** Returns the filter used when the pattern is resampled. */
144
+ getFilter() {
145
+ return cairoPatternGetFilter(getHandle(this));
146
+ }
147
+ /** Sets the transformation from user space to pattern space. */
148
+ setMatrix(matrix) {
149
+ cairoPatternSetMatrix(getHandle(this), getHandle(matrix));
150
+ }
151
+ /** Returns the transformation from user space to pattern space. */
152
+ getMatrix() {
153
+ const { handle, matrix } = allocMatrix();
154
+ cairoPatternGetMatrix(getHandle(this), handle);
155
+ return matrix;
156
+ }
157
+ /** Returns the kind of pattern this is. */
158
+ getType() {
159
+ return cairoPatternGetType(getHandle(this));
160
+ }
161
+ /** Returns the reference count of the pattern. */
162
+ getReferenceCount() {
163
+ return cairoPatternGetReferenceCount(getHandle(this));
164
+ }
165
+ }
166
+ /** A linear gradient pattern, created with `Pattern.createLinear`. */
167
+ class LinearPattern extends Pattern {
168
+ /** Returns the two end points of the gradient. */
169
+ getLinearPoints() {
170
+ const x0 = { value: 0 };
171
+ const y0 = { value: 0 };
172
+ const x1 = { value: 0 };
173
+ const y1 = { value: 0 };
174
+ cairoPatternGetLinearPoints(getHandle(this), x0, y0, x1, y1);
175
+ return { x0: x0.value, y0: y0.value, x1: x1.value, y1: y1.value };
176
+ }
177
+ }
178
+ /** A radial gradient pattern, created with `Pattern.createRadial`. */
179
+ class RadialPattern extends Pattern {
180
+ /** Returns the two circles of the gradient. */
181
+ getRadialCircles() {
182
+ const x0 = { value: 0 };
183
+ const y0 = { value: 0 };
184
+ const r0 = { value: 0 };
185
+ const x1 = { value: 0 };
186
+ const y1 = { value: 0 };
187
+ const r1 = { value: 0 };
188
+ cairoPatternGetRadialCircles(getHandle(this), x0, y0, r0, x1, y1, r1);
189
+ return { x0: x0.value, y0: y0.value, r0: r0.value, x1: x1.value, y1: y1.value, r1: r1.value };
190
+ }
191
+ }
192
+ /**
193
+ * A mesh gradient pattern, created with `Pattern.createMesh`: a set of Coons patches, each described between
194
+ * `beginPatch` and `endPatch` by a path of up to four sides and the colors of its corners.
195
+ */
196
+ class MeshPattern extends Pattern {
197
+ /** Starts describing a new patch. */
198
+ beginPatch() {
199
+ cairoMeshPatternBeginPatch(getHandle(this));
200
+ }
201
+ /** Finishes the patch being described. */
202
+ endPatch() {
203
+ cairoMeshPatternEndPatch(getHandle(this));
204
+ }
205
+ /** Sets the first corner of the patch being described. */
206
+ moveTo(x, y) {
207
+ cairoMeshPatternMoveTo(getHandle(this), x, y);
208
+ }
209
+ /** Adds a straight side from the previous corner to `(x, y)`. */
210
+ lineTo(x, y) {
211
+ cairoMeshPatternLineTo(getHandle(this), x, y);
212
+ }
213
+ /** Adds a curved side from the previous corner through two control points to `(x3, y3)`. */
214
+ curveTo(x1, y1, x2, y2, x3, y3) {
215
+ cairoMeshPatternCurveTo(getHandle(this), x1, y1, x2, y2, x3, y3);
216
+ }
217
+ /** Sets an interior control point (0 to 3) of the patch being described. */
218
+ setControlPoint(pointNum, x, y) {
219
+ cairoMeshPatternSetControlPoint(getHandle(this), pointNum, x, y);
220
+ }
221
+ /** Sets the opaque color of a corner (0 to 3) of the patch being described. */
222
+ setCornerColorRgb(cornerNum, red, green, blue) {
223
+ cairoMeshPatternSetCornerColorRgb(getHandle(this), cornerNum, red, green, blue);
224
+ }
225
+ /** Sets the translucent color of a corner (0 to 3) of the patch being described. */
226
+ setCornerColorRgba(cornerNum, red, green, blue, alpha) {
227
+ cairoMeshPatternSetCornerColorRgba(getHandle(this), cornerNum, red, green, blue, alpha);
228
+ }
229
+ /** Returns how many patches have been finished. */
230
+ getPatchCount() {
231
+ return readCount(cairoMeshPatternGetPatchCount, this);
232
+ }
233
+ /** Returns the path around patch `patchNum`. */
234
+ getPath(patchNum) {
235
+ return parsePath(cairoMeshPatternGetPath(getHandle(this), patchNum));
236
+ }
237
+ /** Returns control point `pointNum` of patch `patchNum`. */
238
+ getControlPoint(patchNum, pointNum) {
239
+ const x = { value: 0 };
240
+ const y = { value: 0 };
241
+ cairoMeshPatternGetControlPoint(getHandle(this), patchNum, pointNum, x, y);
242
+ return { x: x.value, y: y.value };
243
+ }
244
+ /** Returns the color of corner `cornerNum` of patch `patchNum`. */
245
+ getCornerColorRgba(patchNum, cornerNum) {
246
+ return readRgba((...refs) => cairoMeshPatternGetCornerColorRgba(getHandle(this), patchNum, cornerNum, ...refs));
247
+ }
248
+ }
249
+ export { LinearPattern, MeshPattern, Pattern, RadialPattern };
250
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ExternalObject,\n getHandle,\n type Handle,\n registerWrapperClass,\n registerWrapperClassResolver,\n t,\n wrapHandle,\n type WrapperClassResolver,\n} from \"@gtkx/runtime\";\nimport type { Surface } from \"./surface.js\";\nimport type { ColorStop, LinearPoints, PathData, Point, RadialCircles, RgbaColor } from \"./types.js\";\nimport { type Extend, type Filter, PatternType, type Status } from \"./enums.js\";\nimport {\n bindCairo,\n type BoundFunction,\n cairoGType,\n MATRIX_T,\n PATH_T,\n PATTERN_FULL_T,\n PATTERN_T,\n SURFACE_T,\n} from \"./lib.js\";\nimport { allocMatrix, Matrix } from \"./matrix.js\";\nimport { parsePath } from \"./path.js\";\n\ntype RgbaRefs = [\n red: { value: number },\n green: { value: number },\n blue: { value: number },\n alpha: { value: number },\n];\n\nconst PATTERN_TYPE = cairoGType(\"cairo_gobject_pattern_get_type\");\nconst FOUR_DOUBLES_OUT = [t.ref(t.float64), t.ref(t.float64), t.ref(t.float64), t.ref(t.float64)];\nconst POINT_ARGS = [PATTERN_T, t.float64, t.float64];\nconst cairoPatternCreateRgb = bindCairo(\"cairo_pattern_create_rgb\", [t.float64, t.float64, t.float64], PATTERN_FULL_T);\n\nconst cairoPatternCreateRgba = bindCairo(\n \"cairo_pattern_create_rgba\",\n [t.float64, t.float64, t.float64, t.float64],\n PATTERN_FULL_T,\n);\n\nconst cairoPatternCreateLinear = bindCairo(\n \"cairo_pattern_create_linear\",\n [t.float64, t.float64, t.float64, t.float64],\n PATTERN_FULL_T,\n);\n\nconst cairoPatternCreateRadial = bindCairo(\n \"cairo_pattern_create_radial\",\n [t.float64, t.float64, t.float64, t.float64, t.float64, t.float64],\n PATTERN_FULL_T,\n);\n\nconst cairoPatternCreateMesh = bindCairo(\"cairo_pattern_create_mesh\", [], PATTERN_FULL_T);\nconst cairoPatternCreateForSurface = bindCairo(\"cairo_pattern_create_for_surface\", [SURFACE_T], PATTERN_FULL_T);\n\nconst cairoPatternAddColorStopRgb = bindCairo(\n \"cairo_pattern_add_color_stop_rgb\",\n [PATTERN_T, t.float64, t.float64, t.float64, t.float64],\n t.void,\n);\n\nconst cairoPatternAddColorStopRgba = bindCairo(\n \"cairo_pattern_add_color_stop_rgba\",\n [PATTERN_T, t.float64, t.float64, t.float64, t.float64, t.float64],\n t.void,\n);\n\nconst cairoPatternGetColorStopCount = bindCairo(\n \"cairo_pattern_get_color_stop_count\",\n [PATTERN_T, t.ref(t.int32)],\n t.int32,\n);\n\nconst cairoPatternGetColorStopRgba = bindCairo(\n \"cairo_pattern_get_color_stop_rgba\",\n [PATTERN_T, t.int32, t.ref(t.float64), ...FOUR_DOUBLES_OUT],\n t.int32,\n);\n\nconst cairoPatternGetRgba = bindCairo(\"cairo_pattern_get_rgba\", [PATTERN_T, ...FOUR_DOUBLES_OUT], t.int32);\nconst cairoPatternStatus = bindCairo(\"cairo_pattern_status\", [PATTERN_T], t.int32);\nconst cairoPatternSetExtend = bindCairo(\"cairo_pattern_set_extend\", [PATTERN_T, t.int32], t.void);\nconst cairoPatternGetExtend = bindCairo(\"cairo_pattern_get_extend\", [PATTERN_T], t.int32);\nconst cairoPatternSetFilter = bindCairo(\"cairo_pattern_set_filter\", [PATTERN_T, t.int32], t.void);\nconst cairoPatternGetFilter = bindCairo(\"cairo_pattern_get_filter\", [PATTERN_T], t.int32);\nconst cairoPatternSetMatrix = bindCairo(\"cairo_pattern_set_matrix\", [PATTERN_T, MATRIX_T], t.void);\nconst cairoPatternGetMatrix = bindCairo(\"cairo_pattern_get_matrix\", [PATTERN_T, MATRIX_T], t.void);\nconst cairoPatternGetType = bindCairo(\"cairo_pattern_get_type\", [PATTERN_T], t.int32);\nconst cairoPatternGetReferenceCount = bindCairo(\"cairo_pattern_get_reference_count\", [PATTERN_T], t.int32);\n\nconst cairoPatternGetLinearPoints = bindCairo(\n \"cairo_pattern_get_linear_points\",\n [PATTERN_T, ...FOUR_DOUBLES_OUT],\n t.int32,\n);\n\nconst cairoPatternGetRadialCircles = bindCairo(\n \"cairo_pattern_get_radial_circles\",\n [PATTERN_T, ...FOUR_DOUBLES_OUT, t.ref(t.float64), t.ref(t.float64)],\n t.int32,\n);\n\nconst cairoMeshPatternBeginPatch = bindCairo(\"cairo_mesh_pattern_begin_patch\", [PATTERN_T], t.void);\nconst cairoMeshPatternEndPatch = bindCairo(\"cairo_mesh_pattern_end_patch\", [PATTERN_T], t.void);\nconst cairoMeshPatternMoveTo = bindCairo(\"cairo_mesh_pattern_move_to\", POINT_ARGS, t.void);\nconst cairoMeshPatternLineTo = bindCairo(\"cairo_mesh_pattern_line_to\", POINT_ARGS, t.void);\n\nconst cairoMeshPatternCurveTo = bindCairo(\n \"cairo_mesh_pattern_curve_to\",\n [PATTERN_T, t.float64, t.float64, t.float64, t.float64, t.float64, t.float64],\n t.void,\n);\n\nconst cairoMeshPatternSetControlPoint = bindCairo(\n \"cairo_mesh_pattern_set_control_point\",\n [PATTERN_T, t.int32, t.float64, t.float64],\n t.void,\n);\n\nconst cairoMeshPatternSetCornerColorRgb = bindCairo(\n \"cairo_mesh_pattern_set_corner_color_rgb\",\n [PATTERN_T, t.int32, t.float64, t.float64, t.float64],\n t.void,\n);\n\nconst cairoMeshPatternSetCornerColorRgba = bindCairo(\n \"cairo_mesh_pattern_set_corner_color_rgba\",\n [PATTERN_T, t.int32, t.float64, t.float64, t.float64, t.float64],\n t.void,\n);\n\nconst cairoMeshPatternGetPatchCount = bindCairo(\n \"cairo_mesh_pattern_get_patch_count\",\n [PATTERN_T, t.ref(t.int32)],\n t.int32,\n);\n\nconst cairoMeshPatternGetPath = bindCairo(\"cairo_mesh_pattern_get_path\", [PATTERN_T, t.int32], PATH_T);\n\nconst cairoMeshPatternGetControlPoint = bindCairo(\n \"cairo_mesh_pattern_get_control_point\",\n [PATTERN_T, t.int32, t.int32, t.ref(t.float64), t.ref(t.float64)],\n t.int32,\n);\n\nconst cairoMeshPatternGetCornerColorRgba = bindCairo(\n \"cairo_mesh_pattern_get_corner_color_rgba\",\n [PATTERN_T, t.int32, t.int32, ...FOUR_DOUBLES_OUT],\n t.int32,\n);\n\nconst wrapPattern = (handle: unknown): Pattern => wrapHandle(handle as ExternalObject<Handle>, Pattern);\n\nconst readRgba = (fill: (...refs: RgbaRefs) => void): RgbaColor => {\n const red = { value: 0 };\n const green = { value: 0 };\n const blue = { value: 0 };\n const alpha = { value: 0 };\n fill(red, green, blue, alpha);\n\n return { red: red.value, green: green.value, blue: blue.value, alpha: alpha.value };\n};\n\nconst readCount = (boundFn: BoundFunction, self: object): number => {\n const count = { value: 0 };\n boundFn(getHandle(self), count);\n\n return count.value;\n};\n\nconst patternClassFor: WrapperClassResolver = (handle) => {\n const type = cairoPatternGetType(handle) as PatternType;\n\n if (type === PatternType.LINEAR) {\n return LinearPattern;\n }\n\n if (type === PatternType.RADIAL) {\n return RadialPattern;\n }\n\n if (type === PatternType.MESH) {\n return MeshPattern;\n }\n\n return Pattern;\n};\n\n/**\n * A cairo pattern (`cairo_pattern_t`): the source a context paints with, such as a solid color, a gradient,\n * a mesh or another surface. Patterns come from the `create*` statics or from a context, and wrap as the\n * concrete class their type reports (`instanceof LinearPattern` for a linear gradient).\n */\nabstract class Pattern {\n static {\n registerWrapperClass(this, PATTERN_TYPE);\n registerWrapperClassResolver(this, patternClassFor);\n }\n\n /** Creates an opaque solid-color pattern. */\n static createRgb(red: number, green: number, blue: number): Pattern {\n return wrapPattern(cairoPatternCreateRgb(red, green, blue));\n }\n\n /** Creates a translucent solid-color pattern. */\n static createRgba(red: number, green: number, blue: number, alpha: number): Pattern {\n return wrapPattern(cairoPatternCreateRgba(red, green, blue, alpha));\n }\n\n /** Creates a linear gradient between `(x0, y0)` and `(x1, y1)`; add stops with `addColorStopRgba`. */\n static createLinear(x0: number, y0: number, x1: number, y1: number): LinearPattern {\n return wrapHandle(cairoPatternCreateLinear(x0, y0, x1, y1) as ExternalObject<Handle>, LinearPattern);\n }\n\n /** Creates a radial gradient between two circles; add stops with `addColorStopRgba`. */\n static createRadial(\n cx0: number,\n cy0: number,\n radius0: number,\n cx1: number,\n cy1: number,\n radius1: number,\n ): RadialPattern {\n const handle = cairoPatternCreateRadial(cx0, cy0, radius0, cx1, cy1, radius1) as ExternalObject<Handle>;\n\n return wrapHandle(handle, RadialPattern);\n }\n\n /** Creates an empty mesh gradient; describe its patches with the `MeshPattern` methods. */\n static createMesh(): MeshPattern {\n return wrapHandle(cairoPatternCreateMesh() as ExternalObject<Handle>, MeshPattern);\n }\n\n /** Creates a pattern that paints with the content of `surface`. */\n static createForSurface(surface: Surface): Pattern {\n return wrapPattern(cairoPatternCreateForSurface(getHandle(surface)));\n }\n\n /** GType of `CairoPattern`, the boxed type this class is registered under. */\n declare __type__: bigint;\n\n /** Adds an opaque color stop at `offset` (0 to 1) to a gradient pattern. */\n addColorStopRgb(offset: number, red: number, green: number, blue: number): void {\n cairoPatternAddColorStopRgb(getHandle(this), offset, red, green, blue);\n }\n\n /** Adds a translucent color stop at `offset` (0 to 1) to a gradient pattern. */\n addColorStopRgba(offset: number, red: number, green: number, blue: number, alpha: number): void {\n cairoPatternAddColorStopRgba(getHandle(this), offset, red, green, blue, alpha);\n }\n\n /** Returns how many color stops a gradient pattern has. */\n getColorStopCount(): number {\n return readCount(cairoPatternGetColorStopCount, this);\n }\n\n /** Returns the color stop at `index` of a gradient pattern. */\n getColorStopRgba(index: number): ColorStop {\n const offset = { value: 0 };\n const color = readRgba((...refs) => cairoPatternGetColorStopRgba(getHandle(this), index, offset, ...refs));\n\n return { offset: offset.value, ...color };\n }\n\n /** Returns the color of a solid pattern. */\n getRgba(): RgbaColor {\n return readRgba((...refs) => cairoPatternGetRgba(getHandle(this), ...refs));\n }\n\n /** Returns the error status of the pattern, `Status.SUCCESS` when it is usable. */\n status(): Status {\n return cairoPatternStatus(getHandle(this)) as Status;\n }\n\n /** Sets how the pattern is extended outside its natural area. */\n setExtend(extend: Extend): void {\n cairoPatternSetExtend(getHandle(this), extend);\n }\n\n /** Returns how the pattern is extended outside its natural area. */\n getExtend(): Extend {\n return cairoPatternGetExtend(getHandle(this)) as Extend;\n }\n\n /** Sets the filter used when the pattern is resampled. */\n setFilter(filter: Filter): void {\n cairoPatternSetFilter(getHandle(this), filter);\n }\n\n /** Returns the filter used when the pattern is resampled. */\n getFilter(): Filter {\n return cairoPatternGetFilter(getHandle(this)) as Filter;\n }\n\n /** Sets the transformation from user space to pattern space. */\n setMatrix(matrix: Matrix): void {\n cairoPatternSetMatrix(getHandle(this), getHandle(matrix));\n }\n\n /** Returns the transformation from user space to pattern space. */\n getMatrix(): Matrix {\n const { handle, matrix } = allocMatrix();\n cairoPatternGetMatrix(getHandle(this), handle);\n\n return matrix;\n }\n\n /** Returns the kind of pattern this is. */\n getType(): PatternType {\n return cairoPatternGetType(getHandle(this)) as PatternType;\n }\n\n /** Returns the reference count of the pattern. */\n getReferenceCount(): number {\n return cairoPatternGetReferenceCount(getHandle(this)) as number;\n }\n}\n\n/** A linear gradient pattern, created with `Pattern.createLinear`. */\nclass LinearPattern extends Pattern {\n /** Returns the two end points of the gradient. */\n getLinearPoints(): LinearPoints {\n const x0 = { value: 0 };\n const y0 = { value: 0 };\n const x1 = { value: 0 };\n const y1 = { value: 0 };\n cairoPatternGetLinearPoints(getHandle(this), x0, y0, x1, y1);\n\n return { x0: x0.value, y0: y0.value, x1: x1.value, y1: y1.value };\n }\n}\n\n/** A radial gradient pattern, created with `Pattern.createRadial`. */\nclass RadialPattern extends Pattern {\n /** Returns the two circles of the gradient. */\n getRadialCircles(): RadialCircles {\n const x0 = { value: 0 };\n const y0 = { value: 0 };\n const r0 = { value: 0 };\n const x1 = { value: 0 };\n const y1 = { value: 0 };\n const r1 = { value: 0 };\n cairoPatternGetRadialCircles(getHandle(this), x0, y0, r0, x1, y1, r1);\n\n return { x0: x0.value, y0: y0.value, r0: r0.value, x1: x1.value, y1: y1.value, r1: r1.value };\n }\n}\n\n/**\n * A mesh gradient pattern, created with `Pattern.createMesh`: a set of Coons patches, each described between\n * `beginPatch` and `endPatch` by a path of up to four sides and the colors of its corners.\n */\nclass MeshPattern extends Pattern {\n /** Starts describing a new patch. */\n beginPatch(): void {\n cairoMeshPatternBeginPatch(getHandle(this));\n }\n\n /** Finishes the patch being described. */\n endPatch(): void {\n cairoMeshPatternEndPatch(getHandle(this));\n }\n\n /** Sets the first corner of the patch being described. */\n moveTo(x: number, y: number): void {\n cairoMeshPatternMoveTo(getHandle(this), x, y);\n }\n\n /** Adds a straight side from the previous corner to `(x, y)`. */\n lineTo(x: number, y: number): void {\n cairoMeshPatternLineTo(getHandle(this), x, y);\n }\n\n /** Adds a curved side from the previous corner through two control points to `(x3, y3)`. */\n curveTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): void {\n cairoMeshPatternCurveTo(getHandle(this), x1, y1, x2, y2, x3, y3);\n }\n\n /** Sets an interior control point (0 to 3) of the patch being described. */\n setControlPoint(pointNum: number, x: number, y: number): void {\n cairoMeshPatternSetControlPoint(getHandle(this), pointNum, x, y);\n }\n\n /** Sets the opaque color of a corner (0 to 3) of the patch being described. */\n setCornerColorRgb(cornerNum: number, red: number, green: number, blue: number): void {\n cairoMeshPatternSetCornerColorRgb(getHandle(this), cornerNum, red, green, blue);\n }\n\n /** Sets the translucent color of a corner (0 to 3) of the patch being described. */\n setCornerColorRgba(cornerNum: number, red: number, green: number, blue: number, alpha: number): void {\n cairoMeshPatternSetCornerColorRgba(getHandle(this), cornerNum, red, green, blue, alpha);\n }\n\n /** Returns how many patches have been finished. */\n getPatchCount(): number {\n return readCount(cairoMeshPatternGetPatchCount, this);\n }\n\n /** Returns the path around patch `patchNum`. */\n getPath(patchNum: number): PathData[] {\n return parsePath(cairoMeshPatternGetPath(getHandle(this), patchNum) as ExternalObject<Handle>);\n }\n\n /** Returns control point `pointNum` of patch `patchNum`. */\n getControlPoint(patchNum: number, pointNum: number): Point {\n const x = { value: 0 };\n const y = { value: 0 };\n cairoMeshPatternGetControlPoint(getHandle(this), patchNum, pointNum, x, y);\n\n return { x: x.value, y: y.value };\n }\n\n /** Returns the color of corner `cornerNum` of patch `patchNum`. */\n getCornerColorRgba(patchNum: number, cornerNum: number): RgbaColor {\n return readRgba((...refs) => cairoMeshPatternGetCornerColorRgba(getHandle(this), patchNum, cornerNum, ...refs));\n }\n}\n\nexport { LinearPattern, MeshPattern, Pattern, RadialPattern };\n"]}