diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index 665304725..6028ca9da 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -55,6 +55,7 @@ "ktg_net_speed_boost_medium": "Medium", "ktg_net_speed_boost_big": "Big", "ktg_settings_system": "System", + "ktg_settings_qt_scale": "Qt scaling engine", "ktg_settings_other": "Other", "ktg_profile_copy_id": "Copy ID", "ktg_profile_bot_id": "Bot ID", diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index 74bccf235..199d371fa 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "core/application.h" #include "kotato/kotato_lang.h" +#include "kotato/kotato_settings.h" #include "data/data_abstract_structure.h" #include "data/data_photo.h" #include "data/data_document.h" @@ -222,9 +223,16 @@ void Application::run() { _notifications = std::make_unique(); startLocalStorage(); - ValidateScale(); Kotato::Lang::Load(Lang::GetInstance().baseId(), Lang::GetInstance().id()); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + if (!::Kotato::JsonSettings::GetBool("qt_scale")) { +#endif + ValidateScale(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + } +#endif + refreshGlobalProxy(); // Depends on app settings being read. if (Local::oldSettingsVersion() < AppVersion) { diff --git a/Telegram/SourceFiles/core/launcher.cpp b/Telegram/SourceFiles/core/launcher.cpp index 2f2d8d5e7..fbbbbca12 100644 --- a/Telegram/SourceFiles/core/launcher.cpp +++ b/Telegram/SourceFiles/core/launcher.cpp @@ -336,6 +336,13 @@ int Launcher::exec() { base::options::init(cWorkingDir() + "tdata/experimental_options.json"); Kotato::JsonSettings::Load(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + if (::Kotato::JsonSettings::GetBool("qt_scale")) { + QApplication::setAttribute(Qt::AA_DisableHighDpiScaling, false); + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true); + } +#endif + if (Logs::DebugEnabled()) { const auto openalLogPath = QDir::toNativeSeparators( cWorkingDir() + qsl("DebugLogs/last_openal_log.txt")); diff --git a/Telegram/SourceFiles/core/sandbox.cpp b/Telegram/SourceFiles/core/sandbox.cpp index 1641a58fc..bff7ba13e 100644 --- a/Telegram/SourceFiles/core/sandbox.cpp +++ b/Telegram/SourceFiles/core/sandbox.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "core/sandbox.h" +#include "kotato/kotato_settings.h" #include "base/platform/base_platform_info.h" #include "platform/platform_specific.h" #include "mainwidget.h" @@ -240,7 +241,11 @@ void Sandbox::setupScreenScale() { } const auto ratio = devicePixelRatio(); - if (ratio > 1.) { + if (ratio > 1. +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + || ::Kotato::JsonSettings::GetBool("qt_scale") +#endif + ) { if (!Platform::IsMac() || (ratio != 2.)) { LOG(("Found non-trivial Device Pixel Ratio: %1").arg(ratio)); LOG(("Environmental variables: QT_DEVICE_PIXEL_RATIO='%1'").arg(qEnvironmentVariable("QT_DEVICE_PIXEL_RATIO"))); @@ -249,7 +254,11 @@ void Sandbox::setupScreenScale() { LOG(("Environmental variables: QT_SCREEN_SCALE_FACTORS='%1'").arg(qEnvironmentVariable("QT_SCREEN_SCALE_FACTORS"))); } style::SetDevicePixelRatio(int(ratio)); - if (Platform::IsMac() && ratio == 2.) { + if (Platform::IsMac() && ratio == 2. +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + && !::Kotato::JsonSettings::GetBool("qt_scale") +#endif + ) { cSetScreenScale(110); // 110% for Retina screens by default. } else { cSetScreenScale(style::kScaleDefault); @@ -366,7 +375,12 @@ void Sandbox::singleInstanceChecked() { LOG(("App Info: Detected another instance")); } - Ui::DisableCustomScaling(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + if (!::Kotato::JsonSettings::GetBool("qt_scale")) { + Ui::DisableCustomScaling(); + } +#endif + refreshGlobalProxy(); if (!Logs::started() || !Logs::instanceChecked()) { new NotStartedWindow(); diff --git a/Telegram/SourceFiles/kotato/kotato_settings.cpp b/Telegram/SourceFiles/kotato/kotato_settings.cpp index 5ebf9426e..ca7597585 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings.cpp @@ -370,6 +370,12 @@ const std::map> DefinitionMap { { "always_show_top_userpic", { .type = SettingType::BoolSetting, .defaultValue = false, }}, +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + { "qt_scale", { + .storage = SettingStorage::None, + .type = SettingType::BoolSetting, + .defaultValue = false, }}, +#endif }; using OldOptionKey = QString; diff --git a/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp b/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp index 0111c3893..6abaabf28 100644 --- a/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp +++ b/Telegram/SourceFiles/kotato/kotato_settings_menu.cpp @@ -395,6 +395,28 @@ void SetupKotatoSystem( AddSkip(container); AddSubsectionTitle(container, rktr("ktg_settings_system")); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + AddButton( + container, + rktr("ktg_settings_qt_scale"), + st::settingsButton + )->toggleOn( + rpl::single(::Kotato::JsonSettings::GetBoolWithPending("qt_scale")) + )->toggledValue( + ) | rpl::filter([](bool enabled) { + return (enabled != ::Kotato::JsonSettings::GetBoolWithPending("qt_scale")); + }) | rpl::start_with_next([=](bool enabled) { + ::Kotato::JsonSettings::SetAfterRestart("qt_scale", enabled); + ::Kotato::JsonSettings::Write(); + + Ui::show(Box( + tr::lng_settings_need_restart(tr::now), + tr::lng_settings_restart_now(tr::now), + tr::lng_settings_restart_later(tr::now), + [] { Core::Restart(); })); + }, container->lifetime()); +#endif // Qt < 6.0.0 + AddSkip(container); } diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index 4018f1f4f..f9b6b4890 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/settings_main.h" #include "kotato/kotato_lang.h" +#include "kotato/kotato_settings.h" #include "settings/settings_common.h" #include "settings/settings_codes.h" #include "settings/settings_chat.h" @@ -173,7 +174,11 @@ void SetupSections( } bool HasInterfaceScale() { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + return !::Kotato::JsonSettings::GetBool("qt_scale"); +#else return true; +#endif } void SetupInterfaceScale(