diff --git a/indra/llrender/llfontregistry.cpp b/indra/llrender/llfontregistry.cpp
index 0e12f5225d..7e5f215a76 100644
--- a/indra/llrender/llfontregistry.cpp
+++ b/indra/llrender/llfontregistry.cpp
@@ -47,8 +47,35 @@ bool init_from_xml(LLFontRegistry* registry, LLXMLNodePtr node);
const std::string MACOSX_FONT_PATH_LIBRARY = "/Library/Fonts/";
const std::string MACOSX_FONT_SUPPLEMENTAL = "Supplemental/";
+
+
+// font functors with UI control access
+static bool isEmojiUseBW(llwchar wch)
+{
+ static LLCachedControl emoji_use_bw(gSavedSettings, "FSUseEmojiBW", false);
+ if(emoji_use_bw)
+ {
+ return (LLStringOps::isEmoji(wch));
+ }
+ return false;
+}
+
+
+// static
+static bool isEmojiUseColor(llwchar wch)
+{
+ static LLCachedControl emoji_use_bw(gSavedSettings, "FSUseEmojiBW", false);
+ if(!emoji_use_bw)
+ {
+ return (LLStringOps::isEmoji(wch));
+ }
+ return false;
+}
+//
LLFontDescriptor::char_functor_map_t LLFontDescriptor::mCharFunctors({
{ "is_emoji", LLStringOps::isEmoji }
+ , { "is_emoji_use_color", isEmojiUseColor }
+ , { "is_emoji_use_bw", isEmojiUseBW }
});
LLFontDescriptor::LLFontDescriptor():
diff --git a/indra/llrender/llfontregistry.h b/indra/llrender/llfontregistry.h
index 4d8c9ed544..4746348b41 100644
--- a/indra/llrender/llfontregistry.h
+++ b/indra/llrender/llfontregistry.h
@@ -34,6 +34,10 @@ class LLFontGL;
typedef std::vector string_vec_t;
+// preference aware font functors
+static bool isEmojiUseBW(llwchar wch);
+static bool isEmojiUseColor(llwchar wch);
+//
struct LLFontFileInfo
{
LLFontFileInfo(const std::string& file_name, const std::function& char_functor = nullptr)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7f50889dec..0213ca17d7 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -26770,5 +26770,27 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSUsePrettyEmojiButton
+
+ FSPrettyEmojiButtonCode
+
diff --git a/indra/newview/fonts/fonts.xml b/indra/newview/fonts/fonts.xml
index 805f77b605..e3a0b1f3e8 100644
--- a/indra/newview/fonts/fonts.xml
+++ b/indra/newview/fonts/fonts.xml
@@ -3,7 +3,8 @@
DejaVuSans.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_cascadia_code.xml b/indra/newview/fonts/fonts_cascadia_code.xml
index 693240378f..895cf7eabb 100644
--- a/indra/newview/fonts/fonts_cascadia_code.xml
+++ b/indra/newview/fonts/fonts_cascadia_code.xml
@@ -3,7 +3,8 @@
CascadiaCode-Light.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
@@ -83,15 +84,7 @@
- NotoEmoji-Regular.ttf
-
-
- NotoEmoji-Regular.ttf
-
-
+ comment="Name of Black and White emoji font">
NotoEmoji-Regular.ttf
diff --git a/indra/newview/fonts/fonts_celestia_medium_redux.xml b/indra/newview/fonts/fonts_celestia_medium_redux.xml
index 817052b09f..6b28aee211 100644
--- a/indra/newview/fonts/fonts_celestia_medium_redux.xml
+++ b/indra/newview/fonts/fonts_celestia_medium_redux.xml
@@ -3,7 +3,8 @@
CelestiaMediumRedux1.55.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_deja_vu_all_caps.xml b/indra/newview/fonts/fonts_deja_vu_all_caps.xml
index 04daf0df70..8780cc6262 100644
--- a/indra/newview/fonts/fonts_deja_vu_all_caps.xml
+++ b/indra/newview/fonts/fonts_deja_vu_all_caps.xml
@@ -3,7 +3,8 @@
DejaVuSansAllCaps.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_droid.xml b/indra/newview/fonts/fonts_droid.xml
index 8fd6c8846d..5e575b984f 100644
--- a/indra/newview/fonts/fonts_droid.xml
+++ b/indra/newview/fonts/fonts_droid.xml
@@ -3,7 +3,8 @@
DroidSans.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_dyslexia.xml b/indra/newview/fonts/fonts_dyslexia.xml
index 7379045ab0..b41fdc1306 100644
--- a/indra/newview/fonts/fonts_dyslexia.xml
+++ b/indra/newview/fonts/fonts_dyslexia.xml
@@ -3,7 +3,8 @@
MobiSans.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_liberation.xml b/indra/newview/fonts/fonts_liberation.xml
index 4164f47fa9..0261b75696 100644
--- a/indra/newview/fonts/fonts_liberation.xml
+++ b/indra/newview/fonts/fonts_liberation.xml
@@ -3,7 +3,8 @@
LiberationSans-Regular.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_mobi.xml b/indra/newview/fonts/fonts_mobi.xml
index 054874e20e..d9f6db65f9 100644
--- a/indra/newview/fonts/fonts_mobi.xml
+++ b/indra/newview/fonts/fonts_mobi.xml
@@ -3,7 +3,8 @@
MobiSans.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_noto.xml b/indra/newview/fonts/fonts_noto.xml
index d725f2f853..d57a8c209c 100644
--- a/indra/newview/fonts/fonts_noto.xml
+++ b/indra/newview/fonts/fonts_noto.xml
@@ -3,7 +3,8 @@
NotoSans.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_roboto.xml b/indra/newview/fonts/fonts_roboto.xml
index 1150b74b2c..18fad6b060 100644
--- a/indra/newview/fonts/fonts_roboto.xml
+++ b/indra/newview/fonts/fonts_roboto.xml
@@ -3,7 +3,8 @@
DroidSans.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fonts/fonts_ubuntu.xml b/indra/newview/fonts/fonts_ubuntu.xml
index f3007dc0ae..08d6051436 100644
--- a/indra/newview/fonts/fonts_ubuntu.xml
+++ b/indra/newview/fonts/fonts_ubuntu.xml
@@ -3,7 +3,8 @@
Ubuntu-R.ttf
- TwemojiSVG.ttf
+ TwemojiSVG.ttf
+ NotoEmoji-Regular.ttf
meiryo.TTC
YuGothR.ttc
diff --git a/indra/newview/fsfloaterim.cpp b/indra/newview/fsfloaterim.cpp
index c3b25270d2..193ab0d1a8 100644
--- a/indra/newview/fsfloaterim.cpp
+++ b/indra/newview/fsfloaterim.cpp
@@ -972,7 +972,21 @@ BOOL FSFloaterIM::postBuild()
mEmojiRecentIconsCtrl->setCommitCallback([this](LLUICtrl*, const LLSD& value) { onRecentEmojiPicked(value); });
mEmojiRecentIconsCtrl->setVisible(false);
+ static bool usePrettyEmojiButton = gSavedSettings.getBOOL( "FSUsePrettyEmojiButton" );
+ static bool useBWEmojis = gSavedSettings.getBOOL( "FSUseBWEmojis" );
mEmojiPickerToggleBtn = getChild("emoji_picker_toggle_btn");
+ if (usePrettyEmojiButton)
+ {
+ static auto emoji_btn_char = gSavedSettings.getU32("FSPrettyEmojiButtonCode");
+ mEmojiPickerToggleBtn->setImageOverlay(LLUUID::null);
+ mEmojiPickerToggleBtn->setFont(LLFontGL::getFontEmoji(useBWEmojis));
+ mEmojiPickerToggleBtn->setLabel(LLUIString(LLWString(1, emoji_btn_char)));
+ }
+ else
+ {
+ mEmojiPickerToggleBtn->setLabel(LLUIString(""));
+ mEmojiPickerToggleBtn->setImageOverlay("Emoji_Picker_Icon");
+ }
mEmojiPickerToggleBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerToggleBtnClicked(); });
mRecentEmojisUpdatedCallbackConnection = LLFloaterEmojiPicker::setRecentEmojisUpdatedCallback([this](const std::list& recent_emojis_list) { initEmojiRecentPanel(); });
diff --git a/indra/newview/fsfloaternearbychat.cpp b/indra/newview/fsfloaternearbychat.cpp
index b2922e5f57..34f66d2850 100644
--- a/indra/newview/fsfloaternearbychat.cpp
+++ b/indra/newview/fsfloaternearbychat.cpp
@@ -161,7 +161,21 @@ BOOL FSFloaterNearbyChat::postBuild()
mEmojiRecentIconsCtrl->setCommitCallback([this](LLUICtrl*, const LLSD& value) { onRecentEmojiPicked(value); });
mEmojiRecentIconsCtrl->setVisible(false);
+ static bool usePrettyEmojiButton = gSavedSettings.getBOOL( "FSUsePrettyEmojiButton" );
+ static bool useBWEmojis = gSavedSettings.getBOOL( "FSUseBWEmojis" );
mEmojiPickerToggleBtn = getChild("emoji_picker_toggle_btn");
+ if (usePrettyEmojiButton)
+ {
+ static auto emoji_btn_char = gSavedSettings.getU32("FSPrettyEmojiButtonCode");
+ mEmojiPickerToggleBtn->setImageOverlay(LLUUID::null);
+ mEmojiPickerToggleBtn->setFont(LLFontGL::getFontEmoji(useBWEmojis));
+ mEmojiPickerToggleBtn->setLabel(LLUIString(LLWString(1, emoji_btn_char)));
+ }
+ else
+ {
+ mEmojiPickerToggleBtn->setLabel(LLUIString(""));
+ mEmojiPickerToggleBtn->setImageOverlay("Emoji_Picker_Icon");
+ }
mEmojiPickerToggleBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerToggleBtnClicked(); });
mRecentEmojisUpdatedCallbackConnection = LLFloaterEmojiPicker::setRecentEmojisUpdatedCallback([this](const std::list& recent_emojis_list) { initEmojiRecentPanel(); });
diff --git a/indra/newview/skins/default/xui/en/floater_fs_im_session.xml b/indra/newview/skins/default/xui/en/floater_fs_im_session.xml
index 1d81dca1b6..252d7e317d 100644
--- a/indra/newview/skins/default/xui/en/floater_fs_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_fs_im_session.xml
@@ -655,27 +655,27 @@
auto_resize="false"
user_resize="false"
name="emoji_button_layout_panel"
- width="35"
- top="0"
- bottom="-1">
+ width="37">
+ />