diff --git a/Telegram/Resources/art/ayu/alt/app.png b/Telegram/Resources/art/ayu/alt/app.png new file mode 100644 index 000000000..14eafa2f6 Binary files /dev/null and b/Telegram/Resources/art/ayu/alt/app.png differ diff --git a/Telegram/Resources/art/ayu/alt/app_icon.ico b/Telegram/Resources/art/ayu/alt/app_icon.ico new file mode 100644 index 000000000..1dc51bc4a Binary files /dev/null and b/Telegram/Resources/art/ayu/alt/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/alt/app_preview.png b/Telegram/Resources/art/ayu/alt/app_preview.png new file mode 100644 index 000000000..fd53baf10 Binary files /dev/null and b/Telegram/Resources/art/ayu/alt/app_preview.png differ diff --git a/Telegram/Resources/art/ayu/alt/logo256.png b/Telegram/Resources/art/ayu/alt/logo256.png deleted file mode 100644 index ae346affb..000000000 Binary files a/Telegram/Resources/art/ayu/alt/logo256.png and /dev/null differ diff --git a/Telegram/Resources/art/ayu/alt/logo256_no_margin.ico b/Telegram/Resources/art/ayu/alt/logo256_no_margin.ico deleted file mode 100644 index 0c36fcfee..000000000 Binary files a/Telegram/Resources/art/ayu/alt/logo256_no_margin.ico and /dev/null differ diff --git a/Telegram/Resources/art/ayu/alt/logo256_no_margin.png b/Telegram/Resources/art/ayu/alt/logo256_no_margin.png deleted file mode 100644 index 08e3ead72..000000000 Binary files a/Telegram/Resources/art/ayu/alt/logo256_no_margin.png and /dev/null differ diff --git a/Telegram/Resources/art/ayu/bard/app.png b/Telegram/Resources/art/ayu/bard/app.png new file mode 100644 index 000000000..3bcfbd1aa Binary files /dev/null and b/Telegram/Resources/art/ayu/bard/app.png differ diff --git a/Telegram/Resources/art/ayu/bard/app_icon.ico b/Telegram/Resources/art/ayu/bard/app_icon.ico new file mode 100644 index 000000000..b03aa9cb6 Binary files /dev/null and b/Telegram/Resources/art/ayu/bard/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/bard/app_preview.png b/Telegram/Resources/art/ayu/bard/app_preview.png new file mode 100644 index 000000000..fdeb8a1f0 Binary files /dev/null and b/Telegram/Resources/art/ayu/bard/app_preview.png differ diff --git a/Telegram/Resources/art/ayu/default/app.png b/Telegram/Resources/art/ayu/default/app.png new file mode 100644 index 000000000..7715d006d Binary files /dev/null and b/Telegram/Resources/art/ayu/default/app.png differ diff --git a/Telegram/Resources/art/ayu/default/app_icon.ico b/Telegram/Resources/art/ayu/default/app_icon.ico new file mode 100644 index 000000000..2c8e3a69c Binary files /dev/null and b/Telegram/Resources/art/ayu/default/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/default/app_preview.png b/Telegram/Resources/art/ayu/default/app_preview.png new file mode 100644 index 000000000..3615e9eb7 Binary files /dev/null and b/Telegram/Resources/art/ayu/default/app_preview.png differ diff --git a/Telegram/Resources/art/ayu/default/logo256.png b/Telegram/Resources/art/ayu/default/logo256.png deleted file mode 100644 index 82a26d502..000000000 Binary files a/Telegram/Resources/art/ayu/default/logo256.png and /dev/null differ diff --git a/Telegram/Resources/art/ayu/default/logo256_no_margin.ico b/Telegram/Resources/art/ayu/default/logo256_no_margin.ico deleted file mode 100644 index 30a610a9b..000000000 Binary files a/Telegram/Resources/art/ayu/default/logo256_no_margin.ico and /dev/null differ diff --git a/Telegram/Resources/art/ayu/default/logo256_no_margin.png b/Telegram/Resources/art/ayu/default/logo256_no_margin.png deleted file mode 100644 index d75f58b81..000000000 Binary files a/Telegram/Resources/art/ayu/default/logo256_no_margin.png and /dev/null differ diff --git a/Telegram/Resources/art/ayu/discord/app.png b/Telegram/Resources/art/ayu/discord/app.png new file mode 100644 index 000000000..29584bf47 Binary files /dev/null and b/Telegram/Resources/art/ayu/discord/app.png differ diff --git a/Telegram/Resources/art/ayu/discord/app_icon.ico b/Telegram/Resources/art/ayu/discord/app_icon.ico new file mode 100644 index 000000000..146227ac9 Binary files /dev/null and b/Telegram/Resources/art/ayu/discord/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/discord/app_preview.png b/Telegram/Resources/art/ayu/discord/app_preview.png new file mode 100644 index 000000000..9adad529e Binary files /dev/null and b/Telegram/Resources/art/ayu/discord/app_preview.png differ diff --git a/Telegram/Resources/art/ayu/extera/app.png b/Telegram/Resources/art/ayu/extera/app.png new file mode 100644 index 000000000..c112e63de Binary files /dev/null and b/Telegram/Resources/art/ayu/extera/app.png differ diff --git a/Telegram/Resources/art/ayu/extera/app_icon.ico b/Telegram/Resources/art/ayu/extera/app_icon.ico new file mode 100644 index 000000000..800b8c782 Binary files /dev/null and b/Telegram/Resources/art/ayu/extera/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/extera/app_preview.png b/Telegram/Resources/art/ayu/extera/app_preview.png new file mode 100644 index 000000000..3e9ef7f27 Binary files /dev/null and b/Telegram/Resources/art/ayu/extera/app_preview.png differ diff --git a/Telegram/Resources/art/ayu/nothing/app.png b/Telegram/Resources/art/ayu/nothing/app.png new file mode 100644 index 000000000..9dda5639f Binary files /dev/null and b/Telegram/Resources/art/ayu/nothing/app.png differ diff --git a/Telegram/Resources/art/ayu/nothing/app_icon.ico b/Telegram/Resources/art/ayu/nothing/app_icon.ico new file mode 100644 index 000000000..5922d7b57 Binary files /dev/null and b/Telegram/Resources/art/ayu/nothing/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/nothing/app_preview.png b/Telegram/Resources/art/ayu/nothing/app_preview.png new file mode 100644 index 000000000..bb2ae7448 Binary files /dev/null and b/Telegram/Resources/art/ayu/nothing/app_preview.png differ diff --git a/Telegram/Resources/art/ayu/nothing/logo256.png b/Telegram/Resources/art/ayu/nothing/logo256.png deleted file mode 100644 index b1ea029a5..000000000 Binary files a/Telegram/Resources/art/ayu/nothing/logo256.png and /dev/null differ diff --git a/Telegram/Resources/art/ayu/nothing/logo256_no_margin.ico b/Telegram/Resources/art/ayu/nothing/logo256_no_margin.ico deleted file mode 100644 index ce4bc0cbf..000000000 Binary files a/Telegram/Resources/art/ayu/nothing/logo256_no_margin.ico and /dev/null differ diff --git a/Telegram/Resources/art/ayu/nothing/logo256_no_margin.png b/Telegram/Resources/art/ayu/nothing/logo256_no_margin.png deleted file mode 100644 index 9bc823bd3..000000000 Binary files a/Telegram/Resources/art/ayu/nothing/logo256_no_margin.png and /dev/null differ diff --git a/Telegram/Resources/art/ayu/spotify/app.png b/Telegram/Resources/art/ayu/spotify/app.png new file mode 100644 index 000000000..330ecc6b4 Binary files /dev/null and b/Telegram/Resources/art/ayu/spotify/app.png differ diff --git a/Telegram/Resources/art/ayu/spotify/app_icon.ico b/Telegram/Resources/art/ayu/spotify/app_icon.ico new file mode 100644 index 000000000..16bc1ca96 Binary files /dev/null and b/Telegram/Resources/art/ayu/spotify/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/spotify/app_preview.png b/Telegram/Resources/art/ayu/spotify/app_preview.png new file mode 100644 index 000000000..367225b58 Binary files /dev/null and b/Telegram/Resources/art/ayu/spotify/app_preview.png differ diff --git a/Telegram/Resources/art/ayu/yaplus/app.png b/Telegram/Resources/art/ayu/yaplus/app.png new file mode 100644 index 000000000..2024c5d5c Binary files /dev/null and b/Telegram/Resources/art/ayu/yaplus/app.png differ diff --git a/Telegram/Resources/art/ayu/yaplus/app_icon.ico b/Telegram/Resources/art/ayu/yaplus/app_icon.ico new file mode 100644 index 000000000..afe4fcf22 Binary files /dev/null and b/Telegram/Resources/art/ayu/yaplus/app_icon.ico differ diff --git a/Telegram/Resources/art/ayu/yaplus/app_preview.png b/Telegram/Resources/art/ayu/yaplus/app_preview.png new file mode 100644 index 000000000..12b5fdea3 Binary files /dev/null and b/Telegram/Resources/art/ayu/yaplus/app_preview.png differ diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index ac7e1e359..58d1eedae 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -4184,12 +4184,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_RegexFilters" = "Message Filters"; "ayu_RegexFiltersAmount" = "filters"; "ayu_RegexFiltersHeader" = "Filters"; +"ayu_RegexFiltersShared" = "Shared filters"; "ayu_FiltersHideFromBlocked" = "Hide from blocked users"; -"ayu_RegexFiltersEnableInChats" = "Enable in chats"; -"ayu_RegexFiltersCaseInsensitive" = "Case insensitive expressions"; +"ayu_FiltersHideFromBlockedNote" = "Message filters were enabled."; +"ayu_RegexFiltersEnableSharedInChats" = "Enable shared filters in chats"; "ayu_RegexFiltersAdd" = "Add filter"; "ayu_RegexFiltersEdit" = "Edit filter"; "ayu_RegexFiltersPlaceholder" = "Expression"; +"ayu_EnableExpression" = "Enable expression"; +"ayu_CaseInsensitiveExpression" = "Case insensitive expression"; "ayu_RegexFiltersAddError" = "Regex syntax error"; "ayu_AyuSyncHeader" = "AyuSync"; "ayu_AyuSyncStatusTitle" = "Sync status"; @@ -4215,6 +4218,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_IconAlternative" = "AyuGram Alt"; "ayu_IconNothing" = "Nothing"; "ayu_WALMode" = "Enable WAL mode"; +"ayu_PushNotificationCount" = "FCM notifications received"; "ayu_ClearAyuDatabase" = "Clear Ayu Database"; "ayu_ClearAyuDatabaseNotification" = "AyuGram database cleared"; "ayu_ClearAyuAttachments" = "Clear Ayu Attachments"; @@ -4240,6 +4244,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_EditsHistoryTitle" = "Edits history"; "ayu_EditsHistoryMenuText" = "History"; "ayu_ClearDeletedMenuText" = "Clear Deleted"; +"ayu_ViewFiltersMenuText" = "View Filters"; +"ayu_OneViewTTL" = "one view"; "ayu_ReadUntilMenuText" = "Read Message"; "ayu_DeleteKeepLocally" = "Keep locally"; "ayu_BoxActionReset" = "Reset"; @@ -4254,6 +4260,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "ayu_HideNextViewsDescriptionAyu" = "Hide my views forever, until Ghost Mode disabled."; "ayu_EnableGhostModeStories" = "Enable Ghost Mode"; "ayu_GhostModeIsActive" = "Ghost Mode Is Active"; +"ayu_MainFont" = "Application font"; +"ayu_MonospaceFont" = "Monospace font"; +"ayu_FontDefault" = "Default"; +"ayu_CustomizeFontTitle" = "Customize font"; "ayu_AyuForwardStatusForwarding" = "Forwarding messages…"; "ayu_AyuForwardStatusLoadingMedia" = "Loading media…"; "ayu_AyuForwardForwardingDescription" = "Please keep this window open while AyuGram is forwarding your messages."; diff --git a/Telegram/Resources/qrc/ayu/ayu.qrc b/Telegram/Resources/qrc/ayu/ayu.qrc index dbabcdb5b..912ce484b 100644 --- a/Telegram/Resources/qrc/ayu/ayu.qrc +++ b/Telegram/Resources/qrc/ayu/ayu.qrc @@ -1,13 +1,28 @@ - ../../art/ayu/default/logo256.png - ../../art/ayu/default/logo256_no_margin.png - ../../art/ayu/default/logo256_no_margin.ico - ../../art/ayu/alt/logo256.png - ../../art/ayu/alt/logo256_no_margin.png - ../../art/ayu/alt/logo256_no_margin.ico - ../../art/ayu/nothing/logo256.png - ../../art/ayu/nothing/logo256_no_margin.png - ../../art/ayu/nothing/logo256_no_margin.ico + ../../art/ayu/alt/app.png + ../../art/ayu/alt/app_preview.png + ../../art/ayu/alt/app_icon.ico + ../../art/ayu/bard/app.png + ../../art/ayu/bard/app_preview.png + ../../art/ayu/bard/app_icon.ico + ../../art/ayu/default/app.png + ../../art/ayu/default/app_preview.png + ../../art/ayu/default/app_icon.ico + ../../art/ayu/discord/app.png + ../../art/ayu/discord/app_preview.png + ../../art/ayu/discord/app_icon.ico + ../../art/ayu/extera/app.png + ../../art/ayu/extera/app_preview.png + ../../art/ayu/extera/app_icon.ico + ../../art/ayu/nothing/app.png + ../../art/ayu/nothing/app_preview.png + ../../art/ayu/nothing/app_icon.ico + ../../art/ayu/spotify/app.png + ../../art/ayu/spotify/app_preview.png + ../../art/ayu/spotify/app_icon.ico + ../../art/ayu/yaplus/app.png + ../../art/ayu/yaplus/app_preview.png + ../../art/ayu/yaplus/app_icon.ico diff --git a/Telegram/SourceFiles/ayu/ayu_infra.cpp b/Telegram/SourceFiles/ayu/ayu_infra.cpp index 66dedc164..9ba93dbc6 100644 --- a/Telegram/SourceFiles/ayu/ayu_infra.cpp +++ b/Telegram/SourceFiles/ayu/ayu_infra.cpp @@ -40,10 +40,10 @@ void initDatabase() void initFonts() { - auto ayuSettings = AyuSettings::getInstance(); + auto settings = &AyuSettings::getInstance(); - AyuFonts::setCommonFont(ayuSettings.commonFont); - AyuFonts::setMonoFont(ayuSettings.monoFont); + AyuFonts::setMainFont(settings->mainFont); + AyuFonts::setMonoFont(settings->monoFont); } void init() diff --git a/Telegram/SourceFiles/ayu/ayu_settings.cpp b/Telegram/SourceFiles/ayu/ayu_settings.cpp index fa247806f..b25118571 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.cpp +++ b/Telegram/SourceFiles/ayu/ayu_settings.cpp @@ -273,9 +273,9 @@ void AyuGramSettings::set_showGhostToggleInDrawer(bool val) showGhostToggleInDrawer = val; } -void AyuGramSettings::set_commonFont(QString val) +void AyuGramSettings::set_mainFont(QString val) { - commonFont = val; + mainFont = val; } void AyuGramSettings::set_monoFont(QString val) diff --git a/Telegram/SourceFiles/ayu/ayu_settings.h b/Telegram/SourceFiles/ayu/ayu_settings.h index 8dd7d1271..85772bf60 100644 --- a/Telegram/SourceFiles/ayu/ayu_settings.h +++ b/Telegram/SourceFiles/ayu/ayu_settings.h @@ -18,8 +18,18 @@ const auto DEFAULT_ICON = QString("default"); const auto ALT_ICON = QString("alt"); +const auto DISCORD_ICON = QString("discord"); + +const auto SPOTIFY_ICON = QString("spotify"); + +const auto EXTERA_ICON = QString("extera"); + const auto NOTHING_ICON = QString("nothing"); +const auto BARD_ICON = QString("bard"); + +const auto YAPLUS_ICON = QString("yaplus"); + class AyuGramSettings { public: @@ -51,7 +61,7 @@ public: editedMark = tr::lng_edited(tr::now); recentStickersCount = 20; showGhostToggleInDrawer = true; - commonFont = ""; + mainFont = ""; monoFont = ""; /* @@ -88,7 +98,7 @@ public: QString editedMark; int recentStickersCount; bool showGhostToggleInDrawer; - QString commonFont; + QString mainFont; QString monoFont; int showPeerId; bool hideAllChatsFolder; @@ -136,7 +146,7 @@ public: void set_showGhostToggleInDrawer(bool val); - void set_commonFont(QString val); + void set_mainFont(QString val); void set_monoFont(QString val); @@ -173,7 +183,7 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT( editedMark, recentStickersCount, showGhostToggleInDrawer, - commonFont, + mainFont, monoFont, showPeerId, showMessageSeconds, diff --git a/Telegram/SourceFiles/ayu/ui/ayu_assets.cpp b/Telegram/SourceFiles/ayu/ui/ayu_assets.cpp index faf127127..18fc9b14c 100644 --- a/Telegram/SourceFiles/ayu/ui/ayu_assets.cpp +++ b/Telegram/SourceFiles/ayu/ui/ayu_assets.cpp @@ -28,7 +28,7 @@ void loadAppIco() f.remove(); } f.close(); - QFile::copy(qsl(":/gui/art/ayu/%1/logo256_no_margin.ico").arg(settings->appIcon), tempIconPath); + QFile::copy(qsl(":/gui/art/ayu/%1/app_icon.ico").arg(settings->appIcon), tempIconPath); } void loadIcons() @@ -37,24 +37,14 @@ void loadIcons() if (LAST_LOADED_NAME != settings->appIcon) { LAST_LOADED_NAME = settings->appIcon; - LAST_LOADED = QImage(qsl(":/gui/art/ayu/%1/logo256.png").arg(settings->appIcon)); - LAST_LOADED_NO_MARGIN = QImage(qsl(":/gui/art/ayu/%1/logo256_no_margin.png").arg(settings->appIcon)); + LAST_LOADED = QImage(qsl(":/gui/art/ayu/%1/app.png").arg(settings->appIcon)); + LAST_LOADED_NO_MARGIN = QImage(qsl(":/gui/art/ayu/%1/app_preview.png").arg(settings->appIcon)); } } -QImage logoPreview() +QImage loadPreview(QString name) { - return QImage(qsl(":/gui/art/ayu/default/logo256.png")); -} - -QImage logoAltPreview() -{ - return QImage(qsl(":/gui/art/ayu/alt/logo256.png")); -} - -QImage logoNothingPreview() -{ - return QImage(qsl(":/gui/art/ayu/nothing/logo256.png")); + return QImage(qsl(":/gui/art/ayu/%1/app_preview.png").arg(name)); } QString currentAppLogoName() diff --git a/Telegram/SourceFiles/ayu/ui/ayu_assets.h b/Telegram/SourceFiles/ayu/ui/ayu_assets.h index 9469d0111..c53de120c 100644 --- a/Telegram/SourceFiles/ayu/ui/ayu_assets.h +++ b/Telegram/SourceFiles/ayu/ui/ayu_assets.h @@ -8,9 +8,7 @@ void loadAppIco(); -QImage logoPreview(); -QImage logoAltPreview(); -QImage logoNothingPreview(); +QImage loadPreview(QString name); QString currentAppLogoName(); QImage currentAppLogo(); diff --git a/Telegram/SourceFiles/ayu/ui/boxes/font_selector.cpp b/Telegram/SourceFiles/ayu/ui/boxes/font_selector.cpp index 3e515749b..4f2fdb411 100644 --- a/Telegram/SourceFiles/ayu/ui/boxes/font_selector.cpp +++ b/Telegram/SourceFiles/ayu/ui/boxes/font_selector.cpp @@ -1,14 +1,10 @@ +// This is the source code of AyuGram for Desktop. // -// Created by MaxPlays on 12/09/2023. +// We do not and cannot prevent the use of our code, +// but be respectful and credit the original author. // -/* -This file is part of Telegram Desktop, -the official desktop application for the Telegram messaging service. - -For license and copyright information please follow this link: -https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL -*/ -#include "boxes/language_box.h" +// Copyright @Radolyn, 2023 +#include "font_selector.h" #include "data/data_peer_values.h" #include "ui/widgets/checkbox.h" @@ -41,7 +37,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_info.h" #include "styles/style_passport.h" #include "styles/style_chat_helpers.h" -#include "font_selector.h" #include #include @@ -58,7 +53,7 @@ struct Font namespace AyuUi { -class Rows: public Ui::RpWidget +class Rows : public Ui::RpWidget { public: Rows( @@ -229,7 +224,7 @@ private: }; -class Content: public Ui::RpWidget +class Content : public Ui::RpWidget { public: Content( @@ -263,7 +258,7 @@ std::vector PrepareFonts() auto fonts = std::vector(); QFontDatabase base; - for (const auto &font: base.families()) { + for (const auto &font : base.families()) { Font fontItem = { .FontName=font, .id=font @@ -289,7 +284,7 @@ Rows::Rows( Qt::LayoutDirectionAuto }; _rows.reserve(data.size()); - for (const auto &item: data) { + for (const auto &item : data) { _rows.push_back(Row{item}); auto &row = _rows.back(); row.check = std::make_unique( @@ -448,7 +443,7 @@ void Rows::mouseReleaseEvent(QMouseEvent *e) { showMenu(data.index); }, [](v::null_t) - {}); + { }); } } @@ -544,14 +539,14 @@ void Rows::filter(const QString &query) const QStringList &haystack, const QString &needle) { - for (const auto &item: haystack) { + for (const auto &item : haystack) { if (item.startsWith(needle)) { return true; } } return false; }; - for (const auto &needle: needles) { + for (const auto &needle : needles) { if (!find(haystack, needle)) { return true; } @@ -562,7 +557,7 @@ void Rows::filter(const QString &query) if (!_query.isEmpty()) { _filtered.clear(); _filtered.reserve(_rows.size()); - for (auto &row: _rows) { + for (auto &row : _rows) { if (!skip(row.keywords, _query)) { _filtered.push_back(&row); } @@ -617,7 +612,7 @@ rpl::producer Rows::activations() const void Rows::changeChosen(const QString &chosen) { - for (const auto &row: _rows) { + for (const auto &row : _rows) { row.check->setChecked(row.data.id == chosen, anim::type::normal); } } @@ -871,12 +866,12 @@ void Content::setupContent( { using namespace rpl::mappers; - const auto current = AyuFonts::getCommonFont(); + const auto current = AyuFonts::getMainFont(); const auto content = Ui::CreateChild(this); const auto add = [&](const std::vector &list) { if (list.empty()) { - return (Rows *) nullptr; + return (Rows *)nullptr; } const auto wrap = content->add( object_ptr>( @@ -1105,7 +1100,7 @@ void AyuUi::FontSelectorBox::prepare() closeBox(); }); - setTitle(rpl::single(qs("Font customisation"))); + setTitle(tr::ayu_CustomizeFontTitle()); const auto topContainer = Ui::CreateChild(this); setupTop(topContainer); @@ -1226,5 +1221,4 @@ AyuUi::FontSelectorBox::Show(Window::SessionController *controller, const Fn(controller, hook)); return result; - } diff --git a/Telegram/SourceFiles/ayu/ui/boxes/font_selector.h b/Telegram/SourceFiles/ayu/ui/boxes/font_selector.h index 7d685b7c3..145f4ebfc 100644 --- a/Telegram/SourceFiles/ayu/ui/boxes/font_selector.h +++ b/Telegram/SourceFiles/ayu/ui/boxes/font_selector.h @@ -1,17 +1,9 @@ +// This is the source code of AyuGram for Desktop. // -// Created by MaxPlays on 12/09/2023. +// We do not and cannot prevent the use of our code, +// but be respectful and credit the original author. // - -#ifndef TELEGRAM_FONT_SELECTOR_H -#define TELEGRAM_FONT_SELECTOR_H - -/* -This file is part of Telegram Desktop, -the official desktop application for the Telegram messaging service. - -For license and copyright information please follow this link: -https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL -*/ +// Copyright @Radolyn, 2023 #pragma once #include "lang/lang_cloud_manager.h" @@ -36,10 +28,12 @@ namespace Window class SessionController; } // namespace Window + + namespace AyuUi { -class FontSelectorBox: public Ui::BoxContent +class FontSelectorBox : public Ui::BoxContent { public: FontSelectorBox(QWidget *, Window::SessionController *controller, Fn hook); @@ -69,5 +63,3 @@ private: }; } - -#endif //TELEGRAM_FONT_SELECTOR_H diff --git a/Telegram/SourceFiles/ayu/ui/settings/icon_picker.cpp b/Telegram/SourceFiles/ayu/ui/settings/icon_picker.cpp index 05fb8a60d..c07734853 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/icon_picker.cpp +++ b/Telegram/SourceFiles/ayu/ui/settings/icon_picker.cpp @@ -20,23 +20,40 @@ #include "ayu/utils/windows_utils.h" #endif -void drawIcon(QPainter &p, const QImage &icon, int offset, bool selected) +const QVector icons{ + AyuSettings::DEFAULT_ICON, + AyuSettings::ALT_ICON, + AyuSettings::DISCORD_ICON, + AyuSettings::SPOTIFY_ICON, + AyuSettings::EXTERA_ICON, + AyuSettings::NOTHING_ICON, + AyuSettings::BARD_ICON, + AyuSettings::YAPLUS_ICON +}; + +const auto rows = icons.size() / 4 + std::min(1, icons.size() % 4); + +const auto padding = 14; + +void drawIcon(QPainter &p, const QImage &icon, int xOffset, int yOffset, bool selected) { + xOffset += padding; + if (selected) { p.save(); p.setPen(QPen(st::iconPreviewStroke, 2)); - p.drawEllipse(offset + 2, 2, 68, 68); + p.drawEllipse(xOffset + 2, yOffset + 2, 68, 68); p.restore(); } - auto rect = QRect(offset + 4, 4, 64, 64); + auto rect = QRect(xOffset + 4, yOffset + 4, 64, 64); p.drawImage(rect, icon); } IconPicker::IconPicker(QWidget *parent) : RpWidget(parent) { - setMinimumSize(st::boxWidth, 72); + setMinimumSize(st::boxWidth, 72 * rows); } void IconPicker::paintEvent(QPaintEvent *e) @@ -44,14 +61,16 @@ void IconPicker::paintEvent(QPaintEvent *e) Painter p(this); PainterHighQualityEnabler hq(p); - auto icon1 = logoPreview().scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation); - auto icon2 = logoAltPreview().scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation); - auto icon3 = logoNothingPreview().scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation); + for (int row = 0; row < rows; row++) { + const auto columns = std::min(4, icons.size() - row * 4); + for (int i = 0; i < columns; i++) { + auto const idx = i + row * 4; - // todo: center - drawIcon(p, icon1, 0, currentAppLogoName() == AyuSettings::DEFAULT_ICON); - drawIcon(p, icon2, 0 + 64 + 16, currentAppLogoName() == AyuSettings::ALT_ICON); - drawIcon(p, icon3, 0 + 64 + 16 + 64 + 16, currentAppLogoName() == AyuSettings::NOTHING_ICON); + const auto &iconName = icons[idx]; + auto icon = loadPreview(iconName).scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation); + drawIcon(p, icon, (64 + 16) * i, row * (64 + 8), currentAppLogoName() == iconName); + } + } } void IconPicker::mousePressEvent(QMouseEvent *e) @@ -60,17 +79,22 @@ void IconPicker::mousePressEvent(QMouseEvent *e) auto changed = false; auto x = e->pos().x(); - if (x <= 64 && settings->appIcon != AyuSettings::DEFAULT_ICON) { - settings->set_appIcon(AyuSettings::DEFAULT_ICON); - changed = true; - } - else if (x >= 64 + 16 && x <= 64 + 16 + 64 && settings->appIcon != AyuSettings::ALT_ICON) { - settings->set_appIcon(AyuSettings::ALT_ICON); - changed = true; - } - else if (x >= 64 + 16 + 64 + 16 && x < 64 + 16 + 64 + 16 + 64 && settings->appIcon != AyuSettings::NOTHING_ICON) { - settings->set_appIcon(AyuSettings::NOTHING_ICON); - changed = true; + for (int row = 0; row < rows; row++) { + const auto columns = std::min(4, icons.size() - row * 4); + for (int i = 0; i < columns; i++) { + auto const idx = i + row * 4; + auto const xOffset = (64 + 16) * i + padding; + auto const yOffset = row * (64 + 8); + + if (x >= xOffset && x <= xOffset + 64 && e->pos().y() >= yOffset && e->pos().y() <= yOffset + 64) { + const auto &iconName = icons[idx]; + if (settings->appIcon != iconName) { + settings->set_appIcon(iconName); + changed = true; + break; + } + } + } } if (changed) { diff --git a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp index 390210266..3fc30787f 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp +++ b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.cpp @@ -109,7 +109,7 @@ not_null AddInnerToggle( [](const auto &v) { return v->checked(); }); }; - for (const auto &innerCheck: state->innerChecks) { + for (const auto &innerCheck : state->innerChecks) { innerCheck->checkedChanges( ) | rpl::to_empty | start_to_stream( state->anyChanges, @@ -260,7 +260,7 @@ not_null AddInnerToggle( { if (!handleLocked()) { const auto checked = !checkView->checked(); - for (const auto &innerCheck: state->innerChecks) { + for (const auto &innerCheck : state->innerChecks) { innerCheck->setChecked(checked, anim::type::normal); } } @@ -452,7 +452,7 @@ void Ayu::SetupGhostModeToggle(not_null container) object_ptr(container)); const auto verticalLayout = wrap->entity(); auto innerChecks = std::vector>(); - for (const auto &entry: checkboxes) { + for (const auto &entry : checkboxes) { const auto c = addCheckbox(verticalLayout, entry.checkboxLabel, entry.initial); c->checkedValue( ) | start_with_next([=](bool enabled) @@ -573,7 +573,7 @@ void Ayu::SetupReadAfterActionToggle(not_null container) object_ptr(container)); const auto verticalLayout = wrap->entity(); auto innerChecks = std::vector>(); - for (const auto &entry: checkboxes) { + for (const auto &entry : checkboxes) { const auto c = addCheckbox(verticalLayout, entry.checkboxLabel, entry.initial); c->checkedValue( ) | start_with_next([=](bool enabled) @@ -828,6 +828,11 @@ void Ayu::SetupCustomization(not_null container, settings->set_showMessageSeconds(enabled); AyuSettings::save(); }, container->lifetime()); + + AddSkip(container); + AddDivider(container); + AddSkip(container); + SetupFonts(container, controller); } void Ayu::SetupShowPeerId(not_null container, @@ -915,6 +920,52 @@ void Ayu::SetupRecentStickersLimitSlider(not_null containe }); } +void Ayu::SetupFonts(not_null container, not_null controller) +{ + const auto settings = &AyuSettings::getInstance(); + + const auto commonButton = AddButtonWithLabel( + container, + tr::ayu_MainFont(), + rpl::single( + settings->mainFont.isEmpty() ? tr::ayu_FontDefault(tr::now) : settings->mainFont + ), + st::settingsButtonNoIcon); + const auto commonGuard = Ui::CreateChild(commonButton.get()); + + commonButton->addClickHandler([=] + { + *commonGuard = AyuUi::FontSelectorBox::Show(controller, [=](QString font) + { + auto ayuSettings = &AyuSettings::getInstance(); + + ayuSettings->set_mainFont(std::move(font)); + AyuSettings::save(); + }); + }); + + const auto monoButton = AddButtonWithLabel( + container, + tr::ayu_MonospaceFont(), + rpl::single( + settings->monoFont.isEmpty() ? tr::ayu_FontDefault(tr::now) : settings->monoFont + ), + st::settingsButtonNoIcon); + const auto monoGuard = Ui::CreateChild(monoButton.get()); + + monoButton->addClickHandler([=] + { + *monoGuard = AyuUi::FontSelectorBox::Show(controller, [=](QString font) + { + auto ayuSettings = &AyuSettings::getInstance(); + + ayuSettings->set_monoFont(std::move(font)); + AyuSettings::save(); + }); + }); + +} + void Ayu::SetupAyuSync(not_null container) { AddSubsectionTitle(container, tr::ayu_AyuSyncHeader()); @@ -992,52 +1043,6 @@ void Ayu::SetupExperimental(not_null container, { AddSubsectionTitle(container, tr::lng_settings_experimental()); AddPlatformOption(controller, container, StreamerMode, rpl::producer<>()); - - const auto commonButton = AddButtonWithLabel( - container, - rpl::single(qs("Customise main font")), - rpl::single( - AyuSettings::getInstance().commonFont.isEmpty() ? qs("Default") : AyuSettings::getInstance().commonFont - ), - st::settingsButtonNoIcon); - const auto commonGuard = Ui::CreateChild(commonButton.get()); - - commonButton->addClickHandler([=] - { - const auto m = commonButton->clickModifiers(); - *commonGuard = AyuUi::FontSelectorBox::Show(controller, [=](QString font) - { - auto ayuSettings = &AyuSettings::getInstance(); - - ayuSettings->set_commonFont(std::move(font)); - AyuSettings::save(); - }); - }); - - const auto monoButton = AddButtonWithLabel( - container, - rpl::single(qs("Customise mono font")), - rpl::single( - AyuSettings::getInstance().monoFont.isEmpty() ? qs("Default") - : AyuSettings::getInstance().monoFont - ), - st::settingsButtonNoIcon); - const auto monoGuard = Ui::CreateChild(monoButton.get()); - - monoButton->addClickHandler([=] - { - const auto m = monoButton->clickModifiers(); - *monoGuard = AyuUi::FontSelectorBox::Show(controller, [=](QString font) - { - auto ayuSettings = &AyuSettings::getInstance(); - - ayuSettings->set_monoFont(std::move(font)); - AyuSettings::save(); - }); - }); - - - AddDividerText(container, rpl::single(qs("Here you can customise fonts for AyuGram"))); } void Ayu::SetupAyuGramSettings(not_null container, diff --git a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h index 1e29ada69..7b20546d7 100644 --- a/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h +++ b/Telegram/SourceFiles/ayu/ui/settings/settings_ayu.h @@ -57,6 +57,8 @@ private: void SetupRecentStickersLimitSlider(not_null container); + void SetupFonts(not_null container, not_null controller); + void SetupAyuSync(not_null container); void SetupSendConfirmations(not_null container); diff --git a/Telegram/lib_ui b/Telegram/lib_ui index 1edb7981b..312da65aa 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit 1edb7981b1c1023d71812f07cb18ec1e51f1289b +Subproject commit 312da65aa0c5bea95b39a48f6066d49df7bcf4f9