mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-21 04:45:31 +08:00
Allow to scale GUI on high DPI screens
This commit is contained in:
@@ -85,6 +85,7 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
this->addWindowModeOption();
|
this->addWindowModeOption();
|
||||||
this->addWindowResetSizeOption();
|
this->addWindowResetSizeOption();
|
||||||
|
this->addWindowScaleSizeOption();
|
||||||
|
|
||||||
// notify when app goes down
|
// notify when app goes down
|
||||||
connect(qGuiApp, &QGuiApplication::lastWindowClosed, this, &CGuiApplication::gracefulShutdown);
|
connect(qGuiApp, &QGuiApplication::lastWindowClosed, this, &CGuiApplication::gracefulShutdown);
|
||||||
@@ -117,9 +118,7 @@ namespace BlackGui
|
|||||||
|
|
||||||
void CGuiApplication::addWindowModeOption()
|
void CGuiApplication::addWindowModeOption()
|
||||||
{
|
{
|
||||||
m_cmdWindowMode = QCommandLineOption(QStringList() << "w" << "window",
|
m_cmdWindowMode = QCommandLineOption({"w", "window"}, QCoreApplication::translate("main", "Windows: (n)ormal, (f)rameless, (t)ool."), "windowtype");
|
||||||
QCoreApplication::translate("main", "Windows: (n)ormal, (f)rameless, (t)ool."),
|
|
||||||
"windowtype");
|
|
||||||
this->addParserOption(m_cmdWindowMode);
|
this->addParserOption(m_cmdWindowMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,6 +128,14 @@ namespace BlackGui
|
|||||||
this->addParserOption(m_cmdWindowSizeReset);
|
this->addParserOption(m_cmdWindowSizeReset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CGuiApplication::addWindowScaleSizeOption()
|
||||||
|
{
|
||||||
|
// just added here to display it in help
|
||||||
|
// parseScaleFactor() is used since it is needed upfront (before application is created)
|
||||||
|
m_cmdWindowScaleSize = QCommandLineOption("scale", QCoreApplication::translate("main", "Scale: number."), "scalevalue");
|
||||||
|
this->addParserOption(m_cmdWindowScaleSize);
|
||||||
|
}
|
||||||
|
|
||||||
void CGuiApplication::addWindowStateOption()
|
void CGuiApplication::addWindowStateOption()
|
||||||
{
|
{
|
||||||
m_cmdWindowStateMinimized = QCommandLineOption({{"m", "minimized"}, QCoreApplication::translate("main", "Start minimized in system tray.")});
|
m_cmdWindowStateMinimized = QCommandLineOption({{"m", "minimized"}, QCoreApplication::translate("main", "Start minimized in system tray.")});
|
||||||
@@ -259,7 +266,7 @@ namespace BlackGui
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support
|
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support
|
||||||
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); //HiDPI pixmaps
|
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); // HiDPI pixmaps
|
||||||
const QString sf = QString::number(scaleFactor, 'f', 2);
|
const QString sf = QString::number(scaleFactor, 'f', 2);
|
||||||
qputenv("QT_SCALE_FACTOR", sf.toLatin1());
|
qputenv("QT_SCALE_FACTOR", sf.toLatin1());
|
||||||
}
|
}
|
||||||
@@ -371,6 +378,22 @@ namespace BlackGui
|
|||||||
return html;
|
return html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qreal CGuiApplication::parseScaleFactor(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
for (int i = 1; i < argc; ++i)
|
||||||
|
{
|
||||||
|
if (qstrcmp(argv[i], "--scale") == 0 || qstrcmp(argv[i], "-scale") == 0)
|
||||||
|
{
|
||||||
|
if (i + 1 >= argc) { return -1.0; } // no value
|
||||||
|
const QString factor(argv[i + 1]);
|
||||||
|
bool ok;
|
||||||
|
qreal f = factor.toFloat(&ok);
|
||||||
|
return ok ? f : -1.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1.0;
|
||||||
|
}
|
||||||
|
|
||||||
bool CGuiApplication::cmdLineErrorMessage(const QString &errorMessage, bool retry) const
|
bool CGuiApplication::cmdLineErrorMessage(const QString &errorMessage, bool retry) const
|
||||||
{
|
{
|
||||||
const QString helpText(beautifyHelpMessage(m_parser.helpText()));
|
const QString helpText(beautifyHelpMessage(m_parser.helpText()));
|
||||||
|
|||||||
@@ -93,9 +93,12 @@ namespace BlackGui
|
|||||||
//! CMD line arguments
|
//! CMD line arguments
|
||||||
void addWindowModeOption();
|
void addWindowModeOption();
|
||||||
|
|
||||||
//! CMD line arguments
|
//! CMD line arguments (reset size store)
|
||||||
void addWindowResetSizeOption();
|
void addWindowResetSizeOption();
|
||||||
|
|
||||||
|
//! CMD line arguments (scale size on DPI screens)
|
||||||
|
void addWindowScaleSizeOption();
|
||||||
|
|
||||||
//! Window state
|
//! Window state
|
||||||
Qt::WindowState getWindowState() const;
|
Qt::WindowState getWindowState() const;
|
||||||
|
|
||||||
@@ -234,6 +237,9 @@ namespace BlackGui
|
|||||||
//! Uses the high DPI support?
|
//! Uses the high DPI support?
|
||||||
static bool isUsingHighDpiScreenSupport();
|
static bool isUsingHighDpiScreenSupport();
|
||||||
|
|
||||||
|
//! Parse scale factor if any
|
||||||
|
static qreal parseScaleFactor(int argc, char *argv[]);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
//! Style sheet changed
|
//! Style sheet changed
|
||||||
void styleSheetsChanged();
|
void styleSheetsChanged();
|
||||||
@@ -276,8 +282,9 @@ namespace BlackGui
|
|||||||
int m_minWidthChars = -1; //!< min. width characters (based on current font metrics)
|
int m_minWidthChars = -1; //!< min. width characters (based on current font metrics)
|
||||||
int m_minHeightChars = -1; //!< min. height characters (based on current font metrics)
|
int m_minHeightChars = -1; //!< min. height characters (based on current font metrics)
|
||||||
QCommandLineOption m_cmdWindowStateMinimized { "empty" }; //!< window state (minimized)
|
QCommandLineOption m_cmdWindowStateMinimized { "empty" }; //!< window state (minimized)
|
||||||
QCommandLineOption m_cmdWindowMode { "empty" }; //!< window mode (flags: frameless ...)
|
QCommandLineOption m_cmdWindowMode { "empty" }; //!< window mode (flags: frameless ...)
|
||||||
QCommandLineOption m_cmdWindowSizeReset { "empty" }; //!< window size resizing
|
QCommandLineOption m_cmdWindowSizeReset { "empty" }; //!< window size reset
|
||||||
|
QCommandLineOption m_cmdWindowScaleSize { "empty" }; //!< window scale size
|
||||||
CStyleSheetUtility m_styleSheetUtility {{}, this}; //!< style sheet utility
|
CStyleSheetUtility m_styleSheetUtility {{}, this}; //!< style sheet utility
|
||||||
bool m_uiSetupCompleted = false; //!< ui setup completed
|
bool m_uiSetupCompleted = false; //!< ui setup completed
|
||||||
bool m_saveMainWidgetState = true; //!< save/restore main widget's state
|
bool m_saveMainWidgetState = true; //!< save/restore main widget's state
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ using namespace BlackGui;
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
//! [SwiftApplicationDemo]
|
//! [SwiftApplicationDemo]
|
||||||
CGuiApplication::highDpiScreenSupport();
|
CGuiApplication::highDpiScreenSupport(CGuiApplication::parseScaleFactor(argc, argv));
|
||||||
QApplication qa(argc, argv);
|
QApplication qa(argc, argv);
|
||||||
Q_UNUSED(qa); // init of qa is required, but qa not used
|
Q_UNUSED(qa); // init of qa is required, but qa not used
|
||||||
CGuiApplication a(CApplicationInfo::swiftCore(), CApplicationInfo::PilotClientCore, CIcons::swiftCore24());
|
CGuiApplication a(CApplicationInfo::swiftCore(), CApplicationInfo::PilotClientCore, CIcons::swiftCore24());
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ using namespace BlackGui;
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
CGuiApplication::highDpiScreenSupport();
|
CGuiApplication::highDpiScreenSupport(CGuiApplication::parseScaleFactor(argc, argv));
|
||||||
QApplication qa(argc, argv);
|
QApplication qa(argc, argv);
|
||||||
Q_UNUSED(qa);
|
Q_UNUSED(qa);
|
||||||
CGuiApplication a(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool, CIcons::swiftDatabase48());
|
CGuiApplication a(CApplicationInfo::swiftMappingTool(), CApplicationInfo::MappingTool, CIcons::swiftDatabase48());
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ using namespace BlackCore;
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
//! [SwiftApplicationDemo]
|
//! [SwiftApplicationDemo]
|
||||||
CGuiApplication::highDpiScreenSupport();
|
CGuiApplication::highDpiScreenSupport(CGuiApplication::parseScaleFactor(argc, argv));
|
||||||
QApplication qa(argc, argv);
|
QApplication qa(argc, argv);
|
||||||
Q_UNUSED(qa); // application init needed
|
Q_UNUSED(qa); // application init needed
|
||||||
CSwiftGuiStdApplication a; // application with contexts
|
CSwiftGuiStdApplication a; // application with contexts
|
||||||
|
|||||||
@@ -30,12 +30,12 @@ using namespace BlackCore::Db;
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
//! [SwiftApplicationDemo]
|
//! [SwiftApplicationDemo]
|
||||||
CGuiApplication::highDpiScreenSupport();
|
CGuiApplication::highDpiScreenSupport(CGuiApplication::parseScaleFactor(argc, argv));
|
||||||
QApplication qa(argc, argv); // needed
|
QApplication qa(argc, argv); // needed
|
||||||
Q_UNUSED(qa);
|
Q_UNUSED(qa);
|
||||||
CGuiApplication a(CApplicationInfo::swiftLauncher(), CApplicationInfo::Laucher, CIcons::swiftLauncher1024());
|
CGuiApplication a(CApplicationInfo::swiftLauncher(), CApplicationInfo::Laucher, CIcons::swiftLauncher1024());
|
||||||
a.addVatlibOptions(); // so it can be passed (hand over) to started applications
|
a.addVatlibOptions(); // so it can be passed (hand over) to started applications
|
||||||
a.addParserOption({{"i", "installer"}, QCoreApplication::translate("main", "Installer setup.") });
|
a.addParserOption({{"i", "installer"}, QCoreApplication::translate("main", "Installer setup.")});
|
||||||
if (!a.parseAndSynchronizeSetup()) { return EXIT_FAILURE; }
|
if (!a.parseAndSynchronizeSetup()) { return EXIT_FAILURE; }
|
||||||
a.useWebDataServices(BlackCore::CWebReaderFlags::AllSwiftDbReaders, CDatabaseReaderConfigList::forLauncher());
|
a.useWebDataServices(BlackCore::CWebReaderFlags::AllSwiftDbReaders, CDatabaseReaderConfigList::forLauncher());
|
||||||
if (!a.start())
|
if (!a.start())
|
||||||
|
|||||||
Reference in New Issue
Block a user