rnd-20030801-1-src
[rocksndiamonds.git] / src / libgame / gadgets.c
index b80910d8822ec7ae12fc2503fe5b6355c8720f85..d2af524ac4353ceb8505c59351ea8e9834ca17e0 100644 (file)
@@ -1131,6 +1131,13 @@ void HandleGadgets(int mx, int my, int button)
   if (gadget_list_first_entry == NULL)
     return;
 
+  /* simulated release of mouse button over last gadget */
+  if (mx == -1 && my == -1 && button == 0)
+  {
+    mx = last_mx;
+    my = last_my;
+  }
+
   /* check which gadget is under the mouse pointer */
   new_gi = getGadgetInfoFromMousePosition(mx, my);
 
@@ -1192,7 +1199,7 @@ void HandleGadgets(int mx, int my, int button)
       /* if mouse button pressed inside activated selectbox, select value */
       if (my >= gi->selectbox.y && my < gi->selectbox.y + gi->selectbox.height)
        gi->selectbox.current_index =
-         (my - gi->selectbox.y - gi->border.xsize) / getFontWidth(gi->font);
+         (my - gi->selectbox.y - gi->border.ysize) / getFontHeight(gi->font);
 
       if (gi->selectbox.current_index < 0)
        gi->selectbox.current_index = 0;
@@ -1238,8 +1245,8 @@ void HandleGadgets(int mx, int my, int button)
       (mx >= gi->x && mx < gi->x + gi->width &&
        my >= gi->y && my < gi->y + gi->height);
     gadget_released_inside_select_area =
-      (mx >= gi->selectbox.x && mx < gi->selectbox.x+gi->selectbox.width &&
-       my >= gi->selectbox.y && my < gi->selectbox.y+gi->selectbox.height);
+      (mx >= gi->selectbox.x && mx < gi->selectbox.x + gi->selectbox.width &&
+       my >= gi->selectbox.y && my < gi->selectbox.y + gi->selectbox.height);
   }
   else
   {
@@ -1297,7 +1304,7 @@ void HandleGadgets(int mx, int my, int button)
       /* if mouse moving inside activated selectbox, select value */
       if (my >= gi->selectbox.y && my < gi->selectbox.y + gi->selectbox.height)
        gi->selectbox.current_index =
-         (my - gi->selectbox.y - gi->border.xsize) / getFontWidth(gi->font);
+         (my - gi->selectbox.y - gi->border.ysize) / getFontHeight(gi->font);
 
       if (gi->selectbox.current_index < 0)
        gi->selectbox.current_index = 0;
@@ -1463,7 +1470,7 @@ void HandleGadgets(int mx, int my, int button)
       /* if mouse moving inside activated selectbox, select value */
       if (my >= gi->selectbox.y && my < gi->selectbox.y + gi->selectbox.height)
        gi->selectbox.current_index =
-         (my - gi->selectbox.y - gi->border.xsize) / getFontWidth(gi->font);
+         (my - gi->selectbox.y - gi->border.ysize) / getFontHeight(gi->font);
 
       if (gi->selectbox.current_index < 0)
        gi->selectbox.current_index = 0;
@@ -1547,6 +1554,10 @@ void HandleGadgets(int mx, int my, int button)
        gi->event_mask & GD_EVENT_OFF_BORDERS)
       gi->callback_action(gi);
   }
+
+  /* handle gadgets unmapped/mapped between pressing and releasing */
+  if (release_event && !gadget_released && new_gi)
+    new_gi->state = GD_BUTTON_UNPRESSED;
 }
 
 void HandleGadgetsKeyInput(Key key)