From ea0526ae9d1e714ef31e6cf782447eb2a367bd01 Mon Sep 17 00:00:00 2001 From: Syping Date: Sun, 13 Jan 2019 14:32:12 +0100 Subject: [PATCH] massive DPI improvements --- AppEnv.cpp | 9 +++++ AppEnv.h | 1 + ImportDialog.cpp | 6 ++- JsonEditorDialog.cpp | 1 + PictureDialog.cpp | 95 ++++++++++++++++++++------------------------ SavegameWidget.cpp | 5 +-- SnapmaticWidget.cpp | 9 ++++- main.cpp | 4 ++ 8 files changed, 74 insertions(+), 56 deletions(-) diff --git a/AppEnv.cpp b/AppEnv.cpp index ac95e38..6e1a7d1 100644 --- a/AppEnv.cpp +++ b/AppEnv.cpp @@ -509,3 +509,12 @@ qreal AppEnv::screenRatio() return (dpi / 96); #endif } + +qreal AppEnv::screenRatioPR() +{ +#if QT_VERSION >= 0x050600 + return QGuiApplication::primaryScreen()->devicePixelRatio(); +#else + return 1; +#endif +} diff --git a/AppEnv.h b/AppEnv.h index 78ad5d5..1575e09 100644 --- a/AppEnv.h +++ b/AppEnv.h @@ -56,6 +56,7 @@ public: // Screen Stuff static qreal screenRatio(); + static qreal screenRatioPR(); }; #endif // APPENV_H diff --git a/ImportDialog.cpp b/ImportDialog.cpp index 07de7a5..449afdc 100644 --- a/ImportDialog.cpp +++ b/ImportDialog.cpp @@ -142,6 +142,7 @@ void ImportDialog::processImage() QPixmap snapmaticPixmap(snapmaticResolutionW, snapmaticResolutionH); snapmaticPixmap.fill(selectedColour); QPainter snapmaticPainter(&snapmaticPixmap); + qreal screenRatioPR = AppEnv::screenRatioPR(); if (!backImage.isNull()) { if (!ui->cbStretch->isChecked()) @@ -225,7 +226,10 @@ void ImportDialog::processImage() } snapmaticPainter.end(); newImage = snapmaticPixmap.toImage(); - ui->labPicture->setPixmap(snapmaticPixmap.scaled(snapmaticResolutionLW, snapmaticResolutionLH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); +#if QT_VERSION >= 0x050600 + snapmaticPixmap.setDevicePixelRatio(screenRatioPR); +#endif + ui->labPicture->setPixmap(snapmaticPixmap.scaled(snapmaticResolutionLW * screenRatioPR, snapmaticResolutionLH * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } void ImportDialog::processWatermark(QPainter *snapmaticPainter) diff --git a/JsonEditorDialog.cpp b/JsonEditorDialog.cpp index 1e1b157..c23b5d7 100644 --- a/JsonEditorDialog.cpp +++ b/JsonEditorDialog.cpp @@ -94,6 +94,7 @@ JsonEditorDialog::JsonEditorDialog(SnapmaticPicture *picture, QWidget *parent) : { ui->lineJSON->setMinimumHeight(qRound(1 * screenRatio)); ui->lineJSON->setMaximumHeight(qRound(1 * screenRatio)); + ui->lineJSON->setLineWidth(qRound(1 * screenRatio)); } resize(450 * screenRatio, 550 * screenRatio); } diff --git a/PictureDialog.cpp b/PictureDialog.cpp index 9144380..6ded036 100644 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -138,9 +138,10 @@ void PictureDialog::setupPictureDialog() // Avatar area qreal screenRatio = AppEnv::screenRatio(); - if (screenRatio != 1) + qreal screenRatioPR = AppEnv::screenRatioPR(); + if (screenRatio != 1 || screenRatioPR != 1) { - avatarAreaPicture = QImage(":/img/avatararea.png").scaledToHeight(536 * screenRatio, Qt::FastTransformation); + avatarAreaPicture = QImage(":/img/avatararea.png").scaledToHeight(536 * screenRatio * screenRatioPR, Qt::FastTransformation); } else { @@ -150,6 +151,11 @@ void PictureDialog::setupPictureDialog() avatarLocY = 66; avatarSize = 470; + // DPI calculation (picture) + ui->labPicture->setFixedSize(960 * screenRatio, 536 * screenRatio); + ui->labPicture->setFocusPolicy(Qt::StrongFocus); + ui->labPicture->setScaledContents(true); + // Overlay area renderOverlayPicture(); overlayEnabled = true; @@ -185,8 +191,6 @@ void PictureDialog::setupPictureDialog() installEventFilter(this); installEventFilter(ui->labPicture); - ui->labPicture->setFixedSize(960 * screenRatio, 536 * screenRatio); - ui->labPicture->setFocusPolicy(Qt::StrongFocus); // DPI calculation ui->hlButtons->setSpacing(6 * screenRatio); @@ -343,7 +347,7 @@ LRESULT PictureDialog::HitTestNCA(HWND hWnd, LPARAM lParam) void PictureDialog::resizeEvent(QResizeEvent *event) { Q_UNUSED(event) - // int newDialogHeight = ui->labPicture->pixmap()->height(); + // int newDialogHeight = (ui->labPicture->pixmap()->height() / AppEnv::screenRatioPR()); // newDialogHeight = newDialogHeight + ui->jsonFrame->height(); // if (naviEnabled) newDialogHeight = newDialogHeight + layout()->menuBar()->height(); // int buttomBorderSize = (frameSize().height() - size().height()); @@ -364,7 +368,7 @@ void PictureDialog::resizeEvent(QResizeEvent *event) void PictureDialog::adaptNewDialogSize(QSize newLabelSize) { Q_UNUSED(newLabelSize) - int newDialogHeight = ui->labPicture->pixmap()->height(); + int newDialogHeight = (ui->labPicture->pixmap()->height() / AppEnv::screenRatioPR()); newDialogHeight = newDialogHeight + ui->jsonFrame->height(); if (naviEnabled) newDialogHeight = newDialogHeight + layout()->menuBar()->height(); setMaximumSize(width(), newDialogHeight); @@ -566,24 +570,25 @@ void PictureDialog::renderOverlayPicture() { // Generating Overlay Preview qreal screenRatio = AppEnv::screenRatio(); - QRect preferedRect = QRect(0, 0, 200 * screenRatio, 160 * screenRatio); + qreal screenRatioPR = AppEnv::screenRatioPR(); + QRect preferedRect = QRect(0, 0, 200 * screenRatio * screenRatioPR, 160 * screenRatio * screenRatioPR); QString overlayText = tr("Key 1 - Avatar Preview Mode\nKey 2 - Toggle Overlay\nArrow Keys - Navigate"); QFont overlayPainterFont; - overlayPainterFont.setPixelSize(12 * screenRatio); + overlayPainterFont.setPixelSize(12 * screenRatio * screenRatioPR); QFontMetrics fontMetrics(overlayPainterFont); QRect overlaySpace = fontMetrics.boundingRect(preferedRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextDontClip | Qt::TextWordWrap, overlayText); int hOverlay = Qt::AlignTop; - if (overlaySpace.height() < 74 * screenRatio) + if (overlaySpace.height() < 74 * screenRatio * screenRatioPR) { hOverlay = Qt::AlignVCenter; - preferedRect.setHeight(71 * screenRatio); - overlaySpace.setHeight(80 * screenRatio); + preferedRect.setHeight(71 * screenRatio * screenRatioPR); + overlaySpace.setHeight(80 * screenRatio * screenRatioPR); } else { - overlaySpace.setHeight(overlaySpace.height() + 6 * screenRatio); + overlaySpace.setHeight(overlaySpace.height() + 6 * screenRatio * screenRatioPR); } QImage overlayImage(overlaySpace.size(), QImage::Format_ARGB32_Premultiplied); @@ -595,13 +600,13 @@ void PictureDialog::renderOverlayPicture() overlayPainter.drawText(preferedRect, Qt::AlignLeft | hOverlay | Qt::TextDontClip | Qt::TextWordWrap, overlayText); overlayPainter.end(); - if (overlaySpace.width() < 194 * screenRatio) + if (overlaySpace.width() < 194 * screenRatio * screenRatioPR) { - overlaySpace.setWidth(200 * screenRatio); + overlaySpace.setWidth(200 * screenRatio * screenRatioPR); } else { - overlaySpace.setWidth(overlaySpace.width() + 6 * screenRatio); + overlaySpace.setWidth(overlaySpace.width() + 6 * screenRatio * screenRatioPR); } QImage overlayBorderImage(overlaySpace.width(), overlaySpace.height(), QImage::Format_ARGB6666_Premultiplied); @@ -611,7 +616,7 @@ void PictureDialog::renderOverlayPicture() overlayTempImage.fill(Qt::transparent); QPainter overlayTempPainter(&overlayTempImage); overlayTempPainter.drawImage(0, 0, overlayBorderImage); - overlayTempPainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayImage); + overlayTempPainter.drawImage(3 * screenRatio * screenRatioPR, 3 * screenRatio * screenRatioPR, overlayImage); overlayTempPainter.end(); } @@ -684,63 +689,51 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture) void PictureDialog::renderPicture() { qreal screenRatio = AppEnv::screenRatio(); + qreal screenRatioPR = AppEnv::screenRatioPR(); if (!previewMode) { if (overlayEnabled) { - QPixmap shownImagePixmap(960 * screenRatio, 536 * screenRatio); + QPixmap shownImagePixmap(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR); shownImagePixmap.fill(Qt::transparent); QPainter shownImagePainter(&shownImagePixmap); - if (screenRatio == 1) - { - shownImagePainter.drawImage(0, 0, snapmaticPicture); - shownImagePainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage); - } - else - { - shownImagePainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); - shownImagePainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage); - } + shownImagePainter.drawImage(0, 0, snapmaticPicture.scaled(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + shownImagePainter.drawImage(3 * screenRatio * screenRatioPR, 3 * screenRatio * screenRatioPR, overlayTempImage); shownImagePainter.end(); +#if QT_VERSION >= 0x050600 + shownImagePixmap.setDevicePixelRatio(screenRatioPR); +#endif ui->labPicture->setPixmap(shownImagePixmap); } else { - if (screenRatio != 1) - { - QPixmap shownImagePixmap(960 * screenRatio, 536 * screenRatio); - shownImagePixmap.fill(Qt::transparent); - QPainter shownImagePainter(&shownImagePixmap); - shownImagePainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); - shownImagePainter.end(); - ui->labPicture->setPixmap(shownImagePixmap); - } - else - { - ui->labPicture->setPixmap(QPixmap::fromImage(snapmaticPicture)); - } + QPixmap shownImagePixmap(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR); + shownImagePixmap.fill(Qt::transparent); + QPainter shownImagePainter(&shownImagePixmap); + shownImagePainter.drawImage(0, 0, snapmaticPicture.scaled(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + shownImagePainter.end(); +#if QT_VERSION >= 0x050600 + shownImagePixmap.setDevicePixelRatio(screenRatioPR); +#endif + ui->labPicture->setPixmap(shownImagePixmap); } } else { // Generating Avatar Preview - QPixmap avatarPixmap(960 * screenRatio, 536 * screenRatio); + QPixmap avatarPixmap(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR); QPainter snapPainter(&avatarPixmap); QFont snapPainterFont; - snapPainterFont.setPixelSize(12 * screenRatio); - if (screenRatio == 1) - { - snapPainter.drawImage(0, 0, snapmaticPicture); - } - else - { - snapPainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)); - } + snapPainterFont.setPixelSize(12 * screenRatio * screenRatioPR); + snapPainter.drawImage(0, 0, snapmaticPicture.scaled(960 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); snapPainter.drawImage(0, 0, avatarAreaPicture); snapPainter.setPen(QColor::fromRgb(255, 255, 255, 255)); snapPainter.setFont(snapPainterFont); - snapPainter.drawText(QRect(3 * screenRatio, 3 * screenRatio, 140 * screenRatio, 536 * screenRatio), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View")); + snapPainter.drawText(QRect(3 * screenRatio * screenRatioPR, 3 * screenRatio * screenRatioPR, 140 * screenRatio * screenRatioPR, 536 * screenRatio * screenRatioPR), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View")); snapPainter.end(); +#if QT_VERSION >= 0x050600 + avatarPixmap.setDevicePixelRatio(screenRatioPR); +#endif ui->labPicture->setPixmap(avatarPixmap); } } diff --git a/SavegameWidget.cpp b/SavegameWidget.cpp index a595418..2b0ee64 100644 --- a/SavegameWidget.cpp +++ b/SavegameWidget.cpp @@ -58,9 +58,8 @@ SavegameWidget::SavegameWidget(QWidget *parent) : qreal screenRatio = AppEnv::screenRatio(); ui->labSavegamePic->setFixedSize(48 * screenRatio, 27 * screenRatio); - QPixmap savegamePixmap(":/img/savegame.svgz"); - savegamePixmap = savegamePixmap.scaledToHeight(ui->labSavegamePic->height(), Qt::SmoothTransformation); - ui->labSavegamePic->setPixmap(savegamePixmap); + ui->labSavegamePic->setScaledContents(true); + ui->labSavegamePic->setPixmap(QPixmap(":/img/savegame.svgz")); QString exportSavegameStr = tr("Export Savegame..."); Q_UNUSED(exportSavegameStr) diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index 5cf5d31..0ef52cd 100644 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -78,9 +78,16 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture) QObject::connect(picture, SIGNAL(customSignal(QString)), this, SLOT(customSignal(QString))); qreal screenRatio = AppEnv::screenRatio(); + qreal screenRatioPR = AppEnv::screenRatioPR(); ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio); - QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getImage().scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor); + ui->labPicture->setScaledContents(true); + + QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getImage().scaled(ui->labPicture->width() * screenRatioPR, ui->labPicture->height() * screenRatioPR, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor); +#if QT_VERSION >= 0x050600 + SnapmaticPixmap.setDevicePixelRatio(screenRatioPR); +#endif + ui->labPicStr->setText(smpic->getPictureStr() % "\n" % smpic->getPictureTitl()); ui->labPicture->setPixmap(SnapmaticPixmap); diff --git a/main.cpp b/main.cpp index 81e561d..8d14891 100644 --- a/main.cpp +++ b/main.cpp @@ -65,6 +65,10 @@ int main(int argc, char *argv[]) { +#if QT_VERSION >= 0x050600 + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true); + QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true); +#endif QApplication a(argc, argv); a.setApplicationName(GTA5SYNC_APPSTR); a.setApplicationVersion(GTA5SYNC_APPVER);