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 + + Comment + Use an emoji for the emoji button. + Persist + 1 + Type + Boolean + Value + 1 + + FSPrettyEmojiButtonCode + + Comment + Decimal code for the emoji button. Try 128569 or 128571 for example + Persist + 1 + Type + U32 + Value + 128578 + 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">