@gjsify/node-gi 0.13.0 → 0.20.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/binding.gyp CHANGED
@@ -3,32 +3,68 @@
3
3
  {
4
4
  "target_name": "node_gi",
5
5
  "sources": [
6
- "src/addon.cc"
6
+ "src/addon.cc",
7
+ "src/cairo.cc",
8
+ "src/calls.cc",
9
+ "src/class.cc",
10
+ "src/loop.cc",
11
+ "src/marshal.cc",
12
+ "src/object.cc",
13
+ "src/private.cc",
14
+ "src/repo.cc",
15
+ "src/signals.cc",
16
+ "src/template.cc",
17
+ "src/toggle.cc",
18
+ "src/variant.cc"
7
19
  ],
8
20
  "include_dirs": [
9
21
  "<!@(node -p \"require('node-addon-api').include\")"
10
22
  ],
11
- "cflags": [
12
- "<!@(pkg-config --cflags girepository-2.0)"
13
- ],
14
- "cflags_cc": [
15
- "<!@(pkg-config --cflags girepository-2.0)",
16
- "-std=c++17"
17
- ],
18
- "libraries": [
19
- "<!@(pkg-config --libs girepository-2.0)"
20
- ],
21
23
  "defines": [
22
24
  "NAPI_VERSION=8",
23
- "NAPI_DISABLE_CPP_EXCEPTIONS"
25
+ "NAPI_DISABLE_CPP_EXCEPTIONS",
26
+ "NODE_API_SWALLOW_UNTHROWABLE_EXCEPTIONS"
24
27
  ],
25
- "xcode_settings": {
26
- "OTHER_CFLAGS": [
27
- "<!@(pkg-config --cflags girepository-2.0)"
28
- ],
29
- "CLANG_CXX_LANGUAGE_STANDARD": "c++17",
30
- "GCC_ENABLE_CPP_EXCEPTIONS": "NO"
31
- }
28
+ "conditions": [
29
+ [ "OS!='win'", {
30
+ "cflags": [
31
+ "<!@(pkg-config --cflags girepository-2.0 cairo)"
32
+ ],
33
+ "cflags_cc": [
34
+ "<!@(pkg-config --cflags girepository-2.0 cairo)",
35
+ "-std=c++17"
36
+ ],
37
+ "libraries": [
38
+ "<!@(pkg-config --libs girepository-2.0 cairo)"
39
+ ],
40
+ "xcode_settings": {
41
+ "OTHER_CFLAGS": [
42
+ "<!@(pkg-config --cflags girepository-2.0 cairo)"
43
+ ],
44
+ "CLANG_CXX_LANGUAGE_STANDARD": "c++17",
45
+ "GCC_ENABLE_CPP_EXCEPTIONS": "NO"
46
+ }
47
+ } ],
48
+ [ "OS=='win'", {
49
+ # gvsbuild GTK4 (GLib >= 2.80, girepository-2.0) is MSVC-ABI, so the addon
50
+ # builds with node-gyp's default MSVC toolchain and loads into stock
51
+ # (MSVC-ABI) Node/Bun/Deno. gyp's msvs generator ignores `cflags`/
52
+ # `xcode_settings`, so the flags come from pkg-config via a helper that
53
+ # emits BARE include dirs + FULL .lib paths (scripts/win-gi-gyp-flags.mjs) —
54
+ # the exact shapes gyp forwards to cl.exe / link.exe.
55
+ "include_dirs": [
56
+ "<!@(node scripts/win-gi-gyp-flags.mjs --includes)"
57
+ ],
58
+ "libraries": [
59
+ "<!@(node scripts/win-gi-gyp-flags.mjs --libs)"
60
+ ],
61
+ "msvs_settings": {
62
+ "VCCLCompilerTool": {
63
+ "AdditionalOptions": [ "/std:c++17" ]
64
+ }
65
+ }
66
+ } ]
67
+ ]
32
68
  }
33
69
  ]
34
70
  }
package/cairo.d.ts ADDED
@@ -0,0 +1,187 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // @gjsify/node-gi/cairo — types for the GJS built-in `cairo` module on Node.
3
+
4
+ export type CairoEnum = Readonly<Record<string, number>>;
5
+
6
+ export const Antialias: CairoEnum;
7
+ export const Content: CairoEnum;
8
+ export const Extend: CairoEnum;
9
+ export const FillRule: CairoEnum;
10
+ export const Filter: CairoEnum;
11
+ export const FontSlant: CairoEnum;
12
+ export const FontWeight: CairoEnum;
13
+ export const Format: CairoEnum;
14
+ export const LineCap: CairoEnum;
15
+ export const LineJoin: CairoEnum;
16
+ export const Operator: CairoEnum;
17
+ export const PatternType: CairoEnum;
18
+ export const SurfaceType: CairoEnum;
19
+
20
+ /** cairo drawing context (`cairo_t`). */
21
+ export class Context {
22
+ constructor(surface: Surface);
23
+ save(): void;
24
+ restore(): void;
25
+ newPath(): void;
26
+ closePath(): void;
27
+ moveTo(x: number, y: number): void;
28
+ lineTo(x: number, y: number): void;
29
+ relMoveTo(dx: number, dy: number): void;
30
+ relLineTo(dx: number, dy: number): void;
31
+ rectangle(x: number, y: number, width: number, height: number): void;
32
+ arc(xc: number, yc: number, radius: number, angle1: number, angle2: number): void;
33
+ arcNegative(xc: number, yc: number, radius: number, angle1: number, angle2: number): void;
34
+ curveTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): void;
35
+ fill(): void;
36
+ fillPreserve(): void;
37
+ stroke(): void;
38
+ strokePreserve(): void;
39
+ paint(): void;
40
+ paintWithAlpha(alpha: number): void;
41
+ clip(): void;
42
+ clipPreserve(): void;
43
+ translate(tx: number, ty: number): void;
44
+ scale(sx: number, sy: number): void;
45
+ rotate(angle: number): void;
46
+ setSourceRGB(red: number, green: number, blue: number): void;
47
+ setSourceRGBA(red: number, green: number, blue: number, alpha: number): void;
48
+ setSource(pattern: Pattern): void;
49
+ setSourceSurface(surface: Surface, x: number, y: number): void;
50
+ /** The context's current source pattern (own reference; concrete subclass). */
51
+ getSource(): Pattern;
52
+ identityMatrix(): void;
53
+ newSubPath(): void;
54
+ /** User → device coordinates as `[x, y]` (GJS return shape). */
55
+ userToDevice(x: number, y: number): [number, number];
56
+ /** User → device distance (ignores translation) as `[dx, dy]`. */
57
+ userToDeviceDistance(dx: number, dy: number): [number, number];
58
+ /** Device → user coordinates as `[x, y]`. */
59
+ deviceToUser(x: number, y: number): [number, number];
60
+ /** Device → user distance (ignores translation) as `[dx, dy]`. */
61
+ deviceToUserDistance(dx: number, dy: number): [number, number];
62
+ /** Copy the current path into an owned {@link Path} handle. */
63
+ copyPath(): Path;
64
+ /** Like {@link copyPath} but with curves flattened to line segments. */
65
+ copyPathFlat(): Path;
66
+ appendPath(path: Path): void;
67
+ /**
68
+ * Set the stroke dash pattern. GJS semantics: holes/undefined entries are
69
+ * skipped, a non-positive value throws, an empty array disables dashing.
70
+ */
71
+ setDash(dashes: number[], offset: number): void;
72
+ getDashCount(): number;
73
+ /**
74
+ * The current dash pattern as `[dashes, offset]`.
75
+ * Note: GJS ships only `getDashCount`; this is a node-gi convenience.
76
+ */
77
+ getDash(): [number[], number];
78
+ inFill(x: number, y: number): boolean;
79
+ inStroke(x: number, y: number): boolean;
80
+ setLineWidth(width: number): void;
81
+ getLineWidth(): number;
82
+ setLineCap(lineCap: number): void;
83
+ setLineJoin(lineJoin: number): void;
84
+ setFillRule(fillRule: number): void;
85
+ setAntialias(antialias: number): void;
86
+ setOperator(op: number): void;
87
+ setMiterLimit(limit: number): void;
88
+ setTolerance(tolerance: number): void;
89
+ status(): number;
90
+ $dispose(): void;
91
+ }
92
+
93
+ /** cairo surface base class (`cairo_surface_t`). */
94
+ export class Surface {
95
+ getType(): number;
96
+ status(): number;
97
+ flush(): void;
98
+ finish(): void;
99
+ writeToPNG(filename: string): void;
100
+ $dispose(): void;
101
+ }
102
+
103
+ /** cairo image surface (`cairo_image_surface_*`). */
104
+ export class ImageSurface extends Surface {
105
+ constructor(format: number, width: number, height: number);
106
+ static create(format: number, width: number, height: number): ImageSurface;
107
+ static createFromPNG(filename: string): ImageSurface;
108
+ getWidth(): number;
109
+ getHeight(): number;
110
+ getStride(): number;
111
+ getFormat(): number;
112
+ /** Raw pixel buffer as a fresh Uint8Array copy (length = stride * height). */
113
+ getData(): Uint8Array;
114
+ }
115
+
116
+ /** cairo pattern base class (`cairo_pattern_t`). */
117
+ export class Pattern {
118
+ getType(): number;
119
+ status(): number;
120
+ $dispose(): void;
121
+ }
122
+
123
+ /** solid-color pattern. */
124
+ export class SolidPattern extends Pattern {
125
+ static createRGB(red: number, green: number, blue: number): SolidPattern;
126
+ static createRGBA(red: number, green: number, blue: number, alpha: number): SolidPattern;
127
+ }
128
+
129
+ /** gradient base class — shared color-stop API. */
130
+ export class Gradient extends Pattern {
131
+ addColorStopRGB(offset: number, red: number, green: number, blue: number): void;
132
+ addColorStopRGBA(offset: number, red: number, green: number, blue: number, alpha: number): void;
133
+ }
134
+
135
+ /** linear gradient (`cairo_pattern_create_linear`). */
136
+ export class LinearGradient extends Gradient {
137
+ constructor(x0: number, y0: number, x1: number, y1: number);
138
+ }
139
+
140
+ /** radial gradient (`cairo_pattern_create_radial`). */
141
+ export class RadialGradient extends Gradient {
142
+ constructor(cx0: number, cy0: number, radius0: number, cx1: number, cy1: number, radius1: number);
143
+ }
144
+
145
+ /** surface-backed pattern (`cairo_pattern_create_for_surface`). */
146
+ export class SurfacePattern extends Pattern {
147
+ constructor(surface: Surface);
148
+ setExtend(extend: number): void;
149
+ getExtend(): number;
150
+ setFilter(filter: number): void;
151
+ getFilter(): number;
152
+ }
153
+
154
+ /**
155
+ * Opaque copied path (`cairo_path_t`, from `Context.copyPath[Flat]()`).
156
+ * Method-less in GJS too — round-trips through `appendPath` / GI calls.
157
+ */
158
+ export class Path {}
159
+
160
+ /** The GJS `cairo` module object (`import cairo from 'cairo'`). */
161
+ declare const cairo: {
162
+ Antialias: CairoEnum;
163
+ Content: CairoEnum;
164
+ Extend: CairoEnum;
165
+ FillRule: CairoEnum;
166
+ Filter: CairoEnum;
167
+ FontSlant: CairoEnum;
168
+ FontWeight: CairoEnum;
169
+ Format: CairoEnum;
170
+ LineCap: CairoEnum;
171
+ LineJoin: CairoEnum;
172
+ Operator: CairoEnum;
173
+ PatternType: CairoEnum;
174
+ SurfaceType: CairoEnum;
175
+ Context: typeof Context;
176
+ Surface: typeof Surface;
177
+ ImageSurface: typeof ImageSurface;
178
+ Pattern: typeof Pattern;
179
+ SolidPattern: typeof SolidPattern;
180
+ Gradient: typeof Gradient;
181
+ LinearGradient: typeof LinearGradient;
182
+ RadialGradient: typeof RadialGradient;
183
+ SurfacePattern: typeof SurfacePattern;
184
+ Path: typeof Path;
185
+ };
186
+
187
+ export default cairo;