Commit Graph

90 Commits

Author SHA1 Message Date
BearOso
109fedf42c Gtk: Convert driver setting to a string. 2023-03-07 13:58:21 -06:00
BearOso
19c7ce56e0 Gtk: Use fmt for string. 2023-03-07 13:58:21 -06:00
BearOso
375a263961 Gtk: Stringify some things. 2023-03-07 13:58:21 -06:00
BearOso
3c729a9763 Gtk: Remove option to disable OpenGL.
OpenGL is the optimal display mode until Vulkan is in, and it's
mandatory on Wayland. Don't let it be disabled.
2022-04-19 17:22:42 -05:00
Jean Raby
38b1e495ea Move joystick + related functions under JoyDevices 2022-02-18 15:43:52 -05:00
Jean Raby
e1685b05eb range-based for loops + simplify joynum assignment 2022-02-18 11:08:20 -05:00
Jean Raby
cdbf783fc4 gtk: Support adding/removing joysticks at runtime
Reworked how/where SDL events are polled:
  - poll_joystick_events is now a static member of JoyDevice so it can be
    called from outside when needed (preference window for config and
    caliration).
  - S9xProcessEvents calls JoyDevice::poll_joystick_events directly so
    events are polled when no joysticks are attached.
  - JoyDevice::poll_joystick_events handles SDL_JOYDEVICE{ADDED,REMOVED}
    events.
  - Individual JoyDevice no longer call poll_joystick_events from
    get_events.

Reworked how attached joysticks are maintained in Snes9xConfig:
  - Use a map for joysticks keyed on SDL JoystickID (instance id in sdl
    parlance), which is stable while a joystick is attached instead of
    an array keyed on device_index.
    The instance id is what poll_joystick_events gets with every
    event (except for SDL_JOYDEVICEADDED which gets a device_index...)
    Instance id is an incrementing int starting from 0, they are never reused.
    i.e. each attach/dettach/attach cycle yields a new id.
    Whereas device index are reused and can "move".
  - On SDL_JOYDEVICEADDED the joystick is handed a "joynum", that is, an
    int from 0 to NUM_JOYPADS-1. A new joystick always get the lowest
    available joynum.
    (joynum was already a member of JoyDevice but wasn't initialized,
    this seemed like a proper way to use it.)
  - On SDL_JOYDEVICEREMOVED, the joystick associated with the instance
    id is simply removed from the map.

All this allows for the following behaviors.
It is possible to start without any joystick, add one joystick and it works.
(disconnect/reconnect cycles with a single joystick also work)

Joystick numbers are "stable" while they remain connected. For example:
 - Start with joystick0 and joystick1 connected
 - if joystick0 is disconnected, joystick1 keeps its number and keeps
   working
 - if joystick0 (or any new joystick) is connected at this time,
   it gets to become joystick0

If all joysticks are disconnected while snes9x is running, the order of
the "reconnections" will determine the joystick number of each joystick.

I think there is room for improvement still, with regards to code
organization. For instance, there could be a "JoyDevices" class which
would handle all the attached JoyDevice. This would allow moving all the
"joystick_*" methods from Snes9xConfig to that new class, and
poll_joystick_events could also be moved there.
The functionality wouldn't change, but the intent/ownership would probably be clearer.
2022-02-17 11:02:53 -05:00
BearOso
da4bd2a018 Gtk: Make sound driver check a little simpler. 2021-05-15 11:23:12 -05:00
BearOso
77fb6ff958 Gtk: Unthread preferences creation. 2020-11-04 12:55:25 -06:00
BearOso
95c7fdad1f Gtk: Thread preferences creation. 2020-08-23 16:28:01 -05:00
Brandon Wright
e17ff69533 Gtk: Switch codebase to gtkmm.
GTK: Remove support for GTK+ 2.0.

GTK 3 is stable and widespread enough now.

GTK: Rearrange headers to eliminate gtk_s9xcore.h

Gtk: Initial gtkmm conversion work.

Gtk: More gtkmm conversion and bug fixing.

Gtk: More gtkmm fixes.

Gtk: More Fixes

OpenGL no longer creates a second window.
Accelerators are fixed.

Gtk: More fixes

Removed GLX context dependency on Gtk.

Gtk: Fix formatting.

Gtk: Remove a #pragma once
2020-07-17 14:48:34 -05:00
Brandon Wright
5c3fbf6740 Fix some warnings.
Removed sstrncpy function.
Changed bindings in GTK port to std::array and fixed packing nonsense.
2020-06-20 10:44:11 -05:00
Taimoor Ahmad
d16c9775a9 Only show if DisplayTime is enabled in settings 2019-05-11 23:24:17 -04:00
Brandon Wright
7dc9ba8215 GTK: Invert invalid vram access checkbox. 2019-04-16 15:41:04 -05:00
Brandon Wright
9c733497fe GTK: Allow shutting off button and menu icons. 2019-04-16 11:47:35 -05:00
Brandon Wright
c3bc6fff87 GTK: Add configurable initial background. 2019-04-13 15:47:01 -05:00
Brandon Wright
e170bf66ca GTK: Add the hacks to UI. 2019-04-13 15:25:55 -05:00
Brandon Wright
f70e072bd9 Revert to higher APU clock. 2019-04-12 12:10:51 -05:00
Brandon Wright
bdf0e426e0 GTK: Allow one key for multi joypad assignments.
Lets you do stuff like Chrono Trigger L+R+A or all punch buttons in
fighting games.
2019-03-21 17:54:27 -05:00
Brandon Wright
7b310a0cf4 GTK: Swap glFenceSync for sync control extension. 2019-03-02 15:25:59 -06:00
Brandon Wright
712c979771 GTK: Add icons to key bindings to clear entry. 2019-02-28 21:03:46 -06:00
Brandon Wright
aa867abcd3 Use nominal frequency ratio for APU. 2019-02-19 17:50:25 -06:00
Brandon Wright
191b82f14d GTK: Break display settings into tabs. 2019-02-17 20:55:59 -06:00
Brandon Wright
2ba6553c14 GTK: SoundSync is now handled in the drivers. 2019-02-09 18:48:17 -06:00
Brandon Wright
5b4ca50792 GTK+: Strip out extra sound code.
No more Stereo, 16-bit or Reverse options.
2019-02-06 19:41:33 -06:00
Brandon Wright
01f4fed8b5 Slang shader support. 2019-01-25 13:28:24 -06:00
Brandon Wright
2c1753474c GTK+: Show block invalid vram box if dangerous hacks enabled. 2019-01-08 15:48:36 -06:00
Brandon Wright
387d600147 GTK+: The build has never allowed GTK+3 < 22. 2018-12-28 18:43:21 -06:00
Brandon Wright
e632740be3 GTK+: Use std::string for some config options. 2018-12-28 18:36:23 -06:00
Brandon Wright
fcdead0028 GTK+: Use lowercase true/false, bool in more places. 2018-12-28 17:07:32 -06:00
Brandon Wright
3eea50654f GTK+: OpenGL: Separate glFinish and glFenceSync options. 2018-12-28 12:06:31 -06:00
Brandon Wright
c9a8b28d18 GTK+: Hook up Settings.DisplayPressedKeys 2018-12-12 16:24:21 -06:00
Brandon Wright
a718990735 GTK+: Remove vertex_shader and rename fragment_shader. 2018-12-10 15:10:40 -06:00
Brandon Wright
536c6708c3 GTK+: Various cleanups. 2018-12-03 17:32:12 -06:00
Brandon Wright
c21539d269 GTK+: Mandate Netplay, Joystick, JMA. 2018-12-03 17:32:12 -06:00
Brandon Wright
047cfe2f9d Use a sstrncpy function that behaves like strlcpy. 2018-11-18 11:18:27 -06:00
Brandon Wright
600de05244 String bounds-checking. 2018-11-17 18:41:37 -06:00
Brandon Wright
f0ddb097f9 Mark all of GTK+ with header stub, and a couple others. 2018-11-15 17:42:29 -06:00
Brandon Wright
a9cc03c06c GTK+: Consolidate includes to compat header. 2018-11-06 18:46:44 -06:00
Brandon Wright
0f15a398f9 GTK+: Fix GTK+ 2.0 compatibility again. 2018-11-06 18:04:10 -06:00
Brandon Wright
c5038bc9fe GTK+/style: Remove explicit returns in void funcs. 2018-11-02 16:48:20 -05:00
Brandon Wright
a04ccfc02c GTK+: Style: Remove voids from parameter list. 2018-11-02 15:52:26 -05:00
Brandon Wright
79b1ab0250 GTK+: Clean up speed throttling.
No more frameskip selection, only 4 options:

* Timer throttling to Settings.FrameRate
* Same, but skips frames when late
* Wait on sound buffer
* Don't throttle.

Dynamic rate control is automatically disabled for option 3.
2018-10-28 16:55:33 -05:00
Brandon Wright
94c2c4c460 Remove 24-bit PBO format. It's actually useless. 2018-10-27 15:33:55 -05:00
Brandon Wright
a0931d6058 More XRandR not to compile if not X11. 2018-10-22 15:08:11 -05:00
Brandon Wright
a48cbf72da Set output window size. 2018-10-22 14:53:12 -05:00
Brandon Wright
e70675db98 Basic OpenGL on Wayland. Fullscreen is broken. 2018-10-18 17:47:39 -05:00
Rémi Calixte
c6731024ca wayland: include X11 libraries only if it is an available GDK backend 2018-10-15 14:15:52 -05:00
Brandon Wright
0b75e2de9d GTK+: Add dangerous hacks. 2018-08-14 17:33:03 -05:00
Brandon Wright
651ec0bf7e More sanity checking. 2018-06-07 16:16:22 -05:00