Skip to content

Commit 811886c

Browse files
committed
Give cards top and bottom gradient borders
The gradients produce a shadow effect similar to the one that was present in LOOT v0.17.0 and earlier, providing better visual separation between cards.
1 parent c921887 commit 811886c

File tree

8 files changed

+96
-36
lines changed

8 files changed

+96
-36
lines changed

resources/l10n/template.pot

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: LOOT 0.23.0\n"
1010
"Report-Msgid-Bugs-To: https://github.com/loot/loot/issues\n"
11-
"POT-Creation-Date: 2024-08-24 15:58+0100\n"
11+
"POT-Creation-Date: 2024-08-24 22:08+0100\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
@@ -167,84 +167,84 @@ msgstr ""
167167
msgid "Active Small Plugins"
168168
msgstr ""
169169

170-
#: src/gui/qt/general_info_card.cpp:147 src/gui/qt/general_info_card.cpp:220
170+
#: src/gui/qt/general_info_card.cpp:147 src/gui/qt/general_info_card.cpp:226
171171
msgid "Active Light Plugins"
172172
msgstr ""
173173

174-
#: src/gui/qt/general_info_card.cpp:206
174+
#: src/gui/qt/general_info_card.cpp:212
175175
msgid "General Information"
176176
msgstr ""
177177

178-
#: src/gui/qt/general_info_card.cpp:208
178+
#: src/gui/qt/general_info_card.cpp:214
179179
msgid "Masterlist Revision ID"
180180
msgstr ""
181181

182-
#: src/gui/qt/general_info_card.cpp:209
182+
#: src/gui/qt/general_info_card.cpp:215
183183
msgid "Masterlist Update Date"
184184
msgstr ""
185185

186-
#: src/gui/qt/general_info_card.cpp:210
186+
#: src/gui/qt/general_info_card.cpp:216
187187
msgid "Masterlist Prelude Revision ID"
188188
msgstr ""
189189

190-
#: src/gui/qt/general_info_card.cpp:211
190+
#: src/gui/qt/general_info_card.cpp:217
191191
msgid "Masterlist Prelude Update Date"
192192
msgstr ""
193193

194-
#: src/gui/qt/general_info_card.cpp:213
194+
#: src/gui/qt/general_info_card.cpp:219
195195
msgid "Warnings"
196196
msgstr ""
197197

198-
#: src/gui/qt/general_info_card.cpp:214
198+
#: src/gui/qt/general_info_card.cpp:220
199199
msgid "Errors"
200200
msgstr ""
201201

202-
#: src/gui/qt/general_info_card.cpp:215
202+
#: src/gui/qt/general_info_card.cpp:221
203203
msgid "Total Messages"
204204
msgstr ""
205205

206-
#: src/gui/qt/general_info_card.cpp:217
206+
#: src/gui/qt/general_info_card.cpp:223
207207
msgid "Active Plugins"
208208
msgstr ""
209209

210-
#: src/gui/qt/general_info_card.cpp:218
210+
#: src/gui/qt/general_info_card.cpp:224
211211
msgid "Active Full Plugins"
212212
msgstr ""
213213

214-
#: src/gui/qt/general_info_card.cpp:219
214+
#: src/gui/qt/general_info_card.cpp:225
215215
msgid "Active Medium Plugins"
216216
msgstr ""
217217

218-
#: src/gui/qt/general_info_card.cpp:221
218+
#: src/gui/qt/general_info_card.cpp:227
219219
msgid "Dirty Plugins"
220220
msgstr ""
221221

222-
#: src/gui/qt/general_info_card.cpp:222
222+
#: src/gui/qt/general_info_card.cpp:228
223223
msgid "Total Plugins"
224224
msgstr ""
225225

226226
#. translators: this text is displayed if LOOT has detected that the
227227
#. masterlist has been modified since it was downloaded.
228-
#: src/gui/qt/helpers.cpp:94
228+
#: src/gui/qt/helpers.cpp:116
229229
msgid "(edited)"
230230
msgstr ""
231231

232-
#: src/gui/qt/helpers.cpp:209
232+
#: src/gui/qt/helpers.cpp:231
233233
msgid "N/A: No masterlist present"
234234
msgstr ""
235235

236236
#. translators: N/A is an abbreviation for Not Applicable. A
237237
#. masterlist is a database that contains information for
238238
#. various mods.
239-
#: src/gui/qt/helpers.cpp:214
239+
#: src/gui/qt/helpers.cpp:236
240240
msgid "N/A: No masterlist prelude present"
241241
msgstr ""
242242

243-
#: src/gui/qt/helpers.cpp:222
243+
#: src/gui/qt/helpers.cpp:244
244244
msgid "Unknown: No revision metadata found"
245245
msgstr ""
246246

247-
#: src/gui/qt/helpers.cpp:358
247+
#: src/gui/qt/helpers.cpp:380
248248
#, c++-format
249249
msgid "Invalid regular expression: {0}"
250250
msgstr ""
@@ -689,48 +689,48 @@ msgstr ""
689689
msgid "Small Plugin"
690690
msgstr ""
691691

692-
#: src/gui/qt/plugin_card.cpp:187 src/gui/qt/plugin_card.cpp:302
692+
#: src/gui/qt/plugin_card.cpp:187 src/gui/qt/plugin_card.cpp:308
693693
msgid "Light Plugin"
694694
msgstr ""
695695

696-
#: src/gui/qt/plugin_card.cpp:300
696+
#: src/gui/qt/plugin_card.cpp:306
697697
msgid "Active Plugin"
698698
msgstr ""
699699

700-
#: src/gui/qt/plugin_card.cpp:301
700+
#: src/gui/qt/plugin_card.cpp:307
701701
msgid "Master Plugin"
702702
msgstr ""
703703

704-
#: src/gui/qt/plugin_card.cpp:303
704+
#: src/gui/qt/plugin_card.cpp:309
705705
msgid "Medium Plugin"
706706
msgstr ""
707707

708-
#: src/gui/qt/plugin_card.cpp:304
708+
#: src/gui/qt/plugin_card.cpp:310
709709
msgid "Empty Plugin"
710710
msgstr ""
711711

712-
#: src/gui/qt/plugin_card.cpp:305
712+
#: src/gui/qt/plugin_card.cpp:311
713713
msgid "Loads Archive"
714714
msgstr ""
715715

716-
#: src/gui/qt/plugin_card.cpp:306 src/gui/qt/plugin_item_model.cpp:128
716+
#: src/gui/qt/plugin_card.cpp:312 src/gui/qt/plugin_item_model.cpp:128
717717
msgid "Has User Metadata"
718718
msgstr ""
719719

720-
#: src/gui/qt/plugin_card.cpp:308
720+
#: src/gui/qt/plugin_card.cpp:314
721721
#: src/gui/qt/plugin_editor/plugin_editor_widget.cpp:192
722722
msgid "Bash Tags"
723723
msgstr ""
724724

725-
#: src/gui/qt/plugin_card.cpp:309
725+
#: src/gui/qt/plugin_card.cpp:315
726726
msgid "Current"
727727
msgstr ""
728728

729-
#: src/gui/qt/plugin_card.cpp:310 src/gui/qt/plugin_editor/table_tabs.cpp:524
729+
#: src/gui/qt/plugin_card.cpp:316 src/gui/qt/plugin_editor/table_tabs.cpp:524
730730
msgid "Add"
731731
msgstr ""
732732

733-
#: src/gui/qt/plugin_card.cpp:311 src/gui/qt/plugin_editor/table_tabs.cpp:524
733+
#: src/gui/qt/plugin_card.cpp:317 src/gui/qt/plugin_editor/table_tabs.cpp:524
734734
msgid "Remove"
735735
msgstr ""
736736

resources/themes/default.theme.qss

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ loot--PluginCard {
1818
background-color: palette(base);
1919
}
2020

21-
QListView::item:alternate loot--GeneralInfoCard,
22-
QListView::item:alternate loot--PluginCard {
23-
border-bottom: 1px solid palette(mid);
24-
}
25-
2621
loot--PluginCard[isSearchResult="true"] {
2722
border-left: 4px solid #64B5F6;
2823
}

src/gui/qt/general_info_card.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,12 @@ void GeneralInfoCard::updatePluginRowsAndColumns() {
150150

151151
void GeneralInfoCard::refreshMessages() { messagesWidget->refresh(); }
152152

153+
void GeneralInfoCard::paintEvent(QPaintEvent* event) {
154+
QFrame::paintEvent(event);
155+
156+
PaintCardBorderShadows(this, false);
157+
}
158+
153159
void GeneralInfoCard::setupUi() {
154160
static constexpr int TABLE_COLUMN_SPACING = 16;
155161
static constexpr int METADATA_LABEL_COLUMN = 0;

src/gui/qt/general_info_card.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ class GeneralInfoCard : public QFrame {
6161

6262
void refreshMessages();
6363

64+
protected:
65+
void paintEvent(QPaintEvent* event);
66+
6467
private:
6568
static constexpr int PLUGIN_VALUE_COLUMN = 5;
6669

src/gui/qt/helpers.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <QtGui/QClipboard>
3838
#include <QtGui/QDesktopServices>
3939
#include <QtGui/QGuiApplication>
40+
#include <QtGui/QPainter>
4041
#include <QtWidgets/QToolTip>
4142
#include <QtWidgets/QWidget>
4243
#include <boost/locale.hpp>
@@ -54,6 +55,9 @@ static constexpr const char* METADATA_ID_KEY = "blob_sha1";
5455
static constexpr const char* METADATA_DATE_KEY = "update_timestamp";
5556
static constexpr int SHORT_HASH_LENGTH = 7;
5657

58+
constexpr auto CARD_TOP_SHADOW_HEIGHT = 3;
59+
constexpr auto CARD_BOTTOM_SHADOW_HEIGHT = 3;
60+
5761
std::filesystem::path getFileMetadataPath(std::filesystem::path filePath) {
5862
filePath += METADATA_PATH_SUFFIX;
5963
return filePath;
@@ -84,6 +88,24 @@ void writeFileRevision(const std::filesystem::path& filePath,
8488
out << table;
8589
}
8690

91+
QBrush GetCardTopBorderShadowBrush() {
92+
auto shadowColor = QGuiApplication::palette().color(QPalette::Shadow);
93+
auto backgroundColor = QGuiApplication::palette().color(QPalette::Window);
94+
auto gradient = QLinearGradient(QPointF(0, 2), QPointF(0, 26));
95+
gradient.setColorAt(0, backgroundColor);
96+
gradient.setColorAt(1, shadowColor);
97+
return QBrush(gradient);
98+
}
99+
100+
QBrush GetCardBottomBorderShadowBrush() {
101+
auto shadowColor = QGuiApplication::palette().color(QPalette::Shadow);
102+
auto backgroundColor = QGuiApplication::palette().color(QPalette::Window);
103+
auto gradient = QLinearGradient(QPointF(0, -2), QPointF(0, 3));
104+
gradient.setColorAt(0, shadowColor);
105+
gradient.setColorAt(1, backgroundColor);
106+
return QBrush(gradient);
107+
}
108+
87109
FileRevisionSummary::FileRevisionSummary(const FileRevision& fileRevision) :
88110
id(fileRevision.id.substr(0, SHORT_HASH_LENGTH)), date(fileRevision.date) {
89111
if (fileRevision.is_modified) {
@@ -416,4 +438,27 @@ void OpenInDefaultApplication(const std::filesystem::path& path) {
416438
}
417439
#endif
418440
}
441+
442+
void PaintCardBorderShadows(QWidget* card, bool paintTop) {
443+
QPainter painter(card);
444+
445+
const auto cardRect = card->rect();
446+
447+
if (paintTop) {
448+
// Draw top border shadow.
449+
painter.fillRect(0,
450+
0,
451+
cardRect.width(),
452+
CARD_TOP_SHADOW_HEIGHT,
453+
GetCardTopBorderShadowBrush());
454+
}
455+
456+
// Draw bottom border shadow.
457+
painter.translate(0, cardRect.height() - CARD_BOTTOM_SHADOW_HEIGHT);
458+
painter.fillRect(0,
459+
0,
460+
cardRect.width(),
461+
CARD_BOTTOM_SHADOW_HEIGHT,
462+
GetCardBottomBorderShadowBrush());
463+
}
419464
}

src/gui/qt/helpers.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ void showInvalidRegexTooltip(QWidget& widget, const std::string& details);
8585
void CopyToClipboard(const std::string& text);
8686

8787
void OpenInDefaultApplication(const std::filesystem::path& path);
88+
89+
void PaintCardBorderShadows(QWidget* card, bool paintTop);
8890
}
8991

9092
Q_DECLARE_METATYPE(loot::MessageContent);

src/gui/qt/plugin_card.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,12 @@ void PluginCard::setSearchResult(bool isSearchResult,
209209

210210
void PluginCard::refreshMessages() { messagesWidget->refresh(); }
211211

212+
void PluginCard::paintEvent(QPaintEvent* event) {
213+
QFrame::paintEvent(event);
214+
215+
PaintCardBorderShadows(this, true);
216+
}
217+
212218
void PluginCard::setupUi() {
213219
crcLabel->setObjectName("plugin-crc");
214220
versionLabel->setObjectName("plugin-version");

src/gui/qt/plugin_card.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ class PluginCard : public QFrame {
5555

5656
void refreshMessages();
5757

58+
protected:
59+
void paintEvent(QPaintEvent* event) override;
60+
5861
private:
5962
QLabel* nameLabel{new QLabel(this)};
6063
QLabel* crcLabel{new QLabel(this)};

0 commit comments

Comments
 (0)