# HG changeset patch # User Thinker K.F. Li # Date 1290410411 -28800 # Node ID 84006acab6af89f94b052a2c2ea9af9b5112c66c # Parent 4f4abce1b5dfd0ce3518fec286e3da68eb281148 Use macros to hide the default backend diff -r 4f4abce1b5df -r 84006acab6af include/mb_backend.h --- a/include/mb_backend.h Mon Nov 22 14:02:01 2010 +0800 +++ b/include/mb_backend.h Mon Nov 22 15:20:11 2010 +0800 @@ -79,11 +79,48 @@ * Following two methods are used to integrate a backend to * event loop of main application. */ - void (*reg_IO_factory)(mb_IO_factory_t *evman); - void (*reg_timer_factory)(mb_timer_factory_t *evman); + void (*reg_IO_factory)(mb_IO_factory_t *io_man); + void (*reg_timer_factory)(mb_timer_factory_t *tm_man); } mb_backend_t; -extern mb_backend_t backend; +#define mb_runtime_new(disp, w, h) \ + mb_dfl_backend.new((disp), (w), (h)) +#define mb_runtime_new_with_win(disp, win) \ + mb_dfl_backend.new_with_win((disp), (win)) +#define mb_reg_IO_factory(io_man) \ + mb_dfl_backend.reg_IO_factory(io_man) +#define mb_reg_timer_factory(tm_man) \ + mb_dfl_backend.reg_timer_factory(tm_man) + +/* + * This is defined by backend implementations. For example, X_supp.c + * or dfb_supp.c should defined a backend. + */ +extern mb_backend_t mb_dfl_backend; + +#define mb_runtime_free(rt) \ + mb_dfl_backend.free(rt) +#define mb_runtime_free_with_win(rt) \ + mb_dfl_backend.free_with_win(rt) +#define mb_runtime_add_event(rt, fd, type, cb, arg) \ + mb_dfl_backend.add_event((rt), (fd), (type), (cb), (arg)) +#define mb_runtime_remove_event(hdl) \ + mb_dfl_backend.remove_event((rt), (hdl)) +#define mb_runtime_event_loop(rt) \ + mb_dfl_backend.event_loop(rt) +#define mb_runtime_flush(rt) \ + mb_dfl_backend.flush(rt) +#define mb_runtime_kbevents(rt) \ + mb_dfl_backend.kbevents(rt) +#define mb_runtime_rdman(rt) \ + mb_dfl_backend.rdman(rt) +#define mb_runtime_timer_man(rt) \ + mb_dfl_backend.timer_man(rt) +#define mb_runtime_ob_factory(rt) \ + mb_dfl_backend.ob_factory(rt) +#define mb_runtime_loader(rt) \ + mb_dfl_backend.loader(rt) + /*! \brief Type of IO that registered with an IO manager. */ diff -r 4f4abce1b5df -r 84006acab6af src/X_supp.c --- a/src/X_supp.c Mon Nov 22 14:02:01 2010 +0800 +++ b/src/X_supp.c Mon Nov 22 15:20:11 2010 +0800 @@ -1056,22 +1056,22 @@ return r == 0? ERR: OK; } -mb_backend_t backend = { _x_supp_new, - _x_supp_new_with_win, - - _x_supp_free, - _x_supp_free_keep_win, - _x_supp_add_event, - _x_supp_remove_event, - _x_supp_event_loop, - _x_supp_flush, - - _x_supp_kbevents, - _x_supp_rdman, - _x_supp_timer_man, - _x_supp_ob_factory, - _x_supp_img_ldr - }; +mb_backend_t mb_dfl_backend = { _x_supp_new, + _x_supp_new_with_win, + + _x_supp_free, + _x_supp_free_keep_win, + _x_supp_add_event, + _x_supp_remove_event, + _x_supp_event_loop, + _x_supp_flush, + + _x_supp_kbevents, + _x_supp_rdman, + _x_supp_timer_man, + _x_supp_ob_factory, + _x_supp_img_ldr +}; #if 0 /*! \defgroup x_supp_nodejs_sup Export functions for supporting nodejs plugin. diff -r 4f4abce1b5df -r 84006acab6af src/mbaf/mbapp.c --- a/src/mbaf/mbapp.c Mon Nov 22 14:02:01 2010 +0800 +++ b/src/mbaf/mbapp.c Mon Nov 22 15:20:11 2010 +0800 @@ -9,19 +9,19 @@ mbaf_t *app = (mbaf_t *) malloc(sizeof(mbaf_t)); mb_rt_t *rt; - rt = backend.new(":0.0", 800, 600); + rt = mb_runtime_new(":0.0", 800, 600); if(rt == NULL) return NULL; sprite_set_search_path(module_dir); app->rt = rt; - app->rdman = backend.rdman(rt); - app->kbevents = backend.kbevents(rt); + app->rdman = mb_runtime_rdman(rt); + app->kbevents = mb_runtime_kbevents(rt); app->rootsprite= sprite_load(module,app->rdman, app->rdman->root_coord); if(app->rootsprite == NULL) { - backend.free(rt); + mb_runtime_free(rt); free(app); return NULL; } @@ -39,7 +39,7 @@ mb_timer_man_t *mbaf_get_timer(mbaf_t *app) { - return backend.timer_man(app->rt); + return mb_runtime_timer_man(app->rt); } void mbaf_loop(mbaf_t *app) @@ -48,11 +48,11 @@ * Start handle connections, includes one to X server. * User start to interact with the application. */ - backend.event_loop(app->rt); + mb_runtime_event_loop(app->rt); /* * Clean */ - backend.free(app->rt); + mb_runtime_free(app->rt); free(app); }