mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-07 02:35:33 +08:00
Info about scaling and screen resolution
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user