X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=8afe55356e3719947e6a7dbd4b1a5f169d9cae4d;hb=472c408b6f77da95f694142431030af508c187a5;hp=ed99fd4052445aab73157b8ad1abce93ea313670;hpb=5caf02865ba54b967aa085c4221040113a9e1976;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index ed99fd40..8afe5535 100644 --- a/src/screens.c +++ b/src/screens.c @@ -28,18 +28,18 @@ /* for DrawSetupScreen(), HandleSetupScreen() */ #define SETUP_SCREEN_POS_START 2 -#define SETUP_SCREEN_POS_END 16 +#define SETUP_SCREEN_POS_END (SCR_FIELDY - 1) #define SETUP_SCREEN_POS_EMPTY1 (SETUP_SCREEN_POS_END - 2) #define SETUP_SCREEN_POS_EMPTY2 (SETUP_SCREEN_POS_END - 2) /* for HandleSetupInputScreen() */ #define SETUPINPUT_SCREEN_POS_START 2 -#define SETUPINPUT_SCREEN_POS_END 15 +#define SETUPINPUT_SCREEN_POS_END (SCR_FIELDY - 2) #define SETUPINPUT_SCREEN_POS_EMPTY1 (SETUPINPUT_SCREEN_POS_START + 3) #define SETUPINPUT_SCREEN_POS_EMPTY2 (SETUPINPUT_SCREEN_POS_END - 1) /* for HandleChooseLevel() */ -#define MAX_LEVEL_SERIES_ON_SCREEN 15 +#define MAX_LEVEL_SERIES_ON_SCREEN (SCR_FIELDY - 2) #ifdef MSDOS extern unsigned char get_ascii(KeySym); @@ -820,7 +820,7 @@ static void drawChooseLevelList(int first_entry, int num_page_entries) for(i=0; i num_page_entries + 2) + if (first_entry == -1) { - choice = num_page_entries + 2; - first_entry = num_leveldirs - num_page_entries; + first_entry = MAX(0, leveldir_nr - num_page_entries + 1); + choice = leveldir_nr - first_entry + 3; } drawChooseLevelList(first_entry, num_page_entries); drawChooseLevelInfo(leveldir_nr); + redraw = TRUE; } if (redraw) @@ -896,7 +894,15 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button) y = choice + dy; } else - x = y = 0; + x = y = 0; /* no action */ + + if (ABS(dy) == SCR_FIELDY) /* handle XK_Page_Up, XK_Page_Down */ + { + dy = SIGN(dy); + step = num_page_entries - 1; + x = 1; + y = (dy < 0 ? 2 : num_page_entries + 3); + } } if (x == 1 && y == 2) @@ -904,13 +910,10 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button) if (first_entry > 0 && (dy || DelayReached(&choose_delay, GADGET_FRAME_DELAY))) { -#if 0 - first_entry--; -#else first_entry -= step; if (first_entry < 0) first_entry = 0; -#endif + drawChooseLevelList(first_entry, num_page_entries); drawChooseLevelInfo(first_entry); DrawGraphic(0, choice - 1, GFX_KUGEL_ROT); @@ -922,13 +925,10 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button) if (first_entry + num_page_entries < num_leveldirs && (dy || DelayReached(&choose_delay, GADGET_FRAME_DELAY))) { -#if 0 - first_entry++; -#else first_entry += step; if (first_entry + num_page_entries > num_leveldirs) - first_entry = num_leveldirs - num_page_entries; -#endif + first_entry = MAX(0, num_leveldirs - num_page_entries); + drawChooseLevelList(first_entry, num_page_entries); drawChooseLevelInfo(first_entry + num_page_entries - 1); DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);