diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-27 21:05:46 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-27 21:05:46 -0700 |
commit | 8e6d2679b53be218d4eebef39077388269dd41c9 (patch) | |
tree | d0f4c55e2ec850dda01f0f960e9de6d73ec5d711 /src | |
parent | 1b134c883a0708f25a90a31903be3a2006a27ed4 (diff) | |
parent | 263626010d4ef55f29ebb53d481df902eb160e6d (diff) |
Merge pull request #1564 from inolen/sdl_fullscreen_fix
support SDL_WM_ToggleFullScreen when initiated by key input
Diffstat (limited to 'src')
-rw-r--r-- | src/library_sdl.js | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index 1fb75724..d6cb6d18 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -46,6 +46,9 @@ var LibrarySDL = { keyboardState: null, keyboardMap: {}, + canRequestFullscreen: false, + isRequestingFullscreen: false, + textInput: false, startTime: null, @@ -467,6 +470,23 @@ var LibrarySDL = { SDL.DOMButtons[event.button] = 0; } + // We can only request fullscreen as the result of user input. + // Due to this limitation, we toggle a boolean on keydown which + // SDL_WM_ToggleFullScreen will check and subsequently set another + // flag indicating for us to request fullscreen on the following + // keyup. This isn't perfect, but it enables SDL_WM_ToggleFullScreen + // to work as the result of a keypress (which is an extremely + // common use case). + if (event.type === 'keydown') { + SDL.canRequestFullscreen = true; + } else if (event.type === 'keyup') { + if (SDL.isRequestingFullscreen) { + Module['requestFullScreen'](true, true); + SDL.isRequestingFullscreen = false; + } + SDL.canRequestFullscreen = false; + } + // SDL expects a unicode character to be passed to its keydown events. // Unfortunately, the browser APIs only provide a charCode property on // keypress events, so we must backfill in keydown events with their @@ -1282,7 +1302,11 @@ var LibrarySDL = { Module['canvas'].cancelFullScreen(); return 1; } else { - return 0; + if (!SDL.canRequestFullscreen) { + return 0; + } + SDL.isRequestingFullscreen = true; + return 1; } }, |