// screen gadget identifiers
#define SCREEN_CTRL_ID_PREV_LEVEL 0
#define SCREEN_CTRL_ID_NEXT_LEVEL 1
-#define SCREEN_CTRL_ID_PREV_PLAYER 2
-#define SCREEN_CTRL_ID_NEXT_PLAYER 3
-#define SCREEN_CTRL_ID_INSERT_SOLUTION 4
-#define SCREEN_CTRL_ID_PLAY_SOLUTION 5
-#define SCREEN_CTRL_ID_SCROLL_UP 6
-#define SCREEN_CTRL_ID_SCROLL_DOWN 7
-#define SCREEN_CTRL_ID_SCROLL_VERTICAL 8
-#define SCREEN_CTRL_ID_NETWORK_SERVER 9
-
-#define NUM_SCREEN_GADGETS 10
-
-#define NUM_SCREEN_MENUBUTTONS 6
+#define SCREEN_CTRL_ID_FIRST_LEVEL 2
+#define SCREEN_CTRL_ID_LAST_LEVEL 3
+#define SCREEN_CTRL_ID_LEVEL_NUMBER 4
+#define SCREEN_CTRL_ID_PREV_PLAYER 5
+#define SCREEN_CTRL_ID_NEXT_PLAYER 6
+#define SCREEN_CTRL_ID_INSERT_SOLUTION 7
+#define SCREEN_CTRL_ID_PLAY_SOLUTION 8
+#define SCREEN_CTRL_ID_SCROLL_UP 9
+#define SCREEN_CTRL_ID_SCROLL_DOWN 10
+#define SCREEN_CTRL_ID_SCROLL_VERTICAL 11
+#define SCREEN_CTRL_ID_NETWORK_SERVER 12
+
+#define NUM_SCREEN_GADGETS 13
+
+#define NUM_SCREEN_MENUBUTTONS 9
#define NUM_SCREEN_SCROLLBUTTONS 2
#define NUM_SCREEN_SCROLLBARS 1
#define NUM_SCREEN_TEXTINPUT 1
&menu.main.text.quit, &main_text_quit,
NULL, NULL,
},
-#if 0
- // (these two buttons are real gadgets)
{
MAIN_CONTROL_PREV_LEVEL,
- &menu.main.button.prev_level, IMG_MENU_BUTTON_PREV_LEVEL,
+ NULL, -1,
NULL, NULL,
NULL, NULL,
},
{
MAIN_CONTROL_NEXT_LEVEL,
- &menu.main.button.next_level, IMG_MENU_BUTTON_NEXT_LEVEL,
+ NULL, -1,
NULL, NULL,
NULL, NULL,
},
-#endif
{
MAIN_CONTROL_FIRST_LEVEL,
- &menu.main.button.first_level, IMG_MENU_BUTTON_FIRST_LEVEL,
+ NULL, -1,
&menu.main.text.first_level, &main_text_first_level,
NULL, NULL,
},
{
MAIN_CONTROL_LAST_LEVEL,
- &menu.main.button.last_level, IMG_MENU_BUTTON_LAST_LEVEL,
+ NULL, -1,
&menu.main.text.last_level, &main_text_last_level,
NULL, NULL,
},
{
MAIN_CONTROL_LEVEL_NUMBER,
- &menu.main.button.level_number, IMG_MENU_BUTTON_LEVEL_NUMBER,
+ NULL, -1,
&menu.main.text.level_number, &main_text_level_number,
NULL, NULL,
},
if (redraw_mask & REDRAW_ALL)
fade_mask = REDRAW_ALL;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
FadeOut(fade_mask);
"No title screen for this level set.");
return;
}
-
- FadeMenuSoundsAndMusic();
}
+ FadeMenuSoundsAndMusic();
+
FadeOut(REDRAW_ALL);
// title screens may have different window size
if (pos == MAIN_CONTROL_NAME)
{
- SetGameStatus(GAME_MODE_PSEUDO_TYPENAME);
+ if ((mx || my) &&
+ insideTextPosRect(main_controls[i].pos_text, mx - mSX, my - mSY))
+ {
+ // special case: menu text "name/team" clicked -- toggle team mode
+ setup.team_mode = !setup.team_mode;
- HandleTypeName(strlen(setup.player_name), 0);
+ InitializeMainControls();
+ DrawCursorAndText_Main(choice, TRUE, FALSE);
+
+ DrawPreviewPlayers();
+ }
+ else
+ {
+ SetGameStatus(GAME_MODE_PSEUDO_TYPENAME);
+
+ HandleTypeName(strlen(setup.player_name), 0);
+ }
}
else if (pos == MAIN_CONTROL_LEVELS)
{
if (redraw_mask & REDRAW_ALL)
fade_mask = REDRAW_ALL;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
UnmapAllGadgets();
SDL_version sdl_version_compiled;
const SDL_version *sdl_version_linked;
int driver_name_len = 10;
-#if defined(TARGET_SDL2)
SDL_version sdl_version_linked_ext;
const char *driver_name = NULL;
-#else
- char driver_name[driver_name_len];
-#endif
SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_VERSION);
ystart += ystep_head;
SDL_VERSION(&sdl_version_compiled);
-#if defined(TARGET_SDL2)
SDL_GetVersion(&sdl_version_linked_ext);
sdl_version_linked = &sdl_version_linked_ext;
-#else
- sdl_version_linked = SDL_Linked_Version();
-#endif
DrawTextF(xstart1, ystart, font_text, "SDL");
DrawTextF(xstart2, ystart, font_text, "%d.%d.%d",
DrawTextF(xstart3, ystart, font_head, "Used");
ystart += ystep_head;
-#if defined(TARGET_SDL2)
driver_name = getStringCopyNStatic(SDL_GetVideoDriver(0), driver_name_len);
-#else
- SDL_VideoDriverName(driver_name, driver_name_len);
-#endif
DrawTextF(xstart1, ystart, font_text, "SDL_VideoDriver");
DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_videodriver);
DrawTextF(xstart3, ystart, font_text, "%s", driver_name);
ystart += ystep_line;
-#if defined(TARGET_SDL2)
driver_name = getStringCopyNStatic(SDL_GetAudioDriver(0), driver_name_len);
-#else
- SDL_AudioDriverName(driver_name, driver_name_len);
-#endif
DrawTextF(xstart1, ystart, font_text, "SDL_AudioDriver");
DrawTextF(xstart2, ystart, font_text, "%s", setup.system.sdl_audiodriver);
{
int fade_mask = REDRAW_FIELD;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
if (strEqual((*ti_ptr)->subdir, STRING_TOP_DIRECTORY))
{
int fade_mask = REDRAW_FIELD;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
UnmapAllGadgets();
if (check_game_speed)
ModifyGameSpeedIfNeeded();
-#if defined(TARGET_SDL2)
// window scaling may have changed at this point
ToggleFullscreenOrChangeWindowScalingIfNeeded();
// screen vsync mode may have changed at this point
SDLSetScreenVsyncMode(setup.vsync_mode);
-#endif
}
static void execSetupChooseWindowSize(void)
static struct TokenInfo setup_info_graphics[] =
{
-#if defined(TARGET_SDL2) && !defined(PLATFORM_ANDROID)
+#if !defined(PLATFORM_ANDROID)
{ TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" },
{ TYPE_ENTER_LIST, execSetupChooseWindowSize, "Window Scaling:" },
{ TYPE_STRING, &window_size_text, "" },
char *title_string = NULL;
int i;
- if (CheckIfGlobalBorderOrPlayfieldViewportHasChanged())
+ if (CheckFadeAll())
fade_mask = REDRAW_ALL;
UnmapAllGadgets();
static boolean ConfigureJoystickMapButtonsAndAxes(SDL_Joystick *joystick)
{
-#if defined(TARGET_SDL2)
static boolean bitmaps_initialized = FALSE;
boolean screen_initialized = FALSE;
static Bitmap *controller, *button, *axis_x, *axis_y;
break;
case SDL_JOYHATMOTION:
- /* ignore centering; we're probably just coming back
- to the center from the previous item we set */
+ // ignore centering; we're probably just coming back
+ // to the center from the previous item we set
if (event.jhat.value == SDL_HAT_CENTERED)
break;
while (NextValidEvent(&event));
return success;
-#else
- return TRUE;
-#endif
}
static int ConfigureJoystickMain(int player_nr)
// press 'Enter' to keep the existing key binding
if (key == KSYM_Return ||
-#if defined(TARGET_SDL2)
key == KSYM_Menu ||
-#endif
key == KSYM_space)
{
step_nr++;
}
- else if (key == KSYM_BackSpace
-#if defined(TARGET_SDL2)
- ||
- key == KSYM_Back
-#endif
- )
+ else if (key == KSYM_BackSpace ||
+ key == KSYM_Back)
{
if (step_nr == 0)
{
}
break;
-#if defined(TARGET_SDL2)
case SDL_WINDOWEVENT:
HandleWindowEvent((WindowEvent *) &event);
case SDL_APP_DIDENTERFOREGROUND:
HandlePauseResumeEvent((PauseResumeEvent *) &event);
break;
-#endif
default:
HandleOtherEvents(&event);
*y = mSY + GDI_ACTIVE_POS(menu.main.button.next_level.y);
break;
+ case SCREEN_CTRL_ID_FIRST_LEVEL:
+ *x = mSX + GDI_ACTIVE_POS(menu.main.button.first_level.x);
+ *y = mSY + GDI_ACTIVE_POS(menu.main.button.first_level.y);
+ break;
+
+ case SCREEN_CTRL_ID_LAST_LEVEL:
+ *x = mSX + GDI_ACTIVE_POS(menu.main.button.last_level.x);
+ *y = mSY + GDI_ACTIVE_POS(menu.main.button.last_level.y);
+ break;
+
+ case SCREEN_CTRL_ID_LEVEL_NUMBER:
+ *x = mSX + GDI_ACTIVE_POS(menu.main.button.level_number.x);
+ *y = mSY + GDI_ACTIVE_POS(menu.main.button.level_number.y);
+ break;
+
case SCREEN_CTRL_ID_PREV_PLAYER:
*x = mSX + TILEX * 10;
*y = mSY + TILEY * MENU_SCREEN_START_YPOS;
void (*get_gadget_position)(int *, int *, int);
int gadget_id;
int screen_mask;
+ unsigned int event_mask;
char *infotext;
} menubutton_info[NUM_SCREEN_MENUBUTTONS] =
{
getScreenMenuButtonPos,
SCREEN_CTRL_ID_PREV_LEVEL,
SCREEN_MASK_MAIN,
- "last level"
+ GD_EVENT_PRESSED | GD_EVENT_REPEATED,
+ "previous level"
},
{
IMG_MENU_BUTTON_NEXT_LEVEL, IMG_MENU_BUTTON_NEXT_LEVEL_ACTIVE,
getScreenMenuButtonPos,
SCREEN_CTRL_ID_NEXT_LEVEL,
SCREEN_MASK_MAIN,
+ GD_EVENT_PRESSED | GD_EVENT_REPEATED,
"next level"
},
+ {
+ IMG_MENU_BUTTON_FIRST_LEVEL, IMG_MENU_BUTTON_FIRST_LEVEL_ACTIVE,
+ getScreenMenuButtonPos,
+ SCREEN_CTRL_ID_FIRST_LEVEL,
+ SCREEN_MASK_MAIN,
+ GD_EVENT_RELEASED,
+ "first level"
+ },
+ {
+ IMG_MENU_BUTTON_LAST_LEVEL, IMG_MENU_BUTTON_LAST_LEVEL_ACTIVE,
+ getScreenMenuButtonPos,
+ SCREEN_CTRL_ID_LAST_LEVEL,
+ SCREEN_MASK_MAIN,
+ GD_EVENT_RELEASED,
+ "last level"
+ },
+ {
+ IMG_MENU_BUTTON_LEVEL_NUMBER, IMG_MENU_BUTTON_LEVEL_NUMBER_ACTIVE,
+ getScreenMenuButtonPos,
+ SCREEN_CTRL_ID_LEVEL_NUMBER,
+ SCREEN_MASK_MAIN,
+ GD_EVENT_RELEASED,
+ "level number"
+ },
{
IMG_MENU_BUTTON_LEFT, IMG_MENU_BUTTON_LEFT_ACTIVE,
getScreenMenuButtonPos,
SCREEN_CTRL_ID_PREV_PLAYER,
SCREEN_MASK_INPUT,
- "last player"
+ GD_EVENT_PRESSED | GD_EVENT_REPEATED,
+ "previous player"
},
{
IMG_MENU_BUTTON_RIGHT, IMG_MENU_BUTTON_RIGHT_ACTIVE,
getScreenMenuButtonPos,
SCREEN_CTRL_ID_NEXT_PLAYER,
SCREEN_MASK_INPUT,
+ GD_EVENT_PRESSED | GD_EVENT_REPEATED,
"next player"
},
{
getScreenMenuButtonPos,
SCREEN_CTRL_ID_INSERT_SOLUTION,
SCREEN_MASK_MAIN_HAS_SOLUTION,
+ GD_EVENT_RELEASED,
"insert solution tape"
},
{
getScreenMenuButtonPos,
SCREEN_CTRL_ID_PLAY_SOLUTION,
SCREEN_MASK_MAIN_HAS_SOLUTION,
+ GD_EVENT_RELEASED,
"play solution tape"
},
};
int gd_x1, gd_x2, gd_y1, gd_y2;
int id = menubutton_info[i].gadget_id;
- if (menubutton_info[i].screen_mask == SCREEN_MASK_MAIN_HAS_SOLUTION)
- event_mask = GD_EVENT_RELEASED;
- else
- event_mask = GD_EVENT_PRESSED | GD_EVENT_REPEATED;
+ event_mask = menubutton_info[i].event_mask;
menubutton_info[i].get_gadget_position(&x, &y, id);
HandleMainMenu_SelectLevel(step, +1, NO_DIRECT_LEVEL_SELECT);
break;
+ case SCREEN_CTRL_ID_FIRST_LEVEL:
+ HandleMainMenu_SelectLevel(MAX_LEVELS, -1, NO_DIRECT_LEVEL_SELECT);
+ break;
+
+ case SCREEN_CTRL_ID_LAST_LEVEL:
+ HandleMainMenu_SelectLevel(MAX_LEVELS, +1, NO_DIRECT_LEVEL_SELECT);
+ break;
+
+ case SCREEN_CTRL_ID_LEVEL_NUMBER:
+ CloseDoor(DOOR_CLOSE_2);
+ SetGameStatus(GAME_MODE_LEVELNR);
+ DrawChooseLevelNr();
+ break;
+
case SCREEN_CTRL_ID_PREV_PLAYER:
HandleSetupScreen_Input_Player(step, -1);
break;