Commit Graph

10 Commits

Author SHA1 Message Date
Fabrice de Gans 31e17c1ba4 Add less verbose proxy object accessor
This introduces an OPTION macro, as well as assignment operators and
convenience conversion operators to make it easier to treat the
OptionProxy object (renamed from Proxy) as a variable.
2023-02-06 03:25:37 +00:00
Fabrice de Gans 2b950e282f [Option] Add Proxy template class for Option
This removes the global accessors for individual options in favor of a
proxy template class with a simpler per-type API. This adds compile-time
checks to validate that the right option is used with the right type
when accessing it directly.
2023-02-06 03:25:37 +00:00
Fabrice de Gans fad2e7a310
Fix issues with the DisplayConfig dialog (#1066)
The DisplayConfig dialog had a few issues:
* The OK/Cancel buttons were not working as expected. The configuration
  options would be immediately written whenever some control values were
  changed. The configuration options are now properly being set on a
  click to OK, and ignored on a click to Cancel.
* The X button works again.
* There is now proper validation for the Display Scale option,
  validation ensures that the value is in the right range and incorrect
  data can no longer be input in that field.
* The Direct3D option is now properly enabled on Direct3D builds.
2023-02-04 21:59:04 -08:00
Fabrice de Gans 2cec46f825
Clean-up ConfigManager options (#1067)
* Clean-up ConfigManager options

Many of the options in ConfigManager were not actually used.
* Some options are only used by wx, they have been moved to gopts. In
  addition, the type of the option has been changed to "bool" when
  applicable.
* Some options are only used by SDL and do not have a corresponding
  configuration option, they have been moved to the SDL implementation.
* Some options are not used at all, they have been removed.
2023-02-04 21:39:13 -08:00
Rafael Kitover ab4ae96e05
Clarify/set condition: wayland && !wayland_egl
Check for the condition where the windowing system has wayland support
but not wayland EGL support for wxGLCanvas in wx, in which case the
Simple renderer must be forced.

This is currently how the wx packages are built on Fedora.

Refer #1028

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-12-28 18:27:04 +00:00
Fabrice de Gans 02f516f646 Set wxWS_EX_VALIDATE_RECURSIVELY style for dialog
This is no longer required since wxWidgets 3.1.0 but is needed for
prior versions.
2022-10-31 17:57:10 +03:00
Fabrice de Gans 080be1a325 [config] Make usage of Option less verbose
* Add convenience direct accessors to individual Options.
* Move BasicOptionObserver to a separate header and allow it to
  observer multiple options. This also removes the include for
  "config/option.h" for using this observer, reducing build time.
* Never skip the "Plugin" option when changing filters. This is
  already handled properly in the GameArea class. If the plugin is
  unusable, GameArea resets the filter to the default value.
* Make the OptionID names slightly less long and fix the inconsistent
  naming in the enum.
2022-10-26 12:28:14 +00:00
Rafael Kitover ea2a929f5e Backport 800d6ed69b from wx to fix Wayland EGL pos
Backport 800d6ed69b from wxWidgets git to fix resizing the
`GLDrawingPanel` in Wayland using the EGL `wxGLCanvas`.

Also rename `IsItWayland()` to `IsWayland()`.

Fix #1028

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
2022-10-23 13:14:03 -07:00
Fabrice de Gans 0ca5184dda [option] Convert all uses of geometry options to use config::Option
Moving and resizing the window no longer updates the entire option
set, reducing jank on move and resize.
2022-10-23 11:42:08 +00:00
Fabrice de Gans af4951511e [config] Add Observers for Options
This adds a generic Observer interface to config::Option. To
demonstrate its intended usage, the Display Configuration dialog and
the options it controls have been updated to be entirely handled via
the config::Option class.

Implementations for wxValidator are used to validate the flow between
the UI and the underlying Option. In turn, modifying the Option value
triggers all of its observers that should then do what they need to
do.

Rather than explicitly calling all of the needed methods after
modifying a global option value, the UI elements that need to be
notified when an Option value is modified will be notified via their
observers. Runtime assert checks are put in place to prevent infinite
recursion if an observer attempts to modify an Option while handling
the observer callback.

Once all uses of Options have been updated, we should get into a state
where the following will be true:
* cmdevents.cpp will no longer rely on the application state.
* All dialogs will have been moved to specific implementations,
  reducing the size of guiinit.cpp
* update_opts() will no longer need to be called and will be removed.

This will then make it easier to update accelerator handling to be
done with config::UserInput.

Bug: #745
2022-10-22 01:47:39 +00:00