Compare commits
5 Commits
logical_si
...
resize.3
Author | SHA1 | Date | |
---|---|---|---|
22ec47142c | |||
fe76bf3ebb | |||
5024b67b9c | |||
2b8239c047 | |||
bcb3942469 |
@ -488,6 +488,9 @@ screen_resize_to_fit(struct screen *screen) {
|
||||
return;
|
||||
}
|
||||
|
||||
int flags = SDL_GetWindowFlags(screen->window);
|
||||
LOGI("resize to fit (%d 0x%x)", screen->maximized, flags);
|
||||
|
||||
if (screen->maximized) {
|
||||
SDL_RestoreWindow(screen->window);
|
||||
screen->maximized = false;
|
||||
@ -496,7 +499,7 @@ screen_resize_to_fit(struct screen *screen) {
|
||||
struct size optimal_size =
|
||||
get_optimal_window_size(screen, screen->content_size);
|
||||
SDL_SetWindowSize(screen->window, optimal_size.width, optimal_size.height);
|
||||
LOGD("Resized to optimal size: %ux%u", optimal_size.width,
|
||||
LOGI("Resized to optimal size: %ux%u", optimal_size.width,
|
||||
optimal_size.height);
|
||||
}
|
||||
|
||||
@ -517,20 +520,46 @@ screen_resize_to_pixel_perfect(struct screen *screen) {
|
||||
content_size.height);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
is_fullscreen(const struct screen *screen) {
|
||||
uint32_t flags = SDL_GetWindowFlags(screen->window);
|
||||
LOGI("flags = 0x%x", flags);
|
||||
return !!(flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP));
|
||||
}
|
||||
|
||||
static void
|
||||
update_fullscreen_state(struct screen *screen) {
|
||||
// There is no SDL event to detect fullscreen changes, so store the
|
||||
// state in a field and compare on every "size changed" event
|
||||
bool fullscreen = is_fullscreen(screen);
|
||||
if (fullscreen != screen->fullscreen) {
|
||||
// Fullscreen state have changed
|
||||
screen->fullscreen = fullscreen;
|
||||
if (!fullscreen && !screen->maximized) {
|
||||
apply_pending_resize(screen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
screen_handle_window_event(struct screen *screen,
|
||||
const SDL_WindowEvent *event) {
|
||||
switch (event->event) {
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
LOGI("EXPOSED");
|
||||
screen_render(screen);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
||||
LOGI("SIZE_CHANGED %dx%d", event->data1, event->data2);
|
||||
//update_fullscreen_state(screen);
|
||||
screen_render(screen);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||
LOGI("MAXIMIZED");
|
||||
screen->maximized = true;
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
LOGI("RESTORED");
|
||||
if (screen->fullscreen) {
|
||||
// On Windows, in maximized+fullscreen, disabling fullscreen
|
||||
// mode unexpectedly triggers the "restored" then "maximized"
|
||||
|
Reference in New Issue
Block a user