Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
61e73b7b63 | |||
5edd5a2617 | |||
9006f545fc |
@ -133,7 +133,7 @@ static int
|
|||||||
event_watcher(void *data, SDL_Event *event) {
|
event_watcher(void *data, SDL_Event *event) {
|
||||||
(void) data;
|
(void) data;
|
||||||
if (event->type == SDL_WINDOWEVENT
|
if (event->type == SDL_WINDOWEVENT
|
||||||
&& event->window.event == SDL_WINDOWEVENT_RESIZED) {
|
&& event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||||
// In practice, it seems to always be called from the same thread in
|
// In practice, it seems to always be called from the same thread in
|
||||||
// that specific case. Anyway, it's just a workaround.
|
// that specific case. Anyway, it's just a workaround.
|
||||||
screen_render(&screen);
|
screen_render(&screen);
|
||||||
|
@ -488,9 +488,6 @@ 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;
|
||||||
@ -499,7 +496,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);
|
||||||
LOGI("Resized to optimal size: %ux%u", optimal_size.width,
|
LOGD("Resized to optimal size: %ux%u", optimal_size.width,
|
||||||
optimal_size.height);
|
optimal_size.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,7 +520,6 @@ screen_resize_to_pixel_perfect(struct screen *screen) {
|
|||||||
static inline bool
|
static inline bool
|
||||||
is_fullscreen(const struct screen *screen) {
|
is_fullscreen(const struct screen *screen) {
|
||||||
uint32_t flags = SDL_GetWindowFlags(screen->window);
|
uint32_t flags = SDL_GetWindowFlags(screen->window);
|
||||||
LOGI("flags = 0x%x", flags);
|
|
||||||
return !!(flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP));
|
return !!(flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -546,27 +542,16 @@ 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);
|
||||||
//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) {
|
|
||||||
// On Windows, in maximized+fullscreen, disabling fullscreen
|
|
||||||
// mode unexpectedly triggers the "restored" then "maximized"
|
|
||||||
// events, leaving the window in a weird state (maximized
|
|
||||||
// according to the events, but not maximized visually).
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
screen->maximized = false;
|
screen->maximized = false;
|
||||||
apply_pending_resize(screen);
|
apply_pending_resize(screen);
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user