added check button gadget that toggles only after releasing
authorHolger Schemel <info@artsoft.org>
Tue, 7 Feb 2023 23:37:19 +0000 (00:37 +0100)
committerHolger Schemel <info@artsoft.org>
Tue, 7 Feb 2023 23:37:19 +0000 (00:37 +0100)
src/libgame/gadgets.c
src/libgame/gadgets.h

index 94fe74551cdd58ed60a001afd742c412cc2e1735..89eb008150ca324bf23a6f8f9c01ae7fcfd14e39 100644 (file)
@@ -238,6 +238,7 @@ static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct)
   {
     case GD_TYPE_NORMAL_BUTTON:
     case GD_TYPE_CHECK_BUTTON:
+    case GD_TYPE_CHECK_BUTTON_2:
     case GD_TYPE_RADIO_BUTTON:
 
       BlitBitmapOnBackground(gd->bitmap, drawto,
@@ -828,6 +829,7 @@ static void DrawGadget_OverlayTouchButton(struct GadgetInfo *gi)
   {
     case GD_TYPE_NORMAL_BUTTON:
     case GD_TYPE_CHECK_BUTTON:
+    case GD_TYPE_CHECK_BUTTON_2:
     case GD_TYPE_RADIO_BUTTON:
       SDL_SetTextureAlphaMod(gd->bitmap->texture_masked, alpha);
       SDL_SetTextureBlendMode(gd->bitmap->texture_masked, SDL_BLENDMODE_BLEND);
@@ -2158,7 +2160,11 @@ boolean HandleGadgets(int mx, int my, int button)
     boolean deactivate_gadget = TRUE;
     boolean gadget_changed = TRUE;
 
-    if (gi->type & GD_TYPE_SELECTBOX)
+    if (gi->type == GD_TYPE_CHECK_BUTTON_2)
+    {
+      gi->checked = !gi->checked;
+    }
+    else if (gi->type & GD_TYPE_SELECTBOX)
     {
       if (keep_selectbox_open ||
          mouse_released_where_pressed ||
index aaf4de16d74900811e137310de508c44f735fc9d..b2b43588cc8134b6ef05fcfd6382a2d24bf092b4 100644 (file)
 #define GD_TYPE_NORMAL_BUTTON          (1 << 0)
 #define GD_TYPE_TEXT_BUTTON            (1 << 1)
 #define GD_TYPE_CHECK_BUTTON           (1 << 2)
-#define GD_TYPE_RADIO_BUTTON           (1 << 3)
-#define GD_TYPE_DRAWING_AREA           (1 << 4)
-#define GD_TYPE_TEXT_INPUT_ALPHANUMERIC        (1 << 5)
-#define GD_TYPE_TEXT_INPUT_NUMERIC     (1 << 6)
-#define GD_TYPE_TEXT_AREA              (1 << 7)
-#define GD_TYPE_SELECTBOX              (1 << 8)
-#define GD_TYPE_SCROLLBAR_VERTICAL     (1 << 9)
-#define GD_TYPE_SCROLLBAR_HORIZONTAL   (1 << 10)
+#define GD_TYPE_CHECK_BUTTON_2         (1 << 3)
+#define GD_TYPE_RADIO_BUTTON           (1 << 4)
+#define GD_TYPE_DRAWING_AREA           (1 << 5)
+#define GD_TYPE_TEXT_INPUT_ALPHANUMERIC        (1 << 6)
+#define GD_TYPE_TEXT_INPUT_NUMERIC     (1 << 7)
+#define GD_TYPE_TEXT_AREA              (1 << 8)
+#define GD_TYPE_SELECTBOX              (1 << 9)
+#define GD_TYPE_SCROLLBAR_VERTICAL     (1 << 10)
+#define GD_TYPE_SCROLLBAR_HORIZONTAL   (1 << 11)
 
 #define GD_TYPE_BUTTON                 (GD_TYPE_NORMAL_BUTTON | \
                                         GD_TYPE_TEXT_BUTTON | \
                                         GD_TYPE_CHECK_BUTTON | \
+                                        GD_TYPE_CHECK_BUTTON_2 | \
                                         GD_TYPE_RADIO_BUTTON)
 #define GD_TYPE_SCROLLBAR              (GD_TYPE_SCROLLBAR_VERTICAL | \
                                         GD_TYPE_SCROLLBAR_HORIZONTAL)