Info about scaling and screen resolution

This commit is contained in:
Klaus Basan
2019-06-09 01:00:14 +02:00
parent abe800cc16
commit 443bf03ae6
6 changed files with 119 additions and 2 deletions

View File

@@ -8,7 +8,9 @@
#include "aboutdialog.h"
#include "ui_aboutdialog.h"
#include "blackgui/guiapplication.h"
#include "blackgui/guiutility.h"
namespace BlackGui
{
@@ -27,10 +29,13 @@ namespace BlackGui
void CAboutDialog::init()
{
if (!sGui || sGui->isShuttingDown()) { return; }
ui->lbl_VersionValue->setText(sGui->getApplicationNameVersionDetailed());
ui->pte_Info->setPlainText(sGui->getInfoString("\n"));
ui->pte_Info->appendPlainText("\nSetup follows:\n----");
ui->pte_Info->appendPlainText(sGui->getGlobalSetup().convertToQString("\n", true));
ui->pte_Info->appendPlainText("\nScreen info follows:\n----");
ui->pte_Info->appendPlainText(CGuiUtility::screenInformation("\n"));
}
} // ns
} // ns

View File

@@ -8,6 +8,10 @@
#include "scalescreenfactor.h"
#include "ui_scalescreenfactor.h"
#include "guiutility.h"
#include <QDesktopWidget>
#include <QScreen>
#include <QIntValidator>
namespace BlackGui
@@ -21,8 +25,23 @@ namespace BlackGui
ui->setupUi(this);
this->setMinMax(50, 150);
connect(ui->hs_Factor, &QSlider::valueChanged, this, &CScaleScreenFactor::onSliderChanged);
connect(ui->hs_Factor, &QSlider::valueChanged, this, &CScaleScreenFactor::onSliderChanged);
connect(ui->le_Factor, &QLineEdit::editingFinished, this, &CScaleScreenFactor::onEditFinished);
const QDesktopWidget *w = qApp->desktop();
this->setToolTip(
QStringLiteral(
"Scaling only works on High DPI screens\n"
"Width/height: %1/%2 Ratio: %3\n"
"Logical DPI x/y: %4/%5\n"
"Physical DPI x/y: %6/%7\n"
"width/height MM: %8/%9"
).
arg(w->width()).arg(w->height()).arg(QString::number(CGuiUtility::mainApplicationWidgetPixelRatio(), 'f', 2)).
arg(w->logicalDpiX()).arg(w->logicalDpiY()).
arg(w->physicalDpiX()).arg(w->physicalDpiY()).
arg(w->widthMM()).arg(w->heightMM())
);
}
CScaleScreenFactor::~CScaleScreenFactor()

View File

@@ -32,7 +32,7 @@ namespace BlackGui
explicit CScaleScreenFactor(QWidget *parent = nullptr);
//! Destructor
virtual ~CScaleScreenFactor();
virtual ~CScaleScreenFactor() override;
//! Minimum/maximum values
void setMinMax(int min, int max);

View File

@@ -13,6 +13,9 @@
<property name="windowTitle">
<string>Scale screen factor</string>
</property>
<property name="toolTip">
<string>Scaling works only on High DPI screens</string>
</property>
<layout class="QHBoxLayout" name="hl_ScaleScreenFactor" stretch="0,1,5">
<property name="leftMargin">
<number>1</number>

View File

@@ -32,11 +32,13 @@
#include <QThreadStorage>
#include <QWidget>
#include <QWizard>
#include <QScreen>
#include <QLabel>
#include <QTimer>
#include <Qt>
#include <QPointer>
#include <QtGlobal>
#include <QStringBuilder>
#include <QGraphicsOpacityEffect>
#include <QPropertyAnimation>
#include <QDesktopWidget>
@@ -118,6 +120,81 @@ namespace BlackGui
return (mw && mw->isFrameless());
}
QString CGuiUtility::screenInformation(const QString &separator)
{
QString i = u"Number of screens: " % QString::number(QGuiApplication::screens().size()) % separator %
u"Primary screen: " % QGuiApplication::primaryScreen()->name();
for (const QScreen *screen : QGuiApplication::screens())
{
i += separator %
u"Information for screen: " % screen->name() % separator %
u"Available geometry: " % rectAsString(screen->availableGeometry()) % separator %
u"Available size: " % sizeAsString(screen->availableSize()) % separator %
u"Available virtual geometry: " % rectAsString(screen->availableVirtualGeometry()) % separator %
u"Available virtual size: " % sizeAsString(screen->availableVirtualSize()) % separator %
u"Device ratio: " % QString::number(screen->devicePixelRatio()) % separator %
u"Depth: " % QString::number(screen->depth()) % u"bits" % separator %
u"Geometry: " % rectAsString(screen->geometry()) % separator %
u"Logical DPI: " % QString::number(screen->logicalDotsPerInch()) % separator %
u"Logical DPI X: " % QString::number(screen->logicalDotsPerInchX()) % separator %
u"Logical DPI Y: " % QString::number(screen->logicalDotsPerInchY()) % separator %
u"Orientation: " % orientationAsString(screen->orientation()) % separator %
u"Physical DPI: " % QString::number(screen->physicalDotsPerInch()) % separator %
u"Physical DPI X: " % QString::number(screen->physicalDotsPerInchX()) % separator %
u"Physical DPI Y: " % QString::number(screen->physicalDotsPerInchY()) % separator %
u"Physical size: " % sizeAsString(screen->physicalSize()) % u"mm" % separator %
u"Primary orientation: " % orientationAsString(screen->primaryOrientation()) % separator %
u"Refresh rate: " % QString::number(screen->refreshRate()) % u"Hz" %
u"Size: " % sizeAsString(screen->size()) % separator %
u"Virtual geometry: " % rectAsString(screen->virtualGeometry()) % separator %
u"Virtual size: " % sizeAsString(screen->virtualSize());
}
return i;
}
const QString &CGuiUtility::orientationAsString(Qt::ScreenOrientation orientation)
{
static const QString pr("Primary");
static const QString la("Landscape");
static const QString po("Portrait");
static const QString il("Inverted landscape");
static const QString ip("Inverted portrait");
switch (orientation)
{
case Qt::PrimaryOrientation : return pr;
case Qt::LandscapeOrientation : return la;
case Qt::PortraitOrientation : return po;
case Qt::InvertedLandscapeOrientation : return il;
case Qt::InvertedPortraitOrientation : return ip;
default : break;
}
static const QString unknown("Unknown");
return unknown;
}
const QString CGuiUtility::rectAsString(const QRect &rect)
{
return QStringLiteral("x: %1 y: %2 w: %3 h: %4").arg(rect.x()).arg(rect.y()).arg(rect.width()).arg(rect.height());
}
const QString CGuiUtility::rectAsString(const QRectF &rect)
{
return QStringLiteral("x: %1 y: %2 w: %3 h: %4").arg(rect.x()).arg(rect.y()).arg(rect.width()).arg(rect.height());
}
const QString CGuiUtility::sizeAsString(const QSize &size)
{
return QStringLiteral("w: %1 h: %2").arg(size.width()).arg(size.height());
}
const QString CGuiUtility::sizeAsString(const QSizeF &size)
{
return QStringLiteral("w: %1 h: %2").arg(size.width()).arg(size.height());
}
static QThreadStorage<QRegularExpression> tsRegex;
bool CGuiUtility::lenientTitleComparison(const QString &title, const QString &comparison)

View File

@@ -69,6 +69,19 @@ namespace BlackGui
//! Is main window frameless?
static bool isMainWindowFrameless();
//! Info about screens
static QString screenInformation(const QString &separator = "\n");
//! Orientation as string
static const QString &orientationAsString(Qt::ScreenOrientation orientation);
//! QRect, QSize as string @{
static const QString rectAsString(const QRect &rect);
static const QString rectAsString(const QRectF &rect);
static const QString sizeAsString(const QSize &size);
static const QString sizeAsString(const QSizeF &size);
//! @}
//! Top level widgets with names
static QWidgetList topLevelApplicationWidgetsWithName();