# HG changeset patch # User Thinker K.F. Li # Date 1281072827 -28800 # Node ID f264b50c469cd496cc6e124c72c87b2b1db053fb # Parent c643af2095c5343839a1802d05087618dac080ce Bind subject of mouse_event to JS object of coord diff -r c643af2095c5 -r f264b50c469c nodejs/mbfly_njs.cc --- a/nodejs/mbfly_njs.cc Fri Aug 06 00:56:26 2010 +0800 +++ b/nodejs/mbfly_njs.cc Fri Aug 06 13:33:47 2010 +0800 @@ -26,10 +26,12 @@ } static void -xnjsmb_coord_mod(Handle mbrt, Handle ret) { +xnjsmb_coord_new_mod(Handle mbrt, Handle ret) { Handle ret_obj = ret->ToObject(); Persistent *ret_obj_hdl; coord_t *coord; + subject_t *subject; + Handle subject_o; SET(ret_obj, "mbrt", mbrt); coord = (coord_t *)UNWRAP(ret_obj); @@ -38,6 +40,10 @@ */ ret_obj_hdl = new Persistent(ret_obj); mb_prop_set(&coord->obj.props, PROP_JSOBJ, ret_obj_hdl); + + subject = coord->mouse_event; + subject_o = export_xnjsmb_auto_subject_new(subject); + SET(ret_obj, "subject", subject_o); } #define xnjsmb_auto_coord_new export_xnjsmb_auto_coord_new @@ -62,6 +68,10 @@ _X_njs_MB_new(Handle self, char *display_name, int width, int height) { njs_runtime_t *obj; + coord_t *root; + subject_t *subject; + Handle root_o; + Handle subject_o; obj = X_njs_MB_new(display_name, width, height); WRAP(self, obj); /* mkroot need a wrapped object, but @@ -70,6 +80,12 @@ * here. */ X_njs_MB_init_handle_connection(obj); xnjsmb_coord_mkroot(self); + + root_o = GET(self, "root")->ToObject(); + root = (coord_t *)UNWRAP(root_o); + subject = root->mouse_event; + subject_o = export_xnjsmb_auto_subject_new(subject); + SET(root_o, "subject", subject_o); return obj; } @@ -125,6 +141,7 @@ xnjsmb_paints_init_mb_rt_temp(xnjsmb_auto_mb_rt_temp); xnjsmb_font_init_mb_rt_temp(xnjsmb_auto_mb_rt_temp); xnjsmb_img_ldr_init_mb_rt_temp(target); + xnjsmb_observer_init(); target->Set(String::New("mb_rt"), xnjsmb_auto_mb_rt_temp->GetFunction()); diff -r c643af2095c5 -r f264b50c469c nodejs/mbfly_njs.h --- a/nodejs/mbfly_njs.h Fri Aug 06 00:56:26 2010 +0800 +++ b/nodejs/mbfly_njs.h Fri Aug 06 13:33:47 2010 +0800 @@ -42,4 +42,8 @@ void xnjsmb_img_ldr_init_mb_rt_temp(v8::Handle mb_rt_temp); +/* From observer.cc */ +v8::Handle export_xnjsmb_auto_subject_new(subject_t *subject); +void xnjsmb_observer_init(void); + #endif /* __MBFLY_NJS_H_ */ diff -r c643af2095c5 -r f264b50c469c nodejs/mbfly_njs.m4 --- a/nodejs/mbfly_njs.m4 Fri Aug 06 00:56:26 2010 +0800 +++ b/nodejs/mbfly_njs.m4 Fri Aug 06 13:33:47 2010 +0800 @@ -4,7 +4,7 @@ STRUCT([mb_rt], [njs_runtime_t], [], [METHOD([coord_new], [xnjsmb_coord_new], (OBJ([parent], [coord], [coord_t]), ERR), 1, - [OBJ([coord], [coord_t])], (([MOD], xnjsmb_coord_mod))), + [OBJ([coord], [coord_t])], (([MOD], xnjsmb_coord_new_mod))), METHOD([redraw_changed], [xnjsmb_redraw_changed], (), 0, []), METHOD([redraw_all], [xnjsmb_redraw_all], (), 0, [])], ((CTOR, ([_X_njs_MB_new], (SELF, STR(display_name), INT(width), INT(height)), 3)))dnl diff -r c643af2095c5 -r f264b50c469c nodejs/observer.cc --- a/nodejs/observer.cc Fri Aug 06 00:56:26 2010 +0800 +++ b/nodejs/observer.cc Fri Aug 06 13:33:47 2010 +0800 @@ -93,6 +93,14 @@ data->func->Call(Context::GetCurrent()->Global(), 1, func_args); } +Handle +export_xnjsmb_auto_subject_new(subject_t *subject) { + Handle val; + + val = xnjsmb_auto_subject_new(subject); + return val; +} + void xnjsmb_observer_init(void) { xnjsmb_auto_observer_init(); diff -r c643af2095c5 -r f264b50c469c nodejs/testcase.js --- a/nodejs/testcase.js Fri Aug 06 00:56:26 2010 +0800 +++ b/nodejs/testcase.js Fri Aug 06 13:33:47 2010 +0800 @@ -51,3 +51,10 @@ mb_rt.redraw_changed(); }, 20); setTimeout(function() { sys.puts("timeout"); }, 1000); + +sys.puts(root.subject); +var observer; +/* Mouse button pressed */ +observer = root.subject.add_event_observer(4, function() { + sys.puts("mouse"); + });