#define MAX_INFO_MODES 8
/* screens on the setup screen */
+/* (must match GFX_SPECIAL_ARG_SETUP_* values as defined in src/main.h) */
+/* (should also match corresponding entries in src/conf_gfx.c) */
#define SETUP_MODE_MAIN 0
#define SETUP_MODE_GAME 1
#define SETUP_MODE_EDITOR 2
static LevelDirTree *leveldir_last_valid = NULL;
boolean levelset_has_changed = FALSE;
+ LimitScreenUpdates(FALSE);
+
FadeSetLeaveScreen();
/* do not fade out here -- function may continue and fade on editor screen */
InitializeMainControls();
DrawCursorAndText_Main(-1, FALSE);
- DrawPreviewLevel(TRUE);
+ DrawPreviewLevelInitial();
HandleMainMenu(0, 0, 0, 0, MB_MENU_INITIALIZE);
mci->pos_text->font);
LoadLevel(level_nr);
- DrawPreviewLevel(TRUE);
+ DrawPreviewLevelInitial();
TapeErase();
LoadTape(level_nr);
DrawCompleteVideoDisplay();
- /* needed because DrawPreviewLevel() takes some time */
+ /* needed because DrawPreviewLevelInitial() takes some time */
BackToFront();
SyncDisplay();
}
}
}
+#if 0
if (game_status == GAME_MODE_MAIN)
{
- DrawPreviewLevel(FALSE);
+ DrawPreviewLevelAnimation();
DoAnimation();
}
+#endif
}
int ystart1 = mSY - SY + 100;
int ystart2 = mSY - SY + 150;
int ybottom = mSY - SY + SYSIZE - 20;
- int xstart1 = mSX + 2 * xstep;
- int xstart2 = mSX + 19 * xstep;
+ int xstart1 = mSX - SX + 2 * xstep;
+ int xstart2 = mSX - SX + 18 * xstep;
#if defined(TARGET_SDL)
- int xstart3 = mSX + 29 * xstep;
+ int xstart3 = mSX - SX + 28 * xstep;
SDL_version sdl_version_compiled;
-#if defined(TARGET_SDL2)
- SDL_version sdl_version_linked_ext;
-#endif
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
- int driver_name_len = 8;
char driver_name[driver_name_len];
#endif
#endif
DrawTextF(xstart3, ystart2, font_header, "Used");
#if defined(TARGET_SDL2)
- driver_name = SDL_GetVideoDriver(0);
+ driver_name = getStringCopyNStatic(SDL_GetVideoDriver(0), driver_name_len);
#else
SDL_VideoDriverName(driver_name, driver_name_len);
#endif
DrawTextF(xstart3, ystart2, font_text, "%s", driver_name);
#if defined(TARGET_SDL2)
- driver_name = SDL_GetAudioDriver(0);
+ driver_name = getStringCopyNStatic(SDL_GetAudioDriver(0), driver_name_len);
#else
SDL_AudioDriverName(driver_name, driver_name_len);
#endif
else
HandleInfoScreen_Main(mx, my, dx, dy, button);
+#if 0
DoAnimation();
+#endif
}
}
else
{
+#if 1
+ FadeSetEnterMenu();
+#else
FadeSetEnterScreen();
+#endif
node_cursor->cl_first = ti->cl_first;
node_cursor->cl_cursor = ti->cl_cursor;
{
HandleChooseTree(mx, my, dx, dy, button, &leveldir_current);
+#if 0
DoAnimation();
+#endif
}
void DrawChooseLevelNr()
HandleChooseTree(mx, my, dx, dy, button, &leveldir_current);
#endif
+#if 0
DoAnimation();
+#endif
}
void DrawHallOfFame(int highlight_position)
if (game_status == GAME_MODE_SCORES)
PlayMenuSoundIfLoop();
+#if 0
DoAnimation();
+#endif
}
DrawSetupScreen();
}
-static void execSetupGraphics()
+static void execSetupGraphics_setWindowSizes(boolean update_list)
{
+ if (window_sizes != NULL && update_list)
+ {
+ freeTreeInfo(window_sizes);
+
+ window_sizes = NULL;
+ }
- if (video.fullscreen_available && screen_modes == NULL)
+ if (window_sizes == NULL)
{
+ boolean current_window_size_found = FALSE;
int i;
- for (i = 0; video.fullscreen_modes[i].width != -1; i++)
+ for (i = 0; window_sizes_list[i].value != -1; i++)
{
TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
char identifier[32], name[32];
- int x = video.fullscreen_modes[i].width;
- int y = video.fullscreen_modes[i].height;
- int xx, yy;
-
- get_aspect_ratio_from_screen_mode(&video.fullscreen_modes[i], &xx, &yy);
+ int value = window_sizes_list[i].value;
+ char *text = window_sizes_list[i].text;
- ti->node_top = &screen_modes;
- ti->sort_priority = x * 10000 + y;
+ ti->node_top = &window_sizes;
+ ti->sort_priority = value;
- sprintf(identifier, "%dx%d", x, y);
- sprintf(name, "%d x %d [%d:%d]", x, y, xx, yy);
+ sprintf(identifier, "%d", value);
+ sprintf(name, "%s", text);
setString(&ti->identifier, identifier);
setString(&ti->name, name);
setString(&ti->name_sorting, name);
- setString(&ti->infotext, "Fullscreen Mode");
-
- pushTreeInfo(&screen_modes, ti);
- }
-
- /* sort fullscreen modes to start with lowest available screen resolution */
- sortTreeInfo(&screen_modes);
-
- /* set current screen mode for fullscreen mode to configured setup value */
- screen_mode_current = getTreeInfoFromIdentifier(screen_modes,
- setup.fullscreen_mode);
-
- /* if that fails, set current screen mode to reliable default value */
- if (screen_mode_current == NULL)
- screen_mode_current = getTreeInfoFromIdentifier(screen_modes,
- DEFAULT_FULLSCREEN_MODE);
-
- /* if that also fails, set current screen mode to first available mode */
- if (screen_mode_current == NULL)
- screen_mode_current = screen_modes;
-
- if (screen_mode_current == NULL)
- video.fullscreen_available = FALSE;
- }
-
- if (video.fullscreen_available)
- {
- setup.fullscreen_mode = screen_mode_current->identifier;
+ setString(&ti->infotext, "Window Scaling");
- /* needed for displaying screen mode name instead of identifier */
- screen_mode_text = screen_mode_current->name;
- }
+ pushTreeInfo(&window_sizes, ti);
- if (window_sizes == NULL)
- {
- int i;
+ if (value == setup.window_scaling_percent)
+ current_window_size_found = TRUE;
+ }
- for (i = 0; window_sizes_list[i].value != -1; i++)
+ if (!current_window_size_found)
{
+ // add entry for non-preset window scaling value
+
TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
char identifier[32], name[32];
- int value = window_sizes_list[i].value;
- char *text = window_sizes_list[i].text;
+ int value = setup.window_scaling_percent;
ti->node_top = &window_sizes;
ti->sort_priority = value;
sprintf(identifier, "%d", value);
- sprintf(name, "%s", text);
+ sprintf(name, "%d %% (Current)", value);
setString(&ti->identifier, identifier);
setString(&ti->name, name);
/* needed for displaying window size text instead of identifier */
window_size_text = window_size_current->name;
+}
-#if 1
+static void execSetupGraphics_setScreenModes()
+{
+ // if (screen_modes == NULL && video.fullscreen_available)
+ if (screen_modes == NULL && video.fullscreen_modes != NULL)
+ {
+ int i;
+
+ for (i = 0; video.fullscreen_modes[i].width != -1; i++)
+ {
+ TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED);
+ char identifier[32], name[32];
+ int x = video.fullscreen_modes[i].width;
+ int y = video.fullscreen_modes[i].height;
+ int xx, yy;
+
+ get_aspect_ratio_from_screen_mode(&video.fullscreen_modes[i], &xx, &yy);
+
+ ti->node_top = &screen_modes;
+ ti->sort_priority = x * 10000 + y;
+
+ sprintf(identifier, "%dx%d", x, y);
+ sprintf(name, "%d x %d [%d:%d]", x, y, xx, yy);
+
+ setString(&ti->identifier, identifier);
+ setString(&ti->name, name);
+ setString(&ti->name_sorting, name);
+ setString(&ti->infotext, "Fullscreen Mode");
+
+ pushTreeInfo(&screen_modes, ti);
+ }
+
+ /* sort fullscreen modes to start with lowest available screen resolution */
+ sortTreeInfo(&screen_modes);
+
+ /* set current screen mode for fullscreen mode to configured setup value */
+ screen_mode_current = getTreeInfoFromIdentifier(screen_modes,
+ setup.fullscreen_mode);
+
+ /* if that fails, set current screen mode to reliable default value */
+ if (screen_mode_current == NULL)
+ screen_mode_current = getTreeInfoFromIdentifier(screen_modes,
+ DEFAULT_FULLSCREEN_MODE);
+
+ /* if that also fails, set current screen mode to first available mode */
+ if (screen_mode_current == NULL)
+ screen_mode_current = screen_modes;
+
+ if (screen_mode_current == NULL)
+ video.fullscreen_available = FALSE;
+ }
+
+ // if (video.fullscreen_available)
+ if (screen_mode_current != NULL)
+ {
+ setup.fullscreen_mode = screen_mode_current->identifier;
+
+ /* needed for displaying screen mode name instead of identifier */
+ screen_mode_text = screen_mode_current->name;
+ }
+}
+
+static void execSetupGraphics_setScrollDelays()
+{
if (scroll_delays == NULL)
{
int i;
/* needed for displaying scroll delay text instead of identifier */
scroll_delay_text = scroll_delay_current->name;
-#endif
+}
+
+static void execSetupGraphics()
+{
+ // update "setup.window_scaling_percent" from list selection
+ execSetupGraphics_setWindowSizes(FALSE);
+ // maybe remove non-preset value (if standard value was selected)
+ execSetupGraphics_setWindowSizes(TRUE);
+
+ execSetupGraphics_setScreenModes();
+ execSetupGraphics_setScrollDelays();
setup_mode = SETUP_MODE_GRAPHICS;
DrawSetupScreen();
}
+#if !defined(PLATFORM_ANDROID)
#if defined(TARGET_SDL2)
static void execSetupChooseWindowSize()
{
DrawSetupScreen();
}
#endif
+#endif
static void execSetupChooseScrollDelay()
{
static struct TokenInfo setup_info_graphics[] =
{
+#if !defined(PLATFORM_ANDROID)
{ TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" },
#if defined(TARGET_SDL2)
{ TYPE_ENTER_LIST, execSetupChooseWindowSize, "Window Scaling:" },
{ TYPE_ENTER_LIST, execSetupChooseScreenMode, "Fullscreen Mode:" },
{ TYPE_STRING, &screen_mode_text, "" },
#endif
+#endif
#if 0
{ TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" },
#endif
void RedrawSetupScreenAfterFullscreenToggle()
{
+#if 1
+ if (setup_mode == SETUP_MODE_GRAPHICS ||
+ setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE)
+ {
+ // update "setup.window_scaling_percent" from list selection
+ execSetupGraphics_setWindowSizes(TRUE);
+
+ DrawSetupScreen();
+ }
+#else
if (setup_mode == SETUP_MODE_GRAPHICS)
DrawSetupScreen();
+#endif
}
void HandleSetupScreen(int mx, int my, int dx, int dy, int button)
else
HandleSetupScreen_Generic(mx, my, dx, dy, button);
+#if 0
DoAnimation();
+#endif
}
void HandleGameActions()