mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-02 15:15:39 +08:00
Ref T220, some changes in gui utility
* use qreal font metrics * pixel ratio
This commit is contained in:
@@ -34,6 +34,7 @@
|
|||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
#include <QGraphicsOpacityEffect>
|
#include <QGraphicsOpacityEffect>
|
||||||
#include <QPropertyAnimation>
|
#include <QPropertyAnimation>
|
||||||
|
#include <QDesktopWidget>
|
||||||
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
|
|
||||||
@@ -89,6 +90,22 @@ namespace BlackGui
|
|||||||
return CGuiUtility::s_mainApplicationWidget;
|
return CGuiUtility::s_mainApplicationWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qreal CGuiUtility::mainApplicationWidgetPixelRatio()
|
||||||
|
{
|
||||||
|
const QWidget *mw = CGuiUtility::mainApplicationWidget();
|
||||||
|
if (mw) { return mw->devicePixelRatio(); }
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize CGuiUtility::desktopSize()
|
||||||
|
{
|
||||||
|
const QWidget *mw = CGuiUtility::mainApplicationWidget();
|
||||||
|
if (mw) { return QApplication::desktop()->screenGeometry(mw).size(); }
|
||||||
|
|
||||||
|
// main screen
|
||||||
|
return QApplication::desktop()->screenGeometry().size();
|
||||||
|
}
|
||||||
|
|
||||||
bool CGuiUtility::isMainWindowFrameless()
|
bool CGuiUtility::isMainWindowFrameless()
|
||||||
{
|
{
|
||||||
const CEnableForFramelessWindow *mw = CGuiUtility::mainFramelessEnabledWindow();
|
const CEnableForFramelessWindow *mw = CGuiUtility::mainFramelessEnabledWindow();
|
||||||
@@ -424,34 +441,67 @@ namespace BlackGui
|
|||||||
return QApplication::font();
|
return QApplication::font();
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize CGuiUtility::fontMetrics80Chars()
|
QSizeF CGuiUtility::fontMetrics80Chars(bool withRatio)
|
||||||
{
|
{
|
||||||
static const QString s("01234567890123456789012345678901234567890123456789012345678901234567890123456789");
|
static const QString s("01234567890123456789012345678901234567890123456789012345678901234567890123456789");
|
||||||
const QFontMetrics fm = CGuiUtility::currentFontMetrics();
|
const QFontMetricsF fm = CGuiUtility::currentFontMetricsF();
|
||||||
const int w = fm.width(s);
|
const qreal scale = withRatio ? CGuiUtility::mainApplicationWidgetPixelRatio() : 1.0;
|
||||||
const int h = fm.height();
|
const qreal w = fm.width(s) * scale;
|
||||||
return QSize(w, h);
|
const qreal h = fm.height() * scale;
|
||||||
|
return QSizeF(w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize CGuiUtility::fontMetricsLazyDog43Chars()
|
QSizeF CGuiUtility::fontMetricsLazyDog43Chars(bool withRatio)
|
||||||
{
|
{
|
||||||
// 43 characters 0123456789012345678901234567890123456789012
|
// 43 characters 0123456789012345678901234567890123456789012
|
||||||
static const QString s("The quick brown fox jumps over the lazy dog");
|
static const QString s("The quick brown fox jumps over the lazy dog");
|
||||||
const QFontMetrics fm = CGuiUtility::currentFontMetrics();
|
const QFontMetricsF fm = CGuiUtility::currentFontMetrics();
|
||||||
const int w = fm.width(s);
|
const qreal scale = withRatio ? CGuiUtility::mainApplicationWidgetPixelRatio() : 1.0;
|
||||||
const int h = fm.height();
|
const qreal w = fm.width(s) * scale;
|
||||||
return QSize(w, h);
|
const qreal h = fm.height() * scale;
|
||||||
|
return QSizeF(w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize CGuiUtility::fontMetricsEstimateSize(int xCharacters, int yCharacters)
|
QSizeF CGuiUtility::fontMetricsEstimateSize(int xCharacters, int yCharacters, bool withRatio)
|
||||||
{
|
{
|
||||||
// 1920/1080: 560/16 256/16 => 530/960
|
// 1920/1080: 560/16 256/16 => 530/960
|
||||||
// 3840/2160: 400/10 178/10 => 375/600
|
// 3840/2160: 400/10 178/10 => 375/600
|
||||||
const QSize s1 = CGuiUtility::fontMetrics80Chars();
|
const QSizeF s1 = CGuiUtility::fontMetrics80Chars(withRatio);
|
||||||
const QSize s2 = CGuiUtility::fontMetricsLazyDog43Chars();
|
const QSizeF s2 = CGuiUtility::fontMetricsLazyDog43Chars(withRatio);
|
||||||
const QSize s = s1 + s2;
|
const QSizeF s = s1 + s2;
|
||||||
const int w = s.width() * xCharacters / 123;
|
const qreal w = s.width() * xCharacters / 123;
|
||||||
const int h = s.height() * yCharacters / 2;
|
const qreal h = s.height() * yCharacters / 2;
|
||||||
return QSize(w, h);
|
return QSizeF(w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CGuiUtility::metricsInfo()
|
||||||
|
{
|
||||||
|
static const QString s("%1 %2 %3 | 80 chars: w%4 h%5 | 43 chars: w%6 h%7");
|
||||||
|
const QSizeF s80 = CGuiUtility::fontMetrics80Chars();
|
||||||
|
const QSizeF s43 = CGuiUtility::fontMetricsLazyDog43Chars();
|
||||||
|
|
||||||
|
QString ratio("-");
|
||||||
|
QString desktop("-");
|
||||||
|
|
||||||
|
const QWidget *mainWidget = CGuiUtility::mainApplicationWidget();
|
||||||
|
if (mainWidget)
|
||||||
|
{
|
||||||
|
QSize sd = QApplication::desktop()->screenGeometry().size();
|
||||||
|
desktop = QString("Desktop w%1 w%2").arg(sd.width()).arg(sd.height());
|
||||||
|
ratio = QString("ratio: %1").arg(mainWidget->devicePixelRatioF());
|
||||||
|
}
|
||||||
|
return s.
|
||||||
|
arg(desktop).
|
||||||
|
arg(CGuiUtility::isUsingHighDpiScreenSupport() ? "hi DPI" : "-").
|
||||||
|
arg(ratio).
|
||||||
|
arg(s80.width()).arg(s80.height()).arg(s43.width()).arg(s43.height());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CGuiUtility::isUsingHighDpiScreenSupport()
|
||||||
|
{
|
||||||
|
const QByteArray v = qgetenv("QT_AUTO_SCREEN_SCALE_FACTOR");
|
||||||
|
const QString vs(v);
|
||||||
|
const bool highDpi = stringToBool(vs);
|
||||||
|
return highDpi;
|
||||||
}
|
}
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -46,11 +46,19 @@ namespace BlackGui
|
|||||||
static CEnableForFramelessWindow *mainFramelessEnabledWindow();
|
static CEnableForFramelessWindow *mainFramelessEnabledWindow();
|
||||||
|
|
||||||
//! Register main application window widget if this is known
|
//! Register main application window widget if this is known
|
||||||
|
//! \remark if not set, is is searched from QApplication::topLevelWidgets()
|
||||||
static void registerMainApplicationWidget(QWidget *mainWidget);
|
static void registerMainApplicationWidget(QWidget *mainWidget);
|
||||||
|
|
||||||
//! Main application window widget
|
//! Main application window widget
|
||||||
static QWidget *mainApplicationWidget();
|
static QWidget *mainApplicationWidget();
|
||||||
|
|
||||||
|
//! Device pixel ratio
|
||||||
|
static qreal mainApplicationWidgetPixelRatio();
|
||||||
|
|
||||||
|
//! Desktop size
|
||||||
|
//! might be scaled depending on mainApplicationWidgetPixelRatio
|
||||||
|
static QSize desktopSize();
|
||||||
|
|
||||||
//! Is main window frameless?
|
//! Is main window frameless?
|
||||||
static bool isMainWindowFrameless();
|
static bool isMainWindowFrameless();
|
||||||
|
|
||||||
@@ -145,13 +153,19 @@ namespace BlackGui
|
|||||||
static QFont currentFont();
|
static QFont currentFont();
|
||||||
|
|
||||||
//! 80 characters width/height
|
//! 80 characters width/height
|
||||||
static QSize fontMetrics80Chars();
|
static QSizeF fontMetrics80Chars(bool withRatio = false);
|
||||||
|
|
||||||
//! 43 characters width/height "the quick brown ..."
|
//! 43 characters width/height "the quick brown ..."
|
||||||
static QSize fontMetricsLazyDog43Chars();
|
static QSizeF fontMetricsLazyDog43Chars(bool withRatio = false);
|
||||||
|
|
||||||
//! Estimate size based on current font
|
//! Estimate size based on current font
|
||||||
static QSize fontMetricsEstimateSize(int xCharacters, int yCharacters);
|
static QSizeF fontMetricsEstimateSize(int xCharacters, int yCharacters, bool withRatio = false);
|
||||||
|
|
||||||
|
//! Some info about font metrics
|
||||||
|
static QString metricsInfo();
|
||||||
|
|
||||||
|
//! Using high DPI screen support
|
||||||
|
static bool isUsingHighDpiScreenSupport();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Constructor, use static methods only
|
//! Constructor, use static methods only
|
||||||
|
|||||||
Reference in New Issue
Block a user