Mercurial > molko
annotate molko-js/src/js-window.c @ 200:dd77bfb38df2
js: cleanup API
Since molko-js API isn't meant to be exposed, use duk_context everywhere by
default for a simpler code.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 09 Nov 2020 19:18:14 +0100 |
parents | 633a25df450e |
children |
rev | line source |
---|---|
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * js-window.c -- basic window management (Javascript bindings) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <duktape.h> |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <core/error.h> |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <core/window.h> |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include "js.h" |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include "js-window.h" |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 static duk_ret_t |
191
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
30 js_window_setCursor(duk_context *ctx) |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
31 { |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
32 enum window_cursor cursor = duk_require_int(ctx, 0); |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
33 |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
34 if (cursor < 0 || cursor > WINDOW_CURSOR_LAST) |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
35 return duk_error(ctx, DUK_ERR_TYPE_ERROR, "invalid cursor type: %d", cursor); |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
36 |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
37 window_set_cursor(cursor); |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
38 |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
39 return 0; |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
40 } |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
41 |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
42 static duk_ret_t |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 js_window_new(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 if (!duk_is_constructor_call(ctx)) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 duk_error(ctx, DUK_ERR_TYPE_ERROR, "Window must be new-constructed"); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 const char *str = duk_require_string(ctx, 0); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 unsigned int w = duk_require_int(ctx, 1); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 unsigned int h = duk_require_int(ctx, 2); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 if (!window_open(str, w, h)) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 duk_error(ctx, DUK_ERR_ERROR, "%s", error()); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
191
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
55 duk_push_this(ctx); |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
56 duk_push_string(ctx, "cursor"); |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
57 duk_push_c_function(ctx, js_window_setCursor, 1); |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
58 duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_SETTER); |
633a25df450e
molko-js: miscellaneous fixes
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
59 duk_pop(ctx); |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 static const duk_number_list_entry cursors[] = { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 { "ARROW", WINDOW_CURSOR_ARROW }, |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 { "EDIT", WINDOW_CURSOR_EDIT }, |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 { "WAIT", WINDOW_CURSOR_WAIT }, |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 { "CROSS_HAIR", WINDOW_CURSOR_CROSSHAIR }, |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 { "SIZE", WINDOW_CURSOR_SIZE }, |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 { "NO", WINDOW_CURSOR_NO }, |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 { "HAND", WINDOW_CURSOR_HAND }, |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 { NULL, 0 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 }; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 void |
200 | 76 js_window_load(duk_context *ctx) |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 { |
200 | 78 assert(ctx); |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 |
200 | 80 duk_push_global_object(ctx); |
81 duk_get_prop_string(ctx, -1, "Molko"); | |
82 duk_push_c_function(ctx, js_window_new, 3); | |
83 duk_push_object(ctx); | |
84 duk_put_number_list(ctx, -1, cursors); | |
85 duk_put_prop_string(ctx, -2, "Cursor"); | |
86 duk_put_prop_string(ctx, -2, "Window"); | |
87 duk_pop_n(ctx, 2); | |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 } |