bare-gtk 0.2.0 → 0.3.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.
Files changed (135) hide show
  1. package/CMakeLists.txt +16 -2
  2. package/README.md +35 -1
  3. package/binding.c +350 -1
  4. package/index.d.ts +65 -0
  5. package/index.js +32 -0
  6. package/lib/adjustment.d.ts +21 -0
  7. package/lib/adjustment.h +112 -0
  8. package/lib/adjustment.js +24 -0
  9. package/lib/bridging.h +347 -0
  10. package/lib/clipboard.d.ts +22 -0
  11. package/lib/clipboard.h +176 -0
  12. package/lib/clipboard.js +18 -0
  13. package/lib/constants.d.ts +40 -0
  14. package/lib/constants.js +51 -0
  15. package/lib/css-provider.d.ts +13 -0
  16. package/lib/css-provider.h +56 -0
  17. package/lib/css-provider.js +14 -0
  18. package/lib/cursor.d.ts +35 -0
  19. package/lib/cursor.h +220 -0
  20. package/lib/cursor.js +45 -0
  21. package/lib/device.d.ts +13 -0
  22. package/lib/device.h +35 -0
  23. package/lib/device.js +8 -0
  24. package/lib/dialog.d.ts +41 -0
  25. package/lib/dialog.js +37 -0
  26. package/lib/display.d.ts +25 -0
  27. package/lib/display.h +86 -0
  28. package/lib/display.js +23 -0
  29. package/lib/editable.h +160 -0
  30. package/lib/entry.d.ts +93 -0
  31. package/lib/entry.h +340 -0
  32. package/lib/entry.js +118 -0
  33. package/lib/event-controller-focus.d.ts +17 -0
  34. package/lib/event-controller-focus.h +55 -0
  35. package/lib/event-controller-focus.js +13 -0
  36. package/lib/event-controller-motion.d.ts +18 -0
  37. package/lib/event-controller-motion.h +66 -0
  38. package/lib/event-controller-motion.js +14 -0
  39. package/lib/event-controller.d.ts +17 -0
  40. package/lib/event-controller.h +103 -0
  41. package/lib/event-controller.js +22 -0
  42. package/lib/events.js +23 -0
  43. package/lib/fixed.d.ts +10 -0
  44. package/lib/fixed.h +28 -0
  45. package/lib/fixed.js +8 -0
  46. package/lib/frame-fixed.d.ts +10 -0
  47. package/lib/frame-fixed.js +12 -0
  48. package/lib/frame-layout-child.d.ts +17 -0
  49. package/lib/frame-layout-child.js +16 -0
  50. package/lib/frame-layout.d.ts +27 -0
  51. package/lib/frame-layout.h +291 -0
  52. package/lib/frame-layout.js +19 -0
  53. package/lib/gesture-click.d.ts +19 -0
  54. package/lib/gesture-click.h +66 -0
  55. package/lib/gesture-click.js +14 -0
  56. package/lib/gesture-drag.d.ts +25 -0
  57. package/lib/gesture-drag.h +165 -0
  58. package/lib/gesture-drag.js +23 -0
  59. package/lib/gesture-single.d.ts +13 -0
  60. package/lib/gesture-single.js +12 -0
  61. package/lib/gesture.d.ts +13 -0
  62. package/lib/gesture.h +73 -0
  63. package/lib/gesture.js +8 -0
  64. package/lib/handle.d.ts +5 -0
  65. package/lib/handle.js +6 -0
  66. package/lib/label.d.ts +36 -0
  67. package/lib/label.h +269 -0
  68. package/lib/label.js +78 -0
  69. package/lib/layout-child.d.ts +13 -0
  70. package/lib/layout-child.h +35 -0
  71. package/lib/layout-child.js +10 -0
  72. package/lib/layout-manager.d.ts +15 -0
  73. package/lib/layout-manager.h +42 -0
  74. package/lib/layout-manager.js +15 -0
  75. package/lib/message-dialog.d.ts +26 -0
  76. package/lib/message-dialog.h +190 -0
  77. package/lib/message-dialog.js +22 -0
  78. package/lib/monitor.d.ts +32 -0
  79. package/lib/monitor.h +143 -0
  80. package/lib/monitor.js +40 -0
  81. package/lib/native.h +31 -0
  82. package/lib/object.d.ts +18 -0
  83. package/lib/object.js +38 -0
  84. package/lib/paintable.d.ts +10 -0
  85. package/lib/paintable.js +3 -0
  86. package/lib/picture.d.ts +22 -0
  87. package/lib/picture.h +127 -0
  88. package/lib/picture.js +35 -0
  89. package/lib/reachable.js +11 -0
  90. package/lib/runtime.c +21 -4
  91. package/lib/scrolled-window.d.ts +22 -0
  92. package/lib/scrolled-window.h +142 -0
  93. package/lib/scrolled-window.js +37 -0
  94. package/lib/settings.d.ts +25 -0
  95. package/lib/settings.h +163 -0
  96. package/lib/settings.js +34 -0
  97. package/lib/spinner.d.ts +12 -0
  98. package/lib/spinner.h +61 -0
  99. package/lib/spinner.js +22 -0
  100. package/lib/style-context.d.ts +15 -0
  101. package/lib/style-context.h +67 -0
  102. package/lib/style-context.js +9 -0
  103. package/lib/surface.d.ts +19 -0
  104. package/lib/surface.h +61 -0
  105. package/lib/surface.js +22 -0
  106. package/lib/switch.d.ts +19 -0
  107. package/lib/switch.h +114 -0
  108. package/lib/switch.js +30 -0
  109. package/lib/text-buffer.d.ts +31 -0
  110. package/lib/text-buffer.h +246 -0
  111. package/lib/text-buffer.js +33 -0
  112. package/lib/text-view.d.ts +39 -0
  113. package/lib/text-view.h +247 -0
  114. package/lib/text-view.js +63 -0
  115. package/lib/text.d.ts +18 -0
  116. package/lib/text.h +189 -0
  117. package/lib/text.js +31 -0
  118. package/lib/texture.d.ts +20 -0
  119. package/lib/texture.h +100 -0
  120. package/lib/texture.js +17 -0
  121. package/lib/viewport.d.ts +22 -0
  122. package/lib/viewport.h +151 -0
  123. package/lib/viewport.js +38 -0
  124. package/lib/widget.d.ts +102 -0
  125. package/lib/widget.h +695 -17
  126. package/lib/widget.js +176 -11
  127. package/lib/window.d.ts +31 -0
  128. package/lib/window.h +142 -61
  129. package/lib/window.js +32 -11
  130. package/lib/wrap.js +7 -0
  131. package/package.json +12 -3
  132. package/prebuilds/linux-arm64/bare +2 -2
  133. package/prebuilds/linux-arm64/bare-gtk.bare +0 -0
  134. package/prebuilds/linux-x64/bare +2 -2
  135. package/prebuilds/linux-x64/bare-gtk.bare +0 -0
package/lib/gesture.h ADDED
@@ -0,0 +1,73 @@
1
+ #ifndef BARE_GTK_GESTURE_H
2
+ #define BARE_GTK_GESTURE_H
3
+
4
+ #include <assert.h>
5
+ #include <js.h>
6
+
7
+ #include <gtk/gtk.h>
8
+
9
+ #include "bridging.h"
10
+
11
+ static js_value_t *
12
+ bare_gtk_gesture_set_state(js_env_t *env, js_callback_info_t *info) {
13
+ int err;
14
+
15
+ size_t argc = 2;
16
+ js_value_t *argv[2];
17
+
18
+ bare_gtk_state_t *state;
19
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
20
+ assert(err == 0);
21
+
22
+ assert(argc == 2);
23
+
24
+ GtkGesture *gesture;
25
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "gesture", (gpointer *) &gesture);
26
+ if (err < 0) return NULL;
27
+
28
+ uint32_t sequence_state;
29
+ err = bare_gtk__read_uint32(env, argv[1], "state", &sequence_state);
30
+ if (err < 0) return NULL;
31
+
32
+ js_value_t *result;
33
+ err = js_get_boolean(env, gtk_gesture_set_state(gesture, sequence_state), &result);
34
+ assert(err == 0);
35
+
36
+ return result;
37
+ }
38
+
39
+ static js_value_t *
40
+ bare_gtk_gesture_single_button(js_env_t *env, js_callback_info_t *info) {
41
+ int err;
42
+
43
+ size_t argc = 2;
44
+ js_value_t *argv[2];
45
+
46
+ bare_gtk_state_t *state;
47
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
48
+ assert(err == 0);
49
+
50
+ assert(argc == 1 || argc == 2);
51
+
52
+ GtkGestureSingle *gesture;
53
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "gesture", (gpointer *) &gesture);
54
+ if (err < 0) return NULL;
55
+
56
+ if (argc == 1) {
57
+ js_value_t *result;
58
+ err = js_create_uint32(env, gtk_gesture_single_get_button(gesture), &result);
59
+ assert(err == 0);
60
+
61
+ return result;
62
+ }
63
+
64
+ uint32_t button;
65
+ err = bare_gtk__read_uint32(env, argv[1], "button", &button);
66
+ if (err < 0) return NULL;
67
+
68
+ gtk_gesture_single_set_button(gesture, button);
69
+
70
+ return NULL;
71
+ }
72
+
73
+ #endif // BARE_GTK_GESTURE_H
package/lib/gesture.js ADDED
@@ -0,0 +1,8 @@
1
+ const binding = require('../binding')
2
+ const GTKEventController = require('./event-controller')
3
+
4
+ module.exports = exports = class GTKGesture extends GTKEventController {
5
+ setState(state) {
6
+ return binding.gestureSetState(this._tag, state)
7
+ }
8
+ }
@@ -0,0 +1,5 @@
1
+ import { Wrapper } from 'bare-gobject-registry'
2
+
3
+ /** Return the tag of `object` in this addon, adopting it from another addon first if needed. */
4
+ export function adopt(object: Wrapper): number
5
+ export function adopt(object: null | undefined): null
package/lib/handle.js ADDED
@@ -0,0 +1,6 @@
1
+ const binding = require('../binding')
2
+ const registry = require('bare-gobject-registry')
3
+
4
+ exports.adopt = function adopt(object) {
5
+ return registry.adopt(binding, object)
6
+ }
package/lib/label.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ import GTKWidget = require('./widget')
2
+
3
+ /** A widget that shows text, as a `GtkLabel`. */
4
+ interface GTKLabel extends GTKWidget {
5
+ text: string
6
+
7
+ /** Show Pango markup, such as `'<b>bold</b>'`. */
8
+ setMarkup(markup: string): this
9
+
10
+ /** Whether long lines wrap. */
11
+ wrap: boolean
12
+
13
+ /** How lines wrap, as a `WRAP_*` constant. */
14
+ wrapMode: number
15
+
16
+ /** Where the text sits horizontally, from 0 (left) to 1 (right). */
17
+ xalign: number
18
+
19
+ /** Where the text sits vertically, from 0 (top) to 1 (bottom). */
20
+ yalign: number
21
+
22
+ /** How lines line up with each other, as a `JUSTIFY_*` constant. */
23
+ justify: number
24
+
25
+ /** The most lines to show when `ellipsize` is set. -1 means no limit. */
26
+ lines: number
27
+
28
+ /** Where text that does not fit is cut off with "...", as an `ELLIPSIZE_*` constant. */
29
+ ellipsize: number
30
+ }
31
+
32
+ declare class GTKLabel {
33
+ constructor()
34
+ }
35
+
36
+ export = GTKLabel
package/lib/label.h ADDED
@@ -0,0 +1,269 @@
1
+ #ifndef BARE_GTK_LABEL_H
2
+ #define BARE_GTK_LABEL_H
3
+
4
+ #include <assert.h>
5
+ #include <js.h>
6
+ #include <utf.h>
7
+
8
+ #include <gtk/gtk.h>
9
+
10
+ #include "bridging.h"
11
+
12
+ static js_value_t *
13
+ bare_gtk_label_init(js_env_t *env, js_callback_info_t *info) {
14
+ int err;
15
+
16
+ bare_gtk_state_t *state;
17
+ err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
18
+ assert(err == 0);
19
+
20
+ GtkWidget *label = gtk_label_new(NULL);
21
+
22
+ js_value_t *result;
23
+ err = js_create_uint32(env, bare_gobject_tag(state->registry, label), &result);
24
+ assert(err == 0);
25
+
26
+ return result;
27
+ }
28
+
29
+ static js_value_t *
30
+ bare_gtk_label_text(js_env_t *env, js_callback_info_t *info) {
31
+ int err;
32
+
33
+ size_t argc = 2;
34
+ js_value_t *argv[2];
35
+
36
+ bare_gtk_state_t *state;
37
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
38
+ assert(err == 0);
39
+
40
+ assert(argc == 1 || argc == 2);
41
+
42
+ GtkLabel *label;
43
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "label", (gpointer *) &label);
44
+ if (err < 0) return NULL;
45
+
46
+ js_value_t *result = NULL;
47
+
48
+ if (argc == 1) {
49
+ const char *text = gtk_label_get_text(label);
50
+
51
+ err = js_create_string_utf8(env, (const utf8_t *) text, (size_t) -1, &result);
52
+ assert(err == 0);
53
+ } else {
54
+ char *text;
55
+ err = bare_gtk__read_string(env, argv[1], "text", &text);
56
+ if (err < 0) return NULL;
57
+
58
+ gtk_label_set_text(label, text);
59
+
60
+ g_free(text);
61
+ }
62
+
63
+ return result;
64
+ }
65
+
66
+ static js_value_t *
67
+ bare_gtk_label_wrap(js_env_t *env, js_callback_info_t *info) {
68
+ int err;
69
+
70
+ size_t argc = 2;
71
+ js_value_t *argv[2];
72
+
73
+ bare_gtk_state_t *state;
74
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
75
+ assert(err == 0);
76
+
77
+ assert(argc == 1 || argc == 2);
78
+
79
+ GtkLabel *label;
80
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "label", (gpointer *) &label);
81
+ if (err < 0) return NULL;
82
+
83
+ js_value_t *result = NULL;
84
+
85
+ if (argc == 1) {
86
+ err = js_get_boolean(env, gtk_label_get_wrap(label), &result);
87
+ assert(err == 0);
88
+ } else {
89
+ bool wrap;
90
+ err = bare_gtk__read_bool(env, argv[1], "wrap", &wrap);
91
+ if (err < 0) return NULL;
92
+
93
+ gtk_label_set_wrap(label, wrap);
94
+ }
95
+
96
+ return result;
97
+ }
98
+
99
+ static js_value_t *
100
+ bare_gtk_label_wrap_mode(js_env_t *env, js_callback_info_t *info) {
101
+ int err;
102
+
103
+ size_t argc = 2;
104
+ js_value_t *argv[2];
105
+
106
+ bare_gtk_state_t *state;
107
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
108
+ assert(err == 0);
109
+
110
+ assert(argc == 1 || argc == 2);
111
+
112
+ GtkLabel *label;
113
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "label", (gpointer *) &label);
114
+ if (err < 0) return NULL;
115
+
116
+ js_value_t *result = NULL;
117
+
118
+ if (argc == 1) {
119
+ err = js_create_int32(env, gtk_label_get_wrap_mode(label), &result);
120
+ assert(err == 0);
121
+ } else {
122
+ int32_t mode;
123
+ err = bare_gtk__read_int32(env, argv[1], "wrapMode", &mode);
124
+ if (err < 0) return NULL;
125
+
126
+ gtk_label_set_wrap_mode(label, mode);
127
+ }
128
+
129
+ return result;
130
+ }
131
+
132
+ #define V(name, get, set) \
133
+ static js_value_t * \
134
+ name(js_env_t *env, js_callback_info_t *info) { \
135
+ int err; \
136
+ \
137
+ size_t argc = 2; \
138
+ js_value_t *argv[2]; \
139
+ \
140
+ bare_gtk_state_t *state; \
141
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state); \
142
+ assert(err == 0); \
143
+ \
144
+ assert(argc == 1 || argc == 2); \
145
+ \
146
+ GtkLabel *label; \
147
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "label", (gpointer *) &label); \
148
+ if (err < 0) return NULL; \
149
+ \
150
+ js_value_t *result = NULL; \
151
+ \
152
+ if (argc == 1) { \
153
+ err = js_create_double(env, get(label), &result); \
154
+ assert(err == 0); \
155
+ } else { \
156
+ double align; \
157
+ err = bare_gtk__read_double(env, argv[1], "align", &align); \
158
+ if (err < 0) return NULL; \
159
+ \
160
+ set(label, (float) align); \
161
+ } \
162
+ \
163
+ return result; \
164
+ }
165
+
166
+ V(bare_gtk_label_xalign, gtk_label_get_xalign, gtk_label_set_xalign)
167
+ V(bare_gtk_label_yalign, gtk_label_get_yalign, gtk_label_set_yalign)
168
+ #undef V
169
+
170
+ static js_value_t *
171
+ bare_gtk_label_justify(js_env_t *env, js_callback_info_t *info) {
172
+ int err;
173
+
174
+ size_t argc = 2;
175
+ js_value_t *argv[2];
176
+
177
+ bare_gtk_state_t *state;
178
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
179
+ assert(err == 0);
180
+
181
+ assert(argc == 1 || argc == 2);
182
+
183
+ GtkLabel *label;
184
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "label", (gpointer *) &label);
185
+ if (err < 0) return NULL;
186
+
187
+ js_value_t *result = NULL;
188
+
189
+ if (argc == 1) {
190
+ err = js_create_int32(env, gtk_label_get_justify(label), &result);
191
+ assert(err == 0);
192
+ } else {
193
+ int32_t justify;
194
+ err = bare_gtk__read_int32(env, argv[1], "justify", &justify);
195
+ if (err < 0) return NULL;
196
+
197
+ gtk_label_set_justify(label, justify);
198
+ }
199
+
200
+ return result;
201
+ }
202
+
203
+ static js_value_t *
204
+ bare_gtk_label_set_markup(js_env_t *env, js_callback_info_t *info) {
205
+ int err;
206
+
207
+ size_t argc = 2;
208
+ js_value_t *argv[2];
209
+
210
+ bare_gtk_state_t *state;
211
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
212
+ assert(err == 0);
213
+
214
+ assert(argc == 2);
215
+
216
+ GtkLabel *label;
217
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "label", (gpointer *) &label);
218
+ if (err < 0) return NULL;
219
+
220
+ char *markup;
221
+ err = bare_gtk__read_string(env, argv[1], "markup", &markup);
222
+ if (err < 0) return NULL;
223
+
224
+ gtk_label_set_markup(label, markup);
225
+
226
+ g_free(markup);
227
+
228
+ return NULL;
229
+ }
230
+
231
+ #define V(name, get, set, type) \
232
+ static js_value_t * \
233
+ name(js_env_t *env, js_callback_info_t *info) { \
234
+ int err; \
235
+ \
236
+ size_t argc = 2; \
237
+ js_value_t *argv[2]; \
238
+ \
239
+ bare_gtk_state_t *state; \
240
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state); \
241
+ assert(err == 0); \
242
+ \
243
+ assert(argc == 1 || argc == 2); \
244
+ \
245
+ GtkLabel *label; \
246
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "label", (gpointer *) &label); \
247
+ if (err < 0) return NULL; \
248
+ \
249
+ js_value_t *result = NULL; \
250
+ \
251
+ if (argc == 1) { \
252
+ err = js_create_int32(env, get(label), &result); \
253
+ assert(err == 0); \
254
+ } else { \
255
+ int32_t value; \
256
+ err = bare_gtk__read_int32(env, argv[1], #name, &value); \
257
+ if (err < 0) return NULL; \
258
+ \
259
+ set(label, (type) value); \
260
+ } \
261
+ \
262
+ return result; \
263
+ }
264
+
265
+ V(bare_gtk_label_lines, gtk_label_get_lines, gtk_label_set_lines, int)
266
+ V(bare_gtk_label_ellipsize, gtk_label_get_ellipsize, gtk_label_set_ellipsize, PangoEllipsizeMode)
267
+ #undef V
268
+
269
+ #endif // BARE_GTK_LABEL_H
package/lib/label.js ADDED
@@ -0,0 +1,78 @@
1
+ const binding = require('../binding')
2
+ const GTKWidget = require('./widget')
3
+
4
+ module.exports = exports = class GTKLabel extends GTKWidget {
5
+ _init(opts) {
6
+ return binding.labelInit()
7
+ }
8
+
9
+ get text() {
10
+ return binding.labelText(this._tag)
11
+ }
12
+
13
+ set text(value) {
14
+ binding.labelText(this._tag, value)
15
+ }
16
+
17
+ setMarkup(markup) {
18
+ binding.labelSetMarkup(this._tag, markup)
19
+
20
+ return this
21
+ }
22
+
23
+ get wrap() {
24
+ return binding.labelWrap(this._tag)
25
+ }
26
+
27
+ set wrap(value) {
28
+ binding.labelWrap(this._tag, value)
29
+ }
30
+
31
+ get wrapMode() {
32
+ return binding.labelWrapMode(this._tag)
33
+ }
34
+
35
+ set wrapMode(value) {
36
+ binding.labelWrapMode(this._tag, value)
37
+ }
38
+
39
+ get xalign() {
40
+ return binding.labelXalign(this._tag)
41
+ }
42
+
43
+ set xalign(value) {
44
+ binding.labelXalign(this._tag, value)
45
+ }
46
+
47
+ get yalign() {
48
+ return binding.labelYalign(this._tag)
49
+ }
50
+
51
+ set yalign(value) {
52
+ binding.labelYalign(this._tag, value)
53
+ }
54
+
55
+ get justify() {
56
+ return binding.labelJustify(this._tag)
57
+ }
58
+
59
+ set justify(value) {
60
+ binding.labelJustify(this._tag, value)
61
+ }
62
+
63
+ get lines() {
64
+ return binding.labelLines(this._tag)
65
+ }
66
+
67
+ set lines(value) {
68
+ binding.labelLines(this._tag, value)
69
+ }
70
+
71
+ get ellipsize() {
72
+ return binding.labelEllipsize(this._tag)
73
+ }
74
+
75
+ set ellipsize(value) {
76
+ binding.labelEllipsize(this._tag, value)
77
+ }
78
+ }
@@ -0,0 +1,13 @@
1
+ import GObject = require('./object')
2
+ import GTKWidget = require('./widget')
3
+
4
+ /** What a layout manager keeps about one child, as a `GtkLayoutChild`. */
5
+ interface GTKLayoutChild extends GObject {
6
+ readonly childWidget: GTKWidget | null
7
+ }
8
+
9
+ declare class GTKLayoutChild {
10
+ protected constructor()
11
+ }
12
+
13
+ export = GTKLayoutChild
@@ -0,0 +1,35 @@
1
+ #ifndef BARE_GTK_LAYOUT_CHILD_H
2
+ #define BARE_GTK_LAYOUT_CHILD_H
3
+
4
+ #include <assert.h>
5
+ #include <js.h>
6
+
7
+ #include <gtk/gtk.h>
8
+
9
+ #include "bridging.h"
10
+
11
+ #define V(name, fn) \
12
+ static js_value_t * \
13
+ name(js_env_t *env, js_callback_info_t *info) { \
14
+ int err; \
15
+ \
16
+ size_t argc = 1; \
17
+ js_value_t *argv[1]; \
18
+ \
19
+ bare_gtk_state_t *state; \
20
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state); \
21
+ assert(err == 0); \
22
+ \
23
+ assert(argc == 1); \
24
+ \
25
+ GtkLayoutChild *layout_child; \
26
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "layoutChild", (gpointer *) &layout_child); \
27
+ if (err < 0) return NULL; \
28
+ \
29
+ return bare_gtk__create_tag(env, state, fn(layout_child)); \
30
+ }
31
+
32
+ V(bare_gtk_layout_child_child_widget, gtk_layout_child_get_child_widget)
33
+ #undef V
34
+
35
+ #endif // BARE_GTK_LAYOUT_CHILD_H
@@ -0,0 +1,10 @@
1
+ const binding = require('../binding')
2
+ const GObject = require('./object')
3
+ const GTKWidget = require('./widget')
4
+ const wrap = require('./wrap')
5
+
6
+ module.exports = exports = class GTKLayoutChild extends GObject {
7
+ get childWidget() {
8
+ return wrap(GTKWidget, binding.layoutChildChildWidget(this._tag))
9
+ }
10
+ }
@@ -0,0 +1,15 @@
1
+ import GObject = require('./object')
2
+ import GTKLayoutChild = require('./layout-child')
3
+ import GTKWidget = require('./widget')
4
+
5
+ /** Places the children of a widget, as a `GtkLayoutManager`. */
6
+ interface GTKLayoutManager<M extends Record<keyof M, unknown[]> = {}> extends GObject<M> {
7
+ /** What the manager keeps about `widget`, which must be a child of its widget. */
8
+ getLayoutChild(widget: GTKWidget): GTKLayoutChild | null
9
+ }
10
+
11
+ declare class GTKLayoutManager<M extends Record<keyof M, unknown[]> = {}> {
12
+ protected constructor()
13
+ }
14
+
15
+ export = GTKLayoutManager
@@ -0,0 +1,42 @@
1
+ #ifndef BARE_GTK_LAYOUT_MANAGER_H
2
+ #define BARE_GTK_LAYOUT_MANAGER_H
3
+
4
+ #include <assert.h>
5
+ #include <js.h>
6
+
7
+ #include <gtk/gtk.h>
8
+
9
+ #include "bridging.h"
10
+
11
+ static js_value_t *
12
+ bare_gtk_layout_manager_layout_child(js_env_t *env, js_callback_info_t *info) {
13
+ int err;
14
+
15
+ size_t argc = 2;
16
+ js_value_t *argv[2];
17
+
18
+ bare_gtk_state_t *state;
19
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
20
+ assert(err == 0);
21
+
22
+ assert(argc == 2);
23
+
24
+ GtkLayoutManager *manager;
25
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "layoutManager", (gpointer *) &manager);
26
+ if (err < 0) return NULL;
27
+
28
+ GtkWidget *child;
29
+ err = bare_gobject_read_tag(env, state->registry, argv[1], "child", (gpointer *) &child);
30
+ if (err < 0) return NULL;
31
+
32
+ if (gtk_widget_get_parent(child) == NULL) {
33
+ err = js_throw_error(env, NULL, "Widget has no parent");
34
+ assert(err == 0);
35
+
36
+ return NULL;
37
+ }
38
+
39
+ return bare_gtk__create_tag(env, state, gtk_layout_manager_get_layout_child(manager, child));
40
+ }
41
+
42
+ #endif // BARE_GTK_LAYOUT_MANAGER_H
@@ -0,0 +1,15 @@
1
+ const binding = require('../binding')
2
+ const GObject = require('./object')
3
+ const GTKLayoutChild = require('./layout-child')
4
+ const wrap = require('./wrap')
5
+
6
+ module.exports = exports = class GTKLayoutManager extends GObject {
7
+ static layoutChild = GTKLayoutChild
8
+
9
+ getLayoutChild(widget) {
10
+ return wrap(
11
+ this.constructor.layoutChild,
12
+ binding.layoutManagerLayoutChild(this._tag, widget._tag)
13
+ )
14
+ }
15
+ }
@@ -0,0 +1,26 @@
1
+ import GTKDialog = require('./dialog')
2
+ import GTKWindow = require('./window')
3
+
4
+ /** A dialog that shows a message, as a `GtkMessageDialog`. Add its buttons with `addButton()`. */
5
+ interface GTKMessageDialog extends GTKDialog {
6
+ /** Text shown below the main message. */
7
+ set secondaryText(text: string)
8
+ }
9
+
10
+ declare class GTKMessageDialog {
11
+ /**
12
+ * Create a message dialog. `messageType` is a `MESSAGE_TYPE` constant and defaults to
13
+ * `MESSAGE_TYPE.OTHER`.
14
+ */
15
+ constructor(opts?: { parent?: GTKWindow | null; messageType?: number; text?: string })
16
+
17
+ static readonly MESSAGE_TYPE: {
18
+ readonly INFO: number
19
+ readonly WARNING: number
20
+ readonly QUESTION: number
21
+ readonly ERROR: number
22
+ readonly OTHER: number
23
+ }
24
+ }
25
+
26
+ export = GTKMessageDialog