Skip to content

Conversation

@nicklafleur
Copy link

@nicklafleur nicklafleur commented Jan 2, 2026

#1206

Changes Include:

  • All window theme management logic centralized in gui/utils/themes.py
  • Adds dropdown for theme with following options
    • System Default:
      • MacOS/Linux -> standard behaviour
      • Windows -> Pyfa Light if light, Pyfa Dark if Dark
    • Pyfa Light: -> previous light theme
    • Pyfa Dark -> Greyscale dark theme
  • Added EN_US translations
  • Changed some dropdown menu types (but not content or functionality) to support dark mode

Known Issues:

  • Menu bar, borders, and some popups remain light mode even in dark mode on windows.
    • This is due to known issues in wx "native" features that hook into the various OS's navigation (ex top bar on MacOS) which would have been meaningfully disrupted if I attempted to enable dark mode for some of those features.
image

Add ThemeSettings class with THEME_SYSTEM, THEME_DARK, THEME_LIGHT modes.

Fix SettingsProvider.BASE_PATH lazy initialization for early settings access.

Add dark mode detection: usePyfaDark(), useSystemColors(), isDark().

Add setWindowsDarkMode() and setDarkTitleBar() for Windows dark mode APIs.

Add Colors class with theme-aware color methods for all UI elements.

Add ThemedPanel, ThemedDialog, ThemedFrame base classes for auto-theming.
Set background/foreground colors via Colors class on MainFrame.

Apply dark title bar on Windows via setDarkTitleBar().

Update AuxiliaryMixin to use Colors.buttonFace() and Colors.text().
Convert PreferenceDialog, CopySelectDialog, UpdateDialog, SsoLogin,

FitBrowserLiteDialog, SecStatusDialog, WaitDialog, and context menu

dialogs to use ThemedDialog base class for dark mode support.
Convert MarketBrowser, ShipBrowser, StatsPane, CharacterSelection to ThemedPanel.

Apply Colors to ship browser items, item stats views, chrome tabs, display.

Update toggle panel, fitting view, implant editor with theme colors.
Apply Colors.styleInput() to TextCtrl, Choice, ComboBox controls.

On Windows, native controls ignore SetBackgroundColour due to visual styles.

styleInput() calls SetWindowTheme() via ctypes to disable native theming,

allowing custom dark backgrounds to render correctly.

Apply theme colors to MarketTree, preference views, ESI fittings.
Add _styleAxes() for matplotlib dark/light mode styling.

Apply Colors to graph canvas, control panel, vector picker.

Update style pickers and line style icons for theme awareness.
Add theme dropdown to General preferences (System Default, Pyfa Dark, Light).

Prompt user to restart when theme changes.

Apply Colors.gaugeBackground() to PyGauge and AttributeGauge.
@nicklafleur nicklafleur force-pushed the nicklafleur/windows_dark_mode branch from d5e7227 to 50f349d Compare January 2, 2026 21:22
@nicklafleur
Copy link
Author

nicklafleur commented Jan 2, 2026

can't seem to see exactly what the macos build failure logs are, would appreciate some help with retrieving those since it builds on my end.

Also I'm continuing to look into whether there are non-insane ways to get the menu bar and friends to actually go dark mode. happy to hold until then but figured it could also come as a fast-follow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant