From d65ce375dfd0e9339be2e72a6702d770279cadad Mon Sep 17 00:00:00 2001 From: luisangelsm Date: Sat, 7 Mar 2026 19:01:30 +0100 Subject: [PATCH] Provide more meaningful theme colors to deal with not completed and recent states --- YACReaderLibrary/themes/builtin_classic.json | 3 ++- YACReaderLibrary/themes/builtin_dark.json | 3 ++- YACReaderLibrary/themes/builtin_light.json | 3 ++- YACReaderLibrary/themes/theme.h | 3 ++- YACReaderLibrary/themes/theme_factory.cpp | 9 ++++++--- YACReaderLibrary/yacreader_folders_view.cpp | 15 +++++++++------ YACReaderLibrary/yacreader_folders_view.h | 2 ++ custom_widgets/yacreader_treeview.h | 1 - 8 files changed, 25 insertions(+), 14 deletions(-) diff --git a/YACReaderLibrary/themes/builtin_classic.json b/YACReaderLibrary/themes/builtin_classic.json index 5fb6e477..de2ddd1b 100644 --- a/YACReaderLibrary/themes/builtin_classic.json +++ b/YACReaderLibrary/themes/builtin_classic.json @@ -151,7 +151,8 @@ "folderIconSelectedColor": "#e0e0e0", "folderIconSelectedShadowColor": "#000000", "folderIconShadowColor": "#000000", - "folderIndicatorColor": "#edc518", + "newItemColor": "#edc518", + "folderNotCompletedColor": "#edc518", "folderReadOverlayColor": "#464646", "folderReadOverlaySelectedColor": "#464646", "scrollBackgroundColor": "#404040", diff --git a/YACReaderLibrary/themes/builtin_dark.json b/YACReaderLibrary/themes/builtin_dark.json index 7d043c8f..203fc57f 100644 --- a/YACReaderLibrary/themes/builtin_dark.json +++ b/YACReaderLibrary/themes/builtin_dark.json @@ -151,7 +151,8 @@ "folderIconSelectedColor": "#e0e0e0", "folderIconSelectedShadowColor": "#000000", "folderIconShadowColor": "#000000", - "folderIndicatorColor": "#edc518", + "newItemColor": "#edc518", + "folderNotCompletedColor": "#edc518", "folderReadOverlayColor": "#222222", "folderReadOverlaySelectedColor": "#222222", "scrollBackgroundColor": "#404040", diff --git a/YACReaderLibrary/themes/builtin_light.json b/YACReaderLibrary/themes/builtin_light.json index 3abc1dd7..779c1f0e 100644 --- a/YACReaderLibrary/themes/builtin_light.json +++ b/YACReaderLibrary/themes/builtin_light.json @@ -151,7 +151,8 @@ "folderIconSelectedColor": "#ffffff", "folderIconSelectedShadowColor": "#161616", "folderIconShadowColor": "#ffffff", - "folderIndicatorColor": "#555f7f", + "newItemColor": "#555f7f", + "folderNotCompletedColor": "#555f7f", "folderReadOverlayColor": "#ffffff", "folderReadOverlaySelectedColor": "#161616", "scrollBackgroundColor": "#e0e0e0", diff --git a/YACReaderLibrary/themes/theme.h b/YACReaderLibrary/themes/theme.h index 76764508..ee173a42 100644 --- a/YACReaderLibrary/themes/theme.h +++ b/YACReaderLibrary/themes/theme.h @@ -195,7 +195,8 @@ struct NavigationTreeThemeTemplates { struct NavigationTreeTheme { QString navigationTreeQSS; - QColor folderIndicatorColor; // For incomplete folders and recently updated folders + QColor folderNotCompletedColor; // Left-edge bar for folders not yet fully read + QColor newItemColor; // Dot for recently added/updated folders // Branch indicator icon paths (used by QSS url()) QString branchClosedIconPath; diff --git a/YACReaderLibrary/themes/theme_factory.cpp b/YACReaderLibrary/themes/theme_factory.cpp index bf1afbcd..4d5b6c1e 100644 --- a/YACReaderLibrary/themes/theme_factory.cpp +++ b/YACReaderLibrary/themes/theme_factory.cpp @@ -101,7 +101,8 @@ struct NavigationTreeParams { QColor scrollBackgroundColor; QColor scrollHandleColor; QColor selectedTextColor; - QColor folderIndicatorColor; + QColor folderNotCompletedColor; + QColor newItemColor; // Branch indicator icon colors (independent of sidebarIcons.iconColor) QColor branchIndicatorColor; @@ -657,7 +658,8 @@ Theme makeTheme(const ThemeParams ¶ms) theme.navigationTree.branchOpenIconPath, theme.navigationTree.branchClosedIconSelectedPath, theme.navigationTree.branchOpenIconSelectedPath); - theme.navigationTree.folderIndicatorColor = nt.folderIndicatorColor; + theme.navigationTree.folderNotCompletedColor = nt.folderNotCompletedColor; + theme.navigationTree.newItemColor = nt.newItemColor; // Folder icon — normal and selected states with independent colors { @@ -1032,7 +1034,8 @@ Theme makeTheme(const QJsonObject &json) nt.scrollBackgroundColor = colorFromJson(o, "scrollBackgroundColor", nt.scrollBackgroundColor); nt.scrollHandleColor = colorFromJson(o, "scrollHandleColor", nt.scrollHandleColor); nt.selectedTextColor = colorFromJson(o, "selectedTextColor", nt.selectedTextColor); - nt.folderIndicatorColor = colorFromJson(o, "folderIndicatorColor", nt.folderIndicatorColor); + nt.folderNotCompletedColor = colorFromJson(o, "folderNotCompletedColor", nt.folderNotCompletedColor); + nt.newItemColor = colorFromJson(o, "newItemColor", nt.newItemColor); nt.branchIndicatorColor = colorFromJson(o, "branchIndicatorColor", nt.branchIndicatorColor); nt.branchIndicatorSelectedColor = colorFromJson(o, "branchIndicatorSelectedColor", nt.branchIndicatorSelectedColor); nt.folderIconColor = colorFromJson(o, "folderIconColor", nt.folderIconColor); diff --git a/YACReaderLibrary/yacreader_folders_view.cpp b/YACReaderLibrary/yacreader_folders_view.cpp index ce116bf6..27346279 100644 --- a/YACReaderLibrary/yacreader_folders_view.cpp +++ b/YACReaderLibrary/yacreader_folders_view.cpp @@ -87,15 +87,18 @@ void YACReaderFoldersViewItemDeletegate::paint(QPainter *painter, const QStyleOp if (opt.state & QStyle::State_MouseOver) opt.state |= QStyle::State_Selected; - // Get indicator color from parent tree view - QColor indicatorColor(237, 197, 24); // Default fallback - if (auto treeView = qobject_cast(parent())) { - indicatorColor = treeView->folderIndicatorColor(); + // Get indicator colors from the theme via the owning view + QColor notCompletedColor(237, 197, 24); // Default fallback + QColor newItemDotColor(237, 197, 24); // Default fallback + if (auto foldersView = qobject_cast(parent())) { + const auto &nt = foldersView->navigationTreeTheme(); + notCompletedColor = nt.folderNotCompletedColor; + newItemDotColor = nt.newItemColor; } if (!index.data(FolderModel::CompletedRole).toBool()) { painter->save(); - painter->setBrush(QBrush(indicatorColor)); + painter->setBrush(QBrush(notCompletedColor)); painter->setPen(QPen(QBrush(), 0)); painter->drawRect(0, opt.rect.y(), 2, opt.rect.height()); painter->restore(); @@ -114,7 +117,7 @@ void YACReaderFoldersViewItemDeletegate::paint(QPainter *painter, const QStyleOp if (now - added < daysInSeconds || now - updated < daysInSeconds) { painter->save(); painter->setRenderHint(QPainter::Antialiasing); - painter->setBrush(QBrush(indicatorColor)); + painter->setBrush(QBrush(newItemDotColor)); painter->setPen(QPen(QBrush(), 0)); painter->drawEllipse(opt.rect.x() + 13, opt.rect.y() + 2, 7, 7); painter->restore(); diff --git a/YACReaderLibrary/yacreader_folders_view.h b/YACReaderLibrary/yacreader_folders_view.h index 55ea0db4..efb8d3c7 100644 --- a/YACReaderLibrary/yacreader_folders_view.h +++ b/YACReaderLibrary/yacreader_folders_view.h @@ -2,6 +2,7 @@ #define YACREADER_FOLDERS_VIEW_H #include "yacreader_treeview.h" +#include "theme.h" #include @@ -10,6 +11,7 @@ class YACReaderFoldersView : public YACReaderTreeView Q_OBJECT public: explicit YACReaderFoldersView(QWidget *parent = nullptr); + const NavigationTreeTheme &navigationTreeTheme() const { return theme.navigationTree; } signals: // Drops diff --git a/custom_widgets/yacreader_treeview.h b/custom_widgets/yacreader_treeview.h index bf8e43f1..4a4d6730 100644 --- a/custom_widgets/yacreader_treeview.h +++ b/custom_widgets/yacreader_treeview.h @@ -10,7 +10,6 @@ class YACReaderTreeView : public QTreeView, protected Themable Q_OBJECT public: explicit YACReaderTreeView(QWidget *parent = 0); - QColor folderIndicatorColor() const { return theme.navigationTree.folderIndicatorColor; } private: void mousePressEvent(QMouseEvent *event) override;