bare-gtk 0.0.0 → 0.1.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.c +2 -0
- package/lib/runtime.c +64 -26
- package/lib/widget.h +51 -0
- package/lib/widget.js +8 -0
- package/lib/window.h +69 -8
- package/lib/window.js +13 -1
- package/package.json +1 -1
- package/prebuilds/linux-arm64/bare +0 -0
- package/prebuilds/linux-arm64/bare-gtk.bare +0 -0
- package/prebuilds/linux-x64/bare +0 -0
- package/prebuilds/linux-x64/bare-gtk.bare +0 -0
package/binding.c
CHANGED
|
@@ -22,8 +22,10 @@ bare_gtk_exports(js_env_t *env, js_value_t *exports) {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
V("widgetVisible", bare_gtk_widget_visible)
|
|
25
|
+
V("widgetSizeRequest", bare_gtk_widget_size_request)
|
|
25
26
|
|
|
26
27
|
V("windowInit", bare_gtk_window_init)
|
|
28
|
+
V("windowDefaultSize", bare_gtk_window_default_size)
|
|
27
29
|
V("windowChild", bare_gtk_window_child)
|
|
28
30
|
#undef V
|
|
29
31
|
|
package/lib/runtime.c
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include <path.h>
|
|
6
6
|
#include <rlimit.h>
|
|
7
7
|
#include <signal.h>
|
|
8
|
+
#include <unistd.h>
|
|
8
9
|
#include <uv.h>
|
|
9
10
|
|
|
10
11
|
#include <gtk/gtk.h>
|
|
@@ -14,9 +15,6 @@ static uv_async_t bare__platform_shutdown;
|
|
|
14
15
|
static uv_thread_t bare__platform_thread;
|
|
15
16
|
static js_platform_t *bare__platform;
|
|
16
17
|
|
|
17
|
-
static int bare__argc;
|
|
18
|
-
static char **bare__argv;
|
|
19
|
-
|
|
20
18
|
static uv_loop_t *bare__loop;
|
|
21
19
|
static uv_async_t bare__shutdown;
|
|
22
20
|
static bare_t *bare;
|
|
@@ -106,24 +104,6 @@ static void
|
|
|
106
104
|
bare__on_activate(GtkApplication *app, gpointer data) {
|
|
107
105
|
int err;
|
|
108
106
|
|
|
109
|
-
err = uv_barrier_init(&bare__platform_ready, 2);
|
|
110
|
-
assert(err == 0);
|
|
111
|
-
|
|
112
|
-
err = uv_thread_create(&bare__platform_thread, bare__on_platform_thread, NULL);
|
|
113
|
-
assert(err == 0);
|
|
114
|
-
|
|
115
|
-
uv_barrier_wait(&bare__platform_ready);
|
|
116
|
-
|
|
117
|
-
uv_barrier_destroy(&bare__platform_ready);
|
|
118
|
-
|
|
119
|
-
bare__loop = uv_default_loop();
|
|
120
|
-
|
|
121
|
-
err = uv_async_init(bare__loop, &bare__shutdown, bare__on_shutdown);
|
|
122
|
-
assert(err == 0);
|
|
123
|
-
|
|
124
|
-
err = bare_setup(bare__loop, bare__platform, NULL, bare__argc, (const char **) bare__argv, NULL, &bare);
|
|
125
|
-
assert(err == 0);
|
|
126
|
-
|
|
127
107
|
size_t len;
|
|
128
108
|
|
|
129
109
|
char bin[4096];
|
|
@@ -136,18 +116,18 @@ bare__on_activate(GtkApplication *app, gpointer data) {
|
|
|
136
116
|
err = path_dirname(bin, &dir, path_behavior_system);
|
|
137
117
|
assert(err == 0);
|
|
138
118
|
|
|
139
|
-
char
|
|
119
|
+
char entry[4096];
|
|
140
120
|
len = 4096;
|
|
141
121
|
|
|
142
122
|
err = path_join(
|
|
143
123
|
(const char *[]) {bin, "..", "..", "share", &bin[dir], "app.bundle", NULL},
|
|
144
|
-
|
|
124
|
+
entry,
|
|
145
125
|
&len,
|
|
146
126
|
path_behavior_system
|
|
147
127
|
);
|
|
148
128
|
assert(err == 0);
|
|
149
129
|
|
|
150
|
-
err = bare_load(bare,
|
|
130
|
+
err = bare_load(bare, entry, NULL, NULL);
|
|
151
131
|
(void) err;
|
|
152
132
|
|
|
153
133
|
bare__channel = g_io_channel_unix_new(bare__loop->backend_fd);
|
|
@@ -175,8 +155,66 @@ main(int argc, char *argv[]) {
|
|
|
175
155
|
|
|
176
156
|
argv = uv_setup_args(argc, argv);
|
|
177
157
|
|
|
178
|
-
|
|
179
|
-
|
|
158
|
+
err = uv_barrier_init(&bare__platform_ready, 2);
|
|
159
|
+
assert(err == 0);
|
|
160
|
+
|
|
161
|
+
err = uv_thread_create(&bare__platform_thread, bare__on_platform_thread, NULL);
|
|
162
|
+
assert(err == 0);
|
|
163
|
+
|
|
164
|
+
uv_barrier_wait(&bare__platform_ready);
|
|
165
|
+
|
|
166
|
+
uv_barrier_destroy(&bare__platform_ready);
|
|
167
|
+
|
|
168
|
+
bare__loop = uv_default_loop();
|
|
169
|
+
|
|
170
|
+
size_t len;
|
|
171
|
+
|
|
172
|
+
char bin[4096];
|
|
173
|
+
len = sizeof(bin);
|
|
174
|
+
|
|
175
|
+
err = uv_exepath(bin, &len);
|
|
176
|
+
assert(err == 0);
|
|
177
|
+
|
|
178
|
+
size_t dir;
|
|
179
|
+
err = path_dirname(bin, &dir, path_behavior_system);
|
|
180
|
+
assert(err == 0);
|
|
181
|
+
|
|
182
|
+
char preflight[4096];
|
|
183
|
+
len = 4096;
|
|
184
|
+
|
|
185
|
+
err = path_join(
|
|
186
|
+
(const char *[]) {bin, "..", "..", "share", &bin[dir], "preflight.bundle", NULL},
|
|
187
|
+
preflight,
|
|
188
|
+
&len,
|
|
189
|
+
path_behavior_system
|
|
190
|
+
);
|
|
191
|
+
assert(err == 0);
|
|
192
|
+
|
|
193
|
+
uv_fs_t fs;
|
|
194
|
+
err = uv_fs_access(bare__loop, &fs, preflight, R_OK, NULL);
|
|
195
|
+
|
|
196
|
+
if (err == 0) {
|
|
197
|
+
err = bare_setup(bare__loop, bare__platform, NULL, argc, (const char **) argv, NULL, &bare);
|
|
198
|
+
assert(err == 0);
|
|
199
|
+
|
|
200
|
+
err = bare_load(bare, preflight, NULL, NULL);
|
|
201
|
+
(void) err;
|
|
202
|
+
|
|
203
|
+
err = bare_run(bare, UV_RUN_DEFAULT);
|
|
204
|
+
assert(err == 0);
|
|
205
|
+
|
|
206
|
+
int exit_code;
|
|
207
|
+
err = bare_teardown(bare, UV_RUN_DEFAULT, &exit_code);
|
|
208
|
+
assert(err == 0);
|
|
209
|
+
|
|
210
|
+
if (exit_code != 0) _exit(exit_code);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
err = uv_async_init(bare__loop, &bare__shutdown, bare__on_shutdown);
|
|
214
|
+
assert(err == 0);
|
|
215
|
+
|
|
216
|
+
err = bare_setup(bare__loop, bare__platform, NULL, argc, (const char **) argv, NULL, &bare);
|
|
217
|
+
assert(err == 0);
|
|
180
218
|
|
|
181
219
|
GtkApplication *app = bare_gtk_app = gtk_application_new(NULL, 0);
|
|
182
220
|
|
package/lib/widget.h
CHANGED
|
@@ -37,3 +37,54 @@ bare_gtk_widget_visible(js_env_t *env, js_callback_info_t *info) {
|
|
|
37
37
|
|
|
38
38
|
return result;
|
|
39
39
|
}
|
|
40
|
+
|
|
41
|
+
static js_value_t *
|
|
42
|
+
bare_gtk_widget_size_request(js_env_t *env, js_callback_info_t *info) {
|
|
43
|
+
int err;
|
|
44
|
+
|
|
45
|
+
size_t argc = 3;
|
|
46
|
+
js_value_t *argv[3];
|
|
47
|
+
|
|
48
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
49
|
+
assert(err == 0);
|
|
50
|
+
|
|
51
|
+
assert(argc == 1 || argc == 3);
|
|
52
|
+
|
|
53
|
+
GtkWidget *widget;
|
|
54
|
+
err = js_get_value_external(env, argv[0], (void **) &widget);
|
|
55
|
+
assert(err == 0);
|
|
56
|
+
|
|
57
|
+
js_value_t *result = NULL;
|
|
58
|
+
|
|
59
|
+
if (argc == 1) {
|
|
60
|
+
int width, height;
|
|
61
|
+
gtk_widget_get_size_request(widget, &width, &height);
|
|
62
|
+
|
|
63
|
+
err = js_create_array_with_length(env, 2, &result);
|
|
64
|
+
assert(err == 0);
|
|
65
|
+
|
|
66
|
+
#define V(i, d) \
|
|
67
|
+
{ \
|
|
68
|
+
js_value_t *val; \
|
|
69
|
+
err = js_create_int32(env, d, &val); \
|
|
70
|
+
assert(err == 0); \
|
|
71
|
+
err = js_set_element(env, result, i, val); \
|
|
72
|
+
assert(err == 0); \
|
|
73
|
+
}
|
|
74
|
+
V(0, width)
|
|
75
|
+
V(1, width)
|
|
76
|
+
#undef V
|
|
77
|
+
} else {
|
|
78
|
+
int32_t width;
|
|
79
|
+
err = js_get_value_int32(env, argv[1], &width);
|
|
80
|
+
assert(err == 0);
|
|
81
|
+
|
|
82
|
+
int32_t height;
|
|
83
|
+
err = js_get_value_int32(env, argv[2], &height);
|
|
84
|
+
assert(err == 0);
|
|
85
|
+
|
|
86
|
+
gtk_widget_set_size_request(widget, width, height);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return result;
|
|
90
|
+
}
|
package/lib/widget.js
CHANGED
|
@@ -15,4 +15,12 @@ module.exports = class GTKWidget extends EventEmitter {
|
|
|
15
15
|
set visible(value) {
|
|
16
16
|
binding.widgetVisible(this._handle, value)
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
get sizeRequest() {
|
|
20
|
+
return binding.widgetSizeRequest(this._handle)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
set sizeRequest([width, height]) {
|
|
24
|
+
binding.widgetSizeRequest(this._handle, width, height)
|
|
25
|
+
}
|
|
18
26
|
}
|
package/lib/window.h
CHANGED
|
@@ -48,6 +48,11 @@ bare_window_class_init(BareWindowClass *class) {
|
|
|
48
48
|
object_class->finalize = bare_window_finalize;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
static void
|
|
52
|
+
bare_gtk_window__on_release(js_env_t *env, void *data, void *finalize_hint) {
|
|
53
|
+
g_object_unref(data);
|
|
54
|
+
}
|
|
55
|
+
|
|
51
56
|
static js_value_t *
|
|
52
57
|
bare_gtk_window_init(js_env_t *env, js_callback_info_t *info) {
|
|
53
58
|
int err;
|
|
@@ -70,12 +75,63 @@ bare_gtk_window_init(js_env_t *env, js_callback_info_t *info) {
|
|
|
70
75
|
assert(err == 0);
|
|
71
76
|
|
|
72
77
|
js_value_t *handle;
|
|
73
|
-
err = js_create_external(env, window,
|
|
78
|
+
err = js_create_external(env, window, bare_gtk_window__on_release, NULL, &handle);
|
|
74
79
|
assert(err == 0);
|
|
75
80
|
|
|
76
81
|
return handle;
|
|
77
82
|
}
|
|
78
83
|
|
|
84
|
+
static js_value_t *
|
|
85
|
+
bare_gtk_window_default_size(js_env_t *env, js_callback_info_t *info) {
|
|
86
|
+
int err;
|
|
87
|
+
|
|
88
|
+
size_t argc = 3;
|
|
89
|
+
js_value_t *argv[3];
|
|
90
|
+
|
|
91
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
92
|
+
assert(err == 0);
|
|
93
|
+
|
|
94
|
+
assert(argc == 1 || argc == 3);
|
|
95
|
+
|
|
96
|
+
BareWindow *window;
|
|
97
|
+
err = js_get_value_external(env, argv[0], (void **) &window);
|
|
98
|
+
assert(err == 0);
|
|
99
|
+
|
|
100
|
+
js_value_t *result = NULL;
|
|
101
|
+
|
|
102
|
+
if (argc == 1) {
|
|
103
|
+
int width, height;
|
|
104
|
+
gtk_window_get_default_size(GTK_WINDOW(window), &width, &height);
|
|
105
|
+
|
|
106
|
+
err = js_create_array_with_length(env, 2, &result);
|
|
107
|
+
assert(err == 0);
|
|
108
|
+
|
|
109
|
+
#define V(i, d) \
|
|
110
|
+
{ \
|
|
111
|
+
js_value_t *val; \
|
|
112
|
+
err = js_create_int32(env, d, &val); \
|
|
113
|
+
assert(err == 0); \
|
|
114
|
+
err = js_set_element(env, result, i, val); \
|
|
115
|
+
assert(err == 0); \
|
|
116
|
+
}
|
|
117
|
+
V(0, width)
|
|
118
|
+
V(1, width)
|
|
119
|
+
#undef V
|
|
120
|
+
} else {
|
|
121
|
+
int32_t width;
|
|
122
|
+
err = js_get_value_int32(env, argv[1], &width);
|
|
123
|
+
assert(err == 0);
|
|
124
|
+
|
|
125
|
+
int32_t height;
|
|
126
|
+
err = js_get_value_int32(env, argv[2], &height);
|
|
127
|
+
assert(err == 0);
|
|
128
|
+
|
|
129
|
+
gtk_window_set_default_size(GTK_WINDOW(window), width, height);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
|
|
79
135
|
static js_value_t *
|
|
80
136
|
bare_gtk_window_child(js_env_t *env, js_callback_info_t *info) {
|
|
81
137
|
int err;
|
|
@@ -88,23 +144,28 @@ bare_gtk_window_child(js_env_t *env, js_callback_info_t *info) {
|
|
|
88
144
|
|
|
89
145
|
assert(argc == 1 || argc == 2);
|
|
90
146
|
|
|
91
|
-
|
|
92
|
-
err = js_get_value_external(env, argv[0], &
|
|
147
|
+
BareWindow *window;
|
|
148
|
+
err = js_get_value_external(env, argv[0], (void **) &window);
|
|
93
149
|
assert(err == 0);
|
|
94
150
|
|
|
95
|
-
GtkWindow *window = handle;
|
|
96
|
-
|
|
97
151
|
js_value_t *result = NULL;
|
|
98
152
|
|
|
99
153
|
if (argc == 1) {
|
|
100
|
-
|
|
101
|
-
|
|
154
|
+
GtkWidget *handle = gtk_window_get_child(GTK_WINDOW(window));
|
|
155
|
+
|
|
156
|
+
if (handle) {
|
|
157
|
+
err = js_create_external(env, handle, NULL, NULL, &result);
|
|
158
|
+
assert(err == 0);
|
|
159
|
+
} else {
|
|
160
|
+
err = js_get_null(env, &result);
|
|
161
|
+
assert(err == 0);
|
|
162
|
+
}
|
|
102
163
|
} else {
|
|
103
164
|
void *handle;
|
|
104
165
|
err = js_get_value_external(env, argv[1], &handle);
|
|
105
166
|
assert(err == 0);
|
|
106
167
|
|
|
107
|
-
gtk_window_set_child(window, handle);
|
|
168
|
+
gtk_window_set_child(GTK_WINDOW(window), handle);
|
|
108
169
|
}
|
|
109
170
|
|
|
110
171
|
return result;
|
package/lib/window.js
CHANGED
|
@@ -8,8 +8,20 @@ module.exports = exports = class GTKWindow extends GTKWidget {
|
|
|
8
8
|
this._handle = binding.windowInit(this)
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
get defaultSize() {
|
|
12
|
+
return binding.windowDefaultSize(this._handle)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
set defaultSize([width, height]) {
|
|
16
|
+
binding.windowDefaultSize(this._handle, width, height)
|
|
17
|
+
}
|
|
18
|
+
|
|
11
19
|
get child() {
|
|
12
|
-
|
|
20
|
+
const handle = binding.windowChild(this._handle)
|
|
21
|
+
|
|
22
|
+
if (handle === null) return null
|
|
23
|
+
|
|
24
|
+
return new GTKWidget(handle)
|
|
13
25
|
}
|
|
14
26
|
|
|
15
27
|
set child(widget) {
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|