From: Holger Schemel Date: Thu, 20 Oct 2016 22:17:03 +0000 (+0200) Subject: added option for 'masked' element graphics on properties buttons X-Git-Tag: 4.0.0.0~30 X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=commitdiff_plain;h=3b6f0ed7443f58031823df29c1a7bd89d7d63a8d added option for 'masked' element graphics on properties buttons --- diff --git a/src/editor.c b/src/editor.c index da94af77..c7bf9feb 100644 --- a/src/editor.c +++ b/src/editor.c @@ -5451,6 +5451,7 @@ static void CreateControlButtons() Bitmap *deco_bitmap = NULL; int deco_x = 0, deco_y = 0, deco_xpos = 0, deco_ypos = 0; int tile_size = 0, deco_shift = 0; + boolean deco_masked = FALSE; int gd_x1 = gd->src_x; int gd_y1 = gd->src_y; int gd_x2 = gd->src_x + gd->pressed_xoffset; @@ -5515,6 +5516,7 @@ static void CreateControlButtons() deco_xpos = (gd->width - tile_size) / 2; deco_ypos = (gd->height - tile_size) / 2; deco_shift = 1; + deco_masked = gd->draw_masked; } else { @@ -5541,6 +5543,7 @@ static void CreateControlButtons() GDI_DECORATION_POSITION, deco_xpos, deco_ypos, GDI_DECORATION_SIZE, tile_size, tile_size, GDI_DECORATION_SHIFTING, deco_shift, deco_shift, + GDI_DECORATION_MASKED, deco_masked, GDI_EVENT_MASK, event_mask, GDI_CALLBACK_INFO, HandleEditorGadgetInfoText, GDI_CALLBACK_ACTION, HandleControlButtons, diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index b21ecdca..daa045eb 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -244,9 +244,16 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct) int deco_width = MIN(gi->deco.width, gi->width - deco_x); int deco_height = MIN(gi->deco.height, gi->height - deco_y); - BlitBitmap(gi->deco.design.bitmap, drawto, - gi->deco.design.x, gi->deco.design.y, - deco_width, deco_height, gi->x + deco_x, gi->y + deco_y); + if (gi->deco.masked) + BlitBitmapMasked(gi->deco.design.bitmap, drawto, + gi->deco.design.x, gi->deco.design.y, + deco_width, deco_height, + gi->x + deco_x, gi->y + deco_y); + else + BlitBitmap(gi->deco.design.bitmap, drawto, + gi->deco.design.x, gi->deco.design.y, + deco_width, deco_height, + gi->x + deco_x, gi->y + deco_y); } break; @@ -994,6 +1001,10 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) gi->deco.yshift = va_arg(ap, int); break; + case GDI_DECORATION_MASKED: + gi->deco.masked = (boolean)va_arg(ap, int); + break; + case GDI_EVENT_MASK: gi->event_mask = va_arg(ap, unsigned int); break; diff --git a/src/libgame/gadgets.h b/src/libgame/gadgets.h index 5b41ba47..6482e44e 100644 --- a/src/libgame/gadgets.h +++ b/src/libgame/gadgets.h @@ -93,22 +93,23 @@ #define GDI_DECORATION_POSITION 30 #define GDI_DECORATION_SIZE 31 #define GDI_DECORATION_SHIFTING 32 -#define GDI_EVENT_MASK 33 -#define GDI_EVENT 34 -#define GDI_CALLBACK_INFO 35 -#define GDI_CALLBACK_ACTION 36 -#define GDI_AREA_SIZE 37 -#define GDI_ITEM_SIZE 38 -#define GDI_SCROLLBAR_ITEMS_MAX 39 -#define GDI_SCROLLBAR_ITEMS_VISIBLE 40 -#define GDI_SCROLLBAR_ITEM_POSITION 41 -#define GDI_WHEEL_AREA_X 42 -#define GDI_WHEEL_AREA_Y 43 -#define GDI_WHEEL_AREA_WIDTH 44 -#define GDI_WHEEL_AREA_HEIGHT 45 -#define GDI_INFO_TEXT 46 -#define GDI_ACTIVE 47 -#define GDI_DIRECT_DRAW 48 +#define GDI_DECORATION_MASKED 33 +#define GDI_EVENT_MASK 34 +#define GDI_EVENT 35 +#define GDI_CALLBACK_INFO 36 +#define GDI_CALLBACK_ACTION 37 +#define GDI_AREA_SIZE 38 +#define GDI_ITEM_SIZE 39 +#define GDI_SCROLLBAR_ITEMS_MAX 40 +#define GDI_SCROLLBAR_ITEMS_VISIBLE 41 +#define GDI_SCROLLBAR_ITEM_POSITION 42 +#define GDI_WHEEL_AREA_X 43 +#define GDI_WHEEL_AREA_Y 44 +#define GDI_WHEEL_AREA_WIDTH 45 +#define GDI_WHEEL_AREA_HEIGHT 46 +#define GDI_INFO_TEXT 47 +#define GDI_ACTIVE 48 +#define GDI_DIRECT_DRAW 49 /* gadget deactivation hack */ #define GDI_ACTIVE_POS(a) ((a) < 0 ? POS_OFFSCREEN : (a)) @@ -135,6 +136,7 @@ struct GadgetDecoration int x, y; /* position of deco on the gadget */ int width, height; /* width and height of decoration */ int xshift, yshift; /* deco shifting when gadget pressed */ + boolean masked; /* draw decoration masked over button */ }; struct GadgetEvent