refactor: use SettingWidget::dropdown for emoji style (#6300)

This commit is contained in:
pajlada
2025-06-28 12:21:47 +02:00
committed by GitHub
parent ae3089b35c
commit 847814324f
8 changed files with 37 additions and 19 deletions
+1
View File
@@ -62,6 +62,7 @@
- Dev: Merged top/bottom and left/right notebook layouts. (#6215) - Dev: Merged top/bottom and left/right notebook layouts. (#6215)
- Dev: Refactored `Button` and friends. (#6102, #6255, #6266) - Dev: Refactored `Button` and friends. (#6102, #6255, #6266)
- Dev: Made Settings & Account button on Linux/macOS SVGs. (#6267) - Dev: Made Settings & Account button on Linux/macOS SVGs. (#6267)
- Dev: Emoji style / set is now stored lowercase (and matched case-insensitively). Changing emoji style from this point on and then running an old version might mean you will use the Twitter emoji style by default. (#6300)
- Dev: `OnceFlag`'s internal flag is now atomic. (#6237) - Dev: `OnceFlag`'s internal flag is now atomic. (#6237)
- Dev: Bumped clang-format requirement to 19. (#6236) - Dev: Bumped clang-format requirement to 19. (#6236)
+1
View File
@@ -350,6 +350,7 @@ set(SOURCE_FILES
providers/emoji/Emojis.cpp providers/emoji/Emojis.cpp
providers/emoji/Emojis.hpp providers/emoji/Emojis.hpp
providers/emoji/EmojiStyle.hpp
providers/ffz/FfzBadges.cpp providers/ffz/FfzBadges.cpp
providers/ffz/FfzBadges.hpp providers/ffz/FfzBadges.hpp
+18
View File
@@ -0,0 +1,18 @@
#pragma once
#include <cstdint>
namespace chatterino {
/// The available emoji styles in Chatterino
///
/// Each enum value has a "bitset value" defined so it can be used in a FlagsEnum to figure out
/// which emojis support which emoji style / set
enum class EmojiStyle : std::uint8_t {
Twitter = 1 << 0,
Facebook = 1 << 1,
Apple = 1 << 2,
Google = 1 << 3,
};
} // namespace chatterino
+5 -4
View File
@@ -4,6 +4,7 @@
#include "messages/Emote.hpp" #include "messages/Emote.hpp"
#include "messages/Image.hpp" #include "messages/Image.hpp"
#include "singletons/Settings.hpp" #include "singletons/Settings.hpp"
#include "util/QCompareTransparent.hpp"
#include "util/QMagicEnum.hpp" #include "util/QMagicEnum.hpp"
#include "util/RapidjsonHelpers.hpp" #include "util/RapidjsonHelpers.hpp"
@@ -245,15 +246,15 @@ void Emojis::sortEmojis()
void Emojis::loadEmojiSet() void Emojis::loadEmojiSet()
{ {
getSettings()->emojiSet.connect([this](const auto &emojiSet) { getSettings()->emojiSet.connect([this](const auto &emojiSet) {
EmojiData::Capability setCapability = auto setCapability = qmagicenum::enumCast<EmojiData::Capability>(
qmagicenum::enumCast<EmojiData::Capability>(emojiSet).value_or( emojiSet, qmagicenum::CASE_INSENSITIVE)
EmojiData::Capability::Google); .value_or(EmojiData::Capability::Google);
for (const auto &emoji : this->emojis) for (const auto &emoji : this->emojis)
{ {
QString emojiSetToUse = emojiSet; QString emojiSetToUse = emojiSet;
// clang-format off // clang-format off
static std::map<QString, QString> emojiSets = { static std::map<QString, QString, QCompareCaseInsensitive> emojiSets = {
// JSDELIVR // JSDELIVR
// {"Twitter", "https://cdn.jsdelivr.net/npm/emoji-datasource-twitter@4.0.4/img/twitter/64/"}, // {"Twitter", "https://cdn.jsdelivr.net/npm/emoji-datasource-twitter@4.0.4/img/twitter/64/"},
// {"Facebook", "https://cdn.jsdelivr.net/npm/emoji-datasource-facebook@4.0.4/img/facebook/64/"}, // {"Facebook", "https://cdn.jsdelivr.net/npm/emoji-datasource-facebook@4.0.4/img/facebook/64/"},
+2 -6
View File
@@ -1,6 +1,7 @@
#pragma once #pragma once
#include "common/FlagsEnum.hpp" #include "common/FlagsEnum.hpp"
#include "providers/emoji/EmojiStyle.hpp"
#include <boost/variant.hpp> #include <boost/variant.hpp>
#include <QMap> #include <QMap>
@@ -30,12 +31,7 @@ struct EmojiData {
// i.e. thinking // i.e. thinking
std::vector<QString> shortCodes; std::vector<QString> shortCodes;
enum class Capability : uint8_t { using Capability = EmojiStyle;
Apple = 1 << 0,
Google = 1 << 1,
Twitter = 1 << 2,
Facebook = 1 << 3,
};
using Capabilities = FlagsEnum<Capability>; using Capabilities = FlagsEnum<Capability>;
Capabilities capabilities; Capabilities capabilities;
+5 -1
View File
@@ -14,6 +14,7 @@
#include "controllers/moderationactions/ModerationAction.hpp" #include "controllers/moderationactions/ModerationAction.hpp"
#include "controllers/nicknames/Nickname.hpp" #include "controllers/nicknames/Nickname.hpp"
#include "controllers/sound/ISoundController.hpp" #include "controllers/sound/ISoundController.hpp"
#include "providers/emoji/EmojiStyle.hpp"
#include "singletons/Toasts.hpp" #include "singletons/Toasts.hpp"
#include "util/QMagicEnumTagged.hpp" #include "util/QMagicEnumTagged.hpp"
#include "util/RapidJsonSerializeQString.hpp" // IWYU pragma: keep #include "util/RapidJsonSerializeQString.hpp" // IWYU pragma: keep
@@ -368,7 +369,10 @@ public:
}; };
BoolSetting showUnlistedSevenTVEmotes = { BoolSetting showUnlistedSevenTVEmotes = {
"/emotes/showUnlistedSevenTVEmotes", false}; "/emotes/showUnlistedSevenTVEmotes", false};
QStringSetting emojiSet = {"/emotes/emojiSet", "Twitter"}; EnumStringSetting<EmojiStyle> emojiSet = {
"/emotes/emojiSet",
EmojiStyle::Twitter,
};
BoolSetting stackBits = {"/emotes/stackBits", false}; BoolSetting stackBits = {"/emotes/stackBits", false};
BoolSetting removeSpacesBetweenEmotes = { BoolSetting removeSpacesBetweenEmotes = {
+3 -8
View File
@@ -661,14 +661,9 @@ void GeneralPage::initLayout(GeneralPageView &layout)
SettingWidget::dropdown("Emote & badge thumbnail size on hover", SettingWidget::dropdown("Emote & badge thumbnail size on hover",
s.emoteTooltipScale) s.emoteTooltipScale)
->addTo(layout); ->addTo(layout);
layout.addDropdown("Emoji style",
{ SettingWidget::dropdown("Emoji style", s.emojiSet)->addTo(layout);
"Twitter",
"Facebook",
"Apple",
"Google",
},
s.emojiSet);
SettingWidget::checkbox("Show BetterTTV global emotes", SettingWidget::checkbox("Show BetterTTV global emotes",
s.enableBTTVGlobalEmotes) s.enableBTTVGlobalEmotes)
->addKeywords({"bttv"}) ->addKeywords({"bttv"})
@@ -227,6 +227,8 @@ template SettingWidget *SettingWidget::dropdown<TabStyle>(
const QString &label, EnumStringSetting<TabStyle> &setting); const QString &label, EnumStringSetting<TabStyle> &setting);
template SettingWidget *SettingWidget::dropdown<ShowModerationState>( template SettingWidget *SettingWidget::dropdown<ShowModerationState>(
const QString &label, EnumStringSetting<ShowModerationState> &setting); const QString &label, EnumStringSetting<ShowModerationState> &setting);
template SettingWidget *SettingWidget::dropdown<EmojiStyle>(
const QString &label, EnumStringSetting<EmojiStyle> &setting);
SettingWidget *SettingWidget::colorButton(const QString &label, SettingWidget *SettingWidget::colorButton(const QString &label,
QStringSetting &setting) QStringSetting &setting)