Mercurial > molko
annotate molko-js/src/js-painter.c @ 190:5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 07 Nov 2020 10:16:38 +0100 |
parents | a5436e15898d |
children | 633a25df450e |
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-painter.c -- basic drawing routines (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/painter.h> |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include "js.h" |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include "js-painter.h" |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 js_painter_getColor(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 duk_push_number(ctx, painter_get_color()); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 return 1; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 js_painter_setColor(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 painter_set_color(duk_require_number(ctx, 0)); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 js_painter_new(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 if (!duk_is_constructor_call(ctx)) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 duk_error(ctx, DUK_ERR_TYPE_ERROR, "Painter must be new-constructed"); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 duk_push_this(ctx); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 duk_push_string(ctx, "color"); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 duk_push_c_function(ctx, js_painter_getColor, 0); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 duk_push_c_function(ctx, js_painter_setColor, 1); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 duk_def_prop(ctx, -4, DUK_DEFPROP_HAVE_GETTER | DUK_DEFPROP_HAVE_SETTER); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 js_painter_clear(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 (void)ctx; |
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 painter_clear(); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 js_painter_drawLine(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 { |
190
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
72 int x1, y1, x2, y2; |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
73 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
74 if (duk_get_top(ctx) == 4) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
75 x1 = duk_require_int(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
76 y1 = duk_require_int(ctx, 1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
77 x2 = duk_require_int(ctx, 2); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
78 y2 = duk_require_int(ctx, 3); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
79 } else if (duk_get_top(ctx) == 1) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
80 duk_require_object(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
81 duk_get_prop_string(ctx, 0, "x1"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
82 x1 = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
83 duk_get_prop_string(ctx, 0, "y1"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
84 y1 = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
85 duk_get_prop_string(ctx, 0, "x2"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
86 x2 = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
87 duk_get_prop_string(ctx, 0, "y2"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
88 y2 = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
89 duk_pop_n(ctx, 4); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
90 } else |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
91 return duk_error(ctx, DUK_ERR_ERROR, "Object or 4 numbers expected"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
92 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
93 painter_draw_line(x1, y2, x2, y2); |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 js_painter_drawPoint(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 { |
190
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
101 int x, y; |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
102 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
103 if (duk_get_top(ctx) == 2) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
104 x = duk_require_int(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
105 y = duk_require_int(ctx, 1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
106 } else if (duk_get_top(ctx) == 1) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
107 duk_require_object(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
108 duk_get_prop_string(ctx, 0, "x"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
109 x = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
110 duk_get_prop_string(ctx, 0, "y"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
111 y = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
112 duk_pop_n(ctx, 2); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
113 } else |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
114 return duk_error(ctx, DUK_ERR_ERROR, "Object or 2 numbers expected"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
115 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
116 painter_draw_point(x, y); |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 js_painter_drawRectangle(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 { |
190
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
124 int x, y; |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
125 unsigned int w, h; |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
126 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
127 if (duk_get_top(ctx) == 4) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
128 x = duk_require_int(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
129 y = duk_require_int(ctx, 1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
130 w = duk_require_uint(ctx, 2); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
131 h = duk_require_uint(ctx, 3); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
132 } else if (duk_get_top(ctx) == 1) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
133 duk_require_object(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
134 duk_get_prop_string(ctx, 0, "x"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
135 x = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
136 duk_get_prop_string(ctx, 0, "y"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
137 y = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
138 duk_get_prop_string(ctx, 0, "w"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
139 w = duk_require_uint(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
140 duk_get_prop_string(ctx, 0, "h"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
141 h = duk_require_uint(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
142 duk_pop_n(ctx, 4); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
143 } else |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
144 return duk_error(ctx, DUK_ERR_ERROR, "Object or 4 numbers expected"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
145 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
146 painter_draw_rectangle(x, y, w, h); |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 js_painter_drawCircle(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 { |
190
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
154 int x, y; |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
155 double r; |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
156 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
157 if (duk_get_top(ctx) == 3) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
158 x = duk_require_int(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
159 y = duk_require_int(ctx, 1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
160 r = duk_require_number(ctx, 2); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
161 } else if (duk_get_top(ctx) == 1) { |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
162 duk_require_object(ctx, 0); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
163 duk_get_prop_string(ctx, 0, "x"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
164 x = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
165 duk_get_prop_string(ctx, 0, "y"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
166 y = duk_require_int(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
167 duk_get_prop_string(ctx, 0, "r"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
168 r = duk_require_number(ctx, -1); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
169 duk_pop_n(ctx, 3); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
170 } else |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
171 return duk_error(ctx, DUK_ERR_ERROR, "Object or 3 numbers expected"); |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
172 |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
173 painter_draw_circle(x, y, r); |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 static duk_ret_t |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 js_painter_present(duk_context *ctx) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 (void)ctx; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 painter_present(); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 return 0; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 } |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 static const duk_function_list_entry methods[] = { |
190
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
189 { "clear", js_painter_clear, 0 }, |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
190 { "drawLine", js_painter_drawLine, DUK_VARARGS }, |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
191 { "drawPoint", js_painter_drawPoint, DUK_VARARGS }, |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
192 { "drawRectangle", js_painter_drawRectangle, DUK_VARARGS }, |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
193 { "drawCircle", js_painter_drawCircle, DUK_VARARGS }, |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
194 { "present", js_painter_present, 0 }, |
5dc57029b9f1
molko-js: allow objects/parameters in Molko.Painter API
David Demelier <markand@malikania.fr>
parents:
189
diff
changeset
|
195 { NULL, NULL, 0 } |
189
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 }; |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 void |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 js_painter_load(struct js *js) |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 { |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 assert(js); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 duk_push_global_object(js->handle); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 duk_get_prop_string(js->handle, -1, "Molko"); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 duk_push_c_function(js->handle, js_painter_new, 0); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 duk_push_object(js->handle); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 duk_put_function_list(js->handle, -1, methods); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 duk_put_prop_string(js->handle, -2, "prototype"); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 duk_put_prop_string(js->handle, -2, "Painter"); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 duk_pop_n(js->handle, 2); |
a5436e15898d
molko-js: start Javascript bindings, continue #2503 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 } |