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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
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
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
78 assert(ctx);
189
a5436e15898d molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
200
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
80 duk_push_global_object(ctx);
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
81 duk_get_prop_string(ctx, -1, "Molko");
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
82 duk_push_c_function(ctx, js_window_new, 3);
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
83 duk_push_object(ctx);
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
84 duk_put_number_list(ctx, -1, cursors);
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
85 duk_put_prop_string(ctx, -2, "Cursor");
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
86 duk_put_prop_string(ctx, -2, "Window");
dd77bfb38df2 js: cleanup API
David Demelier <markand@malikania.fr>
parents: 191
diff changeset
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 }