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 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 bundle[4096];
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
- bundle,
124
+ entry,
145
125
  &len,
146
126
  path_behavior_system
147
127
  );
148
128
  assert(err == 0);
149
129
 
150
- err = bare_load(bare, bundle, NULL, NULL);
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
- bare__argc = argc;
179
- bare__argv = argv;
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, NULL, NULL, &handle);
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
- void *handle;
92
- err = js_get_value_external(env, argv[0], &handle);
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
- err = js_create_external(env, gtk_window_get_child(window), NULL, NULL, &result);
101
- assert(err == 0);
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
- return new GTKWidget(binding.windowChild(this._handle))
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-gtk",
3
- "version": "0.0.0",
3
+ "version": "0.1.0",
4
4
  "description": "GTK bindings and runtime for Bare",
5
5
  "exports": {
6
6
  "./package": "./package.json",
Binary file
Binary file