From 6311c7cf9516a8ea34874ffa934758dc35f6f6ad Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Sat, 16 Mar 2019 19:08:59 -0700 Subject: [PATCH] emscripten: force resize event when pixel ratio changes Without this, applications can't react to changed canvas size on window zoom. --- src/video/emscripten/SDL_emscriptenevents.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/video/emscripten/SDL_emscriptenevents.c b/src/video/emscripten/SDL_emscriptenevents.c index 5623023cfc1c0..9f99828a8c99d 100644 --- a/src/video/emscripten/SDL_emscriptenevents.c +++ b/src/video/emscripten/SDL_emscriptenevents.c @@ -586,10 +586,14 @@ static EM_BOOL Emscripten_HandleResize(int eventType, const EmscriptenUiEvent *uiEvent, void *userData) { SDL_WindowData *window_data = userData; + SDL_bool force = SDL_FALSE; /* update pixel ratio */ if (window_data->window->flags & SDL_WINDOW_ALLOW_HIGHDPI) { - window_data->pixel_ratio = emscripten_get_device_pixel_ratio(); + if (window_data->pixel_ratio != emscripten_get_device_pixel_ratio()) { + window_data->pixel_ratio = emscripten_get_device_pixel_ratio(); + force = SDL_TRUE; + } } if(!(window_data->window->flags & FULLSCREEN_MASK)) @@ -611,6 +615,12 @@ Emscripten_HandleResize(int eventType, const EmscriptenUiEvent *uiEvent, void *u emscripten_set_element_css_size(NULL, w, h); } + if (force) { + /* force the event to trigger, so pixel ratio changes can be handled */ + window_data->window->w = 0; + window_data->window->h = 0; + } + SDL_SendWindowEvent(window_data->window, SDL_WINDOWEVENT_RESIZED, w, h); } }