mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-22 01:25:10 -07:00
[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
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:
parent
18b4ffefa8
commit
74a454552a
11 changed files with 195 additions and 10 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ public:
|
|||
|
||||
void setPixmap(const QPixmap &pixmap);
|
||||
void setParams(const CardArtParams ¶ms);
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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 ─────────────────────────────────────────────────────────────
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ private:
|
|||
QPixmap avatar;
|
||||
QPixmap cardArt;
|
||||
CardArtParams params;
|
||||
QString attribution;
|
||||
};
|
||||
|
||||
// ── Main popup ────────────────────────────────────────────────────────────────
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue