All checks were successful
Code check / Check code (push) Successful in 1m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
230 lines
7.5 KiB
Markdown
230 lines
7.5 KiB
Markdown
📘 Эта документация также доступна на [русском](README.ru.md)
|
||
|
||
---
|
||
|
||
## 📋 Contents
|
||
- [Overview](#-overview)
|
||
- [Creating the Theme Folder](#-creating-the-theme-folder)
|
||
- [Style File](#-style-file-stylespy)
|
||
- [Animation configuration](#-animation-configuration)
|
||
- [Metadata](#-metadata-metainfoini)
|
||
- [Screenshots](#-screenshots)
|
||
- [Fonts and Icons](#-fonts-and-icons-optional)
|
||
|
||
---
|
||
|
||
## 📖 Overview
|
||
|
||
Themes in `PortProtonQT` allow customizing the UI appearance. Themes are stored under:
|
||
|
||
- `~/.local/share/PortProtonQT/themes`.
|
||
|
||
---
|
||
|
||
## 📁 Creating the Theme Folder
|
||
|
||
```bash
|
||
mkdir -p ~/.local/share/PortProtonQT/themes/my_custom_theme
|
||
```
|
||
|
||
---
|
||
|
||
## 🎨 Style File (`styles.py`)
|
||
|
||
Create a `styles.py` in the theme root. It should define variables or functions that return CSS.
|
||
|
||
**Example:**
|
||
```python
|
||
def custom_button_style(color1, color2):
|
||
return f"""
|
||
QPushButton {{
|
||
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
|
||
stop:0 {color1}, stop:1 {color2});
|
||
}}
|
||
"""
|
||
```
|
||
|
||
---
|
||
|
||
## 🎥 Animation configuration
|
||
|
||
The `GAME_CARD_ANIMATION` dictionary controls all animation parameters for game cards:
|
||
|
||
```python
|
||
GAME_CARD_ANIMATION = {
|
||
# Type of animation when entering or exiting the detail page
|
||
# Possible values: "fade", "slide_left", "slide_right", "slide_up", "slide_down", "bounce"
|
||
# Determines how the detail page appears and disappears
|
||
"detail_page_animation_type": "fade",
|
||
|
||
# Border width of the card in idle state (no hover or focus)
|
||
# Affects the thickness of the border around the card when it's not selected
|
||
# Value in pixels
|
||
"default_border_width": 2,
|
||
|
||
# Border width on hover
|
||
# Increases the border thickness when the cursor is over the card
|
||
# Value in pixels
|
||
"hover_border_width": 8,
|
||
|
||
# Border width on focus (e.g., when selected via keyboard)
|
||
# Increases the border thickness when the card is focused
|
||
# Value in pixels
|
||
"focus_border_width": 12,
|
||
|
||
# Minimum border width during pulsing animation
|
||
# Determines the minimum border thickness during the "breathing" animation
|
||
# Value in pixels
|
||
"pulse_min_border_width": 8,
|
||
|
||
# Maximum border width during pulsing animation
|
||
# Determines the maximum border thickness during pulsing
|
||
# Value in pixels
|
||
"pulse_max_border_width": 10,
|
||
|
||
# Duration of the border thickness animation (e.g., on hover or focus)
|
||
# Affects the speed of transition from one border width to another
|
||
# Value in milliseconds
|
||
"thickness_anim_duration": 300,
|
||
|
||
# Duration of one pulsing animation cycle
|
||
# Determines how fast the border "pulses" between min and max values
|
||
# Value in milliseconds
|
||
"pulse_anim_duration": 800,
|
||
|
||
# Duration of the gradient rotation animation
|
||
# Affects how fast the gradient border rotates around the card
|
||
# Value in milliseconds
|
||
"gradient_anim_duration": 3000,
|
||
|
||
# Starting angle of the gradient (in degrees)
|
||
# Determines the initial rotation point of the gradient at animation start
|
||
"gradient_start_angle": 360,
|
||
|
||
# Ending angle of the gradient (in degrees)
|
||
# Determines the final rotation point of the gradient
|
||
# Value 0 means a full 360° rotation
|
||
"gradient_end_angle": 0,
|
||
|
||
# Type of card animation on hover or focus
|
||
# Possible values: "gradient", "scale"
|
||
# "gradient" enables a rotating gradient for the border, "scale" enlarges the card
|
||
"card_animation_type": "gradient",
|
||
|
||
# Card scale in idle state
|
||
# Determines the base size of the card (1.0 = 100% of original size)
|
||
# Value as a fraction (e.g., 1.0 for normal size)
|
||
"default_scale": 1.0,
|
||
|
||
# Card scale on hover
|
||
# Increases the card size on hover
|
||
# Value as a fraction (e.g., 1.1 = 110% of original size)
|
||
"hover_scale": 1.1,
|
||
|
||
# Card scale on focus (e.g., when selected via keyboard)
|
||
# Increases the card size on focus
|
||
# Value as a fraction (e.g., 1.05 = 105% of original size)
|
||
"focus_scale": 1.05,
|
||
|
||
# Duration of scale animation
|
||
# Affects how fast the card changes size on hover or focus
|
||
# Value in milliseconds
|
||
"scale_anim_duration": 200,
|
||
|
||
# Easing curve type for border thickness increase animation (on hover/focus)
|
||
# Affects the "feel" of the animation (e.g., smooth acceleration or deceleration)
|
||
# Possible values: strings corresponding to QEasingCurve.Type (e.g., "OutBack", "InOutQuad")
|
||
"thickness_easing_curve": "OutBack",
|
||
|
||
# Easing curve type for border thickness decrease animation (on hover/focus exit)
|
||
# Affects the "feel" of returning to the default border width
|
||
"thickness_easing_curve_out": "InBack",
|
||
|
||
# Easing curve type for scale increase animation (on hover/focus)
|
||
# Affects the "feel" of the scaling animation (e.g., with a "bounce" effect)
|
||
# Possible values: strings corresponding to QEasingCurve.Type
|
||
"scale_easing_curve": "OutBack",
|
||
|
||
# Easing curve type for scale decrease animation (on hover/focus exit)
|
||
# Affects the "feel" of returning to the original scale
|
||
"scale_easing_curve_out": "InBack",
|
||
|
||
# Gradient colors for animated border
|
||
# List of dictionaries, each specifying position (0.0–1.0) and color in hex format
|
||
# Affects the appearance of the border on hover or focus if card_animation_type="gradient"
|
||
"gradient_colors": [
|
||
{"position": 0, "color": "#00fff5"}, # Starting color (cyan)
|
||
{"position": 0.33, "color": "#FF5733"}, # Color at 33% (orange)
|
||
{"position": 0.66, "color": "#9B59B6"}, # Color at 66% (purple)
|
||
{"position": 1, "color": "#00fff5"} # Ending color (back to cyan)
|
||
],
|
||
|
||
# Duration of fade animation when entering the detail page
|
||
# Affects the speed of page appearance with fade animation
|
||
# Value in milliseconds
|
||
"detail_page_fade_duration": 350,
|
||
|
||
# Duration of slide animation when entering the detail page
|
||
# Affects the speed of page sliding animation
|
||
# Value in milliseconds
|
||
"detail_page_slide_duration": 500,
|
||
|
||
# Duration of bounce animation when entering the detail page
|
||
# Affects the speed of page "bounce" animation
|
||
# Value in milliseconds
|
||
"detail_page_bounce_duration": 400,
|
||
|
||
# Duration of fade animation when exiting the detail page
|
||
# Affects the speed of page disappearance with fade animation
|
||
# Value in milliseconds
|
||
"detail_page_fade_duration_exit": 350,
|
||
|
||
# Duration of slide animation when exiting the detail page
|
||
# Affects the speed of page sliding animation
|
||
# Value in milliseconds
|
||
"detail_page_slide_duration_exit": 500,
|
||
|
||
# Duration of bounce animation when exiting the detail page
|
||
# Affects the speed of page "compression" animation
|
||
# Value in milliseconds
|
||
"detail_page_bounce_duration_exit": 400,
|
||
|
||
# Easing curve type for animations when entering the detail page
|
||
# Applied to slide and bounce animations; affects the "feel" of movement
|
||
# Possible values: strings corresponding to QEasingCurve.Type
|
||
"detail_page_easing_curve": "OutCubic",
|
||
|
||
# Easing curve type for animations when exiting the detail page
|
||
# Applied to slide and bounce animations; affects the "feel" of movement
|
||
# Possible values: strings corresponding to QEasingCurve.Type
|
||
"detail_page_easing_curve_exit": "InCubic"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 Metadata (`metainfo.ini`)
|
||
|
||
```ini
|
||
[Metainfo]
|
||
name = My Custom Theme
|
||
author = Your Name
|
||
author_link = https://example.com
|
||
description = Description of your theme.
|
||
```
|
||
|
||
---
|
||
|
||
## 🖼 Screenshots
|
||
|
||
Folder: `images/screenshots/` — place UI screenshots there.
|
||
|
||
---
|
||
|
||
## 🔡 Fonts and Icons (optional)
|
||
|
||
- Fonts: `fonts/*.ttf` or `.otf`
|
||
- Icons: `images/icons/*.svg/.png`
|
||
|
||
---
|