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