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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int flags = SDL_GetWindowFlags(screen->window);
|
||||||
|
LOGI("resize to fit (%d 0x%x)", screen->maximized, flags);
|
||||||
|
|
||||||
if (screen->maximized) {
|
if (screen->maximized) {
|
||||||
SDL_RestoreWindow(screen->window);
|
SDL_RestoreWindow(screen->window);
|
||||||
screen->maximized = false;
|
screen->maximized = false;
|
||||||
@ -496,7 +499,7 @@ screen_resize_to_fit(struct screen *screen) {
|
|||||||
struct size optimal_size =
|
struct size optimal_size =
|
||||||
get_optimal_window_size(screen, screen->content_size);
|
get_optimal_window_size(screen, screen->content_size);
|
||||||
SDL_SetWindowSize(screen->window, optimal_size.width, optimal_size.height);
|
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);
|
optimal_size.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -517,20 +520,46 @@ screen_resize_to_pixel_perfect(struct screen *screen) {
|
|||||||
content_size.height);
|
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
|
void
|
||||||
screen_handle_window_event(struct screen *screen,
|
screen_handle_window_event(struct screen *screen,
|
||||||
const SDL_WindowEvent *event) {
|
const SDL_WindowEvent *event) {
|
||||||
switch (event->event) {
|
switch (event->event) {
|
||||||
case SDL_WINDOWEVENT_EXPOSED:
|
case SDL_WINDOWEVENT_EXPOSED:
|
||||||
|
LOGI("EXPOSED");
|
||||||
screen_render(screen);
|
screen_render(screen);
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
case SDL_WINDOWEVENT_SIZE_CHANGED:
|
||||||
|
LOGI("SIZE_CHANGED %dx%d", event->data1, event->data2);
|
||||||
|
//update_fullscreen_state(screen);
|
||||||
screen_render(screen);
|
screen_render(screen);
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||||
|
LOGI("MAXIMIZED");
|
||||||
screen->maximized = true;
|
screen->maximized = true;
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_RESTORED:
|
case SDL_WINDOWEVENT_RESTORED:
|
||||||
|
LOGI("RESTORED");
|
||||||
if (screen->fullscreen) {
|
if (screen->fullscreen) {
|
||||||
// On Windows, in maximized+fullscreen, disabling fullscreen
|
// On Windows, in maximized+fullscreen, disabling fullscreen
|
||||||
// mode unexpectedly triggers the "restored" then "maximized"
|
// mode unexpectedly triggers the "restored" then "maximized"
|
||||||
|
Reference in New Issue
Block a user