Update DprGadadget
Display active environment variables. Reorder the labels with device independent values to the left and native values to the right. Display the Qt scale factor. Change-Id: If95c252b06eff5abd91a25847777246effe94be2 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
parent
fd0c3170c8
commit
74cae2580f
@ -14,6 +14,7 @@ qt_add_executable(dprgadget
|
|||||||
target_link_libraries(dprgadget PUBLIC
|
target_link_libraries(dprgadget PUBLIC
|
||||||
Qt::Core
|
Qt::Core
|
||||||
Qt::Gui
|
Qt::Gui
|
||||||
|
Qt::GuiPrivate
|
||||||
Qt::Widgets
|
Qt::Widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -26,8 +26,11 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <QtWidgets/QtWidgets>
|
|
||||||
#include <QtGui/qpa/qplatformscreen.h>
|
#include <QtGui/qpa/qplatformscreen.h>
|
||||||
|
#include <QtGui/qpa/qplatformwindow.h>
|
||||||
|
#include <QtGui/private/qhighdpiscaling_p.h>
|
||||||
|
#include <QtWidgets/QtWidgets>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DprGadget: The focused High-DPI settings debug utility
|
DprGadget: The focused High-DPI settings debug utility
|
||||||
@ -40,8 +43,12 @@
|
|||||||
an utility which displays all inputs.
|
an utility which displays all inputs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool g_qtUsePhysicalDpi = false;
|
|
||||||
bool g_qtScaleFactor = false;
|
bool g_qtScaleFactor = false;
|
||||||
|
bool g_qtUsePhysicalDpi = false;
|
||||||
|
bool g_qtFontDpi = false;
|
||||||
|
bool g_qtScaleFactorRoundingPolicy = false;
|
||||||
|
bool g_displayEvents = false;
|
||||||
|
|
||||||
|
|
||||||
class DprGadget : public QWidget
|
class DprGadget : public QWidget
|
||||||
{
|
{
|
||||||
@ -49,10 +56,13 @@ public:
|
|||||||
std::function<void(void)> m_clearFn;
|
std::function<void(void)> m_clearFn;
|
||||||
std::function<void(void)> m_updateFn;
|
std::function<void(void)> m_updateFn;
|
||||||
qreal m_currentDpr = -1;
|
qreal m_currentDpr = -1;
|
||||||
|
QString m_eventsText;
|
||||||
|
|
||||||
DprGadget() {
|
DprGadget() {
|
||||||
setWindowTitle("DprGadget");
|
setWindowTitle(QString("DprGadget - Qt %1").arg(qVersion()));
|
||||||
|
|
||||||
|
QFont tinyFont;
|
||||||
|
tinyFont.setPointSize(8);
|
||||||
QFont smallFont;
|
QFont smallFont;
|
||||||
smallFont.setPointSize(12);
|
smallFont.setPointSize(12);
|
||||||
QFont bigFont;
|
QFont bigFont;
|
||||||
@ -68,71 +78,148 @@ public:
|
|||||||
dprValue->setFont(biggerFont);
|
dprValue->setFont(biggerFont);
|
||||||
dprValue->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
dprValue->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
QLabel *dpiLabel = new QLabel("Logical DPI:");
|
QLabel *screenLabel = new QLabel("Current Screen:");
|
||||||
dpiLabel->setFont(smallFont);
|
screenLabel->setFont(smallFont);
|
||||||
dpiLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
|
||||||
|
|
||||||
QLabel *sizeLabel = new QLabel("Window size:");
|
QLabel *sizeLabel = new QLabel("Window size:");
|
||||||
sizeLabel->setFont(smallFont);
|
sizeLabel->setFont(smallFont);
|
||||||
sizeLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
sizeLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
|
QLabel *nativeSizeLabel = new QLabel("Native:");
|
||||||
|
nativeSizeLabel->setFont(smallFont);
|
||||||
|
nativeSizeLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
|
QLabel *dpiLabel = new QLabel("Logical DPI:");
|
||||||
|
dpiLabel->setFont(smallFont);
|
||||||
|
dpiLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
|
QLabel *windowDpiLabel = new QLabel("Window DPI:");
|
||||||
|
windowDpiLabel->setFont(smallFont);
|
||||||
|
windowDpiLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
QLabel *platformDpiLabel = new QLabel("Native Device Pixel Ratio:");
|
QLabel *platformDpiLabel = new QLabel("Native Device Pixel Ratio:");
|
||||||
QLabel *plarformDprLabel = new QLabel("Native Logical DPI:");
|
|
||||||
platformDpiLabel->setFont(smallFont);
|
platformDpiLabel->setFont(smallFont);
|
||||||
platformDpiLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
platformDpiLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
|
QLabel *windowDprLabel = new QLabel("Window DPR:");
|
||||||
|
windowDprLabel->setFont(smallFont);
|
||||||
|
windowDprLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
|
QLabel *plarformDprLabel = new QLabel("Native DPI:");
|
||||||
plarformDprLabel->setFont(smallFont);
|
plarformDprLabel->setFont(smallFont);
|
||||||
plarformDprLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
plarformDprLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
QLabel *screenLabel = new QLabel("Current Screen:");
|
QLabel *qtScaleFactorLabel = new QLabel("Qt Internal Scale Factor:");
|
||||||
screenLabel->setFont(smallFont);
|
qtScaleFactorLabel->setFont(smallFont);
|
||||||
|
|
||||||
|
QLabel *eventsLabel = new QLabel(m_eventsText);
|
||||||
|
eventsLabel->setFont(tinyFont);
|
||||||
|
eventsLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
|
|
||||||
QVBoxLayout *layout = new QVBoxLayout();
|
QVBoxLayout *layout = new QVBoxLayout();
|
||||||
layout->addWidget(dprLabel);
|
layout->addWidget(dprLabel);
|
||||||
layout->setAlignment(dprLabel, Qt::AlignHCenter);
|
layout->setAlignment(dprLabel, Qt::AlignHCenter);
|
||||||
layout->addWidget(dprValue);
|
layout->addWidget(dprValue);
|
||||||
layout->setAlignment(dprValue, Qt::AlignHCenter);
|
layout->setAlignment(dprValue, Qt::AlignHCenter);
|
||||||
layout->addWidget(sizeLabel);
|
|
||||||
|
|
||||||
bool displayLogicalDpi = false;
|
bool displayLogicalDpi = false;
|
||||||
if (displayLogicalDpi)
|
if (displayLogicalDpi)
|
||||||
layout->addWidget(dpiLabel);
|
layout->addWidget(dpiLabel);
|
||||||
|
|
||||||
|
layout->addStretch();
|
||||||
|
|
||||||
|
QHBoxLayout *screenLabelLayout = new QHBoxLayout();
|
||||||
|
screenLabelLayout->addStretch();
|
||||||
|
screenLabelLayout->addWidget(screenLabel);
|
||||||
|
screenLabelLayout->addStretch();
|
||||||
|
layout->addLayout(screenLabelLayout);
|
||||||
|
|
||||||
|
QHBoxLayout *windowSizeLayout = new QHBoxLayout();
|
||||||
|
windowSizeLayout->addWidget(sizeLabel);
|
||||||
|
windowSizeLayout->addStretch();
|
||||||
|
windowSizeLayout->addWidget(nativeSizeLabel);
|
||||||
|
layout->addLayout(windowSizeLayout);
|
||||||
|
|
||||||
|
QHBoxLayout *dpiLayout = new QHBoxLayout();
|
||||||
|
dpiLayout->addWidget(windowDpiLabel);
|
||||||
|
dpiLayout->addStretch();
|
||||||
|
dpiLayout->addWidget(platformDpiLabel);
|
||||||
|
layout->addLayout(dpiLayout);
|
||||||
|
|
||||||
|
QHBoxLayout *dprLayout = new QHBoxLayout();
|
||||||
|
dprLayout->addWidget(windowDprLabel);
|
||||||
|
dprLayout->addStretch();
|
||||||
|
dprLayout->addWidget(plarformDprLabel);
|
||||||
|
layout->addLayout(dprLayout);
|
||||||
|
|
||||||
|
QHBoxLayout *qtScaleFactorLabelLayout = new QHBoxLayout();
|
||||||
|
qtScaleFactorLabelLayout->addStretch();
|
||||||
|
qtScaleFactorLabelLayout->addWidget(qtScaleFactorLabel);
|
||||||
|
qtScaleFactorLabelLayout->addStretch();
|
||||||
|
layout->addLayout(qtScaleFactorLabelLayout);
|
||||||
|
|
||||||
|
if (g_displayEvents)
|
||||||
|
layout->addWidget(eventsLabel);
|
||||||
|
|
||||||
|
bool activeEnvironment = g_qtScaleFactor || g_qtUsePhysicalDpi || g_qtFontDpi || g_qtScaleFactorRoundingPolicy;
|
||||||
|
if (activeEnvironment) {
|
||||||
|
layout->addWidget(new QLabel("Active Environment:"));
|
||||||
if (g_qtScaleFactor) {
|
if (g_qtScaleFactor) {
|
||||||
QString text = QString("QT_SCALE_FACTOR ") + qgetenv("QT_SCALE_FACTOR");
|
QString text = QString("QT_SCALE_FACTOR=") + qgetenv("QT_SCALE_FACTOR");
|
||||||
|
layout->addWidget(new QLabel(text));
|
||||||
|
}
|
||||||
|
if (g_qtUsePhysicalDpi) {
|
||||||
|
QString text = QString("QT_USE_PHYSICAL_DPI=") + qgetenv("QT_USE_PHYSICAL_DPI");
|
||||||
|
layout->addWidget(new QLabel(text));
|
||||||
|
}
|
||||||
|
if (g_qtFontDpi) {
|
||||||
|
QString text = QString("QT_FONT_DPI=") + qgetenv("QT_FONT_DPI");
|
||||||
|
layout->addWidget(new QLabel(text));
|
||||||
|
}
|
||||||
|
if (g_qtScaleFactorRoundingPolicy) {
|
||||||
|
QString text = QString("QT_SCALE_FACTOR_ROUNDING_POLICY=") + qgetenv("QT_SCALE_FACTOR_ROUNDING_POLICY");
|
||||||
layout->addWidget(new QLabel(text));
|
layout->addWidget(new QLabel(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
layout->addStretch();
|
}
|
||||||
layout->addWidget(screenLabel);
|
|
||||||
layout->addWidget(platformDpiLabel);
|
|
||||||
layout->addWidget(plarformDprLabel);
|
|
||||||
|
|
||||||
auto updateValues = [=]() {
|
auto updateValues = [=]() {
|
||||||
dprValue->setText(QString("%1").arg(devicePixelRatioF()));
|
dprValue->setText(QString("%1").arg(devicePixelRatioF()));
|
||||||
|
windowDpiLabel->setText(QString("QWindow DPI: %1").arg(logicalDpiX()));
|
||||||
dpiLabel->setText(QString("Logical DPI: %1").arg(logicalDpiX()));
|
dpiLabel->setText(QString("Logical DPI: %1").arg(logicalDpiX()));
|
||||||
sizeLabel->setText(QString("Window size: %1 %2").arg(width()).arg(height()));
|
sizeLabel->setText(QString("QWindow size: %1 %2").arg(width()).arg(height()));
|
||||||
|
|
||||||
|
QPlatformWindow *platformWindow = windowHandle()->handle();
|
||||||
|
nativeSizeLabel->setText(QString("native size %1 %2").arg(platformWindow->geometry().width())
|
||||||
|
.arg(platformWindow->geometry().height()));
|
||||||
QPlatformScreen *pscreen = screen()->handle();
|
QPlatformScreen *pscreen = screen()->handle();
|
||||||
|
if (g_qtUsePhysicalDpi) {
|
||||||
|
int physicalDpi = qRound(pscreen->geometry().width() / pscreen->physicalSize().width() * qreal(25.4));
|
||||||
|
platformDpiLabel->setText(QString("Native Physical DPI: %1").arg(physicalDpi));
|
||||||
|
} else {
|
||||||
|
platformDpiLabel->setText(QString("native logical DPI: %1").arg(pscreen->logicalDpi().first));
|
||||||
|
}
|
||||||
|
|
||||||
if (g_qtUsePhysicalDpi)
|
windowDprLabel->setText(QString("QWindow DPR: %1").arg(windowHandle()->devicePixelRatio()));
|
||||||
platformDpiLabel->setText(QString("Native Physical DPI: TODO"));
|
plarformDprLabel->setText(QString("native DPR: %1").arg(pscreen->devicePixelRatio()));
|
||||||
else
|
|
||||||
platformDpiLabel->setText(QString("Native Logical DPI: %1").arg(pscreen->logicalDpi().first));
|
|
||||||
|
|
||||||
plarformDprLabel->setText(QString("Native Device Pixel Ratio: %1").arg(pscreen->devicePixelRatio()));
|
|
||||||
|
|
||||||
screenLabel->setText(QString("Current Screen: %1").arg(screen()->name()));
|
screenLabel->setText(QString("Current Screen: %1").arg(screen()->name()));
|
||||||
|
qtScaleFactorLabel->setText(QString("Qt Internal Scale Factor: %1").arg(QHighDpiScaling::factor(windowHandle())));
|
||||||
|
eventsLabel->setText(QString(m_eventsText));
|
||||||
};
|
};
|
||||||
m_updateFn = updateValues;
|
m_updateFn = updateValues;
|
||||||
|
|
||||||
m_clearFn = [=]() {
|
m_clearFn = [=]() {
|
||||||
dprValue->setText(QString(""));
|
dprValue->setText(QString(""));
|
||||||
|
m_eventsText.clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
create();
|
create();
|
||||||
|
|
||||||
QObject::connect(this->windowHandle(), &QWindow::screenChanged, [updateValues](QScreen *screen){
|
QObject::connect(this->windowHandle(), &QWindow::screenChanged, [updateValues, this](QScreen *screen){
|
||||||
Q_UNUSED(screen);
|
Q_UNUSED(screen);
|
||||||
|
this->m_eventsText.prepend(QString("ScreenChange "));
|
||||||
|
this->m_eventsText.truncate(80);
|
||||||
updateValues();
|
updateValues();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -142,6 +229,12 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void paintEvent(QPaintEvent *) override {
|
void paintEvent(QPaintEvent *) override {
|
||||||
|
|
||||||
|
// Update the UI in the paint event - normally not good
|
||||||
|
// practice but it looks like we can get away with it here
|
||||||
|
this->m_eventsText.prepend(QString("Paint "));
|
||||||
|
this->m_eventsText.truncate(80);
|
||||||
|
|
||||||
// Dpr change should trigger a repaint, update display values here
|
// Dpr change should trigger a repaint, update display values here
|
||||||
if (m_currentDpr == devicePixelRatioF())
|
if (m_currentDpr == devicePixelRatioF())
|
||||||
return;
|
return;
|
||||||
@ -150,7 +243,10 @@ public:
|
|||||||
m_updateFn();
|
m_updateFn();
|
||||||
}
|
}
|
||||||
|
|
||||||
void resizeEvent(QResizeEvent *) override {
|
void resizeEvent(QResizeEvent *event) override {
|
||||||
|
QSize size = event->size();
|
||||||
|
m_eventsText.prepend(QString("Resize(%1 %2) ").arg(size.width()).arg(size.height()));
|
||||||
|
m_eventsText.truncate(80);
|
||||||
m_updateFn();
|
m_updateFn();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,18 +264,15 @@ int main(int argc, char **argv) {
|
|||||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||||
|
|
||||||
// react to (some) high-dpi eviornment variables.
|
// Display any set high-dpi eviornment variable.
|
||||||
g_qtUsePhysicalDpi = qgetenv("QT_USE_PHYSICAL_DPI") == QByteArray("1");
|
|
||||||
g_qtScaleFactor = qEnvironmentVariableIsSet("QT_SCALE_FACTOR");
|
g_qtScaleFactor = qEnvironmentVariableIsSet("QT_SCALE_FACTOR");
|
||||||
|
g_qtUsePhysicalDpi = qgetenv("QT_USE_PHYSICAL_DPI") == QByteArray("1");
|
||||||
|
g_qtFontDpi = qEnvironmentVariableIsSet("QT_FONT_DPI");
|
||||||
|
g_qtScaleFactorRoundingPolicy = qEnvironmentVariableIsSet("QT_SCALE_FACTOR_ROUNDING_POLICY");
|
||||||
|
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
DprGadget dprGadget;
|
DprGadget dprGadget;
|
||||||
|
|
||||||
// Set initial size. We expect this size to be preserved across screen
|
|
||||||
// and DPI changes
|
|
||||||
dprGadget.resize(560, 380);
|
|
||||||
|
|
||||||
dprGadget.show();
|
dprGadget.show();
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user