1 #ifdef HAVE_CONFIG_H
2 #include <config.h>
3 #endif
4
5 #include <Ecore_Js.hh>
6
7 namespace efl { namespace ecore { namespace js {
8
9 namespace {
10
register_callback_cancel(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)11 void register_callback_cancel(v8::Isolate *isolate,
12 v8::Handle<v8::Object> global,
13 v8::Handle<v8::String> name)
14 {
15 using v8::Boolean;
16 global->Set(name, compatibility_new<Boolean>(isolate,
17 bool{ECORE_CALLBACK_CANCEL}));
18 }
19
register_callback_renew(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)20 void register_callback_renew(v8::Isolate *isolate,
21 v8::Handle<v8::Object> global,
22 v8::Handle<v8::String> name)
23 {
24 using v8::Boolean;
25 global->Set(name, compatibility_new<Boolean>(isolate,
26 bool{ECORE_CALLBACK_RENEW}));
27 }
28
register_callback_pass_on(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)29 void register_callback_pass_on(v8::Isolate *isolate,
30 v8::Handle<v8::Object> global,
31 v8::Handle<v8::String> name)
32 {
33 using v8::Boolean;
34 global->Set(name, compatibility_new<Boolean>(isolate,
35 bool{ECORE_CALLBACK_PASS_ON}));
36 }
37
register_callback_done(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)38 void register_callback_done(v8::Isolate *isolate, v8::Handle<v8::Object> global,
39 v8::Handle<v8::String> name)
40 {
41 using v8::Boolean;
42 global->Set(name, compatibility_new<Boolean>(isolate,
43 bool{ECORE_CALLBACK_DONE}));
44 }
45
register_mainloop_iterate(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)46 void register_mainloop_iterate(v8::Isolate *isolate,
47 v8::Handle<v8::Object> global,
48 v8::Handle<v8::String> name)
49 {
50 using v8::Integer;
51 using v8::FunctionTemplate;
52
53 auto f = [](compatibility_callback_info_type args)
54 -> compatibility_return_type {
55 if (args.Length() != 0)
56 return compatibility_return();
57
58 ecore_main_loop_iterate();
59 return compatibility_return();
60 };
61
62 global->Set(name,
63 compatibility_new<FunctionTemplate>(isolate, f)->GetFunction());
64 }
65
register_mainloop_iterate_may_block(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)66 void register_mainloop_iterate_may_block(v8::Isolate *isolate,
67 v8::Handle<v8::Object> global,
68 v8::Handle<v8::String> name)
69 {
70 using v8::Integer;
71 using v8::FunctionTemplate;
72
73 auto f = [](compatibility_callback_info_type args)
74 -> compatibility_return_type {
75 if (args.Length() != 1 || !args[0]->IsNumber())
76 return compatibility_return();
77
78 auto ret = ecore_main_loop_iterate_may_block(args[0]->NumberValue());
79 return compatibility_return(compatibility_new<Integer>
80 (args.GetIsolate(), ret), args);
81 };
82
83 global->Set(name,
84 compatibility_new<FunctionTemplate>(isolate, f)->GetFunction());
85 }
86
register_mainloop_begin(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)87 void register_mainloop_begin(v8::Isolate *isolate,
88 v8::Handle<v8::Object> global,
89 v8::Handle<v8::String> name)
90 {
91 using v8::Integer;
92 using v8::FunctionTemplate;
93
94 auto f = [](compatibility_callback_info_type args)
95 -> compatibility_return_type {
96 if (args.Length() != 0)
97 return compatibility_return();
98
99 ecore_main_loop_begin();
100 return compatibility_return();
101 };
102
103 global->Set(name,
104 compatibility_new<FunctionTemplate>(isolate, f)->GetFunction());
105 }
106
register_mainloop_quit(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)107 void register_mainloop_quit(v8::Isolate *isolate, v8::Handle<v8::Object> global,
108 v8::Handle<v8::String> name)
109 {
110 using v8::Integer;
111 using v8::FunctionTemplate;
112
113 auto f = [](compatibility_callback_info_type args)
114 -> compatibility_return_type {
115 if (args.Length() != 0)
116 return compatibility_return();
117
118 ecore_main_loop_quit();
119 return compatibility_return();
120 };
121
122 global->Set(name,
123 compatibility_new<FunctionTemplate>(isolate, f)->GetFunction());
124 }
125
register_mainloop_animator_ticked_get(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)126 void register_mainloop_animator_ticked_get(v8::Isolate *isolate,
127 v8::Handle<v8::Object> global,
128 v8::Handle<v8::String> name)
129 {
130 using v8::Boolean;
131 using v8::FunctionTemplate;
132
133 auto f = [](compatibility_callback_info_type args)
134 -> compatibility_return_type {
135 if (args.Length() != 0)
136 return compatibility_return();
137
138 auto ret = ecore_main_loop_animator_ticked_get();
139 return compatibility_return(compatibility_new<Boolean>
140 (args.GetIsolate(), ret), args);
141 };
142
143 global->Set(name,
144 compatibility_new<FunctionTemplate>(isolate, f)->GetFunction());
145 }
146
register_mainloop_nested_get(v8::Isolate * isolate,v8::Handle<v8::Object> global,v8::Handle<v8::String> name)147 void register_mainloop_nested_get(v8::Isolate *isolate,
148 v8::Handle<v8::Object> global,
149 v8::Handle<v8::String> name)
150 {
151 using v8::Boolean;
152 using v8::FunctionTemplate;
153
154 auto f = [](compatibility_callback_info_type args)
155 -> compatibility_return_type {
156 if (args.Length() != 0)
157 return compatibility_return();
158
159 auto ret = ecore_main_loop_nested_get();
160 return compatibility_return(compatibility_new<Boolean>
161 (args.GetIsolate(), ret), args);
162 };
163
164 global->Set(name,
165 compatibility_new<FunctionTemplate>(isolate, f)->GetFunction());
166 }
167
168 }
169
170 EAPI
register_ecore_mainloop(v8::Isolate * isolate,v8::Handle<v8::Object> exports)171 void register_ecore_mainloop(v8::Isolate *isolate,v8::Handle<v8::Object> exports)
172 {
173 register_callback_cancel(isolate, exports,
174 compatibility_new<v8::String>
175 (isolate, "CALLBACK_CANCEL"));
176 register_callback_renew(isolate, exports,
177 compatibility_new<v8::String>
178 (isolate, "CALLBACK_RENEW"));
179 register_callback_pass_on(isolate, exports,
180 compatibility_new<v8::String>
181 (isolate, "CALLBACK_PASS_ON"));
182 register_callback_done(isolate, exports,
183 compatibility_new<v8::String>
184 (isolate, "CALLBACK_DONE"));
185 register_mainloop_iterate(isolate, exports,
186 compatibility_new<v8::String>
187 (isolate, "iterate"));
188 register_mainloop_iterate_may_block(isolate, exports,
189 compatibility_new<v8::String>
190 (isolate,
191 "iterateMayBlock"));
192 register_mainloop_begin(isolate, exports,
193 compatibility_new<v8::String>
194 (isolate, "begin"));
195 register_mainloop_quit(isolate, exports,
196 compatibility_new<v8::String>
197 (isolate, "quit"));
198 register_mainloop_animator_ticked_get(isolate, exports,
199 compatibility_new<v8::String>
200 (isolate,
201 "getAnimatorTicked"));
202 register_mainloop_nested_get(isolate, exports,
203 compatibility_new<v8::String>
204 (isolate, "getNested"));
205 }
206
207 } } } // namespace efl { namespace js {
208