added option for 'masked' element graphics on properties buttons
authorHolger Schemel <info@artsoft.org>
Thu, 20 Oct 2016 22:17:03 +0000 (00:17 +0200)
committerHolger Schemel <info@artsoft.org>
Thu, 20 Oct 2016 22:17:03 +0000 (00:17 +0200)
src/editor.c
src/libgame/gadgets.c
src/libgame/gadgets.h

index da94af773a97e415fcad886fcfcc57a4cd3cdf08..c7bf9febe5d00daf75fa84d6e09c91385d61ddf3 100644 (file)
@@ -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;
     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;
     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_xpos = (gd->width  - tile_size) / 2;
       deco_ypos = (gd->height - tile_size) / 2;
       deco_shift = 1;
+      deco_masked = gd->draw_masked;
     }
     else
     {
     }
     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_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,
                      GDI_EVENT_MASK, event_mask,
                      GDI_CALLBACK_INFO, HandleEditorGadgetInfoText,
                      GDI_CALLBACK_ACTION, HandleControlButtons,
index b21ecdca09607e9afb25eb4dec7f1fb8ad302e19..daa045eb4892dd4ea28b98d9def164ad143bf12d 100644 (file)
@@ -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);
 
        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;
       }
 
       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;
 
        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;
       case GDI_EVENT_MASK:
        gi->event_mask = va_arg(ap, unsigned int);
        break;
index 5b41ba478afdcc7f86e51870b688c732b12ba396..6482e44e3c6e19054b7e6ea89d16421ad5e00f2e 100644 (file)
 #define GDI_DECORATION_POSITION                30
 #define GDI_DECORATION_SIZE            31
 #define GDI_DECORATION_SHIFTING                32
 #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))
 
 /* 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 */
   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
 };
 
 struct GadgetEvent