Commit Graph
4365 Commits
Author SHA1 Message Date
Colin Snover d1b77d4b68 BACKENDS: Fix missing mouse events when system cursor cannot be moved
Normally with SDL, a mouse motion event will be sent after the
system mouse cursor has been moved by a call to
SDL_WarpMouseInWindow, but if the system cursor cannot be moved
(e.g. because the window does not have mouse focus), games still
need to receive these mouse events so they can successfully update
the mouse position internally. Otherwise, games continue to think
the mouse is still in the original position and will continue to
try to perform whatever action is associated with that mouse
position.

Refs Trac#9689.
2017-10-15 13:24:21 -05:00
Colin Snover de2bbe3b97 BACKENDS: Refactor OpenGL & SDL graphics backends
This patch refactors the OpenGL and SDL graphics backends,
primarily to unify window scaling and mouse handling, and to
fix coordinate mapping between the ScummVM window and the
virtual game screen when they have different aspect ratios.

Unified code for these two backends has been moved to a new
header-only WindowedGraphicsManager class, so named because it
contains code for managing graphics managers that interact with
a windowing system and render virtual screens within a larger
physical content window.

The biggest behavioral change here is with the coordinate
system mapping:

Previously, mouse offsets were converted by mapping the whole
space within the window as input to the virtual game screen
without maintaining aspect ratio. This was done to prevent
'stickiness' when the mouse cursor was within the window but
outside of the virtual game screen, but it caused noticeable
distortion of mouse movement speed on the axis with blank
space.

Instead of introducing mouse speed distortion to prevent
stickiness, this patch changes coordinate transformation to
show the system cursor when the mouse moves outside of the virtual
game screen when mouse grab is off, or by holding the mouse inside
the virtual game screen (instead of the entire window) when mouse
grab is on.

This patch also improves some other properties of the
GraphicsManager/PaletteManager interfaces:

* Nullipotent operations (getWidth, getHeight, etc.) of the
  PaletteManager/GraphicsManager interfaces are now const
* Methods marked `virtual` but not inherited by any subclass have
  been de-virtualized
* Extra unnecessary calculations of hardware height in
  SurfaceSdlGraphicsManager have been removed
* Methods have been renamed where appropriate for clarity
  (setWindowSize -> handleResize, etc.)
* C++11 support improved with `override` specifier added on
  overridden virtual methods in subclasses (primarily to avoid
  myself accidentally creating new methods in the subclasses
  by changing types/names during refactoring)

Additional refactoring can and should be done at some point to
continue to deduplicate code between the OpenGL and SDL backends.
Since the primary goal here was to improve the coordinate mapping,
full refactoring of these backends was not completed here.
2017-10-15 13:24:20 -05:00
Colin Snover 0ad03e492a SDL: Accept signed values for mouse cursor warping
This matches the other ScummVM and SDL APIs for mouse warp.
2017-10-15 13:24:20 -05:00
Colin Snover 6e157429b7 BACKENDS: Fix window sizing of games that switch between multiple resolutions 2017-10-07 12:30:29 -05:00
Colin Snover ebe6c40a6a SDL: Do not reset window size when engines update rendering surface
This change allows:

* Engines to update their target rendering surface/size and pixel
  format with the backend multiple times during gameplay;
* Users to resize the ScummVM window without having it reset
  size/position every time an engine updates its target surface
  format;
* Conversions/scaling to continue to run efficiently in hardware,
  instead of requiring engines to pick their maximum possible
  output format once and upscale inefficiently in software;
* The window to reset size once when an engine calls to set its
  initial output size, and to reset again once ScummVM returns to
  the launcher.

This is relevant for at least SCI32 and DreamWeb engines, which
perform graphics mode switches during games.
2017-10-07 12:30:29 -05:00
Cameron Cawley 51949bbc9e RISCOS: Add RISC OS filesystem 2017-10-01 20:19:42 +02:00
Vincent Bénony 8bc745fb55 IOS: Improve iOS 11 compatibility 2017-09-30 11:16:42 +02:00
Thierry Crozat f7436a9b3a OPENPANDORA: Remove unused include
The use of DoubleBufferSDLMixerManager in the OpenPandora backend was
removed in commit b157269 but the include for it was left behind.
2017-09-12 21:41:55 +01:00
Thierry Crozat 629ea05ffc GPH: Remove unused include
The use of DoubleBufferSDLMixerManager in the GPH backend was removed
in commit 3b6398c but the include for it was left behind.
2017-09-12 21:37:52 +01:00
Thierry Crozat 3607b79d7d MACOSX: Remove mixer init from derived class for macosx backend
Since the macosx backend now does the same as the base SDL backend
we can just let the base class do its stuff.
2017-09-12 21:30:29 +01:00
Colin Snover bcbd443359 SDL: Stop using double buffering mixer on macOS
This mixer type was added in
943b4c2036 because "anything which
produces sampled data with high latency (like the MT-32 emulator)
will sound terribly", but as far as I can see (or reproduce), this
mixer doesn't do anything that would solve that problem, except
that it effectively doubles the size of the audio buffer so there's
less chance of an underflow due to slower-than-realtime synthesis
by the softsynth. But you don't need the overhead of a separate
thread to do that, you just need to increase the buffer size.
2017-09-12 11:35:51 -05:00
Colin Snover b8f89a772e MACOS: Fix builds on case-sensitive filesystems 2017-09-10 23:30:25 -05:00
Colin Snover 6e2f18c498 MACOS: Fix warnings about undeclared selectors
When -Wundeclared-selector is enabled (recommended by Apple), the
calls to the setBadgeLabel selector in MacOSXTaskbarManager are
warned on because NSDockTile declarations are not included because
they do not exist in macOS 10.4 and earlier. While I don't know
that we are even supporting such old macOS versions these days, it
is simple enough to fix this problem when compiling to modern
macOS versions by conditionally including the necessary header.
2017-09-10 22:17:16 -05:00
Colin Snover 56810b5598 MACOS: Fix deprecation warnings in macOS 10.12 2017-09-10 22:17:16 -05:00
Cameron Cawley aba431ca9b RISCOS: Use double quotes in sed command 2017-09-03 10:40:07 +02:00
Cameron Cawley 0d1df59be1 RISCOS: Automatically calculate the correct WimpSlot size 2017-09-03 10:40:07 +02:00
Cameron Cawley b9694a01db RISCOS: Use shorter filenames for config and log files 2017-09-03 10:40:07 +02:00
Cameron Cawley 0e7d9414a6 RISCOS: Correctly set executable extension 2017-09-03 10:40:07 +02:00
Cameron Cawley 7a00045df0 RISCOS: Add networking files to application 2017-09-03 10:40:07 +02:00
cameron a11985c46d RISCOS: Add RISC OS support 2017-09-03 10:40:07 +02:00
Bastien Bouclet 84e62b6c8d ALL: Sync with ScummVM - rev. 87ebc7140c 2017-09-02 15:04:07 +02:00
Bastien Bouclet 7a11ff2006 SDL: Keep the same window between the launcher and the engines 2017-09-01 09:28:09 +02:00
Bastien Bouclet 9dd157afe8 SDL: Import the SDL window changes from ScummVM 2017-08-28 21:46:42 +02:00
Frank Richter 0f93962ef4 Windows: Use GetUserDefaultUILanguage() instead of GetThreadLocale().
The thread locale concerns display options (e.g. date formatting) not
the display language. There are typically, but not necessarily the same,
as Windows allows them to be configured separately.
2017-08-01 08:55:48 +02:00
Bastien Bouclet 8c587b54ab SDL: Make the window size when exiting fullscreen workaround macOS specific
The call to SDL_SetWindowSize works around a macOS specific SDL2 bug.
Fixes the window not restoring to its previous position when exiting
fullscreen on Linux/X11.
2017-07-29 17:25:37 +02:00
Thierry Crozat 00bbb73ce5 SDL: Make sure we get the correct window size with SDL2
When updating or recreating the window, if we changed the window
size at the same time we also toggle between OpenGL and non
OpenGL mode, or toggle fullscreen mode, we may have a pending
SDL resize event with the wrong size. So we need to make sure to
append another one with the correct size to end up with the correct
size. This fixes bug #9971.
2017-07-27 21:05:44 +01:00
Vincent Pelletier 58ff5bd79a ANDROID: Limit mixer output sample rate
Fixes
  rate effect can only handle rates < 131072
error for example when starting grim intro video.
2017-07-20 11:25:44 +09:00
Eugene Sandulenko 940b2a20f1 Revert "COMMON: Change way the Singleton instances are instantiated"
This reverts commit eefa72afa1.

With this patch ConfigManager is broken.
2017-07-10 21:17:41 +02:00
Thierry Crozat eefa72afa1 COMMON: Change way the Singleton instances are instantiated
This fixes tons of warnings with clang from a recent xcode version on
macOS (and possibly other systems) complaining that an instantiation
of _singleton is required but no definition is available.
2017-07-10 21:11:20 +02:00
Colin Snover 065dd9671e SDL: Fix compilation with SDL1.2 2017-07-06 19:27:52 -05:00
Colin SnoverandBastien Bouclet 332fabcb8a SDL: Only recreate SDL2 window when necessary
Destroying and recreating the SDL window whenever the video mode
changes in SDL2 is not necessary and causes several problems:

1. In windowed mode, the game window shifts position;
2. In fullscreen mode in macOS, every time the window is
   recreated, it causes the OS to play its switch-to-fullscreen
   animation again and emit system alert noises;
3. The window content flickers; and
4. The engine loses events from the old destroyed window.

This patch changes the SDL backend code to avoid destroying and
recreating the SDL window when using SDL2, except when switching
OpenGL modes, since there is no way to change the OpenGL feature
of a window.

There are still some outstanding issues with OpenGL where window
size ends up getting reset even though the user has resized it;
this will probably need to be addressed at some point in another
patch.

Thanks to @bgK and @criezy for their feedback which made this
patch much better.

Co-Authored-By: Bastien Bouclet <bastien.bouclet@gmail.com>
2017-07-06 19:11:54 -05:00
lubomyr 4d53bdc7fe ANDROIDSDL: implemented checking and fixing sdcard path 2017-06-25 10:50:36 +02:00
Colin Snover 2d3c86187f MACOSX: Fix flipped return value of openUrl 2017-05-21 19:37:14 -05:00
Bastien Bouclet ecd758d886 PS3: Don't try to copy a non-existing file 2017-05-01 20:50:39 +02:00
Thierry Crozat 442edb6ccc MACOSX: Expand ~ in default screenshot path
When using SDL to save the screenshot, using a told results in
an error.
2017-04-26 08:39:06 +01:00
Kirben ec0b1dec9d WINDOWS: Fix warning under mingw-w64. 2017-04-24 11:22:44 +10:00
Kirben b46a1b688d WINDOWS: Hopefully fix mingw compilation. 2017-04-24 10:57:02 +10:00
Thierry Crozat a1dab31c08 WIN32: Fix compilation of getScreenshotPath (missing parenthesis) 2017-04-24 01:28:50 +01:00
Thierry Crozat 23987cc724 WIN32: Comment out code that gets the user My Pictures directory
This broke compilation on buildbot as ShlObj.h cannot be found.
A developer that has access to Windows should take a look to
properly fix this.
2017-04-24 01:21:36 +01:00
Thierry Crozat e96c057c3d SDL: Allow specifying the screenshot directory in the config file
There is no GUI option to set the screenshot directory, but this
allows power users to set it if they don't want to use the default.
2017-04-24 01:07:05 +01:00
Thierry Crozat 11dd33bb73 MACOSX: Create screenshot on Desktop
This is consistent with the OS shortcut (Crtl+Shift+3) to take a
screenshot.
2017-04-24 01:06:50 +01:00
Pala 3849a3e90e WINDOWS: Change location where screenshot are saved
This fixes bug #9701: WINDOWS: Flow of taking screenshots
on Windows is broken
2017-04-24 01:06:29 +01:00
Vincent Pelletier f8c3dc085c ANDROID: Apply a few missed backports
These make ResidualVM crash on application initialisation.
2017-04-19 11:00:15 +00:00
Torbjörn Andersson 6cda47ca3d JANITORIAL: Remove superfluous semicolons 2017-04-18 06:49:14 +02:00
rsn8887 96f720d93d PSP2: remove date from executable name 2017-03-06 17:10:10 -06:00
cpasjuste 70988527c6 PSP2: Add Playstation Vita (PSP2) support 2017-03-04 15:42:19 -06:00
Eugene Sandulenko 8a547c8711 Merge pull request #908 from rsn8887/upstream
SDL: Fix erratic analog pointer + control options
2017-02-24 22:00:10 +01:00
rsn8887 45bd7a8b75 SDL: Fix erratic analog pointer + control options
Fixes erratic speeds in analog pointer motion
Implemented option to set analog/keyboard pointer speed
and control the analog joystick deadzone. The deadzone option appears
only if the build supports analog joystick (via JOY_ANALOG define)
2017-02-22 16:52:09 -06:00
Eugene Sandulenko db4ef7c467 Merge pull request #909 from lubomyr/master
ANDROIDSDL: changed filename in assets file with scummvm-data for replace old data files
2017-02-22 22:04:29 +01:00
lubomyr 8a70c0c922 ANDROIDSDL: changed filename in asset file with scummvm-data for replacing old data-files 2017-02-22 22:49:47 +02:00