changeset 8408:e6f576f6e0e4 draft

(svn r11978) -Codechange: Replace some global variables with window owned ones
author skidd13 <skidd13@openttd.org>
date Thu, 24 Jan 2008 18:35:35 +0000
parents 5d6fd139368a
children 7c5e4180e2b1
files src/settings_gui.cpp
diffstat 1 files changed, 23 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -30,10 +30,6 @@
 #include "table/sprites.h"
 #include "table/strings.h"
 
-static uint32 _difficulty_click_a;
-static uint32 _difficulty_click_b;
-static byte _difficulty_timeout;
-
 static const StringID _units_dropdown[] = {
 	STR_UNITS_IMPERIAL,
 	STR_UNITS_METRIC,
@@ -489,6 +485,16 @@
 // 0x383E = (1 << 13) | (1 << 12) | (1 << 11) | (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1)
 #define DIFF_INGAME_DISABLED_BUTTONS 0x383E
 
+#define NO_SETTINGS_BUTTON 0xFF
+
+/** Carriage for the game settings window data */
+struct difficulty_d {
+	bool clicked_increase;
+	uint8 clicked_button;
+	uint8 timeout;
+};
+assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(difficulty_d));
+
 /* Names of the game difficulty settings window */
 enum GameDifficultyWidgets {
 	GDW_CLOSEBOX = 0,
@@ -507,8 +513,12 @@
 
 static void GameDifficultyWndProc(Window *w, WindowEvent *e)
 {
+	difficulty_d *diffic_d = &WP(w, difficulty_d);
 	switch (e->event) {
 		case WE_CREATE:
+			diffic_d->clicked_increase = false;
+			diffic_d->clicked_button = NO_SETTINGS_BUTTON;
+			diffic_d->timeout = 0;
 			/* Hide the closebox to make sure that the user aborts or confirms his changes */
 			w->HideWidget(GDW_CLOSEBOX);
 			w->widget[GDW_CAPTION].left = 0;
@@ -545,7 +555,7 @@
 				value = ((GDType*)&_opt_mod_temp.diff)[i];
 
 				DrawArrowButtons(5, y, 3,
-						!!HasBit(_difficulty_click_a, i) | !!HasBit(_difficulty_click_b, i) << 1,
+						(diffic_d->clicked_button == i) ? 1 << diffic_d->clicked_increase : 0,
 						!(HasBit(disabled, i) || gsd->min == value),
 						!(HasBit(disabled, i) || gsd->max == value));
 
@@ -572,7 +582,7 @@
 					if (y < 0) return;
 
 					/* Get button from Y coord. */
-					const uint btn = y / (GAMEDIFF_WND_ROWSIZE + 2);
+					const uint8 btn = y / (GAMEDIFF_WND_ROWSIZE + 2);
 					if (btn >= GAME_DIFFICULTY_NUM || y % (GAMEDIFF_WND_ROWSIZE + 2) >= 9)
 						return;
 
@@ -580,7 +590,7 @@
 					if (_game_mode == GM_NORMAL && HasBit(DIFF_INGAME_DISABLED_BUTTONS, btn))
 						return;
 
-					_difficulty_timeout = 5;
+					diffic_d->timeout = 5;
 
 					int16 val = ((GDType*)&_opt_mod_temp.diff)[btn];
 
@@ -588,13 +598,14 @@
 					if (x >= 10) {
 						/* Increase button clicked */
 						val = min(val + info->step, info->max);
-						SetBit(_difficulty_click_b, btn);
+						diffic_d->clicked_increase = true;
 					} else {
 						/* Decrease button clicked */
 						val -= info->step;
 						val = max(val,  info->min);
-						SetBit(_difficulty_click_a, btn);
+						diffic_d->clicked_increase = false;
 					}
+					diffic_d->clicked_button = btn;
 
 					/* save value in temporary variable */
 					((GDType*)&_opt_mod_temp.diff)[btn] = val;
@@ -642,9 +653,9 @@
 			} break;
 
 		case WE_MOUSELOOP: /* Handle the visual 'clicking' of the buttons */
-			if (_difficulty_timeout != 0 && !--_difficulty_timeout) {
-				_difficulty_click_a = 0;
-				_difficulty_click_b = 0;
+			if (diffic_d->timeout != 0) {
+				diffic_d->timeout--;
+				if (diffic_d->timeout == 0) diffic_d->clicked_button = NO_SETTINGS_BUTTON;
 				SetWindowDirty(w);
 			}
 			break;