70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
import ctypes
|
|
from PySide6.QtCore import QSettings, Signal, QObject
|
|
from PySide6.QtWidgets import QMessageBox
|
|
|
|
def set_dark_title_bar(hwnd, enable=True):
|
|
"""Включает тёмный заголовок окна в Windows 10+."""
|
|
DWMWA_USE_IMMERSIVE_DARK_MODE = 20
|
|
value = ctypes.c_int(1 if enable else 0)
|
|
ctypes.windll.dwmapi.DwmSetWindowAttribute(
|
|
hwnd,
|
|
DWMWA_USE_IMMERSIVE_DARK_MODE,
|
|
ctypes.byref(value),
|
|
ctypes.sizeof(value)
|
|
)
|
|
|
|
class ThemeManager(QObject):
|
|
theme_changed = Signal(str)
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.settings = QSettings("yobble_messenger", "Theme")
|
|
self.theme = self.settings.value("theme", "dark")
|
|
self.color_palette = {
|
|
"dark": {
|
|
"background": "#2a2a2a",
|
|
"primary": "#3c3c3c",
|
|
"secondary": "#4a4a4a",
|
|
"text": "#ffffff",
|
|
"text_secondary": "#aaaaaa",
|
|
"accent": "#5a9bcf",
|
|
"border": "#4a4a4a",
|
|
"hover": "#4a4a4a",
|
|
"selected": "#5a9bcf",
|
|
},
|
|
"light": {
|
|
"background": "#ffffff",
|
|
"primary": "#f5f5f5",
|
|
"secondary": "#e0e0e0",
|
|
"text": "#000000",
|
|
"text_secondary": "#555555",
|
|
"accent": "#0078d7",
|
|
"border": "#e0e0e0",
|
|
"hover": "#e9e9e9",
|
|
"selected": "#dcdcdc",
|
|
}
|
|
}
|
|
|
|
def get_current_palette(self):
|
|
return self.color_palette[self.theme]
|
|
|
|
def get_theme(self):
|
|
return self.theme
|
|
|
|
def is_dark(self):
|
|
return self.theme == "dark"
|
|
|
|
def set_theme(self, theme: str):
|
|
if theme in ("dark", "light"):
|
|
self.theme = theme
|
|
self.settings.setValue("theme", theme)
|
|
self.theme_changed.emit(self.theme)
|
|
|
|
def toggle_theme(self):
|
|
"""Переключает тему между светлой и темной."""
|
|
new_theme = "light" if self.is_dark() else "dark"
|
|
self.set_theme(new_theme)
|
|
|
|
# Глобальный экземпляр
|
|
theme_manager = ThemeManager()
|