@@ -21,12 +21,25 @@ For license and copyright information please follow this link:
2121
2222#include < QtCore/QLoggingCategory>
2323#include < QtCore/QStandardPaths>
24+ #include < QtCore/QLibraryInfo>
2425
2526namespace Core {
2627namespace {
2728
2829uint64 InstallationTag = 0 ;
2930
31+ base::options::toggle OptionHighDpiDownscale ({
32+ .id = kOptionHighDpiDownscale ,
33+ .name = " High DPI downscale" ,
34+ .description = " Follow system interface scale settings exactly"
35+ " (another approach, likely better quality)." ,
36+ .scope = [] {
37+ return !Platform::IsMac ()
38+ && QLibraryInfo::version () >= QVersionNumber (6 , 4 );
39+ },
40+ .restartRequired = true ,
41+ });
42+
3043base::options::toggle OptionFreeType ({
3144 .id = kOptionFreeType ,
3245 .name = " FreeType font engine" ,
@@ -62,7 +75,7 @@ FilteredCommandLineArguments::FilteredCommandLineArguments(
6275 }
6376
6477#if defined Q_OS_WIN || defined Q_OS_MAC
65- if (OptionFreeType.value ()) {
78+ if (OptionFreeType.value () || OptionHighDpiDownscale. value () ) {
6679 pushArgument (" -platform" );
6780#ifdef Q_OS_WIN
6881 pushArgument (" windows:fontengine=freetype" );
@@ -294,6 +307,7 @@ base::options::toggle OptionFractionalScalingEnabled({
294307} // namespace
295308
296309const char kOptionFractionalScalingEnabled [] = " fractional-scaling-enabled" ;
310+ const char kOptionHighDpiDownscale [] = " high-dpi-downscale" ;
297311const char kOptionFreeType [] = " freetype" ;
298312
299313Launcher *Launcher::InstanceSetter::Instance = nullptr ;
@@ -345,7 +359,14 @@ void Launcher::initHighDpi() {
345359 QApplication::setAttribute (Qt::AA_EnableHighDpiScaling, true );
346360#endif // Qt < 6.0.0
347361
348- if (OptionFractionalScalingEnabled.value ()) {
362+ if (OptionHighDpiDownscale.value ()) {
363+ qputenv (" QT_WIDGETS_HIGHDPI_DOWNSCALE" , " 1" );
364+ qputenv (" QT_WIDGETS_RHI" , " 1" );
365+ qputenv (" QT_WIDGETS_RHI_BACKEND" , " opengl" );
366+ }
367+
368+ if (OptionFractionalScalingEnabled.value ()
369+ || OptionHighDpiDownscale.value ()) {
349370 QApplication::setHighDpiScaleFactorRoundingPolicy (
350371 Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
351372 } else {
0 commit comments