diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-05-31 10:49:27 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-05-31 14:32:59 +0000 |
commit | 5bbd37f8d8ac1c4e9b13cb939370f5c617a4ec68 (patch) | |
tree | 8d1fd93df17f85ef27b272ff3198f4639530842d | |
parent | 42228d719c8222088058b6b8404865c5d45e0149 (diff) | |
download | qttools-5bbd37f8d8ac1c4e9b13cb939370f5c617a4ec68.tar.gz |
Qt Designer: Adapt the new form dialog to High DPI.
Propagate the device pixel ratio obtained from QWidget::grab()
and determine the size depending on screen size so that it is reasonable
with or without High DPI scaling.
Task-number: QTBUG-53713
Change-Id: I2a0dd1df91fccd455707ab23205e2e5ad592d570
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r-- | src/designer/src/lib/shared/newformwidget.cpp | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/designer/src/lib/shared/newformwidget.cpp b/src/designer/src/lib/shared/newformwidget.cpp index b2b0640a2..d7ae18a87 100644 --- a/src/designer/src/lib/shared/newformwidget.cpp +++ b/src/designer/src/lib/shared/newformwidget.cpp @@ -53,6 +53,8 @@ #include <QtCore/QDir> #include <QtCore/QTextStream> +#include <QtWidgets/QApplication> +#include <QtWidgets/QDesktopWidget> #include <QtWidgets/QHeaderView> #include <QtWidgets/QTreeWidgetItem> #include <QtGui/QPainter> @@ -320,18 +322,23 @@ QImage NewFormWidget::grabForm(QDesignerFormEditorInterface *core, QPixmap NewFormWidget::formPreviewPixmap(QIODevice &file, const QString &workingDir) const { - const int margin = 7; - const int shadow = 7; - const int previewSize = 256; + const QSizeF screenSize(QApplication::desktop()->screenGeometry(this).size()); + const int previewSize = qRound(screenSize.width() / 7.5); // 256 on 1920px screens. + const int margin = previewSize / 32 - 1; // 7 on 1920px screens. + const int shadow = margin; const QImage wimage = grabForm(m_core, file, workingDir, currentDeviceProfile()); if (wimage.isNull()) return QPixmap(); - const QImage image = wimage.scaled(previewSize - margin * 2, previewSize - margin * 2, - Qt::KeepAspectRatio, - Qt::SmoothTransformation); - - QImage dest(previewSize, previewSize, QImage::Format_ARGB32_Premultiplied); + const qreal devicePixelRatio = wimage.devicePixelRatioF(); + const QSize imageSize(previewSize - margin * 2, previewSize - margin * 2); + QImage image = wimage.scaled((QSizeF(imageSize) * devicePixelRatio).toSize(), + Qt::KeepAspectRatio, Qt::SmoothTransformation); + image.setDevicePixelRatio(devicePixelRatio); + + QImage dest((QSizeF(previewSize, previewSize) * devicePixelRatio).toSize(), + QImage::Format_ARGB32_Premultiplied); + dest.setDevicePixelRatio(devicePixelRatio); dest.fill(0); QPainter p(&dest); @@ -339,14 +346,14 @@ QPixmap NewFormWidget::formPreviewPixmap(QIODevice &file, const QString &working p.setPen(QPen(palette().brush(QPalette::WindowText), 0)); - p.drawRect(margin-1, margin-1, image.width() + 1, image.height() + 1); + p.drawRect(QRectF(margin - 1, margin - 1, imageSize.width() + 1.5, imageSize.height() + 1.5)); const QColor dark(Qt::darkGray); const QColor light(Qt::transparent); // right shadow { - const QRect rect(margin + image.width() + 1, margin + shadow, shadow, image.height() - shadow + 1); + const QRect rect(margin + imageSize.width() + 1, margin + shadow, shadow, imageSize.height() - shadow + 1); QLinearGradient lg(rect.topLeft(), rect.topRight()); lg.setColorAt(0, dark); lg.setColorAt(1, light); @@ -355,7 +362,7 @@ QPixmap NewFormWidget::formPreviewPixmap(QIODevice &file, const QString &working // bottom shadow { - const QRect rect(margin + shadow, margin + image.height() + 1, image.width() - shadow + 1, shadow); + const QRect rect(margin + shadow, margin + imageSize.height() + 1, imageSize.width() - shadow + 1, shadow); QLinearGradient lg(rect.topLeft(), rect.bottomLeft()); lg.setColorAt(0, dark); lg.setColorAt(1, light); @@ -364,8 +371,8 @@ QPixmap NewFormWidget::formPreviewPixmap(QIODevice &file, const QString &working // bottom/right corner shadow { - const QRect rect(margin + image.width() + 1, margin + image.height() + 1, shadow, shadow); - QRadialGradient g(rect.topLeft(), shadow); + const QRect rect(margin + imageSize.width() + 1, margin + imageSize.height() + 1, shadow, shadow); + QRadialGradient g(rect.topLeft(), shadow - 1); g.setColorAt(0, dark); g.setColorAt(1, light); p.fillRect(rect, g); @@ -373,8 +380,8 @@ QPixmap NewFormWidget::formPreviewPixmap(QIODevice &file, const QString &working // top/right corner { - const QRect rect(margin + image.width() + 1, margin, shadow, shadow); - QRadialGradient g(rect.bottomLeft(), shadow); + const QRect rect(margin + imageSize.width() + 1, margin, shadow, shadow); + QRadialGradient g(rect.bottomLeft(), shadow - 1); g.setColorAt(0, dark); g.setColorAt(1, light); p.fillRect(rect, g); @@ -382,8 +389,8 @@ QPixmap NewFormWidget::formPreviewPixmap(QIODevice &file, const QString &working // bottom/left corner { - const QRect rect(margin, margin + image.height() + 1, shadow, shadow); - QRadialGradient g(rect.topRight(), shadow); + const QRect rect(margin, margin + imageSize.height() + 1, shadow, shadow); + QRadialGradient g(rect.topRight(), shadow - 1); g.setColorAt(0, dark); g.setColorAt(1, light); p.fillRect(rect, g); |