[Cards] Artist attribution (#7092)
Some checks are pending
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker Image / amd64 & arm64 (push) Waiting to run

* [Cards] Artist attribution

Took 7 minutes

Took 4 minutes

* Nudge attribution pill on home screen to align

Took 3 minutes


Took 28 seconds

Took 38 seconds

* Lint.

Took 3 minutes

* Lint.

Took 2 minutes

* Fix rebase whoopsie

Took 5 minutes

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2026-08-21 02:54:36 +02:00 committed by GitHub
parent 18b4ffefa8
commit 74a454552a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 195 additions and 10 deletions

View file

@ -1,7 +1,9 @@
#include "user_card_settings_dialog.h"
#include "../../../card_picture_loader/card_picture_loader.h"
#include "../../cards/art_crop_attribution.h"
#include "../../utility/completer_utils.h"
#include "card/card_search_model.h"
#include "card_database_display_model.h"
#include "card_database_model.h"
#include "user_card_art_provider.h"
@ -18,6 +20,7 @@
#include <QPainter>
#include <QPainterPath>
#include <QPushButton>
#include <QRegularExpression>
#include <QVBoxLayout>
#include <libcockatrice/card/database/card_database_manager.h>
@ -39,6 +42,12 @@ void CardArtPreviewWidget::setParams(const CardArtParams &p)
update();
}
void CardArtPreviewWidget::setAttribution(const QString &attribution)
{
attributionText = attribution;
update();
}
void CardArtPreviewWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
@ -88,6 +97,8 @@ void CardArtPreviewWidget::paintEvent(QPaintEvent *)
painter.setPen(QPen(QColor(70, 80, 95), 2));
painter.setBrush(Qt::NoBrush);
painter.drawEllipse(avatarRect.adjusted(-1, -1, 1, 1));
paintArtAttribution(painter, cardRect, attributionText);
}
UserCardArtSettingsDialog::UserCardArtSettingsDialog(const CardArtParams &initial, QWidget *parent)
@ -310,6 +321,11 @@ void UserCardArtSettingsDialog::reloadPreview()
currentPixmap = UserCardArtProvider::cropCardArt(fullRes);
preview->setPixmap(currentPixmap);
preview->setParams(currentParams);
// Only attribute the art once the new pixmap is actually displayed, so a
// cache miss (which keeps the previous pixmap on screen) doesn't pair the
// new card's attribution with the old card's art.
preview->setAttribution(buildArtAttribution(card));
}
void UserCardArtSettingsDialog::onParamChanged()

View file

@ -24,6 +24,7 @@ public:
void setPixmap(const QPixmap &pixmap);
void setParams(const CardArtParams &params);
void setAttribution(const QString &attribution);
protected:
void paintEvent(QPaintEvent *event) override;
@ -31,6 +32,7 @@ protected:
private:
QPixmap sourcePixmap;
CardArtParams params;
QString attributionText;
};
class UserCardArtSettingsDialog : public QDialog

View file

@ -1,5 +1,6 @@
#include "user_info_popup.h"
#include "../../cards/art_crop_attribution.h"
#include "../../interface/pixel_map_generator.h"
#include "../../interface/theme_manager.h"
#include "../../interface/widgets/tabs/tab_supervisor.h"
@ -18,6 +19,7 @@
#include <QStandardItem>
#include <QStyledItemDelegate>
#include <QVBoxLayout>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/network/client/abstract/abstract_client.h>
#include <libcockatrice/protocol/pb/commands.pb.h>
#include <libcockatrice/protocol/pb/response_get_games_of_user.pb.h>
@ -151,6 +153,16 @@ void UserInfoHeaderWidget::setUserData(const ServerInfo_User &_user,
avatar = _avatar;
cardArt = _cardArt;
params = _params;
attribution.clear();
if (user.has_card_art_params()) {
const ExactCard card =
CardDatabaseManager::query()->getCard({QString::fromStdString(user.card_art_params().card_name()),
QString::fromStdString(user.card_art_params().card_provider_id())});
if (card) {
attribution = buildArtAttribution(card);
}
}
update();
}
@ -304,6 +316,17 @@ void UserInfoHeaderWidget::paintEvent(QPaintEvent *)
: UserListPainter::blend(badge.color, Qt::black, 0.35));
p.drawText(br, Qt::AlignCenter, badge.text);
}
// The painter font at this point depends on whether a badge was drawn
// (badge font vs username font), so pin an explicit font for the pill.
p.setFont(font());
// Only show the attribution when there is actually art on screen: on a
// cache miss cardArt is null and the pill would float over the plain
// header with no art behind it.
if (!cardArt.isNull()) {
paintArtAttribution(p, rect, attribution, Qt::AlignRight | Qt::AlignBottom, 0.8);
}
}
// ── UserInfoPopup ─────────────────────────────────────────────────────────────

View file

@ -95,6 +95,7 @@ private:
QPixmap avatar;
QPixmap cardArt;
CardArtParams params;
QString attribution;
};
// ── Main popup ────────────────────────────────────────────────────────────────

View file

@ -2,6 +2,7 @@
#include "../../../../client/settings/cache_settings.h"
#include "../../../card_picture_loader/card_picture_loader.h"
#include "../../cards/art_crop_attribution.h"
#include "../../interface/pixel_map_generator.h"
#include "../../interface/theme_manager.h"
#include "../../interface/widgets/tabs/tab_account.h"