From d2b5e31792004515eeafae5c0a8dda5faacf41da Mon Sep 17 00:00:00 2001 From: Travis Abendshien Date: Sat, 15 Jun 2024 15:55:13 -0700 Subject: [PATCH] Fix most theme UI legibility issues --- .../qt/images/thumb_loading_dark_512.png | Bin 11270 -> 0 bytes tagstudio/src/core/enums.py | 4 +- tagstudio/src/qt/helpers/color_overlay.py | 3 ++ tagstudio/src/qt/widgets/preview_panel.py | 48 +++++++++++------- tagstudio/src/qt/widgets/thumb_renderer.py | 22 ++++++-- 5 files changed, 55 insertions(+), 22 deletions(-) delete mode 100644 tagstudio/resources/qt/images/thumb_loading_dark_512.png diff --git a/tagstudio/resources/qt/images/thumb_loading_dark_512.png b/tagstudio/resources/qt/images/thumb_loading_dark_512.png deleted file mode 100644 index 7dcd99db78373733cc38310a1ebc5f4a166bdd09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11270 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 diff --git a/tagstudio/src/core/enums.py b/tagstudio/src/core/enums.py index 7610a2cc..8c5f44c0 100644 --- a/tagstudio/src/core/enums.py +++ b/tagstudio/src/core/enums.py @@ -12,7 +12,9 @@ class SettingItems(str, enum.Enum): class Theme(str, enum.Enum): - COLOR_BG = "#65000000" + COLOR_BG_DARK = "#65000000" + COLOR_BG_LIGHT = "#33000000" + COLOR_DARK_LABEL = "#DD000000" COLOR_HOVER = "#65AAAAAA" COLOR_PRESSED = "#65EEEEEE" COLOR_DISABLED = "#65F39CAA" diff --git a/tagstudio/src/qt/helpers/color_overlay.py b/tagstudio/src/qt/helpers/color_overlay.py index c19ba73e..68457061 100644 --- a/tagstudio/src/qt/helpers/color_overlay.py +++ b/tagstudio/src/qt/helpers/color_overlay.py @@ -12,6 +12,8 @@ from src.qt.helpers.gradient import linear_gradient # here, in enums.py, and in palette.py. _THEME_DARK_FG: str = "#FFFFFF55" _THEME_LIGHT_FG: str = "#000000DD" +_THEME_DARK_BG: str = "#000000DD" +_THEME_LIGHT_BG: str = "#FFFFFF55" def theme_fg_overlay(image: Image.Image) -> Image.Image: @@ -27,6 +29,7 @@ def theme_fg_overlay(image: Image.Image) -> Image.Image: if QGuiApplication.styleHints().colorScheme() is Qt.ColorScheme.Dark else _THEME_LIGHT_FG ) + im = Image.new(mode="RGBA", size=image.size, color=overlay_color) return _apply_overlay(image, im) diff --git a/tagstudio/src/qt/widgets/preview_panel.py b/tagstudio/src/qt/widgets/preview_panel.py index 5d73edad..d659532a 100644 --- a/tagstudio/src/qt/widgets/preview_panel.py +++ b/tagstudio/src/qt/widgets/preview_panel.py @@ -12,7 +12,7 @@ import rawpy from PIL import Image, UnidentifiedImageError, ImageFont from PIL.Image import DecompressionBombError from PySide6.QtCore import QModelIndex, Signal, Qt, QSize -from PySide6.QtGui import QResizeEvent, QAction, QMovie +from PySide6.QtGui import QGuiApplication, QResizeEvent, QAction, QMovie from PySide6.QtWidgets import ( QWidget, QVBoxLayout, @@ -84,6 +84,17 @@ class PreviewPanel(QWidget): self.img_button_size: tuple[int, int] = (266, 266) self.image_ratio: float = 1.0 + self.label_bg_color = ( + Theme.COLOR_BG_DARK.value + if QGuiApplication.styleHints().colorScheme() is Qt.ColorScheme.Dark + else Theme.COLOR_DARK_LABEL.value + ) + self.panel_bg_color = ( + Theme.COLOR_BG_DARK.value + if QGuiApplication.styleHints().colorScheme() is Qt.ColorScheme.Dark + else Theme.COLOR_BG_LIGHT.value + ) + self.image_container = QWidget() image_layout = QHBoxLayout(self.image_container) image_layout.setContentsMargins(0, 0, 0, 0) @@ -145,15 +156,16 @@ class PreviewPanel(QWidget): # Qt.TextInteractionFlag.TextSelectableByMouse) properties_style = ( - f"background-color:{Theme.COLOR_BG.value};" - f"font-family:Oxanium;" - f"font-weight:bold;" - f"font-size:12px;" - f"border-radius:6px;" - f"padding-top: 4px;" - f"padding-right: 1px;" - f"padding-bottom: 1px;" - f"padding-left: 1px;" + f"background-color:{self.label_bg_color};" + "color:#FFFFFF;" + "font-family:Oxanium;" + "font-weight:bold;" + "font-size:12px;" + "border-radius:3px;" + "padding-top: 4px;" + "padding-right: 1px;" + "padding-bottom: 1px;" + "padding-left: 1px;" ) self.dimensions_label.setStyleSheet(properties_style) @@ -184,9 +196,10 @@ class PreviewPanel(QWidget): # background and NOT the scroll container background, so that the # rounded corners are maintained when scrolling. I was unable to # find the right trick to only select that particular element. + scroll_area.setStyleSheet( "QWidget#entryScrollContainer{" - f"background: {Theme.COLOR_BG.value};" + f"background:{self.panel_bg_color};" "border-radius:6px;" "}" ) @@ -291,6 +304,7 @@ class PreviewPanel(QWidget): clear_layout(layout) label = QLabel("Recent Libraries") + label.setStyleSheet("font-weight:bold;") label.setAlignment(Qt.AlignCenter) # type: ignore row_layout = QHBoxLayout() @@ -301,11 +315,9 @@ class PreviewPanel(QWidget): btn: QPushButtonWrapper | QPushButton, extras: list[str] | None = None ): base_style = [ - f"background-color:{Theme.COLOR_BG.value};", + f"background-color:{self.panel_bg_color};", "border-radius:6px;", - "text-align: left;", "padding-top: 3px;", - "padding-left: 6px;", "padding-bottom: 4px;", ] @@ -336,11 +348,11 @@ class PreviewPanel(QWidget): return lambda: self.driver.open_library(Path(path)) button.clicked.connect(open_library_button_clicked(full_val)) - set_button_style(button) - button_remove = QPushButton("➖") + set_button_style(button, ["padding-left: 6px;", "text-align: left;"]) + button_remove = QPushButton("—") button_remove.setCursor(Qt.CursorShape.PointingHandCursor) - button_remove.setFixedWidth(30) - set_button_style(button_remove) + button_remove.setFixedWidth(24) + set_button_style(button_remove, ["font-weight:bold;", "text-align:center;"]) def remove_recent_library_clicked(key: str): return lambda: ( diff --git a/tagstudio/src/qt/widgets/thumb_renderer.py b/tagstudio/src/qt/widgets/thumb_renderer.py index abe47823..1cc38129 100644 --- a/tagstudio/src/qt/widgets/thumb_renderer.py +++ b/tagstudio/src/qt/widgets/thumb_renderer.py @@ -25,6 +25,7 @@ from pydub import AudioSegment, exceptions from mutagen import id3, flac, mp4 from PySide6.QtCore import Qt, QObject, Signal, QSize from PySide6.QtGui import QGuiApplication, QPixmap +from src.qt.helpers.color_overlay import theme_fg_overlay from src.qt.helpers.gradient import four_corner_gradient_background from src.qt.helpers.text_wrapper import wrap_full_text from src.core.constants import ( @@ -75,6 +76,10 @@ class ThumbRenderer(QObject): ) thumb_loading_512.load() + # TODO: Allow this to be dynamically updated at runtime + if QGuiApplication.styleHints().colorScheme() is not Qt.ColorScheme.Dark: + thumb_loading_512 = theme_fg_overlay(thumb_loading_512) + thumb_broken_512: Image.Image = Image.open( Path(__file__).parents[3] / "resources/qt/images/thumb_broken_512.png" ) @@ -199,12 +204,24 @@ class ThumbRenderer(QObject): # Plain Text =================================================== elif ext in PLAINTEXT_TYPES: + bg_color: str = ( + "#1E1E1E" + if QGuiApplication.styleHints().colorScheme() + is Qt.ColorScheme.Dark + else "#FFFFFF" + ) + fg_color: str = ( + "#FFFFFF" + if QGuiApplication.styleHints().colorScheme() + is Qt.ColorScheme.Dark + else "#111111" + ) encoding = detect_char_encoding(_filepath) with open(_filepath, "r", encoding=encoding) as text_file: text = text_file.read(256) - bg = Image.new("RGB", (256, 256), color="#1e1e1e") + bg = Image.new("RGB", (256, 256), color=bg_color) draw = ImageDraw.Draw(bg) - draw.text((16, 16), text, fill=(255, 255, 255)) + draw.text((16, 16), text, fill=fg_color) image = bg # Fonts ======================================================== elif _filepath.suffix.lower() in FONT_TYPES: @@ -237,7 +254,6 @@ class ThumbRenderer(QObject): y_offset += ( len(text_wrapped.split("\n")) + lines_of_padding ) * draw.textbbox((0, 0), "A", font=font)[-1] - image = bg # Audio ======================================================== elif ext in AUDIO_TYPES: