Skip to content

Commit

Permalink
MAINT: Improve qdarkstyle logic
Browse files Browse the repository at this point in the history
  • Loading branch information
larsoner committed Mar 12, 2024
1 parent d7fdcb0 commit c9f0b29
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 78 deletions.
6 changes: 3 additions & 3 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ For full functionality, some functions require:
- `scikit-learn <https://scikit-learn.org/stable/>`__ ≥ 1.0
- `Joblib <https://joblib.readthedocs.io/en/latest/index.html>`__ ≥ 0.15 (for parallelization)
- `mne-qt-browser <https://github.com/mne-tools/mne-qt-browser>`__ ≥ 0.1 (for fast raw data visualization)
- `Qt <https://www.qt.io>`__ ≥ 5.12 via one of the following bindings (for fast raw data visualization and interactive 3D visualization):
- `Qt <https://www.qt.io>`__ ≥ 5.15 via one of the following bindings (for fast raw data visualization and interactive 3D visualization):

- `PyQt6 <https://www.riverbankcomputing.com/software/pyqt/>`__ ≥ 6.0
- `PySide6 <https://doc.qt.io/qtforpython-6/>`__ ≥ 6.0
- `PyQt5 <https://www.riverbankcomputing.com/software/pyqt/>`__ ≥ 5.12
- `PySide2 <https://doc.qt.io/qtforpython-6/gettingstarted/porting_from2.html>`__ ≥ 5.12
- `PyQt5 <https://www.riverbankcomputing.com/software/pyqt/>`__ ≥ 5.15
- `PySide2 <https://doc.qt.io/qtforpython-6/gettingstarted/porting_from2.html>`__ ≥ 5.15

- `Numba <https://numba.pydata.org>`__ ≥ 0.54.0
- `NiBabel <https://nipy.org/nibabel/>`__ ≥ 3.2.1
Expand Down
1 change: 1 addition & 0 deletions doc/changes/devel/dependency.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The minimum supported version of Qt bindings is 5.15, by `Eric Larson`_.
107 changes: 32 additions & 75 deletions mne/viz/backends/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,84 +274,42 @@ def _qt_detect_theme():
def _qt_get_stylesheet(theme):
_validate_type(theme, ("path-like",), "theme")
theme = str(theme)
orig_theme = theme
system_theme = None
stylesheet = ""
extra_msg = ""
if theme == "auto":
theme = system_theme = _qt_detect_theme()
if theme in ("dark", "light"):
if system_theme is None:
system_theme = _qt_detect_theme()
qt_version, api = _check_qt_version(return_api=True)
# On macOS, we shouldn't need to set anything when the requested theme
# matches that of the current OS state
if sys.platform == "darwin":
extra_msg = f"when in {system_theme} mode on macOS"
# But before 5.13, we need to patch some mistakes
if sys.platform == "darwin" and theme == system_theme:
if theme == "dark" and _compare_version(qt_version, "<", "5.13"):
# Taken using "Digital Color Meter" on macOS 12.2.1 looking at
# Meld, and also adapting (MIT-licensed)
# https://github.com/ColinDuquesnoy/QDarkStyleSheet/blob/master/qdarkstyle/dark/style.qss # noqa: E501
# Something around rgb(51, 51, 51) worked as the bgcolor here,
# but it's easy enough just to set it transparent and inherit
# the bgcolor of the window (which is the same). We also take
# the separator images from QDarkStyle (MIT).
icons_path = _qt_init_icons()
stylesheet = """\
QStatusBar {
border: 1px solid rgb(76, 76, 75);
background: transparent;
}
QStatusBar QLabel {
background: transparent;
}
QToolBar {
background-color: transparent;
border-bottom: 1px solid rgb(99, 99, 99);
}
QToolBar::separator:horizontal {
width: 16px;
image: url("%(icons_path)s/toolbar_separator_horizontal@2x.png");
}
QToolBar::separator:vertical {
height: 16px;
image: url("%(icons_path)s/toolbar_separator_vertical@2x.png");
}
QToolBar::handle:horizontal {
width: 16px;
image: url("%(icons_path)s/toolbar_move_horizontal@2x.png");
}
QToolBar::handle:vertical {
height: 16px;
image: url("%(icons_path)s/toolbar_move_vertical@2x.png");
}
""" % dict(icons_path=icons_path)
stylesheet = "" # no stylesheet
if theme in ("auto", "dark", "light"):
if theme == "auto":
return stylesheet
assert theme in ("dark", "light")
system_theme = _qt_detect_theme()
if theme == system_theme:
return stylesheet
_, api = _check_qt_version(return_api=True)
# On macOS or Qt 6, we shouldn't need to set anything when the requested
# theme matches that of the current OS state
try:
import qdarkstyle
except ModuleNotFoundError:
logger.info(
f'To use {theme} mode when in {system_theme} mode, "qdarkstyle" has'
"to be installed! You can install it with:\n"
"pip install qdarkstyle\n"
)
else:
# Here we are on non-macOS (or on macOS but our sys theme does not
# match the requested theme)
if api in ("PySide6", "PyQt6"):
if orig_theme != "auto" and not (theme == system_theme == "light"):
warn(
f"Setting theme={repr(theme)} is not yet supported "
f"for {api} in qdarkstyle, it will be ignored"
)
if api in ("PySide6", "PyQt6") and _compare_version(
qdarkstyle.__version__, "<", "3.2.3"
):
warn(
f"Setting theme={repr(theme)} is not supported for {api} in "
f"qdarkstyle {qdarkstyle.__version__}, it will be ignored. "
"Consider upgrading qdarkstyle to >=3.2.3."
)
else:
try:
import qdarkstyle
except ModuleNotFoundError:
logger.info(
f'To use {theme} mode{extra_msg}, "qdarkstyle" has to '
"be installed! You can install it with:\n"
"pip install qdarkstyle\n"
)
else:
klass = getattr(
stylesheet = qdarkstyle.load_stylesheet(
getattr(
getattr(qdarkstyle, theme).palette,
f"{theme.capitalize()}Palette",
)
stylesheet = qdarkstyle.load_stylesheet(klass)
)
return stylesheet
else:
try:
file = open(theme)
Expand All @@ -363,8 +321,7 @@ def _qt_get_stylesheet(theme):
else:
with file as fid:
stylesheet = fid.read()

return stylesheet
return stylesheet


def _should_raise_window():
Expand Down

0 comments on commit c9f0b29

Please sign in to comment.