- formatting fixes
- added comments (for the SDL_FULLSCREEN flag)
- add event handlers only once and communicate through object variables
(Browser.lockPointer and Browser.resizeCanvas)
Signed-off-by: Michael Riss <Michael.Riss@gmx.de>
- SDL_WM_ToggleFullScreen now delivers correct return values,
reflecting that for a SDL program it's impossible
to switch to full screen mode in the browser environment
Signed-off-by: Michael Riss <Michael.Riss@gmx.de>
- bugfix: an existing pointerLockChange handler now gets properly
removed before it is installed anew
- completed the implementation of the SDL_ShowCursor() function:
- can now query the current state of the cursor/pointer
- properly delivers adequate return values
- added safeguard: when not in fullscreen mode, attempts to
lock the pointer are ignored as they would fail due to the
security model of the browser and a return value indicating the
error is returned
Signed-off-by: Michael Riss <Michael.Riss@gmx.de>
- the requestFullScreen function now has two boolean arguments:
"doLockPointer" and "doResizeCanvas"
- when using "doResizeCanvas", the SDL application gets notified via the
"SDL_VIDEORESIZE" event of the new resolution, the old resolution setting
is saved and gets restored when the canvas returns to windowed mode
- when setting "doLockPointer" to false the mouse pointer remains visible
in fullscreen mode and allows e.g. RTS (Real Time Strategy) type games
- the SDL application can check via the "SDL_FULLSCREEN" flag in the flags
field of the SDL_Surface struct whether the canvas is currently
in fullscreen mode or not.
- depending on the browser the SDL application can switch out of the
fullscreen mode with the "SDL_WM_ToggleFullScreen(SDL_Surface*);" call
(currently chrome supports it, firefox does not)
- Also, the requestFullScreen has been fixed to avoid repeated adding of
the event listeners every time requestFullScreen is called.
- src/shell.html got changed to demonstrate all variants to switch to
fullscreen mode
Note:
Due to the security model of web browsers, the SDL model cannot be
fully supported.
What is not possible?
- Initiating the switch to fullscreen from the SDL application.
- Initiating the pointer lock from the SDL application when *not* in
fullscreen mode
How to work around the limitations?
All the actions that cannot be initiated by the SDL application have to be
initiated by the web browser instead.
A good practice should be to start the application in windowed mode and
have a button situated close to the canvas which switches the canvas into
fullscreen mode and also changes the canvas size to fullscreen resolution.
This way, the SDL application receives a SDL_VIDEORESIZE event and can
check in the even handler whether it is now in fullscreen mode and take
further actions.
When leaving fullscreen mode the old windowed canvas resolution gets
restored and triggers another SDL_VIDEORESIZE event which - again - can be
used to adapt the application to windowed mode.
Signed-off-by: Michael Riss <Michael.Riss@gmx.de>