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.
- package/CMakeLists.txt +16 -2
- package/README.md +35 -1
- package/binding.c +350 -1
- package/index.d.ts +65 -0
- package/index.js +32 -0
- package/lib/adjustment.d.ts +21 -0
- package/lib/adjustment.h +112 -0
- package/lib/adjustment.js +24 -0
- package/lib/bridging.h +347 -0
- package/lib/clipboard.d.ts +22 -0
- package/lib/clipboard.h +176 -0
- package/lib/clipboard.js +18 -0
- package/lib/constants.d.ts +40 -0
- package/lib/constants.js +51 -0
- package/lib/css-provider.d.ts +13 -0
- package/lib/css-provider.h +56 -0
- package/lib/css-provider.js +14 -0
- package/lib/cursor.d.ts +35 -0
- package/lib/cursor.h +220 -0
- package/lib/cursor.js +45 -0
- package/lib/device.d.ts +13 -0
- package/lib/device.h +35 -0
- package/lib/device.js +8 -0
- package/lib/dialog.d.ts +41 -0
- package/lib/dialog.js +37 -0
- package/lib/display.d.ts +25 -0
- package/lib/display.h +86 -0
- package/lib/display.js +23 -0
- package/lib/editable.h +160 -0
- package/lib/entry.d.ts +93 -0
- package/lib/entry.h +340 -0
- package/lib/entry.js +118 -0
- package/lib/event-controller-focus.d.ts +17 -0
- package/lib/event-controller-focus.h +55 -0
- package/lib/event-controller-focus.js +13 -0
- package/lib/event-controller-motion.d.ts +18 -0
- package/lib/event-controller-motion.h +66 -0
- package/lib/event-controller-motion.js +14 -0
- package/lib/event-controller.d.ts +17 -0
- package/lib/event-controller.h +103 -0
- package/lib/event-controller.js +22 -0
- package/lib/events.js +23 -0
- package/lib/fixed.d.ts +10 -0
- package/lib/fixed.h +28 -0
- package/lib/fixed.js +8 -0
- package/lib/frame-fixed.d.ts +10 -0
- package/lib/frame-fixed.js +12 -0
- package/lib/frame-layout-child.d.ts +17 -0
- package/lib/frame-layout-child.js +16 -0
- package/lib/frame-layout.d.ts +27 -0
- package/lib/frame-layout.h +291 -0
- package/lib/frame-layout.js +19 -0
- package/lib/gesture-click.d.ts +19 -0
- package/lib/gesture-click.h +66 -0
- package/lib/gesture-click.js +14 -0
- package/lib/gesture-drag.d.ts +25 -0
- package/lib/gesture-drag.h +165 -0
- package/lib/gesture-drag.js +23 -0
- package/lib/gesture-single.d.ts +13 -0
- package/lib/gesture-single.js +12 -0
- package/lib/gesture.d.ts +13 -0
- package/lib/gesture.h +73 -0
- package/lib/gesture.js +8 -0
- package/lib/handle.d.ts +5 -0
- package/lib/handle.js +6 -0
- package/lib/label.d.ts +36 -0
- package/lib/label.h +269 -0
- package/lib/label.js +78 -0
- package/lib/layout-child.d.ts +13 -0
- package/lib/layout-child.h +35 -0
- package/lib/layout-child.js +10 -0
- package/lib/layout-manager.d.ts +15 -0
- package/lib/layout-manager.h +42 -0
- package/lib/layout-manager.js +15 -0
- package/lib/message-dialog.d.ts +26 -0
- package/lib/message-dialog.h +190 -0
- package/lib/message-dialog.js +22 -0
- package/lib/monitor.d.ts +32 -0
- package/lib/monitor.h +143 -0
- package/lib/monitor.js +40 -0
- package/lib/native.h +31 -0
- package/lib/object.d.ts +18 -0
- package/lib/object.js +38 -0
- package/lib/paintable.d.ts +10 -0
- package/lib/paintable.js +3 -0
- package/lib/picture.d.ts +22 -0
- package/lib/picture.h +127 -0
- package/lib/picture.js +35 -0
- package/lib/reachable.js +11 -0
- package/lib/runtime.c +21 -4
- package/lib/scrolled-window.d.ts +22 -0
- package/lib/scrolled-window.h +142 -0
- package/lib/scrolled-window.js +37 -0
- package/lib/settings.d.ts +25 -0
- package/lib/settings.h +163 -0
- package/lib/settings.js +34 -0
- package/lib/spinner.d.ts +12 -0
- package/lib/spinner.h +61 -0
- package/lib/spinner.js +22 -0
- package/lib/style-context.d.ts +15 -0
- package/lib/style-context.h +67 -0
- package/lib/style-context.js +9 -0
- package/lib/surface.d.ts +19 -0
- package/lib/surface.h +61 -0
- package/lib/surface.js +22 -0
- package/lib/switch.d.ts +19 -0
- package/lib/switch.h +114 -0
- package/lib/switch.js +30 -0
- package/lib/text-buffer.d.ts +31 -0
- package/lib/text-buffer.h +246 -0
- package/lib/text-buffer.js +33 -0
- package/lib/text-view.d.ts +39 -0
- package/lib/text-view.h +247 -0
- package/lib/text-view.js +63 -0
- package/lib/text.d.ts +18 -0
- package/lib/text.h +189 -0
- package/lib/text.js +31 -0
- package/lib/texture.d.ts +20 -0
- package/lib/texture.h +100 -0
- package/lib/texture.js +17 -0
- package/lib/viewport.d.ts +22 -0
- package/lib/viewport.h +151 -0
- package/lib/viewport.js +38 -0
- package/lib/widget.d.ts +102 -0
- package/lib/widget.h +695 -17
- package/lib/widget.js +176 -11
- package/lib/window.d.ts +31 -0
- package/lib/window.h +142 -61
- package/lib/window.js +32 -11
- package/lib/wrap.js +7 -0
- package/package.json +12 -3
- package/prebuilds/linux-arm64/bare +2 -2
- package/prebuilds/linux-arm64/bare-gtk.bare +0 -0
- package/prebuilds/linux-x64/bare +2 -2
- 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
|
+
}
|
package/lib/reachable.js
ADDED
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
|
-
|
|
240
|
-
|
|
254
|
+
if (!bare__exited) {
|
|
255
|
+
err = bare_terminate(bare);
|
|
256
|
+
assert(err == 0);
|
|
241
257
|
|
|
242
|
-
|
|
243
|
-
|
|
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
|
package/lib/settings.js
ADDED
|
@@ -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
|
+
}
|
package/lib/spinner.d.ts
ADDED
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
|