diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index dc26cfd32..a28bfee64 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2325,6 +2325,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ktg_fonts_semibold" = "Semibold font"; "ktg_fonts_semibold_is_bold" = "Make semibold bold"; "ktg_fonts_monospaced" = "Monospaced font"; +"ktg_fonts_use_system_font" = "Use system font"; "ktg_fonts_restart_new_fonts" = "You will need to restart app to apply new fonts.\n\nRestart now?"; "ktg_fonts_restart_reset" = "You will need to restart app to reset fonts to default.\n\nRestart now?"; diff --git a/Telegram/Resources/langs/rewrites/ru.json b/Telegram/Resources/langs/rewrites/ru.json index fc59a598d..ce4ee4431 100644 --- a/Telegram/Resources/langs/rewrites/ru.json +++ b/Telegram/Resources/langs/rewrites/ru.json @@ -60,6 +60,7 @@ "ktg_fonts_semibold": "Полужирный шрифт", "ktg_fonts_semibold_is_bold": "Сделать полужирный жирным", "ktg_fonts_monospaced": "Моноширинный шрифт", + "ktg_fonts_use_system_font": "Использовать системный шрифт", "ktg_fonts_restart_new_fonts": "Для применения новых шрифтов требуется перезапуск.\n\nПерезапустить сейчас?", "ktg_fonts_restart_reset": "Для сброса шрифтов к стандартным требуется перезапуск.\n\nПерезапустить сейчас?", "ktg_fonts_restart": "Перезапустить", diff --git a/Telegram/SourceFiles/boxes/fonts_box.cpp b/Telegram/SourceFiles/boxes/fonts_box.cpp index 36b0e2069..589059d5a 100644 --- a/Telegram/SourceFiles/boxes/fonts_box.cpp +++ b/Telegram/SourceFiles/boxes/fonts_box.cpp @@ -18,7 +18,8 @@ https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL #include "app.h" FontsBox::FontsBox(QWidget* parent) -: _mainFontName(this, st::defaultInputField, tr::ktg_fonts_main()) +: _useSystemFont(this, tr::ktg_fonts_use_system_font(tr::now), cUseSystemFont()) +, _mainFontName(this, st::defaultInputField, tr::ktg_fonts_main()) , _semiboldFontName(this, st::defaultInputField, tr::ktg_fonts_semibold()) , _semiboldIsBold(this, tr::ktg_fonts_semibold_is_bold(tr::now), cSemiboldFontIsBold()) , _monospacedFontName(this, st::defaultInputField, tr::ktg_fonts_monospaced()) @@ -49,7 +50,13 @@ void FontsBox::prepare() { _about.setText(st::fontsBoxTextStyle, tr::ktg_fonts_about(tr::now)); _aboutHeight = _about.countHeight(st::boxWidth - st::boxPadding.left() * 1.5); - setDimensions(st::boxWidth, _mainFontName->height() + _semiboldFontName->height() + _semiboldIsBold->height() + _monospacedFontName->height() + _aboutHeight + st::boxLittleSkip * 2); + setDimensions(st::boxWidth, _useSystemFont->height() + + _mainFontName->height() + + _semiboldFontName->height() + + _semiboldIsBold->height() + + _monospacedFontName->height() + + _aboutHeight + + st::boxLittleSkip * 2); } @@ -58,7 +65,12 @@ void FontsBox::paintEvent(QPaintEvent *e) { Painter p(this); int32 w = st::boxWidth - st::boxPadding.left() * 1.5; - int32 abouty = _mainFontName->height() + _semiboldFontName->height() + _semiboldIsBold->height() + _monospacedFontName->height() + st::boxLittleSkip * 2; + int32 abouty = _useSystemFont->height() + + _mainFontName->height() + + _semiboldFontName->height() + + _semiboldIsBold->height() + + _monospacedFontName->height() + + st::boxLittleSkip * 2; p.setPen(st::windowSubTextFg); _about.drawLeft(p, st::boxPadding.left(), abouty, w, width()); @@ -68,8 +80,10 @@ void FontsBox::resizeEvent(QResizeEvent *e) { BoxContent::resizeEvent(e); int32 w = st::boxWidth - st::boxPadding.left() - st::boxPadding.right(); + _useSystemFont->resize(w, _useSystemFont->height()); + _useSystemFont->moveToLeft(st::boxPadding.left(), 0); _mainFontName->resize(w, _mainFontName->height()); - _mainFontName->moveToLeft(st::boxPadding.left(), 0); + _mainFontName->moveToLeft(st::boxPadding.left(), _useSystemFont->y() + _useSystemFont->height() + st::boxLittleSkip); _semiboldFontName->resize(w, _semiboldFontName->height()); _semiboldFontName->moveToLeft(st::boxPadding.left(), _mainFontName->y() + _mainFontName->height()); _semiboldIsBold->resize(w, _semiboldIsBold->height()); @@ -83,12 +97,14 @@ void FontsBox::setInnerFocus() { } void FontsBox::save() { + const auto useSystemFont = _useSystemFont->checked(); const auto mainFont = _mainFontName->getLastText().trimmed(); const auto semiboldFont = _semiboldFontName->getLastText().trimmed(); const auto semiboldIsBold = _semiboldIsBold->checked(); const auto monospacedFont = _monospacedFontName->getLastText().trimmed(); const auto changeFonts = [=] { + cSetUseSystemFont(useSystemFont); cSetMainFont(mainFont); cSetSemiboldFont(semiboldFont); cSetSemiboldFontIsBold(semiboldIsBold); diff --git a/Telegram/SourceFiles/boxes/fonts_box.h b/Telegram/SourceFiles/boxes/fonts_box.h index 11130a580..e99a479e2 100644 --- a/Telegram/SourceFiles/boxes/fonts_box.h +++ b/Telegram/SourceFiles/boxes/fonts_box.h @@ -28,6 +28,7 @@ private: void save(); void resetToDefault(); + object_ptr _useSystemFont = { nullptr }; object_ptr _mainFontName = { nullptr }; object_ptr _semiboldFontName = { nullptr }; object_ptr _semiboldIsBold = { nullptr }; diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index 0a71fcda6..cac371c96 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -175,6 +175,9 @@ void Application::run() { if (!cMonospaceFont().isEmpty()) { style::internal::SetMonospaceFont(cMonospaceFont()); } + if (cUseSystemFont()) { + style::internal::SetUseSystemFont(cUseSystemFont()); + } style::internal::StartFonts(); ThirdParty::start(); diff --git a/Telegram/SourceFiles/core/kotato_settings.cpp b/Telegram/SourceFiles/core/kotato_settings.cpp index 0b6815484..62af127d2 100644 --- a/Telegram/SourceFiles/core/kotato_settings.cpp +++ b/Telegram/SourceFiles/core/kotato_settings.cpp @@ -143,6 +143,11 @@ bool Manager::readCustomFile() { if (settingsFontsMonospace != settingsFonts.constEnd() && (*settingsFontsMonospace).isString()) { cSetMonospaceFont((*settingsFontsMonospace).toString()); } + + const auto settingsFontsUseSystemFont = settingsFonts.constFind(qsl("use_system_font")); + if (settingsFontsUseSystemFont != settingsFonts.constEnd() && (*settingsFontsUseSystemFont).isBool()) { + cSetUseSystemFont((*settingsFontsUseSystemFont).toBool()); + } } const auto settingsStickerHeightIt = settings.constFind(qsl("sticker_height")); @@ -277,6 +282,7 @@ void Manager::writeDefaultFile() { settingsFonts.insert(qsl("semibold"), qsl("Open Sans Semibold")); settingsFonts.insert(qsl("semibold_is_bold"), false); settingsFonts.insert(qsl("monospaced"), qsl("Consolas")); + settingsFonts.insert(qsl("use_system_font"), cUseSystemFont()); settings.insert(qsl("fonts"), settingsFonts); @@ -334,6 +340,7 @@ void Manager::writeCurrentSettings() { } settingsFonts.insert(qsl("semibold_is_bold"), cSemiboldFontIsBold()); + settingsFonts.insert(qsl("use_system_font"), cUseSystemFont()); settings.insert(qsl("fonts"), settingsFonts); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 6546f6f13..a5370dfca 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -210,6 +210,12 @@ rpl::producer<> UpdatedRecentEmoji() { QString gMainFont, gSemiboldFont, gMonospaceFont; bool gSemiboldFontIsBold = false; +#ifdef DESKTOP_APP_USE_PACKAGED_FONTS +bool gUseSystemFont = true; +#else +bool gUseSystemFont = false; +#endif + rpl::variable gStickerHeight = 128; void SetStickerHeight(int height) { gStickerHeight = height; diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 1847975ad..f559a8f0e 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -183,6 +183,7 @@ DeclareSetting(QString, MainFont); DeclareSetting(QString, SemiboldFont); DeclareSetting(bool, SemiboldFontIsBold); DeclareSetting(QString, MonospaceFont); +DeclareSetting(bool, UseSystemFont); void SetBigEmojiOutline(bool enabled); [[nodiscard]] bool BigEmojiOutline();