[Option][GUI] Qt scale

This commit is contained in:
Eric Kotato 2022-08-30 14:40:20 +03:00
parent c0462c21b6
commit 6712cccf21
7 changed files with 67 additions and 4 deletions

View file

@ -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",

View file

@ -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<Window::Notifications::System>();
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) {

View file

@ -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"));

View file

@ -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();

View file

@ -370,6 +370,12 @@ const std::map<QString, Definition, std::greater<QString>> 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;

View file

@ -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<Ui::ConfirmBox>(
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);
}

View file

@ -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(