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()
 |