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/picture.js ADDED
@@ -0,0 +1,35 @@
1
+ const binding = require('../binding')
2
+ const { adopt } = require('./handle')
3
+ const wrap = require('./wrap')
4
+ const GDKPaintable = require('./paintable')
5
+ const GTKWidget = require('./widget')
6
+
7
+ module.exports = exports = class GTKPicture extends GTKWidget {
8
+ _init(opts) {
9
+ return binding.pictureInit()
10
+ }
11
+
12
+ get paintable() {
13
+ return wrap(GDKPaintable, binding.picturePaintable(this._tag))
14
+ }
15
+
16
+ set paintable(value) {
17
+ binding.picturePaintable(this._tag, value === null ? null : adopt(value))
18
+ }
19
+
20
+ get keepAspectRatio() {
21
+ return binding.pictureKeepAspectRatio(this._tag)
22
+ }
23
+
24
+ set keepAspectRatio(value) {
25
+ binding.pictureKeepAspectRatio(this._tag, value)
26
+ }
27
+
28
+ get canShrink() {
29
+ return binding.pictureCanShrink(this._tag)
30
+ }
31
+
32
+ set canShrink(value) {
33
+ binding.pictureCanShrink(this._tag, value)
34
+ }
35
+ }
@@ -0,0 +1,11 @@
1
+ exports.hold = function hold(owner, wrapper) {
2
+ if (wrapper !== null) owner._retained.add(wrapper)
3
+
4
+ return wrapper
5
+ }
6
+
7
+ exports.drop = function drop(owner, wrapper) {
8
+ if (wrapper !== null) owner._retained.delete(wrapper)
9
+
10
+ return wrapper
11
+ }
package/lib/runtime.c CHANGED
@@ -4,6 +4,7 @@
4
4
  #include <path.h>
5
5
  #include <rlimit.h>
6
6
  #include <signal.h>
7
+ #include <stdbool.h>
7
8
  #include <unistd.h>
8
9
  #include <uv.h>
9
10
 
@@ -22,6 +23,8 @@ static GIOChannel *bare__channel;
22
23
  static guint bare__poll;
23
24
  static guint bare__timer;
24
25
 
26
+ static bool bare__exited;
27
+
25
28
  GtkApplication *bare_gtk_app;
26
29
 
27
30
  extern char __bare_identifier[] __attribute__((weak));
@@ -92,6 +95,8 @@ bare__run(void) {
92
95
  err = bare_run(bare, UV_RUN_NOWAIT);
93
96
  assert(err >= 0);
94
97
 
98
+ if (bare__exited) return;
99
+
95
100
  int timeout = uv_backend_timeout(bare__loop);
96
101
 
97
102
  if (timeout == 0) {
@@ -101,6 +106,13 @@ bare__run(void) {
101
106
  }
102
107
  }
103
108
 
109
+ static void
110
+ bare__on_exit(bare_t *bare, void *data) {
111
+ bare__exited = true;
112
+
113
+ g_application_quit(G_APPLICATION(bare_gtk_app));
114
+ }
115
+
104
116
  static void
105
117
  bare__on_activate(GtkApplication *app, gpointer data) {}
106
118
 
@@ -219,6 +231,9 @@ main(int argc, char *argv[]) {
219
231
  err = bare_setup(bare__loop, bare__platform, NULL, argc, (const char **) argv, NULL, &bare);
220
232
  assert(err == 0);
221
233
 
234
+ err = bare_on_exit(bare, bare__on_exit, NULL);
235
+ assert(err == 0);
236
+
222
237
  GtkApplication *app = bare_gtk_app = gtk_application_new(__bare_identifier, 0);
223
238
 
224
239
  g_signal_connect(app, "activate", G_CALLBACK(bare__on_activate), NULL);
@@ -236,11 +251,13 @@ main(int argc, char *argv[]) {
236
251
  err = uv_async_send(&bare__shutdown);
237
252
  assert(err == 0);
238
253
 
239
- err = bare_terminate(bare);
240
- assert(err == 0);
254
+ if (!bare__exited) {
255
+ err = bare_terminate(bare);
256
+ assert(err == 0);
241
257
 
242
- err = bare_run(bare, UV_RUN_DEFAULT);
243
- assert(err == 0);
258
+ err = bare_run(bare, UV_RUN_DEFAULT);
259
+ assert(err == 0);
260
+ }
244
261
 
245
262
  int exit_code;
246
263
  err = bare_teardown(bare, UV_RUN_DEFAULT, &exit_code);
@@ -0,0 +1,22 @@
1
+ import GTKWidget = require('./widget')
2
+ import GTKAdjustment = require('./adjustment')
3
+
4
+ /** A widget that scrolls its child, as a `GtkScrolledWindow`. */
5
+ interface GTKScrolledWindow extends GTKWidget {
6
+ child: GTKWidget | null
7
+
8
+ /** What horizontal scrolling moves. Read and set its `value` to scroll. */
9
+ readonly hadjustment: GTKAdjustment
10
+
11
+ /** What vertical scrolling moves. Read and set its `value` to scroll. */
12
+ readonly vadjustment: GTKAdjustment
13
+
14
+ /** When each scroll bar is shown, as `POLICY_*` constants. */
15
+ setPolicy(horizontal: number, vertical: number): this
16
+ }
17
+
18
+ declare class GTKScrolledWindow {
19
+ constructor()
20
+ }
21
+
22
+ export = GTKScrolledWindow
@@ -0,0 +1,142 @@
1
+ #ifndef BARE_GTK_SCROLLED_WINDOW_H
2
+ #define BARE_GTK_SCROLLED_WINDOW_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_scrolled_window_init(js_env_t *env, js_callback_info_t *info) {
13
+ int err;
14
+
15
+ bare_gtk_state_t *state;
16
+ err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
17
+ assert(err == 0);
18
+
19
+ GtkWidget *window = gtk_scrolled_window_new();
20
+
21
+ js_value_t *result;
22
+ err = js_create_uint32(env, bare_gobject_tag(state->registry, window), &result);
23
+ assert(err == 0);
24
+
25
+ return result;
26
+ }
27
+
28
+ static js_value_t *
29
+ bare_gtk_scrolled_window_child(js_env_t *env, js_callback_info_t *info) {
30
+ int err;
31
+
32
+ size_t argc = 2;
33
+ js_value_t *argv[2];
34
+
35
+ bare_gtk_state_t *state;
36
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
37
+ assert(err == 0);
38
+
39
+ assert(argc == 1 || argc == 2);
40
+
41
+ GtkScrolledWindow *window;
42
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "window", (gpointer *) &window);
43
+ if (err < 0) return NULL;
44
+
45
+ if (argc == 1) {
46
+ GtkWidget *child = gtk_scrolled_window_get_child(window);
47
+
48
+ js_value_t *result;
49
+
50
+ if (child == NULL) {
51
+ err = js_get_null(env, &result);
52
+ assert(err == 0);
53
+ } else {
54
+ err = js_create_uint32(env, bare_gobject_tag(state->registry, child), &result);
55
+ assert(err == 0);
56
+ }
57
+
58
+ return result;
59
+ }
60
+
61
+ js_value_type_t type;
62
+ err = js_typeof(env, argv[1], &type);
63
+ assert(err == 0);
64
+
65
+ if (type == js_null) {
66
+ gtk_scrolled_window_set_child(window, NULL);
67
+
68
+ return NULL;
69
+ }
70
+
71
+ GtkWidget *child;
72
+ err = bare_gobject_read_tag(env, state->registry, argv[1], "child", (gpointer *) &child);
73
+ if (err < 0) return NULL;
74
+
75
+ gtk_scrolled_window_set_child(window, child);
76
+
77
+ return NULL;
78
+ }
79
+
80
+ static js_value_t *
81
+ bare_gtk_scrolled_window_policy(js_env_t *env, js_callback_info_t *info) {
82
+ int err;
83
+
84
+ size_t argc = 3;
85
+ js_value_t *argv[3];
86
+
87
+ bare_gtk_state_t *state;
88
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
89
+ assert(err == 0);
90
+
91
+ assert(argc == 3);
92
+
93
+ GtkScrolledWindow *window;
94
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "window", (gpointer *) &window);
95
+ if (err < 0) return NULL;
96
+
97
+ uint32_t horizontal, vertical;
98
+
99
+ err = bare_gtk__read_uint32(env, argv[1], "horizontal", &horizontal);
100
+ if (err < 0) return NULL;
101
+
102
+ err = bare_gtk__read_uint32(env, argv[2], "vertical", &vertical);
103
+ if (err < 0) return NULL;
104
+
105
+ gtk_scrolled_window_set_policy(window, horizontal, vertical);
106
+
107
+ return NULL;
108
+ }
109
+
110
+ static js_value_t *
111
+ bare_gtk_scrolled_window_adjustment(js_env_t *env, js_callback_info_t *info) {
112
+ int err;
113
+
114
+ size_t argc = 2;
115
+ js_value_t *argv[2];
116
+
117
+ bare_gtk_state_t *state;
118
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
119
+ assert(err == 0);
120
+
121
+ assert(argc == 2);
122
+
123
+ GtkScrolledWindow *window;
124
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "window", (gpointer *) &window);
125
+ if (err < 0) return NULL;
126
+
127
+ bool horizontal;
128
+ err = bare_gtk__read_bool(env, argv[1], "horizontal", &horizontal);
129
+ if (err < 0) return NULL;
130
+
131
+ GtkAdjustment *adjustment = horizontal
132
+ ? gtk_scrolled_window_get_hadjustment(window)
133
+ : gtk_scrolled_window_get_vadjustment(window);
134
+
135
+ js_value_t *result;
136
+ err = js_create_uint32(env, bare_gobject_tag(state->registry, adjustment), &result);
137
+ assert(err == 0);
138
+
139
+ return result;
140
+ }
141
+
142
+ #endif // BARE_GTK_SCROLLED_WINDOW_H
@@ -0,0 +1,37 @@
1
+ const binding = require('../binding')
2
+ const GTKWidget = require('./widget')
3
+ const GTKAdjustment = require('./adjustment')
4
+ const wrap = require('./wrap')
5
+ const { hold, drop } = require('./reachable')
6
+
7
+ module.exports = exports = class GTKScrolledWindow extends GTKWidget {
8
+ _init() {
9
+ return binding.scrolledWindowInit()
10
+ }
11
+
12
+ get child() {
13
+ return wrap(GTKWidget, binding.scrolledWindowChild(this._tag))
14
+ }
15
+
16
+ set child(child) {
17
+ drop(this, this.child)
18
+
19
+ binding.scrolledWindowChild(this._tag, child === null ? null : child._tag)
20
+
21
+ hold(this, child)
22
+ }
23
+
24
+ get hadjustment() {
25
+ return wrap(GTKAdjustment, binding.scrolledWindowAdjustment(this._tag, true))
26
+ }
27
+
28
+ get vadjustment() {
29
+ return wrap(GTKAdjustment, binding.scrolledWindowAdjustment(this._tag, false))
30
+ }
31
+
32
+ setPolicy(horizontal, vertical) {
33
+ binding.scrolledWindowPolicy(this._tag, horizontal, vertical)
34
+
35
+ return this
36
+ }
37
+ }
@@ -0,0 +1,25 @@
1
+ import GObject = require('./object')
2
+
3
+ /** The settings of the desktop, as a `GtkSettings`. */
4
+ interface GTKSettings extends GObject<GTKSettings.Events> {
5
+ /** Whether the dark variant of the theme is used. */
6
+ preferDarkTheme: boolean
7
+
8
+ /** The font resolution, in 1024ths of a dot per inch. -1 means the default. */
9
+ xftDpi: number
10
+ }
11
+
12
+ declare class GTKSettings {
13
+ protected constructor()
14
+
15
+ static getDefault(): GTKSettings | null
16
+ }
17
+
18
+ declare namespace GTKSettings {
19
+ export interface Events {
20
+ 'prefer-dark-theme': []
21
+ 'xft-dpi': []
22
+ }
23
+ }
24
+
25
+ export = GTKSettings
package/lib/settings.h ADDED
@@ -0,0 +1,163 @@
1
+ #ifndef BARE_GTK_SETTINGS_H
2
+ #define BARE_GTK_SETTINGS_H
3
+
4
+ #include <assert.h>
5
+ #include <js.h>
6
+
7
+ #include <gtk/gtk.h>
8
+
9
+ #include "bridging.h"
10
+
11
+ enum {
12
+ bare_gtk_settings_event_prefer_dark_theme = 1 << 0,
13
+ bare_gtk_settings_event_xft_dpi = 1 << 1,
14
+ };
15
+
16
+ static void
17
+ bare_gtk_settings__on_prefer_dark_theme(GObject *object, GParamSpec *spec, gpointer data) {
18
+ bare_gtk_state_t *state = data;
19
+
20
+ if ((bare_gtk__observed(state, object) & bare_gtk_settings_event_prefer_dark_theme) == 0) return;
21
+
22
+ bare_gtk__emit(state, object, "prefer-dark-theme", 0, NULL);
23
+ }
24
+
25
+ static void
26
+ bare_gtk_settings__on_xft_dpi(GObject *object, GParamSpec *spec, gpointer data) {
27
+ bare_gtk_state_t *state = data;
28
+
29
+ if ((bare_gtk__observed(state, object) & bare_gtk_settings_event_xft_dpi) == 0) return;
30
+
31
+ bare_gtk__emit(state, object, "xft-dpi", 0, NULL);
32
+ }
33
+
34
+ static js_value_t *
35
+ bare_gtk_settings_get_default(js_env_t *env, js_callback_info_t *info) {
36
+ int err;
37
+
38
+ bare_gtk_state_t *state;
39
+ err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
40
+ assert(err == 0);
41
+
42
+ GtkSettings *settings = gtk_settings_get_default();
43
+
44
+ return bare_gtk__create_tag(env, state, settings);
45
+ }
46
+
47
+ // Connected once and left connected, so the mask alone decides whether anything
48
+ // is sent. Settings belong to the display and outlive every wrapper.
49
+ static js_value_t *
50
+ bare_gtk_settings_event_mask(js_env_t *env, js_callback_info_t *info) {
51
+ int err;
52
+
53
+ size_t argc = 2;
54
+ js_value_t *argv[2];
55
+
56
+ bare_gtk_state_t *state;
57
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
58
+ assert(err == 0);
59
+
60
+ assert(argc == 2);
61
+
62
+ GtkSettings *settings;
63
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "settings", (gpointer *) &settings);
64
+ if (err < 0) return NULL;
65
+
66
+ uint32_t events;
67
+ err = bare_gtk__read_uint32(env, argv[1], "events", &events);
68
+ if (err < 0) return NULL;
69
+
70
+ if (bare_gtk__observe(state, settings, events)) {
71
+ g_signal_connect(
72
+ settings,
73
+ "notify::gtk-application-prefer-dark-theme",
74
+ G_CALLBACK(bare_gtk_settings__on_prefer_dark_theme),
75
+ state
76
+ );
77
+
78
+ g_signal_connect(
79
+ settings,
80
+ "notify::gtk-xft-dpi",
81
+ G_CALLBACK(bare_gtk_settings__on_xft_dpi),
82
+ state
83
+ );
84
+ }
85
+
86
+ return NULL;
87
+ }
88
+
89
+ static js_value_t *
90
+ bare_gtk_settings_prefer_dark_theme(js_env_t *env, js_callback_info_t *info) {
91
+ int err;
92
+
93
+ size_t argc = 2;
94
+ js_value_t *argv[2];
95
+
96
+ bare_gtk_state_t *state;
97
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
98
+ assert(err == 0);
99
+
100
+ assert(argc == 1 || argc == 2);
101
+
102
+ GtkSettings *settings;
103
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "settings", (gpointer *) &settings);
104
+ if (err < 0) return NULL;
105
+
106
+ js_value_t *result = NULL;
107
+
108
+ if (argc == 1) {
109
+ gboolean prefer_dark;
110
+
111
+ g_object_get(settings, "gtk-application-prefer-dark-theme", &prefer_dark, NULL);
112
+
113
+ err = js_get_boolean(env, prefer_dark, &result);
114
+ assert(err == 0);
115
+ } else {
116
+ bool prefer_dark;
117
+ err = bare_gtk__read_bool(env, argv[1], "prefer_dark_theme", &prefer_dark);
118
+ if (err < 0) return NULL;
119
+
120
+ g_object_set(settings, "gtk-application-prefer-dark-theme", (gboolean) prefer_dark, NULL);
121
+ }
122
+
123
+ return result;
124
+ }
125
+
126
+ static js_value_t *
127
+ bare_gtk_settings_xft_dpi(js_env_t *env, js_callback_info_t *info) {
128
+ int err;
129
+
130
+ size_t argc = 2;
131
+ js_value_t *argv[2];
132
+
133
+ bare_gtk_state_t *state;
134
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
135
+ assert(err == 0);
136
+
137
+ assert(argc == 1 || argc == 2);
138
+
139
+ GtkSettings *settings;
140
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "settings", (gpointer *) &settings);
141
+ if (err < 0) return NULL;
142
+
143
+ js_value_t *result = NULL;
144
+
145
+ if (argc == 1) {
146
+ int dpi;
147
+
148
+ g_object_get(settings, "gtk-xft-dpi", &dpi, NULL);
149
+
150
+ err = js_create_int32(env, dpi, &result);
151
+ assert(err == 0);
152
+ } else {
153
+ int32_t dpi;
154
+ err = bare_gtk__read_int32(env, argv[1], "xft_dpi", &dpi);
155
+ if (err < 0) return NULL;
156
+
157
+ g_object_set(settings, "gtk-xft-dpi", (int) dpi, NULL);
158
+ }
159
+
160
+ return result;
161
+ }
162
+
163
+ #endif // BARE_GTK_SETTINGS_H
@@ -0,0 +1,34 @@
1
+ const binding = require('../binding')
2
+ const wrap = require('./wrap')
3
+ const GObject = require('./object')
4
+
5
+ module.exports = exports = class GTKSettings extends GObject {
6
+ static _events = {
7
+ 'prefer-dark-theme': binding.SETTINGS_EVENT_PREFER_DARK_THEME,
8
+ 'xft-dpi': binding.SETTINGS_EVENT_XFT_DPI
9
+ }
10
+
11
+ _eventMask(mask) {
12
+ binding.settingsEventMask(this._tag, mask)
13
+ }
14
+
15
+ static getDefault() {
16
+ return wrap(GTKSettings, binding.settingsGetDefault())
17
+ }
18
+
19
+ get preferDarkTheme() {
20
+ return binding.settingsPreferDarkTheme(this._tag)
21
+ }
22
+
23
+ set preferDarkTheme(value) {
24
+ binding.settingsPreferDarkTheme(this._tag, value)
25
+ }
26
+
27
+ get xftDpi() {
28
+ return binding.settingsXftDpi(this._tag)
29
+ }
30
+
31
+ set xftDpi(value) {
32
+ binding.settingsXftDpi(this._tag, value)
33
+ }
34
+ }
@@ -0,0 +1,12 @@
1
+ import GTKWidget = require('./widget')
2
+
3
+ /** A spinning busy indicator, as a `GtkSpinner`. */
4
+ interface GTKSpinner extends GTKWidget {
5
+ spinning: boolean
6
+ }
7
+
8
+ declare class GTKSpinner {
9
+ constructor()
10
+ }
11
+
12
+ export = GTKSpinner
package/lib/spinner.h ADDED
@@ -0,0 +1,61 @@
1
+ #ifndef BARE_GTK_SPINNER_H
2
+ #define BARE_GTK_SPINNER_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_spinner_init(js_env_t *env, js_callback_info_t *info) {
13
+ int err;
14
+
15
+ bare_gtk_state_t *state;
16
+ err = js_get_callback_info(env, info, NULL, NULL, NULL, (void **) &state);
17
+ assert(err == 0);
18
+
19
+ GtkWidget *handle = gtk_spinner_new();
20
+
21
+ js_value_t *result;
22
+ err = js_create_uint32(env, bare_gobject_tag(state->registry, handle), &result);
23
+ assert(err == 0);
24
+
25
+ return result;
26
+ }
27
+
28
+ static js_value_t *
29
+ bare_gtk_spinner_spinning(js_env_t *env, js_callback_info_t *info) {
30
+ int err;
31
+
32
+ size_t argc = 2;
33
+ js_value_t *argv[2];
34
+
35
+ bare_gtk_state_t *state;
36
+ err = js_get_callback_info(env, info, &argc, argv, NULL, (void **) &state);
37
+ assert(err == 0);
38
+
39
+ assert(argc == 1 || argc == 2);
40
+
41
+ GtkSpinner *handle;
42
+ err = bare_gobject_read_tag(env, state->registry, argv[0], "spinner", (gpointer *) &handle);
43
+ if (err < 0) return NULL;
44
+
45
+ js_value_t *result = NULL;
46
+
47
+ if (argc == 1) {
48
+ err = js_get_boolean(env, gtk_spinner_get_spinning(handle), &result);
49
+ assert(err == 0);
50
+ } else {
51
+ bool spinning;
52
+ err = bare_gtk__read_bool(env, argv[1], "spinning", &spinning);
53
+ if (err < 0) return NULL;
54
+
55
+ gtk_spinner_set_spinning(handle, spinning);
56
+ }
57
+
58
+ return result;
59
+ }
60
+
61
+ #endif // BARE_GTK_SPINNER_H
package/lib/spinner.js ADDED
@@ -0,0 +1,22 @@
1
+ const binding = require('../binding')
2
+ const GTKWidget = require('./widget')
3
+
4
+ module.exports = exports = class GTKSpinner extends GTKWidget {
5
+ _init() {
6
+ return binding.spinnerInit()
7
+ }
8
+
9
+ get spinning() {
10
+ return binding.spinnerSpinning(this._tag)
11
+ }
12
+
13
+ set spinning(value) {
14
+ binding.spinnerSpinning(this._tag, value)
15
+ }
16
+
17
+ [Symbol.for('bare.inspect')]() {
18
+ return {
19
+ __proto__: { constructor: GTKSpinner }
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,15 @@
1
+ import GDKDisplay = require('./display')
2
+ import GTKCssProvider = require('./css-provider')
3
+
4
+ /**
5
+ * Apply a style sheet to every widget on `display`. `priority` is a `STYLE_PROVIDER_PRIORITY_*`
6
+ * constant.
7
+ */
8
+ export function addProviderForDisplay(
9
+ display: GDKDisplay,
10
+ provider: GTKCssProvider,
11
+ priority: number
12
+ ): void
13
+
14
+ /** Stop applying a style sheet added with `addProviderForDisplay()`. */
15
+ export function removeProviderForDisplay(display: GDKDisplay, provider: GTKCssProvider): void