summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2016-05-31 10:49:27 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2016-05-31 14:32:59 +0000
commit5bbd37f8d8ac1c4e9b13cb939370f5c617a4ec68 (patch)
tree8d1fd93df17f85ef27b272ff3198f4639530842d
parent42228d719c8222088058b6b8404865c5d45e0149 (diff)
downloadqttools-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.cpp41
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);