00001 #include <stdio.h> 00002 #include <stdlib.h> 00003 #include "mb_animate.h" 00004 00005 typedef struct _mb_visibility mb_visibility_t; 00006 00007 struct _mb_visibility { 00008 mb_action_t action; 00009 int visibility; 00010 coord_t *coord; 00011 }; 00012 00013 static void mb_visibility_start(mb_action_t *act, 00014 const mb_timeval_t *now, 00015 const mb_timeval_t *playing_time, 00016 redraw_man_t *rdman) { 00017 mb_visibility_t *visibility = (mb_visibility_t *)act; 00018 00019 switch(visibility->visibility) { 00020 case VIS_VISIBLE: 00021 coord_show(visibility->coord); 00022 break; 00023 case VIS_HIDDEN: 00024 coord_hide(visibility->coord); 00025 break; 00026 } 00027 rdman_coord_changed(rdman, visibility->coord); 00028 } 00029 00030 static void mb_visibility_step(mb_action_t *act, 00031 const mb_timeval_t *now, 00032 redraw_man_t *rdman) { 00033 } 00034 00035 static void mb_visibility_stop(mb_action_t *act, 00036 const mb_timeval_t *now, 00037 redraw_man_t *rdman) { 00038 } 00039 00040 static void mb_visibility_free(mb_action_t *act) { 00041 free(act); 00042 } 00043 00044 mb_action_t *mb_visibility_new(int visib, coord_t *coord, 00045 mb_word_t *word) { 00046 mb_visibility_t *visibility; 00047 00048 visibility = (mb_visibility_t *)malloc(sizeof(mb_visibility_t)); 00049 if(visibility == NULL) 00050 return NULL; 00051 00052 visibility->visibility = visib; 00053 visibility->coord = coord; 00054 00055 visibility->action.start = mb_visibility_start; 00056 visibility->action.step = mb_visibility_step; 00057 visibility->action.stop = mb_visibility_stop; 00058 visibility->action.free = mb_visibility_free; 00059 00060 mb_word_add_action(word, (mb_action_t *)visibility); 00061 00062 return (mb_action_t *)visibility; 00063 } 00064