# HG changeset patch # User wycc # Date 1233453072 -28800 # Node ID 2ca0773cd48dad7cb64a2931908777df439e39c3 # Parent a171b94582aefc32f75d2d6ff75c255590b66678 * Add MBAF files * Change begin_index to be start_index * fix the color setting. diff -r a171b94582ae -r 2ca0773cd48d include/mbapp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/mbapp.h Sun Feb 01 09:51:12 2009 +0800 @@ -0,0 +1,19 @@ +#ifndef __APP_H +#define __APP_H +typedef struct _mbapp MBApp; +struct _mbapp { + void *rt; + redraw_man_t *rdman; + mb_sprite_t *rootsprite; + mb_obj_t *root; + void *private; +}; +MBApp *MBApp_Init(char *module); +void MBApp_setData(MBApp *app,void *data); +mb_tman_t *MBApp_getTimer(MBApp *app); +void MBApp_loop(MBApp *en); +#define MBAPP_DATA(app,type) ((type *) ((app)->private)) +#define MBAPP_RDMAN(app) (((MBApp *) app)->rdman) + +#include "mbbutton.h" +#endif diff -r a171b94582ae -r 2ca0773cd48d include/mbbutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/mbbutton.h Sun Feb 01 09:51:12 2009 +0800 @@ -0,0 +1,19 @@ +#ifndef __MBBUTTON_H +#define __MBBUTTON_H +typedef struct _mb_button { + mb_obj_t obj; + redraw_man_t *rdman; + int state; + coord_t *root; + coord_t *active; + coord_t *normal; + coord_t *click; + void (*press)(); + void *arg; + observer_t *obs_move,*obs_out,*obs_press; + mb_progm_t *progm; +} mb_button_t; +mb_button_t *mb_button_new(redraw_man_t *rdman,mb_sprite_t *sp, char *name); +void mb_button_add_onClick(mb_button_t *b, void (*h)(void *arg), void *arg); +#endif + diff -r a171b94582ae -r 2ca0773cd48d src/Makefile.am --- a/src/Makefile.am Sun Feb 01 02:34:24 2009 +0800 +++ b/src/Makefile.am Sun Feb 01 09:51:12 2009 +0800 @@ -3,12 +3,12 @@ lib_LTLIBRARIES = libmbfly.la noinst_PROGRAMS = X_main - +MBAF_SOURCES=mbaf/mbapp.c mbaf/mbbutton.c libmbfly_la_SOURCES = animate.c chgcolor.c coord.c event.c geo.c \ observer.c paint.c redraw_man.c rotate.c shape_path.c \ shape_rect.c shape_text.c shift.c subtree_free.c timer.c \ timertool.c tools.c visibility.c X_supp.c prop.c sprite.c \ - mouse.c shape_image.c img_ldr.c + mouse.c shape_image.c img_ldr.c $(MBAF_SOURCES) libmbfly_la_CPPFLAGS = @cairo_CFLAGS@ `pkg-config --cflags pangocairo` libmbfly_la_LDFLAGS = @cairo_LIBS@ `pkg-config --libs pangocairo` diff -r a171b94582ae -r 2ca0773cd48d src/mbaf/mbapp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mbaf/mbapp.c Sun Feb 01 09:51:12 2009 +0800 @@ -0,0 +1,41 @@ +#include +#include +MBApp *MBApp_Init(char *module) +{ + MBApp *app = (MBApp *) malloc(sizeof(MBApp)); + X_MB_runtime_t *rt; + + rt = X_MB_new(":0.0", 800, 600); + + app->rt = rt; + app->rdman = X_MB_rdman(rt); + app->rootsprite= sprite_load(module,app->rdman, app->rdman->root_coord); + rdman_attach_backend(app->rdman, rt); + MB_SPRITE_GOTO_SCENE(app->rootsprite, 1); + return app; +} + +void MBApp_setData(MBApp *app,void *data) +{ + app->private = (void *) data; +} + +mb_tman_t *MBApp_getTimer(MBApp *app) +{ + return X_MB_tman(app->rt); +} + +void MBApp_loop(MBApp *en) +{ + /* + * Start handle connections, includes one to X server. + * User start to interact with the application. + */ + X_MB_handle_connection(en->rt); + + /* + * Clean + */ + X_MB_free(en->rt); + free(en); +} diff -r a171b94582ae -r 2ca0773cd48d src/mbaf/mbbutton.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mbaf/mbbutton.c Sun Feb 01 09:51:12 2009 +0800 @@ -0,0 +1,129 @@ + +#include +#include +#include +#include "mbapp.h" + + + +#define CMOUSE(e) (coord_get_mouse_event(e)) + + +static void mb_button_pressed(event_t *evt, void *arg); +static void mb_button_out(event_t *evt, void *arg); + +void mb_button_add_onClick(mb_button_t *b, void (*h)(void *arg), void *arg) +{ + b->press = h; + b->arg = arg; +} + +void mb_button_refresh(mb_button_t *btn) +{ + rdman_coord_changed(btn->rdman,btn->root); + rdman_redraw_changed(btn->rdman); +} + +static void mb_button_move(event_t *evt, void *arg) +{ + mb_button_t *btn = (mb_button_t *) arg; + + + printf("Mouse move\n"); + coord_show(btn->active); + mb_button_refresh(btn); +} +static void mb_button_out(event_t *evt, void *arg) +{ + mb_button_t *btn = (mb_button_t *) arg; + + if (btn->progm) { + mb_progm_abort(btn->progm); + btn->progm = NULL; + } + printf("mouse out\n"); + coord_hide(btn->click); + coord_hide(btn->active); + coord_show(btn->normal); + mb_button_refresh(btn); +} + +static void mb_button_show_active(event_t *evt, void *arg) +{ + mb_button_t *btn = (mb_button_t *) arg; + + coord_show(btn->active); + mb_button_refresh(btn); +} + +static void mb_button_pressed(event_t *evt, void *arg) +{ + mb_button_t *btn = (mb_button_t *) arg; + mb_timeval_t start, playing, now; + mb_progm_t *progm; + mb_word_t *word; + + printf("Pressed\n"); + if (btn->progm) { + mb_progm_abort(btn->progm); + btn->progm = NULL; + } + coord_show(btn->click); + coord_hide(btn->active); + rdman_coord_changed(btn->rdman,btn->root); + rdman_redraw_changed(btn->rdman); + + btn->progm = progm = mb_progm_new(1, btn->rdman); + MB_TIMEVAL_SET(&start, 0, 500000); + MB_TIMEVAL_SET(&playing, 0, 0); + word = mb_progm_next_word(progm, &start, &playing); + mb_visibility_new(VIS_HIDDEN, btn->click, word); + mb_visibility_new(VIS_VISIBLE, btn->active, word); + mb_progm_free_completed(progm); + get_now(&now); + printf("rt = %x\n", btn->rdman->rt); + mb_progm_start(progm, X_MB_tman(btn->rdman->rt), &now); + if (btn->press) + btn->press(btn->arg); +} +mb_button_t *mb_button_new(redraw_man_t *rdman,mb_sprite_t *sp, char *name) +{ + mb_button_t *btn = (mb_button_t *) malloc(sizeof(mb_button_t)); + char *buf = (char *) malloc(strlen(name)+5); + + btn->root = (coord_t *) MB_SPRITE_GET_OBJ(sp, name); + sprintf(buf, "%s_normal", name); + btn->normal = (coord_t *) MB_SPRITE_GET_OBJ(sp, buf); + if (btn->normal == NULL) { + printf("Missing normal button, this is not a correct button\n"); + } + sprintf(buf, "%s_active", name); + btn->active = (coord_t *) MB_SPRITE_GET_OBJ(sp, buf); + if (btn->active == NULL) { + printf("Missing click button, this is not a correct button\n"); + } + sprintf(buf, "%s_click", name); + btn->click = (coord_t *) MB_SPRITE_GET_OBJ(sp, buf); + if (btn->active == NULL) { + printf("Missing click button, this is not a correct button\n"); + } + btn->press = NULL; + // Show only the normal button + coord_hide(btn->active); + coord_hide(btn->click); + coord_show(btn->normal); + // Move to the same position + btn->active->matrix[2] = 200; + btn->active->matrix[5] = 200; + btn->normal->matrix[2] = 200; + btn->normal->matrix[5] = 200; + btn->click->matrix[2] = 200; + btn->click->matrix[5] = 200; + btn->rdman = rdman; + btn->obs_move = subject_add_event_observer(CMOUSE(btn->root), EVT_MOUSE_MOVE, mb_button_move,btn); + btn->obs_press = subject_add_event_observer(CMOUSE(btn->root), EVT_MOUSE_BUT_PRESS, mb_button_pressed,btn); + btn->obs_out = subject_add_event_observer(CMOUSE(btn->root), EVT_MOUSE_OUT, mb_button_out,btn); + btn->progm = NULL; + rdman_redraw_changed(rdman); + return btn; +} diff -r a171b94582ae -r 2ca0773cd48d src/shape_text.c --- a/src/shape_text.c Sun Feb 01 02:34:24 2009 +0800 +++ b/src/shape_text.c Sun Feb 01 09:51:12 2009 +0800 @@ -83,9 +83,9 @@ void sh_text_set_color(shape_t *shape, unsigned int color) { - PangoAttribute *attr = pango_attr_color_new(color); + PangoAttribute *attr = pango_attr_foreground_new(TEXTCOLOR_RED(color)<<8,TEXTCOLOR_GREEN(color)<<8,TEXTCOLOR_BLUE(color)<<8); sh_text_t *text = (sh_text_t *)shape; - attr->begin_index = 0; + attr->start_index = 0; attr->end_index = -1; pango_attr_list_change(text->attrs, attr); } @@ -93,7 +93,7 @@ { PangoAttribute *attr = pango_attr_weight_new(bold? PANGO_WEIGHT_BOLD:PANGO_WEIGHT_NORMAL); sh_text_t *text = (sh_text_t *)shape; - attr->begin_index = 0; + attr->start_index = 0; attr->end_index = -1; pango_attr_list_change(text->attrs, attr); } @@ -101,7 +101,7 @@ { PangoAttribute *attr = pango_attr_style_new(italic? PANGO_STYLE_ITALIC:PANGO_STYLE_NORMAL); sh_text_t *text = (sh_text_t *)shape; - attr->begin_index = 0; + attr->start_index = 0; attr->end_index = -1; pango_attr_list_change(text->attrs, attr); } @@ -109,7 +109,7 @@ { PangoAttribute *attr = pango_attr_underline_new(underline? PANGO_UNDERLINE_SINGLE:PANGO_UNDERLINE_NONE); sh_text_t *text = (sh_text_t *)shape; - attr->begin_index = 0; + attr->start_index = 0; attr->end_index = -1; pango_attr_list_change(text->attrs, attr); } @@ -117,7 +117,7 @@ { PangoAttribute *attr = pango_attr_family_new(family); sh_text_t *text = (sh_text_t *)shape; - attr->begin_index = 0; + attr->start_index = 0; attr->end_index = -1; pango_attr_list_change(text->attrs, attr); }