added check button gadget that toggles only after releasing
[rocksndiamonds.git] / src / libgame / gadgets.c
index e788b754366263ee773818a0f8362cba0880f7a2..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);
@@ -1629,8 +1631,7 @@ void ClickOnGadget(struct GadgetInfo *gi, int button)
 
 boolean HandleGadgets(int mx, int my, int button)
 {
-  static unsigned int pressed_delay = 0;
-  static unsigned int pressed_delay_value = GADGET_FRAME_DELAY;
+  static DelayCounter pressed_delay = { GADGET_FRAME_DELAY };
   static int last_button = 0;
   static int last_mx = 0, last_my = 0;
   static int pressed_mx = 0, pressed_my = 0;
@@ -1756,7 +1757,7 @@ boolean HandleGadgets(int mx, int my, int button)
     (button != 0 && last_gi != NULL && new_gi == last_gi);
 
   gadget_pressed_delay_reached =
-    DelayReached(&pressed_delay, pressed_delay_value);
+    DelayReached(&pressed_delay);
 
   gadget_released =            (release_event && last_gi != NULL);
   gadget_released_inside =     (gadget_released && new_gi == last_gi);
@@ -1937,12 +1938,12 @@ boolean HandleGadgets(int mx, int my, int button)
       ResetDelayCounter(&pressed_delay);
 
       // start gadget delay with longer delay after first click on gadget
-      pressed_delay_value = GADGET_FRAME_DELAY_FIRST;
+      pressed_delay.value = GADGET_FRAME_DELAY_FIRST;
     }
     else                       // gadget hold pressed for some time
     {
       // after first repeated gadget click, continue with shorter delay value
-      pressed_delay_value = GADGET_FRAME_DELAY;
+      pressed_delay.value = GADGET_FRAME_DELAY;
     }
 
     if (gi->type & GD_TYPE_SCROLLBAR && !gadget_dragging)
@@ -2159,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 ||