mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-09 17:44:01 -07:00
Scale things.
This commit is contained in:
parent
b7dd1bc5a5
commit
9919a905f6
7 changed files with 77 additions and 20 deletions
|
|
@ -126,36 +126,62 @@ void ArchidektApiResponseDeckEntryDisplayWidget::mousePressEvent(QMouseEvent *ev
|
|||
actRequestNavigationToDeck();
|
||||
}
|
||||
|
||||
void ArchidektApiResponseDeckEntryDisplayWidget::setScaleFactor(int scale)
|
||||
{
|
||||
scaleFactor = scale;
|
||||
updateScaledPreview();
|
||||
}
|
||||
|
||||
void ArchidektApiResponseDeckEntryDisplayWidget::onPreviewImageLoadFinished(QNetworkReply *reply)
|
||||
{
|
||||
if (reply->url() != response.getFeatured()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
QPixmap pixmap;
|
||||
CardPictureLoader::getCardBackLoadingFailedPixmap(pixmap, QSize(400, 400));
|
||||
picture->setPixmap(pixmap.scaled(400, 400, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
previewWidget->update();
|
||||
previewWidget->updateGeometry();
|
||||
QPixmap loaded;
|
||||
|
||||
reply->deleteLater();
|
||||
return;
|
||||
if (reply->error() != QNetworkReply::NoError || !loaded.loadFromData(reply->readAll())) {
|
||||
CardPictureLoader::getCardBackLoadingFailedPixmap(loaded, QSize(400, 400));
|
||||
}
|
||||
|
||||
QByteArray imageData = reply->readAll();
|
||||
QPixmap pixmap;
|
||||
originalPixmap = loaded;
|
||||
|
||||
if (!pixmap.loadFromData(imageData)) {
|
||||
CardPictureLoader::getCardBackLoadingFailedPixmap(pixmap, QSize(400, 400));
|
||||
}
|
||||
picture->setPixmap(pixmap.scaled(400, 400, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
previewWidget->update();
|
||||
previewWidget->updateGeometry();
|
||||
float ratio = float(originalPixmap.height()) / float(originalPixmap.width());
|
||||
previewWidget->setAspectRatio(ratio);
|
||||
previewWidget->setPreviewWidth(400);
|
||||
|
||||
// Initial scaling
|
||||
updateScaledPreview();
|
||||
|
||||
reply->deleteLater();
|
||||
}
|
||||
|
||||
void ArchidektApiResponseDeckEntryDisplayWidget::updateScaledPreview()
|
||||
{
|
||||
if (originalPixmap.isNull())
|
||||
return;
|
||||
|
||||
int baseWidth = 400;
|
||||
int newWidth = baseWidth * scaleFactor / 100;
|
||||
|
||||
// 1. Resize the preview widget itself (keeps aspect ratio)
|
||||
previewWidget->setPreviewWidth(newWidth);
|
||||
|
||||
// 2. Scale pixmap from the original
|
||||
QPixmap scaled = originalPixmap.scaled(previewWidget->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
|
||||
picture->setPixmap(scaled);
|
||||
picture->setFixedSize(previewWidget->size());
|
||||
|
||||
// 3. Scale the whole outer widget width (this)
|
||||
setFixedWidth(newWidth);
|
||||
|
||||
layout->invalidate();
|
||||
layout->activate();
|
||||
layout->update();
|
||||
updateGeometry();
|
||||
}
|
||||
|
||||
void ArchidektApiResponseDeckEntryDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QWidget::resizeEvent(event);
|
||||
|
|
|
|||
|
|
@ -23,10 +23,12 @@ public:
|
|||
ArchidektApiResponseDeckListingContainer response,
|
||||
QNetworkAccessManager *imageNetworkManager);
|
||||
void onPreviewImageLoadFinished(QNetworkReply *reply);
|
||||
void updateScaledPreview();
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
public slots:
|
||||
void actRequestNavigationToDeck();
|
||||
void setScaleFactor(int scale);
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
|
|
@ -37,6 +39,8 @@ private:
|
|||
QNetworkAccessManager *imageNetworkManager;
|
||||
ArchidektDeckPreviewImageDisplayWidget *previewWidget;
|
||||
QLabel *picture;
|
||||
QPixmap originalPixmap;
|
||||
int scaleFactor = 100;
|
||||
};
|
||||
|
||||
#endif // COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_ENTRY_DISPLAY_WIDGET_H
|
||||
|
|
|
|||
|
|
@ -5,8 +5,9 @@
|
|||
|
||||
ArchidektApiResponseDeckListingsDisplayWidget::ArchidektApiResponseDeckListingsDisplayWidget(
|
||||
QWidget *parent,
|
||||
ArchidektDeckListingApiResponse response)
|
||||
: QWidget(parent)
|
||||
ArchidektDeckListingApiResponse response,
|
||||
CardSizeWidget *_cardSizeSlider)
|
||||
: QWidget(parent), cardSizeSlider(_cardSizeSlider)
|
||||
{
|
||||
layout = new QHBoxLayout(this);
|
||||
setLayout(layout);
|
||||
|
|
@ -27,6 +28,8 @@ ArchidektApiResponseDeckListingsDisplayWidget::ArchidektApiResponseDeckListingsD
|
|||
new ArchidektApiResponseDeckEntryDisplayWidget(this, deckListing, imageNetworkManager);
|
||||
connect(cardListDisplayWidget, &ArchidektApiResponseDeckEntryDisplayWidget::requestNavigation, this,
|
||||
&ArchidektApiResponseDeckListingsDisplayWidget::requestNavigation);
|
||||
connect(cardSizeSlider->getSlider(), &QSlider::valueChanged, cardListDisplayWidget,
|
||||
&ArchidektApiResponseDeckEntryDisplayWidget::setScaleFactor);
|
||||
flowWidget->addWidget(cardListDisplayWidget);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_LISTINGS_DISPLAY_WIDGET_H
|
||||
#define COCKATRICE_ARCHIDEKT_API_RESPONSE_DECK_LISTINGS_DISPLAY_WIDGET_H
|
||||
|
||||
#include "../../../../cards/card_size_widget.h"
|
||||
#include "../../../../general/layout_containers/flow_widget.h"
|
||||
#include "../api_response/archidekt_deck_listing_api_response.h"
|
||||
|
||||
|
|
@ -18,10 +19,13 @@ signals:
|
|||
void requestNavigation(QString url);
|
||||
|
||||
public:
|
||||
explicit ArchidektApiResponseDeckListingsDisplayWidget(QWidget *parent, ArchidektDeckListingApiResponse response);
|
||||
explicit ArchidektApiResponseDeckListingsDisplayWidget(QWidget *parent,
|
||||
ArchidektDeckListingApiResponse response,
|
||||
CardSizeWidget *cardSizeSlider);
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
private:
|
||||
CardSizeWidget *cardSizeSlider;
|
||||
QHBoxLayout *layout;
|
||||
FlowWidget *flowWidget;
|
||||
QNetworkAccessManager *imageNetworkManager;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,20 @@ ArchidektDeckPreviewImageDisplayWidget::ArchidektDeckPreviewImageDisplayWidget(Q
|
|||
bottomRightLabel->raise();
|
||||
}
|
||||
|
||||
void ArchidektDeckPreviewImageDisplayWidget::setAspectRatio(float ratio)
|
||||
{
|
||||
aspectRatio = ratio;
|
||||
}
|
||||
|
||||
void ArchidektDeckPreviewImageDisplayWidget::setPreviewWidth(int width)
|
||||
{
|
||||
int height = int(width * aspectRatio);
|
||||
|
||||
setFixedSize(width, height);
|
||||
updateGeometry();
|
||||
update();
|
||||
}
|
||||
|
||||
void ArchidektDeckPreviewImageDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QWidget::resizeEvent(event);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@ class ArchidektDeckPreviewImageDisplayWidget : public QWidget
|
|||
public:
|
||||
explicit ArchidektDeckPreviewImageDisplayWidget(QWidget *parent = nullptr);
|
||||
|
||||
void setAspectRatio(float ratio);
|
||||
void setPreviewWidth(int width);
|
||||
|
||||
QLabel *imageLabel;
|
||||
OverlayLabel *topLeftLabel;
|
||||
OverlayLabel *topRightLabel;
|
||||
|
|
@ -24,6 +27,9 @@ public:
|
|||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
private:
|
||||
float aspectRatio = 1.0f;
|
||||
};
|
||||
|
||||
#endif // COCKATRICE_ARCHIDEKT_DECK_PREVIEW_IMAGE_DISPLAY_WIDGET_H
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ void TabArchidekt::processTopDecksResponse(QJsonObject reply)
|
|||
currentPageLayout = new QVBoxLayout(currentPageDisplay);
|
||||
currentPageDisplay->setLayout(currentPageLayout);
|
||||
|
||||
auto display = new ArchidektApiResponseDeckListingsDisplayWidget(currentPageDisplay, deckData);
|
||||
auto display = new ArchidektApiResponseDeckListingsDisplayWidget(currentPageDisplay, deckData, cardSizeSlider);
|
||||
connect(display, &ArchidektApiResponseDeckListingsDisplayWidget::requestNavigation, this,
|
||||
&TabArchidekt::actNavigatePage);
|
||||
currentPageLayout->addWidget(display);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue