108 Commits

Author SHA1 Message Date
Cameron Cawley
75852a786a BACKENDS: Split ModularBackend into two separate classes 2020-08-24 14:22:35 +02:00
Zvika Haramaty
44c0b4644f SDL: Return unicode keycode for Hebrew input
Before this commit, when typing in Hebrew, SDL reported the equivalent
English keycode. Thus, if user typed Hebrew letter Aleph, it was
reported as ascii of 't' (or 'T', I don't remember...).

It's still impossible to type Hebrew letters in the GUI's input dialogs,
but it's a step forward.
2020-05-12 14:37:10 +02:00
mataniko
38325bfb94 BACKENDS: Don't turn off screen when ScummVM is running a game 2020-05-10 00:35:29 -04:00
Bastien Bouclet
9cc2fee887 SDL: Enable joystick input by default
Game controller input is now enabled whenever a compatible device is
connected. The keymapper's keymaps are refreshed when a joystick is added
or removed.

Fixes #10366.
2020-03-16 18:41:27 +01:00
Bastien Bouclet
a155061ee4 KEYMAPPER: Set the default virtual mouse settings
Fixes the 3DS mouse cursor drifting.
2020-03-11 06:15:46 +01:00
Bastien Bouclet
6161f4af6e SDL: Fix SDL1 build 2020-03-09 21:10:22 +01:00
Bastien Bouclet
d94c7c3bcc SDL: Move the keyboard mouse to a subclass of SdlEventSource
And deprecate it. The new Virtual Mouse system is expected to replace
it.
2020-03-09 20:00:31 +01:00
Cameron Cawley
1605b72ee8 BACKENDS: Add events for additional mouse buttons 2020-02-26 21:34:24 +01:00
Cameron Cawley
a730e8775b SDL: Clean up keycode usage 2020-02-22 22:11:34 +02:00
Bastien Bouclet
2177e685b7 KEYMAPPER: Allow joystick half axes to be remapped 2020-02-09 08:34:16 -06:00
rsn8887
eea70a3c8c BACKEND: Allow SDL2 mapping of L2/R2, fix psp2/switch mapping 2020-02-09 08:34:16 -06:00
Bastien Bouclet
32174c9067 KEYMAPPER: Actions can now be bound to joystick buttons 2020-01-29 08:51:29 +01:00
Bastien Bouclet
be49fc4b9a SDL: Add a keymap for the graphics manager 2020-01-29 08:51:29 +01:00
Bastien Bouclet
c131e8f5b9 EVENTS: Use the keymapper for some previously hard-coded key bindings 2020-01-29 08:51:29 +01:00
Cameron Cawley
9fc24522d7 BACKENDS: Add more keycodes 2020-01-21 03:28:22 +02:00
Cameron Cawley
f2b9f7bb76 BACKENDS: Remove the Windows CE port 2019-11-17 22:33:56 +01:00
D G Turner
690370554f SDL: Fix Missing Default Switch Cases in Events Class
These are flagged by GCC if -Wswitch-default is enabled.
2019-10-16 23:24:05 +01:00
Cameron Cawley
7bf22fa996 BACKENDS: Add EVENT_CLIPBOARD_UPDATE event 2019-09-21 22:16:01 +03:00
Cameron Cawley
52e7ba5e54 SDL: Support joystick hat input 2019-07-08 01:24:55 +03:00
Cameron Cawley
30109816fe SDL: Initial implementation of joystick events 2019-07-08 01:24:55 +03:00
Bastien Bouclet
0a8049e30c SDL: Fix gamepad mouse cursor wrapping on hi-res screens
The cursor position was overflowing a signed 16-bits integer once
multiplied with MULTIPLIER when using a resolution such as 2560x1440.

It would be nice changing this code to make more sense, sadly it is
thightly coupled with platform specific subclasses.

Fixes #10996.
2019-06-27 20:12:52 +02:00
Cameron Cawley
fb0b63ba66 RISCOS: Add Drag and Drop support 2019-04-30 22:17:04 +01:00
Cameron Cawley
d7b2b1b8f9 GUI: Support adding games via Drag and Drop 2019-04-30 22:17:04 +01:00
Hubert Maier
ce8227323b AmigaOS4: Exclude platform from a SDL1/2 keyboard fix that breaks numpad usage (#1551)
SDL1/2: Exclude AmigaOS4 from returning 0 for .ascii

*reset .ascii to 0, when Num-Lock is NOT enabled and keypad directional keys are pressed* (original description) is causing the numpad to play dead completely on AmigaOS4 (no matter if numlock is active or not). This is a workaround for the SCUMM engine, where keycodes are mixed with ASCII codes.

Check commit f5ed14e93d85b638c8e49468b2885c1278d56d20 for reference. 

Fixes bug #10558. Tested with both SDL1 and 2 on AmigaOS4 and with both Indiana Jones games.
2019-04-11 01:28:18 +03:00
LMerckx
f0dfc19f29 SDL: Allow to load a custom game controller mapping file
And add a specific joystick button to open virtual keyboard
2018-04-04 20:40:16 +02:00
Bastien Bouclet
2e875a768d SDL: Split joystick mouse event generation into two functions
That way it is easier to implement relative mouse movement in
ResidualVM.
2018-03-18 13:09:00 +01:00
Bastien Bouclet
49a48cedea SDL: Scale the joystick mouse speed with the vertical window size
The mouse cursor now moves across the screen in a similar amount of time
irrespective of the display resolution.
2018-01-13 10:29:10 +01:00
Bastien Bouclet
bb5e8d3a11
Merge pull request #1090 from bgK/remove-zaurus-yopy
PORTS: Remove the Zaurus and Yopy ports
2018-01-03 06:40:49 +01:00
Bastien Bouclet
1fa80ea3a3 SDL: Add debug traces for joystick hotplug 2017-12-27 07:30:53 +01:00
Bastien Bouclet
1522fc8e2f SDL: Add support for joystick hotplug
Fixes #10366.
2017-12-26 21:11:05 +01:00
Bastien Bouclet
ee4ff8ca08 SDL: Cleanup joystick deadzone handling 2017-12-26 21:11:04 +01:00
Bastien Bouclet
1fb748e974 SDL: Move the non analog joystick code to the Symbian port
Symbian was the only user of that code.
2017-12-26 21:11:04 +01:00
Bastien Bouclet
ac78058fcd SDL: Initial support for game controllers
The button mapping is that of the Vita port

Co-Authored-By: rsn8887 <rsn8887@users.noreply.github.com>
2017-12-26 21:11:04 +01:00
Bastien Bouclet
60a1100beb PORTS: Remove the Zaurus port
There was never an official release. The last unofficial release of ScummVM was 0.6.0.
Production ceased in 2007.
2017-12-19 07:42:22 +01:00
Bastien Bouclet
ca469f728b PORTS: Remove the Yopy PDA port
No official release was ever done for that platform. Production ceased
in 2005.
2017-12-19 07:37:08 +01:00
Bastien Bouclet
8fc70ce37f SDL: Improve handling of SDL2 keyboard repeat events
- Flag them as repeat events
- Disable ScummVM's own repeat event generation

This fixes keyboard repeat events not being flagged as such with SDL2,
and complies with the user's operating system preferences regarding key
repeat timings.
2017-11-19 16:12:50 +01:00
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
cd538ffffa BACKENDS: Do not send mouse events to games occurring outside the game draw rect 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
b53020f704 BACKENDS: Fix some comment typos 2017-10-15 13:24:20 -05: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
Thierry Crozat
a20d2172fa SDL: Respect OS setting for wheel scroll direction on SDL 2.0.4+
The setting was already respected on SDL < 2.0.4 (such as SDL1).
If the OS inverts the scrolling direction, this is reflected on the sign
of the y value of the SDL event. Since version 2.0.4 the SDL event
also had a flag to indicate if the direction is flipped and we were
using it to change back the y sign. That means the OS scrolling
direction setting was not respected. With this commit we now have
a consistent behaviour with all SDL versions (the OS scroll direction
setting is respected).

If our wheel events are used for something other than scrolling
however, we might want to get the actually wheel move direction
(i.e. use a Common::EVENT_WHEELDOWN when moving the wheel
down even if the OS scroll setting is to flip it). In such a case we
might want to revert this change and instead add an additional flag
to the event so that we know the scroll direction should be flipped
and use it in places where the event is used for scrolling.
2017-03-21 21:06:35 +00:00
rsn8887
12e226922d SDL: Always use sub-pixel joystick pointer resolution 2017-03-01 09:55:20 -06:00
rsn8887
58bbc0e887 SDL: fix pointer speed setting 8 (was too slow) 2017-02-27 19:59:18 -06: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
rsn8887
86c6c7c903 SDL: increase resolution of slow analog pointer motion 2017-02-18 19:22:04 -06:00
rsn8887
c0b095d793 SDL: Cleanup, replaced _km.multiplier with #define 2017-02-18 18:20:10 -06:00
rsn8887
75004c429c SDL: improved internal joystick event handling 2017-02-18 12:00:22 -06:00
rsn8887
09a6029781 SDL: slow analog ('modifier'+stick) made slower 2017-02-18 11:59:16 -06:00
rsn8887
613c6f4f7f SDL: More fixes to jerky analog joystick pointer
For some engines such as Dreamweb that a previous fix did not apply
to, this fixes bug 6996: Android: Mouse pointer control with
analog joystick is unusable
2017-02-17 17:55:09 -06:00