X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fgadgets.c;h=9d709f3aba55d9359ae99c636d5a60f483ad2ebc;hb=c9433eab5c4317ed4f89164b386a7d33562e29be;hp=a5e42ecac1e4b1e354ecb5ab0db82d7798f77a6d;hpb=ff56a43aa3799aa3357f4deca4d6482fc25a6a41;p=rocksndiamonds.git diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index a5e42eca..9d709f3a 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2000 Artsoft Entertainment * +* (c) 1994-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -82,11 +82,6 @@ static struct GadgetInfo *getGadgetInfoFromMousePosition(int mx, int my) static void default_callback_info(void *ptr) { -#if 0 - if (game_status == LEVELED) - HandleEditorGadgetInfoText(ptr); -#endif - return; } @@ -309,7 +304,9 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) break; case GDI_CHECKED: - gi->checked = va_arg(ap, boolean); + /* take care here: "boolean" is typedef'ed as "unsigned char", + which gets promoted to "int" */ + gi->checked = (boolean)va_arg(ap, int); break; case GDI_RADIO_NR: @@ -368,25 +365,25 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) break; case GDI_DESIGN_UNPRESSED: - gi->design[GD_BUTTON_UNPRESSED].bitmap = va_arg(ap, Bitmap); + gi->design[GD_BUTTON_UNPRESSED].bitmap = va_arg(ap, Bitmap *); gi->design[GD_BUTTON_UNPRESSED].x = va_arg(ap, int); gi->design[GD_BUTTON_UNPRESSED].y = va_arg(ap, int); break; case GDI_DESIGN_PRESSED: - gi->design[GD_BUTTON_PRESSED].bitmap = va_arg(ap, Bitmap); + gi->design[GD_BUTTON_PRESSED].bitmap = va_arg(ap, Bitmap *); gi->design[GD_BUTTON_PRESSED].x = va_arg(ap, int); gi->design[GD_BUTTON_PRESSED].y = va_arg(ap, int); break; case GDI_ALT_DESIGN_UNPRESSED: - gi->alt_design[GD_BUTTON_UNPRESSED].bitmap= va_arg(ap, Bitmap); + gi->alt_design[GD_BUTTON_UNPRESSED].bitmap= va_arg(ap, Bitmap *); gi->alt_design[GD_BUTTON_UNPRESSED].x = va_arg(ap, int); gi->alt_design[GD_BUTTON_UNPRESSED].y = va_arg(ap, int); break; case GDI_ALT_DESIGN_PRESSED: - gi->alt_design[GD_BUTTON_PRESSED].bitmap = va_arg(ap, Bitmap); + gi->alt_design[GD_BUTTON_PRESSED].bitmap = va_arg(ap, Bitmap *); gi->alt_design[GD_BUTTON_PRESSED].x = va_arg(ap, int); gi->alt_design[GD_BUTTON_PRESSED].y = va_arg(ap, int); break; @@ -400,7 +397,7 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) break; case GDI_DECORATION_DESIGN: - gi->deco.design.bitmap = va_arg(ap, Bitmap); + gi->deco.design.bitmap = va_arg(ap, Bitmap *); gi->deco.design.x = va_arg(ap, int); gi->deco.design.y = va_arg(ap, int); break; @@ -849,15 +846,27 @@ void HandleGadgets(int mx, int my, int button) if (last_info_gi != new_gi || (new_gi && new_gi->type == GD_TYPE_DRAWING_AREA && changed_position)) { - last_info_gi = new_gi; - if (new_gi != NULL && (button == 0 || new_gi == last_gi)) { - new_gi->event.type = 0; + new_gi->event.type = GD_EVENT_INFO_ENTERING; new_gi->callback_info(new_gi); } - else + else if (last_info_gi != NULL) + { + last_info_gi->event.type = GD_EVENT_INFO_LEAVING; + last_info_gi->callback_info(last_info_gi); + +#if 0 default_callback_info(NULL); + + printf("It seems that we are leaving gadget [%s]!\n", + (last_info_gi != NULL && + last_info_gi->info_text != NULL ? + last_info_gi->info_text : "")); +#endif + } + + last_info_gi = new_gi; } if (gadget_pressed)