bare-ui-kit 0.0.0 → 0.1.1
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 +14 -1
- package/README.md +1 -1
- package/binding.js +1 -0
- package/binding.m +39 -0
- package/index.js +3 -0
- package/lib/bridging.h +8 -0
- package/lib/runtime.m +62 -34
- package/lib/view-controller.h +97 -0
- package/lib/view-controller.js +25 -0
- package/lib/view.h +73 -0
- package/lib/view.js +29 -0
- package/lib/window.h +124 -0
- package/lib/window.js +34 -0
- package/package.json +7 -2
- package/prebuilds/ios-arm64/bare +0 -0
- package/prebuilds/ios-arm64/bare-ui-kit.bare +0 -0
- package/prebuilds/ios-arm64-simulator/bare +0 -0
- package/prebuilds/ios-arm64-simulator/bare-ui-kit.bare +0 -0
- package/prebuilds/ios-x64-simulator/bare +0 -0
- package/prebuilds/ios-x64-simulator/bare-ui-kit.bare +0 -0
package/CMakeLists.txt
CHANGED
|
@@ -8,6 +8,20 @@ project(bare_ui_kit C OBJC)
|
|
|
8
8
|
fetch_package("github:holepunchto/bare@1.24.5")
|
|
9
9
|
fetch_package("github:holepunchto/libpath")
|
|
10
10
|
|
|
11
|
+
add_bare_module(bare_ui_kit)
|
|
12
|
+
|
|
13
|
+
target_sources(
|
|
14
|
+
${bare_ui_kit}
|
|
15
|
+
PRIVATE
|
|
16
|
+
binding.m
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
target_link_libraries(
|
|
20
|
+
${bare_ui_kit}
|
|
21
|
+
PUBLIC
|
|
22
|
+
"-framework UIKit"
|
|
23
|
+
)
|
|
24
|
+
|
|
11
25
|
add_executable(bare_runtime)
|
|
12
26
|
|
|
13
27
|
target_sources(
|
|
@@ -35,7 +49,6 @@ target_link_libraries(
|
|
|
35
49
|
PUBLIC
|
|
36
50
|
$<LINK_LIBRARY:WHOLE_ARCHIVE,bare_static>
|
|
37
51
|
PRIVATE
|
|
38
|
-
log_static
|
|
39
52
|
rlimit_static
|
|
40
53
|
path_static
|
|
41
54
|
)
|
package/README.md
CHANGED
package/binding.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require.addon()
|
package/binding.m
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#import <assert.h>
|
|
2
|
+
#import <bare.h>
|
|
3
|
+
#import <js.h>
|
|
4
|
+
#import <utf.h>
|
|
5
|
+
|
|
6
|
+
#import <UIKit/UIKit.h>
|
|
7
|
+
|
|
8
|
+
#import "lib/view.h"
|
|
9
|
+
#import "lib/view-controller.h"
|
|
10
|
+
#import "lib/window.h"
|
|
11
|
+
|
|
12
|
+
static js_value_t *
|
|
13
|
+
bare_ui_kit_exports(js_env_t *env, js_value_t *exports) {
|
|
14
|
+
int err;
|
|
15
|
+
|
|
16
|
+
#define V(name, fn) \
|
|
17
|
+
{ \
|
|
18
|
+
js_value_t *val; \
|
|
19
|
+
err = js_create_function(env, name, -1, fn, NULL, &val); \
|
|
20
|
+
assert(err == 0); \
|
|
21
|
+
err = js_set_named_property(env, exports, name, val); \
|
|
22
|
+
assert(err == 0); \
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
V("viewHidden", bare_ui_kit_view_hidden)
|
|
26
|
+
V("viewAddSubview", bare_ui_kit_view_add_subview)
|
|
27
|
+
|
|
28
|
+
V("viewControllerInit", bare_ui_kit_view_controller_init)
|
|
29
|
+
V("viewControllerView", bare_ui_kit_view_controller_view)
|
|
30
|
+
|
|
31
|
+
V("windowInit", bare_ui_kit_window_init)
|
|
32
|
+
V("windowRootViewController", bare_ui_kit_window_root_view_controller)
|
|
33
|
+
V("windowMakeKeyWindow", bare_ui_kit_window_make_key_window)
|
|
34
|
+
#undef V
|
|
35
|
+
|
|
36
|
+
return exports;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
BARE_MODULE(bare_ui_kit, bare_ui_kit_exports)
|
package/index.js
ADDED
package/lib/bridging.h
ADDED
package/lib/runtime.m
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#import <assert.h>
|
|
2
2
|
#import <bare.h>
|
|
3
3
|
#import <js.h>
|
|
4
|
-
#import <log.h>
|
|
5
4
|
#import <path.h>
|
|
6
5
|
#import <rlimit.h>
|
|
7
6
|
#import <signal.h>
|
|
7
|
+
#import <unistd.h>
|
|
8
8
|
#import <uv.h>
|
|
9
9
|
|
|
10
10
|
#import <UIKit/UIKit.h>
|
|
@@ -14,9 +14,6 @@ static uv_async_t bare__platform_shutdown;
|
|
|
14
14
|
static uv_thread_t bare__platform_thread;
|
|
15
15
|
static js_platform_t *bare__platform;
|
|
16
16
|
|
|
17
|
-
static int bare__argc;
|
|
18
|
-
static char **bare__argv;
|
|
19
|
-
|
|
20
17
|
static uv_loop_t *bare__loop;
|
|
21
18
|
static uv_async_t bare__shutdown;
|
|
22
19
|
static bare_t *bare;
|
|
@@ -89,24 +86,6 @@ static void
|
|
|
89
86
|
bare__launch(void) {
|
|
90
87
|
int err;
|
|
91
88
|
|
|
92
|
-
err = uv_barrier_init(&bare__platform_ready, 2);
|
|
93
|
-
assert(err == 0);
|
|
94
|
-
|
|
95
|
-
err = uv_thread_create(&bare__platform_thread, bare__on_platform_thread, NULL);
|
|
96
|
-
assert(err == 0);
|
|
97
|
-
|
|
98
|
-
uv_barrier_wait(&bare__platform_ready);
|
|
99
|
-
|
|
100
|
-
uv_barrier_destroy(&bare__platform_ready);
|
|
101
|
-
|
|
102
|
-
bare__loop = uv_default_loop();
|
|
103
|
-
|
|
104
|
-
err = uv_async_init(bare__loop, &bare__shutdown, bare__on_shutdown);
|
|
105
|
-
assert(err == 0);
|
|
106
|
-
|
|
107
|
-
err = bare_setup(bare__loop, bare__platform, NULL, bare__argc, (const char **) bare__argv, NULL, &bare);
|
|
108
|
-
assert(err == 0);
|
|
109
|
-
|
|
110
89
|
size_t len;
|
|
111
90
|
|
|
112
91
|
char bin[4096];
|
|
@@ -115,22 +94,18 @@ bare__launch(void) {
|
|
|
115
94
|
err = uv_exepath(bin, &len);
|
|
116
95
|
assert(err == 0);
|
|
117
96
|
|
|
118
|
-
|
|
119
|
-
err = path_dirname(bin, &dir, path_behavior_system);
|
|
120
|
-
assert(err == 0);
|
|
121
|
-
|
|
122
|
-
char bundle[4096];
|
|
97
|
+
char entry[4096];
|
|
123
98
|
len = 4096;
|
|
124
99
|
|
|
125
100
|
err = path_join(
|
|
126
101
|
(const char *[]) {bin, "..", "app.bundle", NULL},
|
|
127
|
-
|
|
102
|
+
entry,
|
|
128
103
|
&len,
|
|
129
104
|
path_behavior_system
|
|
130
105
|
);
|
|
131
106
|
assert(err == 0);
|
|
132
107
|
|
|
133
|
-
err = bare_load(bare,
|
|
108
|
+
err = bare_load(bare, entry, NULL, NULL);
|
|
134
109
|
(void) err;
|
|
135
110
|
|
|
136
111
|
dispatch_queue_t queue = dispatch_get_main_queue();
|
|
@@ -215,16 +190,69 @@ main(int argc, char *argv[]) {
|
|
|
215
190
|
signal(SIGPIPE, SIG_IGN);
|
|
216
191
|
#endif
|
|
217
192
|
|
|
218
|
-
err = log_open("bare", 0);
|
|
219
|
-
assert(err == 0);
|
|
220
|
-
|
|
221
193
|
err = rlimit_set(rlimit_open_files, rlimit_infer);
|
|
222
194
|
assert(err == 0);
|
|
223
195
|
|
|
196
|
+
uv_disable_stdio_inheritance();
|
|
197
|
+
|
|
224
198
|
argv = uv_setup_args(argc, argv);
|
|
225
199
|
|
|
226
|
-
|
|
227
|
-
|
|
200
|
+
err = uv_barrier_init(&bare__platform_ready, 2);
|
|
201
|
+
assert(err == 0);
|
|
202
|
+
|
|
203
|
+
err = uv_thread_create(&bare__platform_thread, bare__on_platform_thread, NULL);
|
|
204
|
+
assert(err == 0);
|
|
205
|
+
|
|
206
|
+
uv_barrier_wait(&bare__platform_ready);
|
|
207
|
+
|
|
208
|
+
uv_barrier_destroy(&bare__platform_ready);
|
|
209
|
+
|
|
210
|
+
bare__loop = uv_default_loop();
|
|
211
|
+
|
|
212
|
+
size_t len;
|
|
213
|
+
|
|
214
|
+
char bin[4096];
|
|
215
|
+
len = sizeof(bin);
|
|
216
|
+
|
|
217
|
+
err = uv_exepath(bin, &len);
|
|
218
|
+
assert(err == 0);
|
|
219
|
+
|
|
220
|
+
char preflight[4096];
|
|
221
|
+
len = 4096;
|
|
222
|
+
|
|
223
|
+
err = path_join(
|
|
224
|
+
(const char *[]) {bin, "..", "preflight.bundle", NULL},
|
|
225
|
+
preflight,
|
|
226
|
+
&len,
|
|
227
|
+
path_behavior_system
|
|
228
|
+
);
|
|
229
|
+
assert(err == 0);
|
|
230
|
+
|
|
231
|
+
uv_fs_t fs;
|
|
232
|
+
err = uv_fs_access(bare__loop, &fs, preflight, R_OK, NULL);
|
|
233
|
+
|
|
234
|
+
if (err == 0) {
|
|
235
|
+
err = bare_setup(bare__loop, bare__platform, NULL, argc, (const char **) argv, NULL, &bare);
|
|
236
|
+
assert(err == 0);
|
|
237
|
+
|
|
238
|
+
err = bare_load(bare, preflight, NULL, NULL);
|
|
239
|
+
(void) err;
|
|
240
|
+
|
|
241
|
+
err = bare_run(bare, UV_RUN_DEFAULT);
|
|
242
|
+
assert(err == 0);
|
|
243
|
+
|
|
244
|
+
int exit_code;
|
|
245
|
+
err = bare_teardown(bare, UV_RUN_DEFAULT, &exit_code);
|
|
246
|
+
assert(err == 0);
|
|
247
|
+
|
|
248
|
+
if (exit_code != 0) _exit(exit_code);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
err = uv_async_init(bare__loop, &bare__shutdown, bare__on_shutdown);
|
|
252
|
+
assert(err == 0);
|
|
253
|
+
|
|
254
|
+
err = bare_setup(bare__loop, bare__platform, NULL, argc, (const char **) argv, NULL, &bare);
|
|
255
|
+
assert(err == 0);
|
|
228
256
|
|
|
229
257
|
@autoreleasepool {
|
|
230
258
|
return UIApplicationMain(argc, argv, @"BareApp", @"BareApp");
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#import <assert.h>
|
|
2
|
+
#import <bare.h>
|
|
3
|
+
#import <js.h>
|
|
4
|
+
|
|
5
|
+
#import <UIKit/UIKit.h>
|
|
6
|
+
|
|
7
|
+
#import "bridging.h"
|
|
8
|
+
|
|
9
|
+
@interface BareViewController : UIViewController {
|
|
10
|
+
@public
|
|
11
|
+
js_env_t *env;
|
|
12
|
+
js_ref_t *ctx;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@end
|
|
16
|
+
|
|
17
|
+
@implementation BareViewController
|
|
18
|
+
|
|
19
|
+
- (void)dealloc {
|
|
20
|
+
int err;
|
|
21
|
+
|
|
22
|
+
err = js_delete_reference(env, ctx);
|
|
23
|
+
assert(err == 0);
|
|
24
|
+
|
|
25
|
+
[super dealloc];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@end
|
|
29
|
+
|
|
30
|
+
static js_value_t *
|
|
31
|
+
bare_ui_kit_view_controller_init(js_env_t *env, js_callback_info_t *info) {
|
|
32
|
+
int err;
|
|
33
|
+
|
|
34
|
+
size_t argc = 1;
|
|
35
|
+
js_value_t *argv[1];
|
|
36
|
+
|
|
37
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
38
|
+
assert(err == 0);
|
|
39
|
+
|
|
40
|
+
assert(argc == 1);
|
|
41
|
+
|
|
42
|
+
js_value_t *result;
|
|
43
|
+
|
|
44
|
+
@autoreleasepool {
|
|
45
|
+
BareViewController *handle = [[BareViewController alloc] init];
|
|
46
|
+
|
|
47
|
+
err = js_create_external(env, (void *) CFBridgingRetain(handle), bare_ui_kit__on_bridged_release, NULL, &result);
|
|
48
|
+
assert(err == 0);
|
|
49
|
+
|
|
50
|
+
handle->env = env;
|
|
51
|
+
|
|
52
|
+
err = js_create_reference(env, argv[0], 1, &handle->ctx);
|
|
53
|
+
assert(err == 0);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static js_value_t *
|
|
60
|
+
bare_ui_kit_view_controller_view(js_env_t *env, js_callback_info_t *info) {
|
|
61
|
+
int err;
|
|
62
|
+
|
|
63
|
+
size_t argc = 2;
|
|
64
|
+
js_value_t *argv[2];
|
|
65
|
+
|
|
66
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
67
|
+
assert(err == 0);
|
|
68
|
+
|
|
69
|
+
assert(argc == 1 || argc == 2);
|
|
70
|
+
|
|
71
|
+
void *handle;
|
|
72
|
+
err = js_get_value_external(env, argv[0], &handle);
|
|
73
|
+
assert(err == 0);
|
|
74
|
+
|
|
75
|
+
js_value_t *result = NULL;
|
|
76
|
+
|
|
77
|
+
@autoreleasepool {
|
|
78
|
+
UIViewController *view_controller = (__bridge UIViewController *) handle;
|
|
79
|
+
|
|
80
|
+
if (argc == 1) {
|
|
81
|
+
UIView *view = view_controller.view;
|
|
82
|
+
|
|
83
|
+
err = js_create_external(env, (void *) CFBridgingRetain(view), bare_ui_kit__on_bridged_release, NULL, &result);
|
|
84
|
+
assert(err == 0);
|
|
85
|
+
} else {
|
|
86
|
+
void *handle;
|
|
87
|
+
err = js_get_value_external(env, argv[1], &handle);
|
|
88
|
+
assert(err == 0);
|
|
89
|
+
|
|
90
|
+
UIView *view = (__bridge UIView *) handle;
|
|
91
|
+
|
|
92
|
+
view_controller.view = view;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const EventEmitter = require('bare-events')
|
|
2
|
+
const binding = require('../binding')
|
|
3
|
+
const UIKitView = require('./view')
|
|
4
|
+
|
|
5
|
+
module.exports = class UIKitViewController extends EventEmitter {
|
|
6
|
+
constructor(handle = null) {
|
|
7
|
+
super()
|
|
8
|
+
|
|
9
|
+
this._handle = handle || binding.viewControllerInit(this)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
get view() {
|
|
13
|
+
return new UIKitView(binding.viewControllerView(this._handle))
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
set view(view) {
|
|
17
|
+
binding.viewControllerView(this._handle, view._handle)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
[Symbol.for('bare.inspect')]() {
|
|
21
|
+
return {
|
|
22
|
+
__proto__: { constructor: UIKitViewController }
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
package/lib/view.h
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
|
|
2
|
+
#import <assert.h>
|
|
3
|
+
#import <bare.h>
|
|
4
|
+
#import <js.h>
|
|
5
|
+
|
|
6
|
+
#import <UIKit/UIKit.h>
|
|
7
|
+
|
|
8
|
+
static js_value_t *
|
|
9
|
+
bare_ui_kit_view_hidden(js_env_t *env, js_callback_info_t *info) {
|
|
10
|
+
int err;
|
|
11
|
+
|
|
12
|
+
size_t argc = 2;
|
|
13
|
+
js_value_t *argv[2];
|
|
14
|
+
|
|
15
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
16
|
+
assert(err == 0);
|
|
17
|
+
|
|
18
|
+
assert(argc == 1 || argc == 2);
|
|
19
|
+
|
|
20
|
+
void *handle;
|
|
21
|
+
err = js_get_value_external(env, argv[0], &handle);
|
|
22
|
+
assert(err == 0);
|
|
23
|
+
|
|
24
|
+
js_value_t *result = NULL;
|
|
25
|
+
|
|
26
|
+
@autoreleasepool {
|
|
27
|
+
UIView *view = (__bridge UIView *) handle;
|
|
28
|
+
|
|
29
|
+
if (argc == 1) {
|
|
30
|
+
err = js_get_boolean(env, view.hidden, &result);
|
|
31
|
+
assert(err == 0);
|
|
32
|
+
} else {
|
|
33
|
+
bool value;
|
|
34
|
+
err = js_get_value_bool(env, argv[1], &value);
|
|
35
|
+
assert(err == 0);
|
|
36
|
+
|
|
37
|
+
view.hidden = value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
static js_value_t *
|
|
45
|
+
bare_ui_kit_view_add_subview(js_env_t *env, js_callback_info_t *info) {
|
|
46
|
+
int err;
|
|
47
|
+
|
|
48
|
+
size_t argc = 2;
|
|
49
|
+
js_value_t *argv[2];
|
|
50
|
+
|
|
51
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
52
|
+
assert(err == 0);
|
|
53
|
+
|
|
54
|
+
assert(argc == 2);
|
|
55
|
+
|
|
56
|
+
void *handle;
|
|
57
|
+
err = js_get_value_external(env, argv[0], &handle);
|
|
58
|
+
assert(err == 0);
|
|
59
|
+
|
|
60
|
+
@autoreleasepool {
|
|
61
|
+
UIView *view = (__bridge UIView *) handle;
|
|
62
|
+
|
|
63
|
+
void *handle;
|
|
64
|
+
err = js_get_value_external(env, argv[1], &handle);
|
|
65
|
+
assert(err == 0);
|
|
66
|
+
|
|
67
|
+
UIView *subview = (__bridge UIView *) handle;
|
|
68
|
+
|
|
69
|
+
[view addSubview:subview];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return NULL;
|
|
73
|
+
}
|
package/lib/view.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const EventEmitter = require('bare-events')
|
|
2
|
+
const binding = require('../binding')
|
|
3
|
+
|
|
4
|
+
module.exports = class UIKitView extends EventEmitter {
|
|
5
|
+
constructor(handle = null) {
|
|
6
|
+
super()
|
|
7
|
+
|
|
8
|
+
this._handle = handle
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
get hidden() {
|
|
12
|
+
return binding.viewHidden(this._handle)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
set hidden(value) {
|
|
16
|
+
binding.viewHidden(this._handle, value)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
addSubview(view) {
|
|
20
|
+
binding.viewAddSubview(this._handle, view._handle)
|
|
21
|
+
return this
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
[Symbol.for('bare.inspect')]() {
|
|
25
|
+
return {
|
|
26
|
+
__proto__: { constructor: UIKitView }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
package/lib/window.h
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#import <assert.h>
|
|
2
|
+
#import <bare.h>
|
|
3
|
+
#import <js.h>
|
|
4
|
+
|
|
5
|
+
#import <UIKit/UIKit.h>
|
|
6
|
+
|
|
7
|
+
#import "bridging.h"
|
|
8
|
+
|
|
9
|
+
@interface BareWindow : UIWindow {
|
|
10
|
+
@public
|
|
11
|
+
js_env_t *env;
|
|
12
|
+
js_ref_t *ctx;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@end
|
|
16
|
+
|
|
17
|
+
@implementation BareWindow
|
|
18
|
+
|
|
19
|
+
- (void)dealloc {
|
|
20
|
+
int err;
|
|
21
|
+
|
|
22
|
+
err = js_delete_reference(env, ctx);
|
|
23
|
+
assert(err == 0);
|
|
24
|
+
|
|
25
|
+
[super dealloc];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@end
|
|
29
|
+
|
|
30
|
+
static js_value_t *
|
|
31
|
+
bare_ui_kit_window_init(js_env_t *env, js_callback_info_t *info) {
|
|
32
|
+
int err;
|
|
33
|
+
|
|
34
|
+
size_t argc = 1;
|
|
35
|
+
js_value_t *argv[1];
|
|
36
|
+
|
|
37
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
38
|
+
assert(err == 0);
|
|
39
|
+
|
|
40
|
+
assert(argc == 1);
|
|
41
|
+
|
|
42
|
+
js_value_t *result;
|
|
43
|
+
|
|
44
|
+
@autoreleasepool {
|
|
45
|
+
BareWindow *handle = [[BareWindow alloc] init];
|
|
46
|
+
|
|
47
|
+
err = js_create_external(env, (void *) CFBridgingRetain(handle), bare_ui_kit__on_bridged_release, NULL, &result);
|
|
48
|
+
assert(err == 0);
|
|
49
|
+
|
|
50
|
+
handle->env = env;
|
|
51
|
+
|
|
52
|
+
err = js_create_reference(env, argv[0], 1, &handle->ctx);
|
|
53
|
+
assert(err == 0);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static js_value_t *
|
|
60
|
+
bare_ui_kit_window_root_view_controller(js_env_t *env, js_callback_info_t *info) {
|
|
61
|
+
int err;
|
|
62
|
+
|
|
63
|
+
size_t argc = 2;
|
|
64
|
+
js_value_t *argv[2];
|
|
65
|
+
|
|
66
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
67
|
+
assert(err == 0);
|
|
68
|
+
|
|
69
|
+
assert(argc == 1 || argc == 2);
|
|
70
|
+
|
|
71
|
+
void *handle;
|
|
72
|
+
err = js_get_value_external(env, argv[0], &handle);
|
|
73
|
+
assert(err == 0);
|
|
74
|
+
|
|
75
|
+
js_value_t *result = NULL;
|
|
76
|
+
|
|
77
|
+
@autoreleasepool {
|
|
78
|
+
UIWindow *window = (__bridge UIWindow *) handle;
|
|
79
|
+
|
|
80
|
+
if (argc == 1) {
|
|
81
|
+
UIViewController *view_controller = window.rootViewController;
|
|
82
|
+
|
|
83
|
+
if (view_controller == NULL) return NULL;
|
|
84
|
+
|
|
85
|
+
err = js_create_external(env, (void *) CFBridgingRetain(handle), bare_ui_kit__on_bridged_release, NULL, &result);
|
|
86
|
+
assert(err == 0);
|
|
87
|
+
} else {
|
|
88
|
+
void *handle;
|
|
89
|
+
err = js_get_value_external(env, argv[1], &handle);
|
|
90
|
+
assert(err == 0);
|
|
91
|
+
|
|
92
|
+
UIViewController *view_controller = (__bridge UIViewController *) handle;
|
|
93
|
+
|
|
94
|
+
window.rootViewController = view_controller;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
static js_value_t *
|
|
102
|
+
bare_ui_kit_window_make_key_window(js_env_t *env, js_callback_info_t *info) {
|
|
103
|
+
int err;
|
|
104
|
+
|
|
105
|
+
size_t argc = 1;
|
|
106
|
+
js_value_t *argv[1];
|
|
107
|
+
|
|
108
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
109
|
+
assert(err == 0);
|
|
110
|
+
|
|
111
|
+
assert(argc == 1);
|
|
112
|
+
|
|
113
|
+
void *handle;
|
|
114
|
+
err = js_get_value_external(env, argv[0], &handle);
|
|
115
|
+
assert(err == 0);
|
|
116
|
+
|
|
117
|
+
@autoreleasepool {
|
|
118
|
+
BareWindow *window = (__bridge BareWindow *) handle;
|
|
119
|
+
|
|
120
|
+
[window makeKeyWindow];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return NULL;
|
|
124
|
+
}
|
package/lib/window.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const binding = require('../binding')
|
|
2
|
+
const UIKitView = require('./view')
|
|
3
|
+
const UIKitViewController = require('./view-controller')
|
|
4
|
+
|
|
5
|
+
module.exports = exports = class UIKitWindow extends UIKitView {
|
|
6
|
+
constructor() {
|
|
7
|
+
super()
|
|
8
|
+
|
|
9
|
+
this._handle = binding.windowInit(this)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
get rootViewController() {
|
|
13
|
+
const handle = binding.windowRootViewController(this._handle)
|
|
14
|
+
|
|
15
|
+
if (handle === undefined) return null
|
|
16
|
+
|
|
17
|
+
return new UIKitViewController(handle)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
set rootViewController(viewController) {
|
|
21
|
+
binding.windowRootViewController(this._handle, viewController._handle)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
makeKeyWindow() {
|
|
25
|
+
binding.windowMakeKeyWindow(this._handle)
|
|
26
|
+
return this
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
[Symbol.for('bare.inspect')]() {
|
|
30
|
+
return {
|
|
31
|
+
__proto__: { constructor: UIKitWindow }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
package/package.json
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bare-ui-kit",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "UIKit runtime for Bare",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "UIKit bindings and runtime for Bare",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./package": "./package.json",
|
|
7
|
+
".": "./index.js",
|
|
7
8
|
"./runtime": "./runtime.js"
|
|
8
9
|
},
|
|
9
10
|
"files": [
|
|
10
11
|
"index.js",
|
|
12
|
+
"binding.m",
|
|
13
|
+
"binding.js",
|
|
11
14
|
"runtime.js",
|
|
12
15
|
"CMakeLists.txt",
|
|
13
16
|
"lib",
|
|
14
17
|
"prebuilds"
|
|
15
18
|
],
|
|
19
|
+
"addon": true,
|
|
16
20
|
"scripts": {
|
|
17
21
|
"test": "prettier . --check"
|
|
18
22
|
},
|
|
@@ -27,6 +31,7 @@
|
|
|
27
31
|
},
|
|
28
32
|
"homepage": "https://github.com/holepunchto/bare-ui-kit#readme",
|
|
29
33
|
"dependencies": {
|
|
34
|
+
"bare-events": "^2.8.2",
|
|
30
35
|
"require-asset": "^1.1.0"
|
|
31
36
|
},
|
|
32
37
|
"devDependencies": {
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|