Skip to content

Commit 18acef8

Browse files
ilya-fedinjohn-preston
authored andcommitted
Add experimental option for QT_WIDGETS_HIGHDPI_DOWNSCALE
1 parent 6022c79 commit 18acef8

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

Telegram/SourceFiles/core/launcher.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2526
namespace Core {
2627
namespace {
2728

2829
uint64 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+
3043
base::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

296309
const char kOptionFractionalScalingEnabled[] = "fractional-scaling-enabled";
310+
const char kOptionHighDpiDownscale[] = "high-dpi-downscale";
297311
const char kOptionFreeType[] = "freetype";
298312

299313
Launcher *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 {

Telegram/SourceFiles/core/launcher.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ For license and copyright information please follow this link:
1212
namespace Core {
1313

1414
extern const char kOptionFractionalScalingEnabled[];
15+
extern const char kOptionHighDpiDownscale[];
1516
extern const char kOptionFreeType[];
1617

1718
class Launcher {

Telegram/SourceFiles/settings/settings_experimental.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ void SetupExperimental(
150150
addToggle(ChatHelpers::kOptionTabbedPanelShowOnClick);
151151
addToggle(Dialogs::kOptionForumHideChatsList);
152152
addToggle(Core::kOptionFractionalScalingEnabled);
153+
addToggle(Core::kOptionHighDpiDownscale);
153154
addToggle(Window::kOptionViewProfileInChatsListContextMenu);
154155
addToggle(Info::Profile::kOptionShowPeerIdBelowAbout);
155156
addToggle(Info::Profile::kOptionShowChannelJoinedBelowAbout);

0 commit comments

Comments
 (0)