[Option][JSON] Custom scales

This commit is contained in:
Eric Kotato 2022-08-26 22:13:28 +03:00
parent cb1a2c6d04
commit 6ed812fa13
2 changed files with 36 additions and 1 deletions

View file

@ -155,6 +155,22 @@ CheckHandler IntLimitMin(int min) {
};
}
CheckHandler ScalesLimit() {
return [=] (QVariant value) -> QVariant {
auto newArrayValue = QJsonArray();
if (value.canConvert<QJsonArray>()) {
auto arrayValue = value.toJsonArray();
for (auto i = arrayValue.begin(); i != arrayValue.end() && arrayValue.size() <= 6; ++i) {
const auto scaleNumber = (*i).toDouble();
if (scaleNumber >= style::kScaleMin && scaleNumber <= style::kScaleMax) {
newArrayValue.append(scaleNumber);
}
}
}
return newArrayValue;
};
}
CheckHandler NetSpeedBoostConv(CheckHandler wrapped = nullptr) {
return [=] (QVariant value) -> QVariant {
@ -293,6 +309,9 @@ const std::map<QString, Definition, std::greater<QString>> DefinitionMap {
{ "show_phone_in_drawer", {
.type = SettingType::BoolSetting,
.defaultValue = true, }},
{ "scales", {
.type = SettingType::QJsonArraySetting,
.limitHandler = ScalesLimit(), }},
};
using OldOptionKey = QString;

View file

@ -44,6 +44,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "styles/style_settings.h"
#include "base/platform/base_platform_info.h"
#include <QtCore/QJsonArray>
namespace Settings {
void SetupLanguageButton(
@ -197,8 +199,22 @@ void SetupInterfaceScale(
object_ptr<Ui::SettingsSlider>(container, st::settingsSlider),
icon ? st::settingsScalePadding : st::settingsBigScalePadding);
static const auto customScales = [&] {
const auto scalesJson = ::Kotato::JsonSettings::Get("scales").toJsonArray();
auto result = std::vector<int>();
result.reserve(scalesJson.size());
for (auto i = scalesJson.begin(); i != scalesJson.end(); ++i) {
if ((*i).type() != QJsonValue::Undefined) {
result.push_back(int((*i).toDouble()));
}
}
return result;
}();
static const auto ScaleValues = [&] {
auto values = (cIntRetinaFactor() > 1)
auto values = (customScales.size() > 1)
? customScales
: (cIntRetinaFactor() > 1)
? std::vector<int>{ 100, 110, 120, 130, 140, 150 }
: std::vector<int>{ 100, 125, 150, 200, 250, 300 };
if (cConfigScale() == style::kScaleAuto) {