mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
feat: add font picker
This commit is contained in:
parent
b6cf5ebb19
commit
eb8331c957
9 changed files with 1396 additions and 10 deletions
|
@ -138,6 +138,8 @@ PRIVATE
|
|||
ayu/ui/boxes/edit_deleted_mark.h
|
||||
ayu/ui/boxes/edit_edited_mark.cpp
|
||||
ayu/ui/boxes/edit_edited_mark.h
|
||||
ayu/ui/boxes/font_selector.cpp
|
||||
ayu/ui/boxes/font_selector.h
|
||||
ayu/sync/ayu_sync_controller.cpp
|
||||
ayu/sync/ayu_sync_controller.h
|
||||
ayu/sync/models.h
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "ayu/ui/ayu_lottie.h"
|
||||
#include "ayu/database/ayu_database.h"
|
||||
#include "lang/lang_instance.h"
|
||||
#include "ayu/ayu_settings.h"
|
||||
|
||||
namespace AyuInfra
|
||||
{
|
||||
|
@ -27,18 +28,29 @@ void initLang()
|
|||
CustomLangPack::currentInstance()->fetchCustomLangPack(langPackId, langPackBaseId);
|
||||
}
|
||||
|
||||
void initLottie() {
|
||||
void initLottie()
|
||||
{
|
||||
AyuUi::setLottieImpl(std::make_shared<AyuUi::AyuLottieImpl>());
|
||||
}
|
||||
|
||||
void initDatabase() {
|
||||
void initDatabase()
|
||||
{
|
||||
AyuDatabase::initialize();
|
||||
}
|
||||
|
||||
void initFonts()
|
||||
{
|
||||
auto ayuSettings = AyuSettings::getInstance();
|
||||
|
||||
AyuFonts::setCommonFont(ayuSettings.commonFont);
|
||||
AyuFonts::setMonoFont(ayuSettings.monoFont);
|
||||
}
|
||||
|
||||
void init()
|
||||
{
|
||||
initLang();
|
||||
initLottie();
|
||||
initFonts();
|
||||
initDatabase();
|
||||
}
|
||||
|
||||
|
|
|
@ -273,6 +273,16 @@ void AyuGramSettings::set_showGhostToggleInDrawer(bool val)
|
|||
showGhostToggleInDrawer = val;
|
||||
}
|
||||
|
||||
void AyuGramSettings::set_commonFont(QString val)
|
||||
{
|
||||
commonFont = val;
|
||||
}
|
||||
|
||||
void AyuGramSettings::set_monoFont(QString val)
|
||||
{
|
||||
monoFont = val;
|
||||
}
|
||||
|
||||
void AyuGramSettings::set_showPeerId(int val)
|
||||
{
|
||||
showPeerId = val;
|
||||
|
|
|
@ -51,6 +51,8 @@ public:
|
|||
editedMark = tr::lng_edited(tr::now);
|
||||
recentStickersCount = 20;
|
||||
showGhostToggleInDrawer = true;
|
||||
commonFont = "";
|
||||
monoFont = "";
|
||||
|
||||
/*
|
||||
* showPeerId = 0 means no ID shown
|
||||
|
@ -86,6 +88,8 @@ public:
|
|||
QString editedMark;
|
||||
int recentStickersCount;
|
||||
bool showGhostToggleInDrawer;
|
||||
QString commonFont;
|
||||
QString monoFont;
|
||||
int showPeerId;
|
||||
bool hideAllChatsFolder;
|
||||
bool showMessageSeconds;
|
||||
|
@ -132,6 +136,10 @@ public:
|
|||
|
||||
void set_showGhostToggleInDrawer(bool val);
|
||||
|
||||
void set_commonFont(QString val);
|
||||
|
||||
void set_monoFont(QString val);
|
||||
|
||||
void set_showPeerId(int val);
|
||||
|
||||
void set_showMessageSeconds(bool val);
|
||||
|
@ -165,6 +173,8 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(
|
|||
editedMark,
|
||||
recentStickersCount,
|
||||
showGhostToggleInDrawer,
|
||||
commonFont,
|
||||
monoFont,
|
||||
showPeerId,
|
||||
showMessageSeconds,
|
||||
hideAllChatsFolder,
|
||||
|
|
1230
Telegram/SourceFiles/ayu/ui/boxes/font_selector.cpp
Normal file
1230
Telegram/SourceFiles/ayu/ui/boxes/font_selector.cpp
Normal file
File diff suppressed because it is too large
Load diff
73
Telegram/SourceFiles/ayu/ui/boxes/font_selector.h
Normal file
73
Telegram/SourceFiles/ayu/ui/boxes/font_selector.h
Normal file
|
@ -0,0 +1,73 @@
|
|||
//
|
||||
// Created by MaxPlays on 12/09/2023.
|
||||
//
|
||||
|
||||
#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
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "lang/lang_cloud_manager.h"
|
||||
#include "boxes/abstract_box.h"
|
||||
#include "base/binary_guard.h"
|
||||
|
||||
struct LanguageId;
|
||||
struct Font;
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
|
||||
class MultiSelect;
|
||||
struct ScrollToRequest;
|
||||
class VerticalLayout;
|
||||
|
||||
} // namespace Ui
|
||||
|
||||
namespace Window
|
||||
{
|
||||
|
||||
class SessionController;
|
||||
|
||||
} // namespace Window
|
||||
namespace AyuUi
|
||||
{
|
||||
|
||||
class FontSelectorBox: public Ui::BoxContent
|
||||
{
|
||||
public:
|
||||
FontSelectorBox(QWidget *, Window::SessionController *controller, Fn<void(QString font)> hook);
|
||||
|
||||
void setInnerFocus() override;
|
||||
|
||||
static base::binary_guard Show(Window::SessionController *controller, const Fn<void(QString font)> hook);
|
||||
private:
|
||||
QString _selectedFont;
|
||||
|
||||
protected:
|
||||
void prepare() override;
|
||||
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
|
||||
private:
|
||||
void setupTop(not_null<Ui::VerticalLayout *> container);
|
||||
|
||||
[[nodiscard]] int rowsInPage() const;
|
||||
|
||||
Window::SessionController *_controller = nullptr;
|
||||
rpl::event_stream<bool> _translateChatTurnOff;
|
||||
Fn<void()> _setInnerFocus;
|
||||
Fn<Ui::ScrollToRequest(int rows)> _jump;
|
||||
Fn<void(QString font)> _hook;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //TELEGRAM_FONT_SELECTOR_H
|
|
@ -10,6 +10,7 @@
|
|||
#include "ayu/sync/ayu_sync_controller.h"
|
||||
#include "ayu/ui/boxes/edit_deleted_mark.h"
|
||||
#include "ayu/ui/boxes/edit_edited_mark.h"
|
||||
#include "ayu/ui/boxes/font_selector.h"
|
||||
|
||||
#include "apiwrap.h"
|
||||
#include "lang_auto.h"
|
||||
|
@ -108,7 +109,7 @@ not_null<Ui::RpWidget *> 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,
|
||||
|
@ -259,7 +260,7 @@ not_null<Ui::RpWidget *> 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);
|
||||
}
|
||||
}
|
||||
|
@ -344,7 +345,8 @@ void Ayu::AddPlatformOption(
|
|||
}
|
||||
}
|
||||
|
||||
void Ayu::SetupGhostModeToggle(not_null<Ui::VerticalLayout *> container) {
|
||||
void Ayu::SetupGhostModeToggle(not_null<Ui::VerticalLayout *> container)
|
||||
{
|
||||
auto settings = &AyuSettings::getInstance();
|
||||
|
||||
const auto widget = object_ptr<Ui::VerticalLayout>(this);
|
||||
|
@ -450,7 +452,7 @@ void Ayu::SetupGhostModeToggle(not_null<Ui::VerticalLayout *> container) {
|
|||
object_ptr<Ui::VerticalLayout>(container));
|
||||
const auto verticalLayout = wrap->entity();
|
||||
auto innerChecks = std::vector<not_null<Ui::AbstractCheckView *>>();
|
||||
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)
|
||||
|
@ -478,7 +480,8 @@ void Ayu::SetupGhostModeToggle(not_null<Ui::VerticalLayout *> container) {
|
|||
}, raw->lifetime());
|
||||
}
|
||||
|
||||
void Ayu::SetupReadAfterActionToggle(not_null<Ui::VerticalLayout *> container) {
|
||||
void Ayu::SetupReadAfterActionToggle(not_null<Ui::VerticalLayout *> container)
|
||||
{
|
||||
auto settings = &AyuSettings::getInstance();
|
||||
|
||||
const auto widget = object_ptr<Ui::VerticalLayout>(this);
|
||||
|
@ -570,7 +573,7 @@ void Ayu::SetupReadAfterActionToggle(not_null<Ui::VerticalLayout *> container) {
|
|||
object_ptr<Ui::VerticalLayout>(container));
|
||||
const auto verticalLayout = wrap->entity();
|
||||
auto innerChecks = std::vector<not_null<Ui::AbstractCheckView *>>();
|
||||
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)
|
||||
|
@ -989,6 +992,52 @@ void Ayu::SetupExperimental(not_null<Ui::VerticalLayout *> 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<base::binary_guard>(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<base::binary_guard>(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<Ui::VerticalLayout *> container,
|
||||
|
|
|
@ -24,7 +24,7 @@ extern base::options::toggle StreamerMode;
|
|||
namespace Settings
|
||||
{
|
||||
|
||||
class Ayu : public Section<Ayu>
|
||||
class Ayu: public Section<Ayu>
|
||||
{
|
||||
public:
|
||||
Ayu(QWidget *parent, not_null<Window::SessionController *> controller);
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit ab84152a69c7fe03b3d3353d5a887ee23a354445
|
||||
Subproject commit a95896165567af0b7d7e511c0d4807a57cc608f6
|
Loading…
Add table
Reference in a new issue