2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-08-30 22:25:12 +00:00

Add an option to use Qt scale engine (#158)

This commit is contained in:
ilya-fedin
2021-04-01 21:31:06 +00:00
committed by GitHub
parent 93c6a05f60
commit 2a92568954
11 changed files with 57 additions and 7 deletions

View File

@@ -2752,6 +2752,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"ktg_net_speed_boost_big" = "Big"; "ktg_net_speed_boost_big" = "Big";
"ktg_settings_system" = "System"; "ktg_settings_system" = "System";
"ktg_settings_qt_scale" = "Use Qt scale engine";
"ktg_settings_gtk_integration" = "GTK integration"; "ktg_settings_gtk_integration" = "GTK integration";
"ktg_settings_file_dialog_type" = "File dialog"; "ktg_settings_file_dialog_type" = "File dialog";

View File

@@ -67,6 +67,7 @@
"ktg_net_speed_boost_medium": "Medium", "ktg_net_speed_boost_medium": "Medium",
"ktg_net_speed_boost_big": "Big", "ktg_net_speed_boost_big": "Big",
"ktg_settings_system": "System", "ktg_settings_system": "System",
"ktg_settings_qt_scale": "Use Qt scale engine",
"ktg_settings_gtk_integration": "GTK integration", "ktg_settings_gtk_integration": "GTK integration",
"ktg_settings_file_dialog_type": "File dialog", "ktg_settings_file_dialog_type": "File dialog",
"ktg_file_dialog_type_default": "Default", "ktg_file_dialog_type_default": "Default",

View File

@@ -206,7 +206,10 @@ void Application::run() {
startLocalStorage(); startLocalStorage();
Lang::GetInstance().fillDefaultJson(); Lang::GetInstance().fillDefaultJson();
Lang::GetInstance().fillFromJson(); Lang::GetInstance().fillFromJson();
ValidateScale();
if (!cQtScale()) {
ValidateScale();
}
if (Local::oldSettingsVersion() < AppVersion) { if (Local::oldSettingsVersion() < AppVersion) {
psNewVersion(); psNewVersion();

View File

@@ -300,7 +300,11 @@ void Launcher::init() {
QApplication::setApplicationName(qsl("KotatogramDesktop")); QApplication::setApplicationName(qsl("KotatogramDesktop"));
#ifndef OS_MAC_OLD #ifndef OS_MAC_OLD
QApplication::setAttribute(Qt::AA_DisableHighDpiScaling, true); if (cQtScale()) {
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
} else {
QApplication::setAttribute(Qt::AA_DisableHighDpiScaling, true);
}
#endif // OS_MAC_OLD #endif // OS_MAC_OLD
// fallback session management is useless for tdesktop since it doesn't have // fallback session management is useless for tdesktop since it doesn't have
@@ -346,7 +350,10 @@ int Launcher::exec() {
// Must be started before Sandbox is created. // Must be started before Sandbox is created.
Platform::start(); Platform::start();
Ui::DisableCustomScaling();
if (!cQtScale()) {
Ui::DisableCustomScaling();
}
if (cUseEnvApi() if (cUseEnvApi()
&& qEnvironmentVariableIsSet(kApiIdVarName.utf8().constData()) && qEnvironmentVariableIsSet(kApiIdVarName.utf8().constData())

View File

@@ -200,7 +200,7 @@ void Sandbox::setupScreenScale() {
} }
const auto ratio = devicePixelRatio(); const auto ratio = devicePixelRatio();
if (ratio > 1.) { if (ratio > 1. || cQtScale()) {
if (!Platform::IsMac() || (ratio != 2.)) { if (!Platform::IsMac() || (ratio != 2.)) {
LOG(("Found non-trivial Device Pixel Ratio: %1").arg(ratio)); LOG(("Found non-trivial Device Pixel Ratio: %1").arg(ratio));
LOG(("Environmental variables: QT_DEVICE_PIXEL_RATIO='%1'").arg(qEnvironmentVariable("QT_DEVICE_PIXEL_RATIO"))); LOG(("Environmental variables: QT_DEVICE_PIXEL_RATIO='%1'").arg(qEnvironmentVariable("QT_DEVICE_PIXEL_RATIO")));
@@ -209,7 +209,7 @@ void Sandbox::setupScreenScale() {
LOG(("Environmental variables: QT_SCREEN_SCALE_FACTORS='%1'").arg(qEnvironmentVariable("QT_SCREEN_SCALE_FACTORS"))); LOG(("Environmental variables: QT_SCREEN_SCALE_FACTORS='%1'").arg(qEnvironmentVariable("QT_SCREEN_SCALE_FACTORS")));
} }
style::SetDevicePixelRatio(int(ratio)); style::SetDevicePixelRatio(int(ratio));
if (Platform::IsMac() && ratio == 2.) { if (Platform::IsMac() && ratio == 2. && !cQtScale()) {
cSetScreenScale(110); // 110% for Retina screens by default. cSetScreenScale(110); // 110% for Retina screens by default.
} else { } else {
cSetScreenScale(style::kScaleDefault); cSetScreenScale(style::kScaleDefault);

View File

@@ -369,6 +369,7 @@ QByteArray GenerateSettingsJson(bool areDefault = false) {
settings.insert(qsl("recent_stickers_limit"), RecentStickersLimit()); settings.insert(qsl("recent_stickers_limit"), RecentStickersLimit());
settings.insert(qsl("userpic_corner_type"), cUserpicCornersType()); settings.insert(qsl("userpic_corner_type"), cUserpicCornersType());
settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic()); settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic());
settings.insert(qsl("qt_scale"), cQtScale());
settings.insert(qsl("gtk_integration"), cGtkIntegration()); settings.insert(qsl("gtk_integration"), cGtkIntegration());
settings.insert(qsl("file_dialog_type"), int(FileDialogType())); settings.insert(qsl("file_dialog_type"), int(FileDialogType()));
settings.insert(qsl("disable_tray_counter"), cDisableTrayCounter()); settings.insert(qsl("disable_tray_counter"), cDisableTrayCounter());
@@ -613,6 +614,10 @@ bool Manager::readCustomFile() {
cSetShowTopBarUserpic(v); cSetShowTopBarUserpic(v);
}); });
ReadBoolOption(settings, "qt_scale", [&](auto v) {
cSetQtScale(v);
});
ReadBoolOption(settings, "gtk_integration", [&](auto v) { ReadBoolOption(settings, "gtk_integration", [&](auto v) {
cSetGtkIntegration(v); cSetGtkIntegration(v);
}); });

View File

@@ -147,6 +147,8 @@ rpl::producer<int> RecentStickersLimitChanges() {
int gUserpicCornersType = 3; int gUserpicCornersType = 3;
bool gShowTopBarUserpic = false; bool gShowTopBarUserpic = false;
bool gQtScale = Platform::IsLinux();
bool gGtkIntegration = false; bool gGtkIntegration = false;
rpl::variable<Platform::FileDialog::ImplementationType> gFileDialogType = Platform::FileDialog::ImplementationType::Default; rpl::variable<Platform::FileDialog::ImplementationType> gFileDialogType = Platform::FileDialog::ImplementationType::Default;

View File

@@ -103,6 +103,8 @@ void SetRecentStickersLimit(int limit);
DeclareSetting(int, UserpicCornersType); DeclareSetting(int, UserpicCornersType);
DeclareSetting(bool, ShowTopBarUserpic); DeclareSetting(bool, ShowTopBarUserpic);
DeclareSetting(bool, QtScale);
DeclareSetting(bool, GtkIntegration); DeclareSetting(bool, GtkIntegration);
void SetFileDialogType(Platform::FileDialog::ImplementationType t); void SetFileDialogType(Platform::FileDialog::ImplementationType t);

View File

@@ -440,6 +440,33 @@ void SetupKotatoSystem(
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, tr::ktg_settings_system()); AddSubsectionTitle(container, tr::ktg_settings_system());
const auto qtScaleToggled = Ui::CreateChild<rpl::event_stream<bool>>(
container.get());
AddButton(
container,
tr::ktg_settings_qt_scale(),
st::settingsButton
)->toggleOn(
qtScaleToggled->events_starting_with_copy(cQtScale())
)->toggledValue(
) | rpl::filter([](bool enabled) {
return (enabled != cQtScale());
}) | rpl::start_with_next([=](bool enabled) {
const auto confirmed = [=] {
cSetQtScale(enabled);
::Kotato::JsonSettings::Write();
App::restart();
};
const auto cancelled = [=] {
qtScaleToggled->fire(cQtScale() == true);
};
Ui::show(Box<ConfirmBox>(
tr::lng_settings_need_restart(tr::now),
tr::lng_settings_restart_now(tr::now),
confirmed,
cancelled));
}, container->lifetime());
#ifndef DESKTOP_APP_DISABLE_GTK_INTEGRATION #ifndef DESKTOP_APP_DISABLE_GTK_INTEGRATION
if (Platform::IsLinux()) { if (Platform::IsLinux()) {
const auto gtkIntegrationToggled = Ui::CreateChild<rpl::event_stream<bool>>( const auto gtkIntegrationToggled = Ui::CreateChild<rpl::event_stream<bool>>(

View File

@@ -955,7 +955,9 @@ void start() {
integration->load(); integration->load();
} }
SetGtkScaleFactor(); if (!cQtScale()) {
SetGtkScaleFactor();
}
// wait for interface announce to know if native window frame is supported // wait for interface announce to know if native window frame is supported
if (const auto integration = WaylandIntegration::Instance()) { if (const auto integration = WaylandIntegration::Instance()) {

View File

@@ -173,7 +173,7 @@ void SetupSections(
} }
bool HasInterfaceScale() { bool HasInterfaceScale() {
return true; return !cQtScale();
} }
void SetupInterfaceScale( void SetupInterfaceScale(