mirror of https://github.com/LIJI32/SameBoy.git
SDL now automatically resizes the window upon loading a ROM if it was not manually resized by the user
This commit is contained in:
parent
8a0ff891bd
commit
2b89923a6f
|
@ -45,6 +45,8 @@ static unsigned factor;
|
||||||
|
|
||||||
static SDL_Surface *converted_background = NULL;
|
static SDL_Surface *converted_background = NULL;
|
||||||
|
|
||||||
|
bool screen_manually_resized = false;
|
||||||
|
|
||||||
void render_texture(void *pixels, void *previous)
|
void render_texture(void *pixels, void *previous)
|
||||||
{
|
{
|
||||||
if (renderer) {
|
if (renderer) {
|
||||||
|
@ -1253,6 +1255,7 @@ static void cycle_scaling_backwards(unsigned index)
|
||||||
}
|
}
|
||||||
update_viewport();
|
update_viewport();
|
||||||
render_texture(NULL, NULL);
|
render_texture(NULL, NULL);
|
||||||
|
screen_manually_resized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cycle_default_scale(unsigned index)
|
static void cycle_default_scale(unsigned index)
|
||||||
|
@ -1266,6 +1269,7 @@ static void cycle_default_scale(unsigned index)
|
||||||
|
|
||||||
rescale_window();
|
rescale_window();
|
||||||
update_viewport();
|
update_viewport();
|
||||||
|
screen_manually_resized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cycle_default_scale_backwards(unsigned index)
|
static void cycle_default_scale_backwards(unsigned index)
|
||||||
|
@ -1279,6 +1283,7 @@ static void cycle_default_scale_backwards(unsigned index)
|
||||||
|
|
||||||
rescale_window();
|
rescale_window();
|
||||||
update_viewport();
|
update_viewport();
|
||||||
|
screen_manually_resized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cycle_color_correction(unsigned index)
|
static void cycle_color_correction(unsigned index)
|
||||||
|
@ -2485,6 +2490,7 @@ void run_gui(bool is_running)
|
||||||
if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
|
if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
|
||||||
update_viewport();
|
update_viewport();
|
||||||
render_texture(NULL, NULL);
|
render_texture(NULL, NULL);
|
||||||
|
screen_manually_resized = true;
|
||||||
}
|
}
|
||||||
if (event.window.type == SDL_WINDOWEVENT_MOVED
|
if (event.window.type == SDL_WINDOWEVENT_MOVED
|
||||||
#if SDL_COMPILEDVERSION > 2018
|
#if SDL_COMPILEDVERSION > 2018
|
||||||
|
@ -2639,6 +2645,7 @@ void run_gui(bool is_running)
|
||||||
}
|
}
|
||||||
update_swap_interval();
|
update_swap_interval();
|
||||||
update_viewport();
|
update_viewport();
|
||||||
|
screen_manually_resized = true;
|
||||||
}
|
}
|
||||||
else if (event_hotkey_code(&event) == SDL_SCANCODE_O) {
|
else if (event_hotkey_code(&event) == SDL_SCANCODE_O) {
|
||||||
if (event.key.keysym.mod & MODIFIER) {
|
if (event.key.keysym.mod & MODIFIER) {
|
||||||
|
|
|
@ -45,6 +45,7 @@ enum pending_command {
|
||||||
extern enum pending_command pending_command;
|
extern enum pending_command pending_command;
|
||||||
extern unsigned command_parameter;
|
extern unsigned command_parameter;
|
||||||
extern char *dropped_state_file;
|
extern char *dropped_state_file;
|
||||||
|
extern bool screen_manually_resized;
|
||||||
|
|
||||||
void update_viewport(void);
|
void update_viewport(void);
|
||||||
void run_gui(bool is_running);
|
void run_gui(bool is_running);
|
||||||
|
|
24
SDL/main.c
24
SDL/main.c
|
@ -133,6 +133,7 @@ retry: {
|
||||||
|
|
||||||
case SDL_WINDOWEVENT: {
|
case SDL_WINDOWEVENT: {
|
||||||
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||||
|
screen_manually_resized = true;
|
||||||
update_viewport();
|
update_viewport();
|
||||||
}
|
}
|
||||||
if (event.window.type == SDL_WINDOWEVENT_MOVED
|
if (event.window.type == SDL_WINDOWEVENT_MOVED
|
||||||
|
@ -312,6 +313,7 @@ static void handle_events(GB_gameboy_t *gb)
|
||||||
|
|
||||||
case SDL_WINDOWEVENT: {
|
case SDL_WINDOWEVENT: {
|
||||||
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||||
|
screen_manually_resized = true;
|
||||||
update_viewport();
|
update_viewport();
|
||||||
}
|
}
|
||||||
if (event.window.type == SDL_WINDOWEVENT_MOVED
|
if (event.window.type == SDL_WINDOWEVENT_MOVED
|
||||||
|
@ -556,6 +558,7 @@ static void handle_events(GB_gameboy_t *gb)
|
||||||
}
|
}
|
||||||
update_swap_interval();
|
update_swap_interval();
|
||||||
update_viewport();
|
update_viewport();
|
||||||
|
screen_manually_resized = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1035,8 +1038,16 @@ static void run(void)
|
||||||
pending_command = GB_SDL_NO_COMMAND;
|
pending_command = GB_SDL_NO_COMMAND;
|
||||||
restart:;
|
restart:;
|
||||||
model = model_to_use();
|
model = model_to_use();
|
||||||
|
bool should_resize = !screen_manually_resized;
|
||||||
|
signed current_window_width, current_window_height;
|
||||||
|
SDL_GetWindowSize(window, ¤t_window_width, ¤t_window_height);
|
||||||
|
|
||||||
|
|
||||||
if (GB_is_inited(&gb)) {
|
if (GB_is_inited(&gb)) {
|
||||||
|
should_resize =
|
||||||
|
current_window_width == GB_get_screen_width(&gb) * configuration.default_scale &&
|
||||||
|
current_window_height == GB_get_screen_height(&gb) * configuration.default_scale;
|
||||||
|
|
||||||
if (doing_hot_swap) {
|
if (doing_hot_swap) {
|
||||||
doing_hot_swap = false;
|
doing_hot_swap = false;
|
||||||
}
|
}
|
||||||
|
@ -1107,6 +1118,15 @@ restart:;
|
||||||
GB_switch_model_and_reset(&gb, model);
|
GB_switch_model_and_reset(&gb, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (should_resize) {
|
||||||
|
signed width = GB_get_screen_width(&gb) * configuration.default_scale;
|
||||||
|
signed height = GB_get_screen_height(&gb) * configuration.default_scale;
|
||||||
|
signed x, y;
|
||||||
|
SDL_GetWindowPosition(window, &x, &y);
|
||||||
|
SDL_SetWindowSize(window, width, height);
|
||||||
|
SDL_SetWindowPosition(window, x - (width - current_window_width) / 2, y - (height - current_window_height) / 2);
|
||||||
|
}
|
||||||
|
|
||||||
/* Configure battery */
|
/* Configure battery */
|
||||||
char battery_save_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .sav + NULL */
|
char battery_save_path[path_length + 5]; /* At the worst case, size is strlen(path) + 4 bytes for .sav + NULL */
|
||||||
replace_extension(filename, path_length, battery_save_path, ".sav");
|
replace_extension(filename, path_length, battery_save_path, ".sav");
|
||||||
|
@ -1417,7 +1437,9 @@ int main(int argc, char **argv)
|
||||||
configuration.allow_background_controllers? "1" : "0");
|
configuration.allow_background_controllers? "1" : "0");
|
||||||
|
|
||||||
window = SDL_CreateWindow("SameBoy v" GB_VERSION, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
window = SDL_CreateWindow("SameBoy v" GB_VERSION, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
||||||
160 * configuration.default_scale, 144 * configuration.default_scale, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
|
(configuration.border_mode == GB_BORDER_ALWAYS? 256 : 160) * configuration.default_scale,
|
||||||
|
(configuration.border_mode == GB_BORDER_ALWAYS? 224 : 144) * configuration.default_scale,
|
||||||
|
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
|
||||||
if (window == NULL) {
|
if (window == NULL) {
|
||||||
fputs(SDL_GetError(), stderr);
|
fputs(SDL_GetError(), stderr);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
Loading…
Reference in New Issue