From c627110a2d3f3ae7ff18697553e79c61b7e73e34 Mon Sep 17 00:00:00 2001 From: Gauwal Date: Sat, 1 Nov 2025 17:47:28 +0100 Subject: [PATCH] Fix: adjust pin highlighting behavior + making it sharp/not blurry --- .../printing_selector_card_overlay_widget.cpp | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp index d17a677ef..c767e77fc 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_overlay_widget.cpp @@ -3,17 +3,21 @@ #include "printing_selector_card_display_widget.h" #include +#include #include #include #include #include #include +#include +#include #include #include #include #include #include #include +#include /** * @brief Constructs a PrintingSelectorCardOverlayWidget for displaying a card overlay. @@ -55,17 +59,28 @@ PrintingSelectorCardOverlayWidget::PrintingSelectorCardOverlayWidget(QWidget *pa pinBadge = new QLabel(this); pinBadge->setObjectName(QStringLiteral("printingSelectorPinBadge")); - // try resource first, fallback to show visible text - QPixmap pinPix = QPixmap("theme:icons/pin"); + bool pinLoaded = false; + QImageReader pinReader(QStringLiteral("theme:icons/pin")); - if (!pinPix.isNull()) { - const double scaleFactor = 1; - const QSize targetSize(int(pinPix.width() * scaleFactor), int(pinPix.height() * scaleFactor)); - pinPix = pinPix.scaled(targetSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); - pinBadge->setPixmap(pinPix); - pinBadge->setFixedSize(pinPix.size()); - pinBadge->setStyleSheet("background: transparent;"); - } else { + if (pinReader.canRead()) { + const QSize targetSize(64, 64); + const qreal dpr = pinBadge->devicePixelRatioF(); + const QSize rasterSize( + qMax(1, static_cast(std::ceil(targetSize.width() * dpr))), + qMax(1, static_cast(std::ceil(targetSize.height() * dpr)))); + pinReader.setScaledSize(rasterSize); + const QImage pinImage = pinReader.read(); + if (!pinImage.isNull()) { + QPixmap pinPix = QPixmap::fromImage(pinImage); + pinPix.setDevicePixelRatio(dpr); + pinBadge->setPixmap(pinPix); + pinBadge->setFixedSize(targetSize); + pinBadge->setStyleSheet(QStringLiteral("background: transparent;")); + pinLoaded = true; + } + } + + if (!pinLoaded) { // visible fallback so you can see the badge even without the SVG pinBadge->setText(QStringLiteral("PIN")); pinBadge->setAlignment(Qt::AlignCenter);