Skip to content

Commit

Permalink
Feat: auto dark mode
Browse files Browse the repository at this point in the history
  • Loading branch information
moesnow committed Dec 24, 2024
1 parent 7b56ae8 commit 636fdef
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
7 changes: 7 additions & 0 deletions app/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

from .card.messagebox_custom import MessageBoxSupport
from .tools.check_update import checkUpdate
from .tools.check_theme_change import checkThemeChange
from .tools.announcement import checkAnnouncement
from .tools.disclaimer import disclaimer

Expand Down Expand Up @@ -109,10 +110,16 @@ def initNavigation(self):
self.addSubInterface(self.settingInterface, FIF.SETTING, self.tr('设置'), position=NavigationItemPosition.BOTTOM)

self.splashScreen.finish()
self.themeListener = checkThemeChange(self)

if not cfg.get_value(base64.b64decode("YXV0b191cGRhdGU=").decode("utf-8")):
disclaimer(self)

def closeEvent(self, e):
self.themeListener.terminate()
self.themeListener.deleteLater()
super().closeEvent(e)

def startGame(self):
game = GameController(cfg.game_path, cfg.game_process_name, cfg.game_title_name, 'UnityWndClass')
try:
Expand Down
32 changes: 32 additions & 0 deletions app/tools/check_theme_change.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from qfluentwidgets import setTheme, Theme, qconfig
from PyQt5.QtCore import QThread, pyqtSignal
import darkdetect


class SystemThemeListener(QThread):
""" System theme listener """
systemThemeChanged = pyqtSignal()

def __init__(self, parent=None):
super().__init__(parent=parent)

def run(self):
darkdetect.listener(self._onThemeChanged)

def _onThemeChanged(self, theme: str):
theme = Theme.DARK if theme.lower() == "dark" else Theme.LIGHT
if qconfig.themeMode.value != Theme.AUTO or theme == qconfig.theme:
return
qconfig.theme = Theme.AUTO
qconfig._cfg.themeChanged.emit(Theme.AUTO)
self.systemThemeChanged.emit()


def checkThemeChange(self):
def handle_theme_change():
setTheme(Theme.AUTO, lazy=True)

self.themeListener = SystemThemeListener(self)
self.themeListener.systemThemeChanged.connect(handle_theme_change)
self.themeListener.start()
return self.themeListener

0 comments on commit 636fdef

Please sign in to comment.