From 692e11b21d0bc9112eef8ede069ba24b8efd0ff4 Mon Sep 17 00:00:00 2001 From: Boris Yumankulov Date: Thu, 9 Oct 2025 15:05:10 +0500 Subject: [PATCH] chore(virtual_keyboard): move styles to style.py Signed-off-by: Boris Yumankulov --- portprotonqt/main_window.py | 3 +- portprotonqt/themes/standart/styles.py | 50 ++++++++++++++++++++++++++ portprotonqt/virtual_keyboard.py | 45 ++++++----------------- 3 files changed, 62 insertions(+), 36 deletions(-) diff --git a/portprotonqt/main_window.py b/portprotonqt/main_window.py index 7c714c4..8283a3e 100644 --- a/portprotonqt/main_window.py +++ b/portprotonqt/main_window.py @@ -210,8 +210,7 @@ class MainWindow(QMainWindow): self.restore_state() - self.keyboard = VirtualKeyboard(self) - mainLayout.addWidget(self.keyboard) + self.keyboard = VirtualKeyboard(self, self.theme) self.detail_animations = DetailPageAnimations(self, self.theme) QTimer.singleShot(0, self.loadGames) diff --git a/portprotonqt/themes/standart/styles.py b/portprotonqt/themes/standart/styles.py index f8526c1..4c49471 100644 --- a/portprotonqt/themes/standart/styles.py +++ b/portprotonqt/themes/standart/styles.py @@ -217,6 +217,56 @@ CONTEXT_MENU_STYLE = f""" }} """ +VIRTUAL_KEYBOARD_STYLE = """ +VirtualKeyboard { + background-color: rgba(30, 30, 30, 200); + border-radius: 0px; + border: none; +} +QPushButton { + font-size: 14px; + border: 1px solid #555; + border-top-color: #666; + border-left-color: #666; + border-radius: 3px; + min-width: 30px; + min-height: 30px; + padding: 4px; + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #505050, stop:1 #404040); + color: #e0e0e0; +} +QPushButton:hover { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #606060, stop:1 #505050); + border: 1px solid #666; + border-top-color: #777; + border-left-color: #777; +} +QPushButton:focus { + border: 2px solid #4a90e2; + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #5a5a5a, stop:1 #454545); +} +QPushButton:pressed { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #3a3a3a, stop:1 #303030); + border: 1px solid #444; + border-bottom-color: #555; + border-right-color: #555; + padding-top: 5px; + padding-bottom: 3px; + padding-left: 5px; + padding-right: 3px; +} +QPushButton[checked="true"] { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #4a90e2, stop:1 #3a7ad2); + color: white; + border: 1px solid #2a6ac2; + border-top-color: #5aa0f2; + border-left-color: #5aa0f2; +} +QPushButton[checked="true"]:focus { + border: 2px solid #6aa3f5; +} +""" + # ГЛОБАЛЬНЫЙ СТИЛЬ ДЛЯ ОКНА (ФОН), ЛЭЙБЛОВ, КНОПОК MAIN_WINDOW_STYLE = f""" QWidget {{ diff --git a/portprotonqt/virtual_keyboard.py b/portprotonqt/virtual_keyboard.py index a72f71e..e85e481 100644 --- a/portprotonqt/virtual_keyboard.py +++ b/portprotonqt/virtual_keyboard.py @@ -2,15 +2,20 @@ from typing import cast from PySide6.QtWidgets import (QFrame, QVBoxLayout, QPushButton, QGridLayout, QSizePolicy, QWidget, QLineEdit) from PySide6.QtCore import Qt, Signal, QProcess -from portprotonqt.keyboard_layouts import keyboard_layouts # Импортируем раскладки +from portprotonqt.keyboard_layouts import keyboard_layouts +from portprotonqt.theme_manager import ThemeManager +from portprotonqt.config_utils import read_theme_from_config + +theme_manager = ThemeManager() class VirtualKeyboard(QFrame): keyPressed = Signal(str) - def __init__(self, parent: QWidget | None = None): + def __init__(self, parent: QWidget | None = None, theme=None): super().__init__(parent) self._parent: QWidget | None = parent self.available_layouts: list[str] = self.get_layouts_setxkbmap() + self.theme = theme if theme else theme_manager.apply_theme(read_theme_from_config()) if not self.available_layouts: self.available_layouts.append('en') self.current_layout: str = self.available_layouts[0] @@ -32,33 +37,7 @@ class VirtualKeyboard(QFrame): self.initUI() self.hide() - self.setStyleSheet(""" - VirtualKeyboard { - background-color: rgba(0, 0, 0, 200); /* Полупрозрачный серый */ - border-radius: 5px; - border: 1px solid #ccc; - } - QPushButton { - font-size: 14px; - border: 1px solid #888; - border-radius: 3px; - min-width: 30px; - min-height: 30px; - padding: 0px; - } - QPushButton:pressed { - background-color: #d0d0d0; - } - QPushButton[checked="true"] { - background-color: #a0c4ff; - border: 1px solid #4a90e2; - } - QPushButton[checked="true"] { - background-color: #4a90e2; - color: white; - border: 2px solid #1a73e8; - } - """) + self.setStyleSheet(self.theme.VIRTUAL_KEYBOARD_STYLE) def highlight_cursor_position(self): """Подсвечиваем текущую позицию курсора""" @@ -74,20 +53,18 @@ class VirtualKeyboard(QFrame): layout.setSpacing(0) self.keyboard_layout = QGridLayout() - self.keyboard_layout.setSpacing(1) - self.keyboard_layout.setContentsMargins(0, 0, 0, 0) + self.keyboard_layout.setSpacing(4) + self.keyboard_layout.setContentsMargins(5, 5, 5, 5) self.create_keyboard() keyboard_container = QWidget() keyboard_container.setLayout(self.keyboard_layout) - # keyboard_container.setFixedSize(660, 220) keyboard_container.setMinimumWidth(574) keyboard_container.setMinimumHeight(220) keyboard_container.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) layout.addWidget(keyboard_container, 0, Qt.AlignmentFlag.AlignHCenter) self.setLayout(layout) - # self.setMinimumHeight(240) self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) def run_shell_command(self, cmd: str) -> str | None: @@ -471,7 +448,7 @@ class VirtualKeyboard(QFrame): """Активирует текущую выделенную кнопку на клавиатуре""" focused = self.focusWidget() if isinstance(focused, QPushButton): - focused.click() + focused.animateClick() def focusNextKey(self, direction: str): """Перемещает фокус на следующую кнопку в указанном направлении"""