From 70229dcb65b362184478812e3667ed97dc546fdc Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Mon, 7 Oct 2019 04:44:41 +0300 Subject: [PATCH] Option to set custom interface scales --- .../default_kotato-settings-custom.json | 3 ++- Telegram/SourceFiles/core/kotato_settings.cpp | 17 +++++++++++++++++ Telegram/SourceFiles/settings.cpp | 18 ++++++++++++++++++ Telegram/SourceFiles/settings.h | 8 +++++++- .../SourceFiles/settings/settings_main.cpp | 4 +++- 5 files changed, 47 insertions(+), 3 deletions(-) diff --git a/Telegram/Resources/default_kotato-settings-custom.json b/Telegram/Resources/default_kotato-settings-custom.json index bde92f961..8171f960e 100644 --- a/Telegram/Resources/default_kotato-settings-custom.json +++ b/Telegram/Resources/default_kotato-settings-custom.json @@ -13,5 +13,6 @@ // "always_show_scheduled": true, // "show_chat_id": true, // "net_speed_boost": null, - // "show_phone_in_drawer": true + // "show_phone_in_drawer": true, + // "scales": [] } diff --git a/Telegram/SourceFiles/core/kotato_settings.cpp b/Telegram/SourceFiles/core/kotato_settings.cpp index 789074a6a..8f8843019 100644 --- a/Telegram/SourceFiles/core/kotato_settings.cpp +++ b/Telegram/SourceFiles/core/kotato_settings.cpp @@ -223,6 +223,20 @@ bool Manager::readCustomFile() { if (settingsShowDrawerPhoneIt != settings.constEnd() && (*settingsShowDrawerPhoneIt).isBool()) { cSetShowPhoneInDrawer((*settingsShowDrawerPhoneIt).toBool()); } + + const auto settingsScalesIt = settings.constFind(qsl("scales")); + if (settingsScalesIt != settings.constEnd() && (*settingsScalesIt).isArray()) { + const auto settingsScalesArray = (*settingsScalesIt).toArray(); + ClearCustomScales(); + for (auto i = settingsScalesArray.constBegin(), e = settingsScalesArray.constEnd(); i != e; ++i) { + if (!(*i).isDouble()) { + continue; + } + + AddCustomScale((*i).toInt()); + } + + } return true; } @@ -257,6 +271,9 @@ void Manager::writeDefaultFile() { settings.insert(qsl("net_speed_boost"), QJsonValue(QJsonValue::Null)); settings.insert(qsl("show_phone_in_drawer"), cShowPhoneInDrawer()); + auto settingsScales = QJsonArray(); + settings.insert(qsl("scales"), settingsScales); + auto document = QJsonDocument(); document.setObject(settings); file.write(document.toJson(QJsonDocument::Indented)); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 2d85f1b30..03c76a41f 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -222,3 +222,21 @@ int gNetMaxFileQueries = 16; int gNetUploadRequestInterval = 500; bool gShowPhoneInDrawer = true; + +ScaleVector gInterfaceScales; + +bool HasCustomScales() { + return (!gInterfaceScales.empty()); +} + +bool AddCustomScale(int scale) { + if (gInterfaceScales.size() > 6) { + return false; + } + gInterfaceScales.push_back(style::CheckScale(scale)); + return true; +} + +void ClearCustomScales() { + gInterfaceScales.clear(); +} \ No newline at end of file diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 4b182f5ec..bfeaa9ebc 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -195,4 +195,10 @@ DeclareSetting(int, NetUploadSessionsCount); DeclareSetting(int, NetMaxFileQueries); DeclareSetting(int, NetUploadRequestInterval); -DeclareSetting(bool, ShowPhoneInDrawer); \ No newline at end of file +DeclareSetting(bool, ShowPhoneInDrawer); + +using ScaleVector = std::std::vector; +DeclareRefSetting(ScaleVector, InterfaceScales); +bool HasCustomScales(); +bool AddCustomScale(int scale); +void ClearCustomScales(); \ No newline at end of file diff --git a/Telegram/SourceFiles/settings/settings_main.cpp b/Telegram/SourceFiles/settings/settings_main.cpp index 331a1ac16..9794a14c9 100644 --- a/Telegram/SourceFiles/settings/settings_main.cpp +++ b/Telegram/SourceFiles/settings/settings_main.cpp @@ -137,7 +137,9 @@ void SetupInterfaceScale( icon ? st::settingsScalePadding : st::settingsBigScalePadding); static const auto ScaleValues = [&] { - auto values = (cIntRetinaFactor() > 1) + auto values = HasCustomScales() + ? cInterfaceScales() + : (cIntRetinaFactor() > 1) ? std::vector{ 100, 110, 120, 130, 140, 150 } : std::vector{ 100, 125, 150, 200, 250, 300 }; if (cConfigScale() == style::kScaleAuto) {