From 4e2b2f662ad3f7b2e09f9451227bbf7018d91708 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 20 Oct 2019 23:45:52 +0200 Subject: Update freetype to 2.10.1 and move viewer fonts to their own package --- indra/newview/CMakeLists.txt | 6 ++ indra/newview/fonts/DejaVu-license.txt | 99 ------------------------- indra/newview/fonts/DejaVuSans-Bold.ttf | Bin 573136 -> 0 bytes indra/newview/fonts/DejaVuSans-BoldOblique.ttf | Bin 524056 -> 0 bytes indra/newview/fonts/DejaVuSans-Oblique.ttf | Bin 523804 -> 0 bytes indra/newview/fonts/DejaVuSans.ttf | Bin 622280 -> 0 bytes indra/newview/fonts/DejaVuSansMono.ttf | Bin 321524 -> 0 bytes indra/newview/viewer_manifest.py | 2 +- 8 files changed, 7 insertions(+), 100 deletions(-) delete mode 100644 indra/newview/fonts/DejaVu-license.txt delete mode 100644 indra/newview/fonts/DejaVuSans-Bold.ttf delete mode 100644 indra/newview/fonts/DejaVuSans-BoldOblique.ttf delete mode 100644 indra/newview/fonts/DejaVuSans-Oblique.ttf delete mode 100644 indra/newview/fonts/DejaVuSans.ttf delete mode 100644 indra/newview/fonts/DejaVuSansMono.ttf (limited to 'indra/newview') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b8789da66b..b83d3afadd 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1470,6 +1470,12 @@ if (WINDOWS) set(viewer_SOURCE_FILES "${viewer_SOURCE_FILES}" llviewerprecompiledheaders.cpp) endif(USE_PRECOMPILED_HEADERS) + message("Copying fonts") + file(GLOB FONT_FILE_GLOB_LIST + "${AUTOBUILD_INSTALL_DIR}/fonts/*" + ) + file(COPY ${FONT_FILE_GLOB_LIST} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/fonts") + # Replace the icons with the appropriate ones for the channel # ('test' is the default) set(ICON_PATH "test") diff --git a/indra/newview/fonts/DejaVu-license.txt b/indra/newview/fonts/DejaVu-license.txt deleted file mode 100644 index 254e2cc42a..0000000000 --- a/indra/newview/fonts/DejaVu-license.txt +++ /dev/null @@ -1,99 +0,0 @@ -Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. -Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) - -Bitstream Vera Fonts Copyright ------------------------------- - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is -a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute the -Font Software, including without limitation the rights to use, copy, merge, -publish, distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to the -following conditions: - -The above copyright and trademark notices and this permission notice shall -be included in all copies of one or more of the Font Software typefaces. - -The Font Software may be modified, altered, or added to, and in particular -the designs of glyphs or characters in the Fonts may be modified and -additional glyphs or characters may be added to the Fonts, only if the fonts -are renamed to names not containing either the words "Bitstream" or the word -"Vera". - -This License becomes null and void to the extent applicable to Fonts or Font -Software that has been modified and is distributed under the "Bitstream -Vera" names. - -The Font Software may be sold as part of a larger software package but no -copy of one or more of the Font Software typefaces may be sold by itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, -TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME -FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING -ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE -FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font Software -without prior written authorization from the Gnome Foundation or Bitstream -Inc., respectively. For further information, contact: fonts at gnome dot -org. - -Arev Fonts Copyright ------------------------------- - -Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and -associated documentation files (the "Font Software"), to reproduce -and distribute the modifications to the Bitstream Vera Font Software, -including without limitation the rights to use, copy, merge, publish, -distribute, and/or sell copies of the Font Software, and to permit -persons to whom the Font Software is furnished to do so, subject to -the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Tavmjong Bah" or the word "Arev". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Tavmjong Bah Arev" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the name of Tavmjong Bah shall not -be used in advertising or otherwise to promote the sale, use or other -dealings in this Font Software without prior written authorization -from Tavmjong Bah. For further information, contact: tavmjong @ free -. fr. - -$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $ diff --git a/indra/newview/fonts/DejaVuSans-Bold.ttf b/indra/newview/fonts/DejaVuSans-Bold.ttf deleted file mode 100644 index ec1a2ebaf2..0000000000 Binary files a/indra/newview/fonts/DejaVuSans-Bold.ttf and /dev/null differ diff --git a/indra/newview/fonts/DejaVuSans-BoldOblique.ttf b/indra/newview/fonts/DejaVuSans-BoldOblique.ttf deleted file mode 100644 index 1a5576460d..0000000000 Binary files a/indra/newview/fonts/DejaVuSans-BoldOblique.ttf and /dev/null differ diff --git a/indra/newview/fonts/DejaVuSans-Oblique.ttf b/indra/newview/fonts/DejaVuSans-Oblique.ttf deleted file mode 100644 index becc549927..0000000000 Binary files a/indra/newview/fonts/DejaVuSans-Oblique.ttf and /dev/null differ diff --git a/indra/newview/fonts/DejaVuSans.ttf b/indra/newview/fonts/DejaVuSans.ttf deleted file mode 100644 index c1b19d8705..0000000000 Binary files a/indra/newview/fonts/DejaVuSans.ttf and /dev/null differ diff --git a/indra/newview/fonts/DejaVuSansMono.ttf b/indra/newview/fonts/DejaVuSansMono.ttf deleted file mode 100644 index 6bc854ddae..0000000000 Binary files a/indra/newview/fonts/DejaVuSansMono.ttf and /dev/null differ diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index fcb97ded8f..d5526bf5fd 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -137,7 +137,7 @@ class ViewerManifest(LLManifest): self.path("*.tga") # Include our fonts - with self.prefix(src_dst="fonts"): + with self.prefix(src="../packages/fonts"): self.path("*.ttf") self.path("*.txt") -- cgit v1.2.3 From 05566ce7a7e1895a5b3ab2f9df2587dac63429e1 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 27 Oct 2019 16:41:38 +0200 Subject: Font debugging aid to dump descriptors + individual textures --- indra/newview/llviewermenu.cpp | 4 ++++ indra/newview/skins/default/xui/en/menu_login.xml | 26 ++++++++++++++++++++++ indra/newview/skins/default/xui/en/menu_viewer.xml | 12 ++++++++++ 3 files changed, 42 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 52b2c631fa..f99cbedcbe 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -9121,6 +9121,10 @@ void initialize_menus() //Develop (clear cache immediately) commit.add("Develop.ClearCache", boost::bind(&handle_cache_clear_immediately) ); + // Develop (Fonts debugging) + commit.add("Develop.Fonts.Dump", boost::bind(&LLFontGL::dumpFonts)); + commit.add("Develop.Fonts.DumpTextures", boost::bind(&LLFontGL::dumpFontTextures)); + // Admin >Object view_listener_t::addMenu(new LLAdminForceTakeCopy(), "Admin.ForceTakeCopy"); view_listener_t::addMenu(new LLAdminHandleObjectOwnerSelf(), "Admin.HandleObjectOwnerSelf"); diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index 07b3cc3bd8..93795be474 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -166,6 +166,32 @@ parameter="ui_preview" /> + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 418308bc7ce4e9924d6280f784222ba45172eea4 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Wed, 6 Nov 2019 12:34:26 +0100 Subject: Characters can have more than one representation in LLFontFreetype * By default all viewer text will use B/W glyphs * Added temporary use_color attribute to LLTextBase for testing --- indra/newview/llexpandabletextbox.cpp | 2 +- indra/newview/llfloateruipreview.cpp | 8 ++++---- indra/newview/lltextureview.cpp | 2 +- indra/newview/llviewerwindow.cpp | 2 +- indra/newview/llworldmapview.cpp | 3 ++- 5 files changed, 9 insertions(+), 8 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index d657f04457..a03b84daa5 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -88,7 +88,7 @@ public: mStyle->getShadowType(), end - start, draw_rect.getWidth(), &right_x, - mEditor.getUseEllipses()); + mEditor.getUseEllipses(), mEditor.getUseColor()); return right_x; } /*virtual*/ bool canEdit() const { return false; } diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index db5a192287..211371571d 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -1601,7 +1601,7 @@ void LLOverlapPanel::draw() LLUI::translate(5,getRect().getHeight()-20); // translate to top-5,left-5 LLView::sDrawPreviewHighlights = FALSE; LLFontGL::getFontSansSerifSmall()->renderUTF8(current_selection_text, 0, 0, 0, text_color, - LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE); + LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE); } else { @@ -1619,7 +1619,7 @@ void LLOverlapPanel::draw() std::string current_selection = std::string(current_selection_text + LLView::sPreviewClickedElement->getName() + " (no elements overlap)"); S32 text_width = LLFontGL::getFontSansSerifSmall()->getWidth(current_selection) + 10; LLFontGL::getFontSansSerifSmall()->renderUTF8(current_selection, 0, 0, 0, text_color, - LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE); + LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE); // widen panel enough to fit this text LLRect rect = getRect(); setRect(LLRect(rect.mLeft,rect.mTop,rect.getWidth() < text_width ? rect.mLeft + text_width : rect.mRight,rect.mTop)); @@ -1685,7 +1685,7 @@ void LLOverlapPanel::draw() // draw currently-selected element at top of overlappers LLUI::translate(0,-mSpacing); LLFontGL::getFontSansSerifSmall()->renderUTF8(current_selection_text + LLView::sPreviewClickedElement->getName(), 0, 0, 0, text_color, - LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE); + LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE); LLUI::translate(0,-mSpacing-LLView::sPreviewClickedElement->getRect().getHeight()); // skip spacing distance + height LLView::sPreviewClickedElement->draw(); @@ -1700,7 +1700,7 @@ void LLOverlapPanel::draw() // draw name LLUI::translate(0,-mSpacing); LLFontGL::getFontSansSerifSmall()->renderUTF8(overlapper_text + viewp->getName(), 0, 0, 0, text_color, - LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE); + LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE); // draw element LLUI::translate(0,-mSpacing-viewp->getRect().getHeight()); // skip spacing distance + height diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 0d2edc0268..9ec6b99416 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -612,7 +612,7 @@ void LLGLTexMemBar::draw() LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*3, text_color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, - &x_right, FALSE); + &x_right, /*use_ellipses*/FALSE, /*use_color*/FALSE); F32Kilobits bandwidth(LLAppViewer::getTextureFetch()->getTextureBandwidth()); F32Kilobits max_bandwidth(gSavedSettings.getF32("ThrottleBandwidthKBPS")); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index c3cf07e9c7..e4d445b95c 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -867,7 +867,7 @@ public: const Line& line = *iter; LLFontGL::getFontMonospace()->renderUTF8(line.text, 0, (F32)line.x, (F32)line.y, mTextColor, LLFontGL::LEFT, LLFontGL::TOP, - LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE); + LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE); } mLineList.clear(); } diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 86249badaa..ff1f95526e 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -469,7 +469,8 @@ void LLWorldMapView::draw() S32_MAX, //max_chars sMapScale, //max_pixels NULL, - TRUE); //use ellipses + /*use_ellipses*/TRUE, + /*use_color*/FALSE); } } } -- cgit v1.2.3 From 5a6ddb2ea666e895890d3cb690cce5101cf12652 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Thu, 7 Nov 2019 17:15:21 +0100 Subject: Fallback fonts can have first crack at adding an unknown character + set Twemoji as the viewer's fallback for all emoji blocks --- indra/newview/CMakeLists.txt | 2 ++ indra/newview/skins/default/xui/en/fonts.xml | 1 + 2 files changed, 3 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b83d3afadd..f03dcb4066 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -21,6 +21,7 @@ include(EXPAT) include(FMODEX) include(GLOD) include(Hunspell) +include(ICU4C) include(JsonCpp) include(LLAppearance) include(LLAudio) @@ -2003,6 +2004,7 @@ target_link_libraries(${VIEWER_BINARY_NAME} ${NDOF_LIBRARY} ${NVAPI_LIBRARY} ${HUNSPELL_LIBRARY} + ${ICU4C_LIBRARY} ${viewer_LIBRARIES} ${BOOST_PROGRAM_OPTIONS_LIBRARY} ${BOOST_REGEX_LIBRARY} diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index 2d5263b78f..6df666a700 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -3,6 +3,7 @@ DejaVuSans.ttf + Twemoji.ttf meiryo.TTC MSGOTHIC.TTC -- cgit v1.2.3 From bab70f6f152952ce755188d29bea1cfd8821a4be Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 29 Aug 2022 00:00:31 +0200 Subject: Review + resolve minor issues --- indra/newview/viewer_manifest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 281777e492..85c9318b8a 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -140,7 +140,7 @@ class ViewerManifest(LLManifest): self.path("*.tga") # Include our fonts - with self.prefix(src="../packages/fonts"): + with self.prefix(src="../packages/fonts",src_dst="fonts"): self.path("*.ttf") self.path("*.txt") -- cgit v1.2.3 From cf2afdc541b540582650f89c6b95aacfeaef516f Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 11 Sep 2022 21:44:00 +0100 Subject: Add emoji as its own font to promote character reuse --- indra/newview/skins/default/xui/en/fonts.xml | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index ed35546322..681f670f08 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -70,6 +70,11 @@ DejaVuSans-BoldOblique.ttf + + Twemoji.ttf + + DejaVuSansMono.ttf -- cgit v1.2.3 From d95571cf7cd319e17338bc509d46ab5eab4eb968 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 23 Oct 2022 16:10:06 +0200 Subject: Add mini emoji (auto-)complete helper --- indra/newview/CMakeLists.txt | 2 + indra/newview/llpanelemojicomplete.cpp | 210 +++++++++++++++++++++ indra/newview/llpanelemojicomplete.h | 99 ++++++++++ indra/newview/llviewerfloaterreg.cpp | 2 + .../default/xui/en/floater_emoji_complete.xml | 26 +++ .../default/xui/en/widgets/emoji_complete.xml | 7 + 6 files changed, 346 insertions(+) create mode 100644 indra/newview/llpanelemojicomplete.cpp create mode 100644 indra/newview/llpanelemojicomplete.h create mode 100644 indra/newview/skins/default/xui/en/floater_emoji_complete.xml create mode 100644 indra/newview/skins/default/xui/en/widgets/emoji_complete.xml (limited to 'indra/newview') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8d902ce618..0bb1814322 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -441,6 +441,7 @@ set(viewer_SOURCE_FILES llpaneleditsky.cpp llpaneleditwater.cpp llpaneleditwearable.cpp + llpanelemojicomplete.cpp llpanelenvironment.cpp llpanelexperiencelisteditor.cpp llpanelexperiencelog.cpp @@ -1072,6 +1073,7 @@ set(viewer_HEADER_FILES llpaneleditsky.h llpaneleditwater.h llpaneleditwearable.h + llpanelemojicomplete.h llpanelenvironment.h llpanelexperiencelisteditor.h llpanelexperiencelog.h diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp new file mode 100644 index 0000000000..e1d80b62e2 --- /dev/null +++ b/indra/newview/llpanelemojicomplete.cpp @@ -0,0 +1,210 @@ +๏ปฟ/** +* @file llpanelemojicomplete.h +* @brief Header file for LLPanelEmojiComplete +* +* $LicenseInfo:firstyear=2012&license=lgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2011, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llemojidictionary.h" +#include "llpanelemojicomplete.h" +#include "lluictrlfactory.h" + +constexpr U32 MIN_MOUSE_MOVE_DELTA = 4; + +// ============================================================================ +// LLPanelEmojiComplete +// + +static LLDefaultChildRegistry::Register r("emoji_complete"); + +LLPanelEmojiComplete::Params::Params() + : selected_image("selected_image") +{ +} + +LLPanelEmojiComplete::LLPanelEmojiComplete(const LLPanelEmojiComplete::Params& p) + : LLUICtrl(p) + , mSelectedImage(p.selected_image) +{ + setFont(p.font); +} + +LLPanelEmojiComplete::~LLPanelEmojiComplete() +{ +} + +void LLPanelEmojiComplete::draw() +{ + if (!mEmojis.empty()) + { + const S32 centerY = mRenderRect.getCenterY(); + const size_t firstVisibleIdx = mScrollPos, lastVisibleIdx = llmin(mScrollPos + mVisibleEmojis, mEmojis.size()) - 1; + + if (mCurSelected >= firstVisibleIdx && mCurSelected <= lastVisibleIdx) + { + const S32 emoji_left = mRenderRect.mLeft + (mCurSelected - firstVisibleIdx) * mEmojiWidth; + const S32 emoji_height = mFont->getLineHeight() + mPadding; + mSelectedImage->draw(emoji_left, centerY - emoji_height / 2, mEmojiWidth, emoji_height); + } + + U32 left = mRenderRect.mLeft + mPadding; + for (U32 curIdx = firstVisibleIdx; curIdx <= lastVisibleIdx; curIdx++) + { + mFont->render( + mEmojis, curIdx, + left, centerY, + LLColor4::white, LLFontGL::LEFT, LLFontGL::VCENTER, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW_SOFT, + 1, S32_MAX, nullptr, false, true); + left += mEmojiWidth; + } + } +} + +BOOL LLPanelEmojiComplete::handleHover(S32 x, S32 y, MASK mask) +{ + LLVector2 curHover(x, y); + if ((mLastHover - curHover).lengthSquared() > MIN_MOUSE_MOVE_DELTA) + { + mCurSelected = posToIndex(x, y); + mLastHover = curHover; + } + + return TRUE; +} + +BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent) +{ + if (MASK_NONE == mask) + { + bool handled = false; + switch (key) + { + case KEY_LEFT: + case KEY_UP: + selectPrevious(); + handled = true; + break; + case KEY_RIGHT: + case KEY_DOWN: + selectNext(); + handled = true; + break; + } + return handled; + } + + return false; +} + +void LLPanelEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent) +{ + LLUICtrl::reshape(width, height, called_from_parent); + updateConstraints(); +} + +void LLPanelEmojiComplete::setEmojiHint(const std::string& hint) +{ + mEmojis = LLEmojiDictionary::instance().findMatchingEmojis(hint); + mScrollPos = llmin(mScrollPos, mEmojis.size()); + updateConstraints(); +} + +size_t LLPanelEmojiComplete::posToIndex(S32 x, S32 y) const +{ + if (mRenderRect.pointInRect(x, y)) + { + return llmin((size_t)x / mEmojiWidth, mEmojis.size() - 1); + } + return npos; +} + +void LLPanelEmojiComplete::select(size_t emoji_idx) +{ + mCurSelected = llclamp(emoji_idx, 0, mEmojis.size()); + updateScrollPos(); +} + +void LLPanelEmojiComplete::selectNext() +{ + select(mCurSelected + 1 < mEmojis.size() ? mCurSelected + 1 : 0); +} + +void LLPanelEmojiComplete::selectPrevious() +{ + select(mCurSelected - 1 >= 0 ? mCurSelected - 1 : mEmojis.size() - 1); +} + +void LLPanelEmojiComplete::setFont(const LLFontGL* fontp) +{ + mFont = fontp; + updateConstraints(); +} + +void LLPanelEmojiComplete::updateConstraints() +{ + const S32 ctrlWidth = getLocalRect().getWidth(); + + mEmojiWidth = mFont->getWidthF32(u8"\U0001F431") + mPadding * 2; + mVisibleEmojis = ctrlWidth / mEmojiWidth; + mRenderRect = getLocalRect().stretch((ctrlWidth - mVisibleEmojis * mEmojiWidth) / -2, 0); + + updateScrollPos(); +} + +void LLPanelEmojiComplete::updateScrollPos() +{ + const size_t cntEmoji = mEmojis.size(); + if (0 == cntEmoji || cntEmoji < mVisibleEmojis || 0 == mCurSelected) + { + mScrollPos = 0; + } + else if (cntEmoji - 1 == mCurSelected) + { + mScrollPos = mCurSelected - mVisibleEmojis + 1; + } + else + { + mScrollPos = mCurSelected - ((float)mCurSelected / (cntEmoji - 2) * (mVisibleEmojis - 2)); + } +} + +// ============================================================================ +// LLFloaterEmojiComplete +// + +LLFloaterEmojiComplete::LLFloaterEmojiComplete(const LLSD& sdKey) + : LLFloater(sdKey) +{ + // This floater should hover on top of our dependent (with the dependent having the focus) + setFocusStealsFrontmost(false); + setAutoFocus(false); + setBackgroundVisible(false); +} + +void LLFloaterEmojiComplete::onOpen(const LLSD& key) +{ + findChild("emoji_complete_ctrl")->setEmojiHint(key["hint"].asString()); +} + +// ============================================================================ diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h new file mode 100644 index 0000000000..85b0609ae9 --- /dev/null +++ b/indra/newview/llpanelemojicomplete.h @@ -0,0 +1,99 @@ +/** +* @file llpanelemojicomplete.h +* @brief Header file for LLPanelEmojiComplete +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2014, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#pragma once + +#include "llfloater.h" +#include "lluictrl.h" + +// ============================================================================ +// LLPanelEmojiComplete +// + +class LLPanelEmojiComplete : public LLUICtrl +{ + friend class LLUICtrlFactory; +public: + struct Params : public LLInitParam::Block + { + Optional selected_image; + + Params(); + }; + +protected: + LLPanelEmojiComplete(const LLPanelEmojiComplete::Params&); +public: + virtual ~LLPanelEmojiComplete(); + + void draw() override; + BOOL handleHover(S32 x, S32 y, MASK mask) override; + BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override; + void reshape(S32 width, S32 height, BOOL called_from_parent) override; + +public: + void setEmojiHint(const std::string& hint); +protected: + size_t posToIndex(S32 x, S32 y) const; + void select(size_t emoji_idx); + void selectNext(); + void selectPrevious(); + void setFont(const LLFontGL* fontp); + void updateConstraints(); + void updateScrollPos(); + +protected: + static constexpr auto npos = std::numeric_limits::max(); + + const LLFontGL* mFont; + U16 mEmojiWidth = 0; + LLUIImagePtr mSelectedImage; + + LLWString mEmojis; + U16 mVisibleEmojis = 0; + size_t mFirstVisible = 0; + size_t mScrollPos = 0; + size_t mCurSelected = 0; + LLVector2 mLastHover; + + S32 mPadding = 8; + LLRect mRenderRect; +}; + +// ============================================================================ +// LLFloaterEmojiComplete +// + +class LLFloaterEmojiComplete : public LLFloater +{ +public: + LLFloaterEmojiComplete(const LLSD& sdKey); + +public: + void onOpen(const LLSD& key) override; +}; + +// ============================================================================ diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 5a05f89758..a54b91030e 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -155,6 +155,7 @@ #include "llfloaterimnearbychat.h" #include "llpanelblockedlist.h" #include "llpanelclassified.h" +#include "llpanelemojicomplete.h" #include "llpreviewanim.h" #include "llpreviewgesture.h" #include "llpreviewnotecard.h" @@ -229,6 +230,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("delete_pref_preset", "floater_delete_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("destinations", "floater_destinations.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("emoji_complete", "floater_emoji_complete.xml", &LLFloaterReg::build); LLFloaterReg::add("env_post_process", "floater_post_process.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("env_fixed_environmentent_water", "floater_fixedenvironment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); diff --git a/indra/newview/skins/default/xui/en/floater_emoji_complete.xml b/indra/newview/skins/default/xui/en/floater_emoji_complete.xml new file mode 100644 index 0000000000..eb666bc32c --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_emoji_complete.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml b/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml new file mode 100644 index 0000000000..f35105ff7e --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml @@ -0,0 +1,7 @@ + + + -- cgit v1.2.3 From 90e272993bb4c591fd2a98772d7fe1104dbff921 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 23 Oct 2022 16:24:25 +0200 Subject: Autosize the mini emoji helper to fit the number of shown emojis --- indra/newview/llpanelemojicomplete.cpp | 49 ++++++++++++++++++++-- indra/newview/llpanelemojicomplete.h | 17 ++++++-- .../default/xui/en/floater_emoji_complete.xml | 22 +++++----- 3 files changed, 72 insertions(+), 16 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index e1d80b62e2..f6823befac 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -39,12 +39,18 @@ constexpr U32 MIN_MOUSE_MOVE_DELTA = 4; static LLDefaultChildRegistry::Register r("emoji_complete"); LLPanelEmojiComplete::Params::Params() - : selected_image("selected_image") + : autosize("autosize") + , max_emoji("max_emoji") + , padding("padding") + , selected_image("selected_image") { } LLPanelEmojiComplete::LLPanelEmojiComplete(const LLPanelEmojiComplete::Params& p) : LLUICtrl(p) + , mAutoSize(p.autosize) + , mMaxVisible(p.max_emoji) + , mPadding(p.padding) , mSelectedImage(p.selected_image) { setFont(p.font); @@ -125,9 +131,23 @@ void LLPanelEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_paren void LLPanelEmojiComplete::setEmojiHint(const std::string& hint) { + llwchar curEmoji = (mCurSelected < mEmojis.size()) ? mEmojis.at(mCurSelected) : 0; + size_t curEmojiIdx = (curEmoji) ? mEmojis.find(curEmoji) : std::string::npos; + mEmojis = LLEmojiDictionary::instance().findMatchingEmojis(hint); + mCurSelected = (std::string::npos != curEmojiIdx) ? curEmojiIdx : 0; + + if (mAutoSize) + { + mVisibleEmojis = std::min(mEmojis.size(), mMaxVisible); + reshape(mVisibleEmojis * mEmojiWidth, getRect().getHeight(), false); + } + else + { + updateConstraints(); + } + mScrollPos = llmin(mScrollPos, mEmojis.size()); - updateConstraints(); } size_t LLPanelEmojiComplete::posToIndex(S32 x, S32 y) const @@ -200,11 +220,34 @@ LLFloaterEmojiComplete::LLFloaterEmojiComplete(const LLSD& sdKey) setFocusStealsFrontmost(false); setAutoFocus(false); setBackgroundVisible(false); + setIsChrome(true); } void LLFloaterEmojiComplete::onOpen(const LLSD& key) { - findChild("emoji_complete_ctrl")->setEmojiHint(key["hint"].asString()); + mEmojiCtrl->setEmojiHint(key["hint"].asString()); +} + +BOOL LLFloaterEmojiComplete::postBuild() +{ + mEmojiCtrl = findChild("emoji_complete_ctrl"); + mEmojiCtrlHorz = getRect().getWidth() - mEmojiCtrl->getRect().getWidth(); + + return TRUE; +} + +void LLFloaterEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent) +{ + if (!called_from_parent) + { + LLRect rctFloater = getRect(), rctCtrl = mEmojiCtrl->getRect(); + rctFloater.mRight = rctFloater.mLeft + rctCtrl.getWidth() + mEmojiCtrlHorz; + setRect(rctFloater); + + return; + } + + LLFloater::reshape(width, height, called_from_parent); } // ============================================================================ diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h index 85b0609ae9..b389ac9d53 100644 --- a/indra/newview/llpanelemojicomplete.h +++ b/indra/newview/llpanelemojicomplete.h @@ -39,6 +39,10 @@ class LLPanelEmojiComplete : public LLUICtrl public: struct Params : public LLInitParam::Block { + Optional autosize; + Optional max_emoji, + padding; + Optional selected_image; Params(); @@ -68,8 +72,12 @@ protected: protected: static constexpr auto npos = std::numeric_limits::max(); + bool mAutoSize = false; const LLFontGL* mFont; U16 mEmojiWidth = 0; + size_t mMaxVisible = 0; + S32 mPadding = 8; + LLRect mRenderRect; LLUIImagePtr mSelectedImage; LLWString mEmojis; @@ -78,9 +86,6 @@ protected: size_t mScrollPos = 0; size_t mCurSelected = 0; LLVector2 mLastHover; - - S32 mPadding = 8; - LLRect mRenderRect; }; // ============================================================================ @@ -94,6 +99,12 @@ public: public: void onOpen(const LLSD& key) override; + BOOL postBuild() override; + void reshape(S32 width, S32 height, BOOL called_from_parent) override; + +protected: + LLPanelEmojiComplete* mEmojiCtrl = nullptr; + S32 mEmojiCtrlHorz = 0; }; // ============================================================================ diff --git a/indra/newview/skins/default/xui/en/floater_emoji_complete.xml b/indra/newview/skins/default/xui/en/floater_emoji_complete.xml index eb666bc32c..e9ea8f4de7 100644 --- a/indra/newview/skins/default/xui/en/floater_emoji_complete.xml +++ b/indra/newview/skins/default/xui/en/floater_emoji_complete.xml @@ -13,14 +13,16 @@ single_instance="true" width="240" > - - + + -- cgit v1.2.3 From 58cdcd5dd23778c6fad9fa0da31b670ceff8eeeb Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 23 Oct 2022 17:47:51 +0200 Subject: Handle return and escape in the mini emoji helper --- indra/newview/llpanelemojicomplete.cpp | 48 +++++++++++++++++++++++++++++++--- indra/newview/llpanelemojicomplete.h | 1 + 2 files changed, 45 insertions(+), 4 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index f6823befac..61b08ad48d 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -27,6 +27,7 @@ #include "llviewerprecompiledheaders.h" #include "llemojidictionary.h" +#include "llemojihelper.h" #include "llpanelemojicomplete.h" #include "lluictrlfactory.h" @@ -101,9 +102,9 @@ BOOL LLPanelEmojiComplete::handleHover(S32 x, S32 y, MASK mask) BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent) { + bool handled = false; if (MASK_NONE == mask) { - bool handled = false; switch (key) { case KEY_LEFT: @@ -116,11 +117,24 @@ BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent selectNext(); handled = true; break; + case KEY_RETURN: + if (!mEmojis.empty()) + { + LLWString wstr; + wstr.push_back(mEmojis.at(mCurSelected)); + setValue(wstring_to_utf8str(wstr)); + onCommit(); + handled = true; + } + break; } - return handled; } - return false; + if (handled) + { + return TRUE; + } + return LLUICtrl::handleKey(key, mask, called_from_parent); } void LLPanelEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent) @@ -223,6 +237,26 @@ LLFloaterEmojiComplete::LLFloaterEmojiComplete(const LLSD& sdKey) setIsChrome(true); } +BOOL LLFloaterEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent) +{ + bool handled = false; + if (MASK_NONE == mask) + { + switch (key) + { + case KEY_ESCAPE: + LLEmojiHelper::instance().hideHelper(); + handled = true; + break; + } + + } + + if (handled) + return TRUE; + return LLFloater::handleKey(key, mask, called_from_parent); +} + void LLFloaterEmojiComplete::onOpen(const LLSD& key) { mEmojiCtrl->setEmojiHint(key["hint"].asString()); @@ -231,9 +265,15 @@ void LLFloaterEmojiComplete::onOpen(const LLSD& key) BOOL LLFloaterEmojiComplete::postBuild() { mEmojiCtrl = findChild("emoji_complete_ctrl"); + mEmojiCtrl->setCommitCallback( + std::bind([&](const LLSD& sdValue) + { + setValue(sdValue); + onCommit(); + }, std::placeholders::_2)); mEmojiCtrlHorz = getRect().getWidth() - mEmojiCtrl->getRect().getWidth(); - return TRUE; + return LLFloater::postBuild(); } void LLFloaterEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent) diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h index b389ac9d53..361a2dc9b7 100644 --- a/indra/newview/llpanelemojicomplete.h +++ b/indra/newview/llpanelemojicomplete.h @@ -98,6 +98,7 @@ public: LLFloaterEmojiComplete(const LLSD& sdKey); public: + BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override; void onOpen(const LLSD& key) override; BOOL postBuild() override; void reshape(S32 width, S32 height, BOOL called_from_parent) override; -- cgit v1.2.3 From cb0bb91108b628e1134f1f655eaca9d305961cda Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 23 Oct 2022 17:51:22 +0200 Subject: Mini emoji helper shows as a small slice when there are no matching emojis --- indra/newview/llpanelemojicomplete.cpp | 4 ++++ indra/newview/llpanelemojicomplete.h | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index 61b08ad48d..a7058a6724 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -260,6 +260,10 @@ BOOL LLFloaterEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_pare void LLFloaterEmojiComplete::onOpen(const LLSD& key) { mEmojiCtrl->setEmojiHint(key["hint"].asString()); + if (0 == mEmojiCtrl->getEmojiCount()) + { + LLEmojiHelper::instance().hideHelper(); + } } BOOL LLFloaterEmojiComplete::postBuild() diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h index 361a2dc9b7..138cc465ba 100644 --- a/indra/newview/llpanelemojicomplete.h +++ b/indra/newview/llpanelemojicomplete.h @@ -59,7 +59,8 @@ public: void reshape(S32 width, S32 height, BOOL called_from_parent) override; public: - void setEmojiHint(const std::string& hint); + size_t getEmojiCount() const { return mEmojis.size(); } + void setEmojiHint(const std::string& hint); protected: size_t posToIndex(S32 x, S32 y) const; void select(size_t emoji_idx); -- cgit v1.2.3 From 97300c608153d21a441ed34b0a5b9a2ea815df2e Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Wed, 2 Nov 2022 19:11:20 +0100 Subject: Add (partial) emoji set descriptors --- .../skins/default/xui/en/emoji_characters.xml | 10955 +++++++++++++++++++ 1 file changed, 10955 insertions(+) create mode 100644 indra/newview/skins/default/xui/en/emoji_characters.xml (limited to 'indra/newview') diff --git a/indra/newview/skins/default/xui/en/emoji_characters.xml b/indra/newview/skins/default/xui/en/emoji_characters.xml new file mode 100644 index 0000000000..55aefe6745 --- /dev/null +++ b/indra/newview/skins/default/xui/en/emoji_characters.xml @@ -0,0 +1,10955 @@ + + + + + Character + ๐Ÿ˜€ + ShortCodes + + :grinning: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜„ + ShortCodes + + :smile: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜† + ShortCodes + + :laughing: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿคฃ + ShortCodes + + :rofl: + :satisfied: + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ™‚ + ShortCodes + + :slightly_smiling_face: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜‰ + ShortCodes + + :wink: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜‡ + ShortCodes + + :innocent: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜ƒ + ShortCodes + + :smiley: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜ + ShortCodes + + :grin: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜… + ShortCodes + + :sweat_smile: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜‚ + ShortCodes + + :joy: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ™ƒ + ShortCodes + + :upside_down_face: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿ˜Š + ShortCodes + + :blush: + + + + Categories + + Smiley + Face Smiling + + + + Character + ๐Ÿฅฐ + ShortCodes + + :smiling_face_with_three_hearts: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿคฉ + ShortCodes + + :star_struck: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿ˜— + ShortCodes + + :kissing: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿ˜š + ShortCodes + + :kissing_closed_eyes: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿฅฒ + ShortCodes + + :smiling_face_with_tear: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿ˜ + ShortCodes + + :heart_eyes: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿ˜˜ + ShortCodes + + :kissing_heart: + + + + Categories + + Smiley + Face Affection + + + + Character + โ˜บ๏ธ + ShortCodes + + :relaxed: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿ˜™ + ShortCodes + + :kissing_smiling_eyes: + + + + Categories + + Smiley + Face Affection + + + + Character + ๐Ÿ˜‹ + ShortCodes + + :yum: + + + + Categories + + Smiley + Face Tongue + + + + Character + ๐Ÿ˜œ + ShortCodes + + :stuck_out_tongue_winking_eye: + + + + Categories + + Smiley + Face Tongue + + + + Character + ๐Ÿ˜ + ShortCodes + + :stuck_out_tongue_closed_eyes: + + + + Categories + + Smiley + Face Tongue + + + + Character + ๐Ÿ˜› + ShortCodes + + :stuck_out_tongue: + + + + Categories + + Smiley + Face Tongue + + + + Character + ๐Ÿคช + ShortCodes + + :zany_face: + + + + Categories + + Smiley + Face Tongue + + + + Character + ๐Ÿค‘ + ShortCodes + + :money_mouth_face: + + + + Categories + + Smiley + Face Tongue + + + + Character + ๐Ÿค— + ShortCodes + + :hugs: + + + + Categories + + Smiley + Face Hand + + + + Character + ๐Ÿคซ + ShortCodes + + :shushing_face: + + + + Categories + + Smiley + Face Hand + + + + Character + ๐Ÿคญ + ShortCodes + + :hand_over_mouth: + + + + Categories + + Smiley + Face Hand + + + + Character + ๐Ÿค” + ShortCodes + + :thinking: + + + + Categories + + Smiley + Face Hand + + + + Character + ๐Ÿค + ShortCodes + + :zipper_mouth_face: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜ + ShortCodes + + :neutral_face: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜ถ + ShortCodes + + :no_mouth: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜ + ShortCodes + + :smirk: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ™„ + ShortCodes + + :roll_eyes: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜ฎโ€๐Ÿ’จ + ShortCodes + + :face_exhaling: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿคจ + ShortCodes + + :raised_eyebrow: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜‘ + ShortCodes + + :expressionless: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜ถโ€๐ŸŒซ๏ธ + ShortCodes + + :face_in_clouds: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜’ + ShortCodes + + :unamused: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜ฌ + ShortCodes + + :grimacing: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿคฅ + ShortCodes + + :lying_face: + + + + Categories + + Smiley + Face Neutral Skeptical + + + + Character + ๐Ÿ˜Œ + ShortCodes + + :relieved: + + + + Categories + + Smiley + Face Sleepy + + + + Character + ๐Ÿ˜ช + ShortCodes + + :sleepy: + + + + Categories + + Smiley + Face Sleepy + + + + Character + ๐Ÿ˜ด + ShortCodes + + :sleeping: + + + + Categories + + Smiley + Face Sleepy + + + + Character + ๐Ÿ˜” + ShortCodes + + :pensive: + + + + Categories + + Smiley + Face Sleepy + + + + Character + ๐Ÿคค + ShortCodes + + :drooling_face: + + + + Categories + + Smiley + Face Sleepy + + + + Character + ๐Ÿ˜ท + ShortCodes + + :mask: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿค• + ShortCodes + + :face_with_head_bandage: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿคฎ + ShortCodes + + :vomiting_face: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿฅต + ShortCodes + + :hot_face: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿฅด + ShortCodes + + :woozy_face: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿ˜ตโ€๐Ÿ’ซ + ShortCodes + + :face_with_spiral_eyes: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿค’ + ShortCodes + + :face_with_thermometer: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿคข + ShortCodes + + :nauseated_face: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿคง + ShortCodes + + :sneezing_face: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿฅถ + ShortCodes + + :cold_face: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿ˜ต + ShortCodes + + :dizzy_face: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿคฏ + ShortCodes + + :exploding_head: + + + + Categories + + Smiley + Face Unwell + + + + Character + ๐Ÿค  + ShortCodes + + :cowboy_hat_face: + + + + Categories + + Smiley + Face Hat + + + + Character + ๐Ÿฅธ + ShortCodes + + :disguised_face: + + + + Categories + + Smiley + Face Hat + + + + Character + ๐Ÿฅณ + ShortCodes + + :partying_face: + + + + Categories + + Smiley + Face Hat + + + + Character + ๐Ÿ˜Ž + ShortCodes + + :sunglasses: + + + + Categories + + Smiley + Face Glasses + + + + Character + ๐Ÿง + ShortCodes + + :monocle_face: + + + + Categories + + Smiley + Face Glasses + + + + Character + ๐Ÿค“ + ShortCodes + + :nerd_face: + + + + Categories + + Smiley + Face Glasses + + + + Character + ๐Ÿ˜• + ShortCodes + + :confused: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ™ + ShortCodes + + :slightly_frowning_face: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฎ + ShortCodes + + :open_mouth: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฒ + ShortCodes + + :astonished: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿฅบ + ShortCodes + + :pleading_face: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ง + ShortCodes + + :anguished: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฐ + ShortCodes + + :cold_sweat: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ข + ShortCodes + + :cry: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฑ + ShortCodes + + :scream: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฃ + ShortCodes + + :persevere: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜“ + ShortCodes + + :sweat: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ซ + ShortCodes + + :tired_face: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜Ÿ + ShortCodes + + :worried: + + + + Categories + + Smiley + Face Concerned + + + + Character + โ˜น๏ธ + ShortCodes + + :frowning_face: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฏ + ShortCodes + + :hushed: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ณ + ShortCodes + + :flushed: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฆ + ShortCodes + + :frowning: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜จ + ShortCodes + + :fearful: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฅ + ShortCodes + + :disappointed_relieved: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ญ + ShortCodes + + :sob: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜– + ShortCodes + + :confounded: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ž + ShortCodes + + :disappointed: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ฉ + ShortCodes + + :weary: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿฅฑ + ShortCodes + + :yawning_face: + + + + Categories + + Smiley + Face Concerned + + + + Character + ๐Ÿ˜ค + ShortCodes + + :triumph: + + + + Categories + + Smiley + Face Negative + + + + Character + ๐Ÿ˜  + ShortCodes + + :angry: + + + + Categories + + Smiley + Face Negative + + + + Character + ๐Ÿ˜ˆ + ShortCodes + + :smiling_imp: + + + + Categories + + Smiley + Face Negative + + + + Character + ๐Ÿ’€ + ShortCodes + + :skull: + + + + Categories + + Smiley + Face Negative + + + + Character + ๐Ÿ˜ก + ShortCodes + + :pout: + :rage: + + + Categories + + Smiley + Face Negative + + + + Character + ๐Ÿคฌ + ShortCodes + + :cursing_face: + + + + Categories + + Smiley + Face Negative + + + + Character + ๐Ÿ‘ฟ + ShortCodes + + :imp: + + + + Categories + + Smiley + Face Negative + + + + Character + โ˜ ๏ธ + ShortCodes + + :skull_and_crossbones: + + + + Categories + + Smiley + Face Negative + + + + Character + ๐Ÿ’ฉ + ShortCodes + + :hankey: + :poop: + :shit: + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿ‘น + ShortCodes + + :japanese_ogre: + + + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿ‘ป + ShortCodes + + :ghost: + + + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿ‘พ + ShortCodes + + :space_invader: + + + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿคก + ShortCodes + + :clown_face: + + + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿ‘บ + ShortCodes + + :japanese_goblin: + + + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿ‘ฝ + ShortCodes + + :alien: + + + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿค– + ShortCodes + + :robot: + + + + Categories + + Smiley + Face Costume + + + + Character + ๐Ÿ˜บ + ShortCodes + + :smiley_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ˜น + ShortCodes + + :joy_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ˜ผ + ShortCodes + + :smirk_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ™€ + ShortCodes + + :scream_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ˜พ + ShortCodes + + :pouting_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ˜ธ + ShortCodes + + :smile_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ˜ป + ShortCodes + + :heart_eyes_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ˜ฝ + ShortCodes + + :kissing_cat: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ˜ฟ + ShortCodes + + :crying_cat_face: + + + + Categories + + Smiley + Cat Face + + + + Character + ๐Ÿ™ˆ + ShortCodes + + :see_no_evil: + + + + Categories + + Smiley + Monkey Face + + + + Character + ๐Ÿ™Š + ShortCodes + + :speak_no_evil: + + + + Categories + + Smiley + Monkey Face + + + + Character + ๐Ÿ™‰ + ShortCodes + + :hear_no_evil: + + + + Categories + + Smiley + Monkey Face + + + + Character + ๐Ÿ’‹ + ShortCodes + + :kiss: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’˜ + ShortCodes + + :cupid: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’– + ShortCodes + + :sparkling_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’“ + ShortCodes + + :heartbeat: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’• + ShortCodes + + :two_hearts: + + + + Categories + + Emotion + + + + + Character + โฃ๏ธ + ShortCodes + + :heavy_heart_exclamation: + + + + Categories + + Emotion + + + + + Character + โค๏ธโ€๐Ÿ”ฅ + ShortCodes + + :heart_on_fire: + + + + Categories + + Emotion + + + + + Character + โค๏ธ + ShortCodes + + :heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’› + ShortCodes + + :yellow_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’™ + ShortCodes + + :blue_heart: + + + + Categories + + Emotion + + + + + Character + ๐ŸคŽ + ShortCodes + + :brown_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿค + ShortCodes + + :white_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ข + ShortCodes + + :anger: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ซ + ShortCodes + + :dizzy: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’จ + ShortCodes + + :dash: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ฃ + ShortCodes + + :bomb: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ + ShortCodes + + :eye_speech_bubble: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ—ฏ๏ธ + ShortCodes + + :right_anger_bubble: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ค + ShortCodes + + :zzz: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’Œ + ShortCodes + + :love_letter: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ + ShortCodes + + :gift_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’— + ShortCodes + + :heartpulse: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ž + ShortCodes + + :revolving_hearts: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’Ÿ + ShortCodes + + :heart_decoration: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’” + ShortCodes + + :broken_heart: + + + + Categories + + Emotion + + + + + Character + โค๏ธโ€๐Ÿฉน + ShortCodes + + :mending_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿงก + ShortCodes + + :orange_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’š + ShortCodes + + :green_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’œ + ShortCodes + + :purple_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ–ค + ShortCodes + + :black_heart: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ฏ + ShortCodes + + :100: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ฅ + ShortCodes + + :boom: + :collision: + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ฆ + ShortCodes + + :sweat_drops: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ•ณ๏ธ + ShortCodes + + :hole: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ฌ + ShortCodes + + :speech_balloon: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ—จ๏ธ + ShortCodes + + :left_speech_bubble: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ’ญ + ShortCodes + + :thought_balloon: + + + + Categories + + Emotion + + + + + Character + ๐Ÿ‘‹ + ShortCodes + + :wave: + + + + Categories + + Body + Hand Fingers Open + + + + Character + ๐Ÿ–๏ธ + ShortCodes + + :raised_hand_with_fingers_splayed: + + + + Categories + + Body + Hand Fingers Open + + + + Character + ๐Ÿ–– + ShortCodes + + :vulcan_salute: + + + + Categories + + Body + Hand Fingers Open + + + + Character + ๐Ÿคš + ShortCodes + + :raised_back_of_hand: + + + + Categories + + Body + Hand Fingers Open + + + + Character + โœ‹ + ShortCodes + + :hand: + :raised_hand: + + + Categories + + Body + Hand Fingers Open + + + + Character + ๐Ÿ‘Œ + ShortCodes + + :ok_hand: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + ๐Ÿค + ShortCodes + + :pinching_hand: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + ๐Ÿคž + ShortCodes + + :crossed_fingers: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + ๐Ÿค˜ + ShortCodes + + :metal: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + ๐ŸคŒ + ShortCodes + + :pinched_fingers: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + โœŒ๏ธ + ShortCodes + + :v: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + ๐ŸคŸ + ShortCodes + + :love_you_gesture: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + ๐Ÿค™ + ShortCodes + + :call_me_hand: + + + + Categories + + Body + Hand Fingers Partial + + + + Character + ๐Ÿ‘ˆ + ShortCodes + + :point_left: + + + + Categories + + Body + Hand Single Finger + + + + Character + ๐Ÿ‘† + ShortCodes + + :point_up_2: + + + + Categories + + Body + Hand Single Finger + + + + Character + ๐Ÿ‘‡ + ShortCodes + + :point_down: + + + + Categories + + Body + Hand Single Finger + + + + Character + ๐Ÿ‘‰ + ShortCodes + + :point_right: + + + + Categories + + Body + Hand Single Finger + + + + Character + ๐Ÿ–• + ShortCodes + + :fu: + :middle_finger: + + + Categories + + Body + Hand Single Finger + + + + Character + โ˜๏ธ + ShortCodes + + :point_up: + + + + Categories + + Body + Hand Single Finger + + + + Character + ๐Ÿ‘ + ShortCodes + + :+1: + :thumbsup: + + + Categories + + Body + Hand Fingers Closed + + + + Character + โœŠ + ShortCodes + + :fist: + :fist_raised: + + + Categories + + Body + Hand Fingers Closed + + + + Character + ๐Ÿค› + ShortCodes + + :fist_left: + + + + Categories + + Body + Hand Fingers Closed + + + + Character + ๐Ÿ‘Ž + ShortCodes + + :-1: + :thumbsdown: + + + Categories + + Body + Hand Fingers Closed + + + + Character + ๐Ÿ‘Š + ShortCodes + + :facepunch: + :fist_oncoming: + :punch: + + Categories + + Body + Hand Fingers Closed + + + + Character + ๐Ÿคœ + ShortCodes + + :fist_right: + + + + Categories + + Body + Hand Fingers Closed + + + + Character + ๐Ÿ‘ + ShortCodes + + :clap: + + + + Categories + + Body + Hands + + + + Character + ๐Ÿ‘ + ShortCodes + + :open_hands: + + + + Categories + + Body + Hands + + + + Character + ๐Ÿค + ShortCodes + + :handshake: + + + + Categories + + Body + Hands + + + + Character + ๐Ÿ™Œ + ShortCodes + + :raised_hands: + + + + Categories + + Body + Hands + + + + Character + ๐Ÿคฒ + ShortCodes + + :palms_up_together: + + + + Categories + + Body + Hands + + + + Character + ๐Ÿ™ + ShortCodes + + :pray: + + + + Categories + + Body + Hands + + + + Character + โœ๏ธ + ShortCodes + + :writing_hand: + + + + Categories + + Body + Hand Prop + + + + Character + ๐Ÿคณ + ShortCodes + + :selfie: + + + + Categories + + Body + Hand Prop + + + + Character + ๐Ÿ’… + ShortCodes + + :nail_care: + + + + Categories + + Body + Hand Prop + + + + Character + ๐Ÿ’ช + ShortCodes + + :muscle: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿฆฟ + ShortCodes + + :mechanical_leg: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿฆถ + ShortCodes + + :foot: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿฆป + ShortCodes + + :ear_with_hearing_aid: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿง  + ShortCodes + + :brain: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿซ + ShortCodes + + :lungs: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿฆด + ShortCodes + + :bone: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿ‘๏ธ + ShortCodes + + :eye: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿ‘„ + ShortCodes + + :lips: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿฆพ + ShortCodes + + :mechanical_arm: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿฆต + ShortCodes + + :leg: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿ‘‚ + ShortCodes + + :ear: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿ‘ƒ + ShortCodes + + :nose: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿซ€ + ShortCodes + + :anatomical_heart: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿฆท + ShortCodes + + :tooth: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿ‘€ + ShortCodes + + :eyes: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿ‘… + ShortCodes + + :tongue: + + + + Categories + + Body + Body Parts + + + + Character + ๐Ÿ‘ถ + ShortCodes + + :baby: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฆ + ShortCodes + + :boy: + + + + Categories + + Person + + + + + Character + ๐Ÿง‘ + ShortCodes + + :adult: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘จ + ShortCodes + + :man: + + + + Categories + + Person + + + + + Character + ๐Ÿง”โ€โ™‚๏ธ + ShortCodes + + :man_beard: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘จโ€๐Ÿฆฐ + ShortCodes + + :red_haired_man: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘จโ€๐Ÿฆณ + ShortCodes + + :white_haired_man: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฉ + ShortCodes + + :woman: + + + + Categories + + Person + + + + + Character + ๐Ÿง‘โ€๐Ÿฆฐ + ShortCodes + + :person_red_hair: + + + + Categories + + Person + + + + + Character + ๐Ÿง‘โ€๐Ÿฆฑ + ShortCodes + + :person_curly_hair: + + + + Categories + + Person + + + + + Character + ๐Ÿง‘โ€๐Ÿฆณ + ShortCodes + + :person_white_hair: + + + + Categories + + Person + + + + + Character + ๐Ÿง‘โ€๐Ÿฆฒ + ShortCodes + + :person_bald: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฑโ€โ™‚๏ธ + ShortCodes + + :blond_haired_man: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ด + ShortCodes + + :older_man: + + + + Categories + + Person + + + + + Character + ๐Ÿง’ + ShortCodes + + :child: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ง + ShortCodes + + :girl: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฑ + ShortCodes + + :blond_haired_person: + + + + Categories + + Person + + + + + Character + ๐Ÿง” + ShortCodes + + :bearded_person: + + + + Categories + + Person + + + + + Character + ๐Ÿง”โ€โ™€๏ธ + ShortCodes + + :woman_beard: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘จโ€๐Ÿฆฑ + ShortCodes + + :curly_haired_man: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘จโ€๐Ÿฆฒ + ShortCodes + + :bald_man: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿฆฐ + ShortCodes + + :red_haired_woman: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿฆฑ + ShortCodes + + :curly_haired_woman: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿฆณ + ShortCodes + + :white_haired_woman: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿฆฒ + ShortCodes + + :bald_woman: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ฑโ€โ™€๏ธ + ShortCodes + + :blond_haired_woman: + :blonde_woman: + + + Categories + + Person + + + + + Character + ๐Ÿง“ + ShortCodes + + :older_adult: + + + + Categories + + Person + + + + + Character + ๐Ÿ‘ต + ShortCodes + + :older_woman: + + + + Categories + + Person + + + + + Character + ๐Ÿ™ + ShortCodes + + :frowning_person: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™โ€โ™€๏ธ + ShortCodes + + :frowning_woman: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™Žโ€โ™‚๏ธ + ShortCodes + + :pouting_man: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™… + ShortCodes + + :no_good: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™…โ€โ™€๏ธ + ShortCodes + + :ng_woman: + :no_good_woman: + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™†โ€โ™‚๏ธ + ShortCodes + + :ok_man: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ’ + ShortCodes + + :information_desk_person: + :tipping_hand_person: + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ’โ€โ™€๏ธ + ShortCodes + + :sassy_woman: + :tipping_hand_woman: + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™‹โ€โ™‚๏ธ + ShortCodes + + :raising_hand_man: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿง + ShortCodes + + :deaf_person: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿงโ€โ™€๏ธ + ShortCodes + + :deaf_woman: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™‡โ€โ™‚๏ธ + ShortCodes + + :bowing_man: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿคฆ + ShortCodes + + :facepalm: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿคฆโ€โ™€๏ธ + ShortCodes + + :woman_facepalming: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿคทโ€โ™‚๏ธ + ShortCodes + + :man_shrugging: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™โ€โ™‚๏ธ + ShortCodes + + :frowning_man: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™Ž + ShortCodes + + :pouting_face: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™Žโ€โ™€๏ธ + ShortCodes + + :pouting_woman: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™…โ€โ™‚๏ธ + ShortCodes + + :ng_man: + :no_good_man: + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™† + ShortCodes + + :ok_person: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™†โ€โ™€๏ธ + ShortCodes + + :ok_woman: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ’โ€โ™‚๏ธ + ShortCodes + + :sassy_man: + :tipping_hand_man: + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™‹ + ShortCodes + + :raising_hand: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™‹โ€โ™€๏ธ + ShortCodes + + :raising_hand_woman: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿงโ€โ™‚๏ธ + ShortCodes + + :deaf_man: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™‡ + ShortCodes + + :bow: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿ™‡โ€โ™€๏ธ + ShortCodes + + :bowing_woman: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿคฆโ€โ™‚๏ธ + ShortCodes + + :man_facepalming: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿคท + ShortCodes + + :shrug: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿคทโ€โ™€๏ธ + ShortCodes + + :woman_shrugging: + + + + Categories + + Person Gesture + + + + + Character + ๐Ÿง‘โ€โš•๏ธ + ShortCodes + + :health_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€โš•๏ธ + ShortCodes + + :woman_health_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐ŸŽ“ + ShortCodes + + :man_student: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿซ + ShortCodes + + :teacher: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿซ + ShortCodes + + :woman_teacher: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€โš–๏ธ + ShortCodes + + :man_judge: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐ŸŒพ + ShortCodes + + :farmer: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐ŸŒพ + ShortCodes + + :woman_farmer: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿณ + ShortCodes + + :man_cook: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿ”ง + ShortCodes + + :mechanic: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ”ง + ShortCodes + + :woman_mechanic: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿญ + ShortCodes + + :man_factory_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿ’ผ + ShortCodes + + :office_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ’ผ + ShortCodes + + :woman_office_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿ”ฌ + ShortCodes + + :man_scientist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿ’ป + ShortCodes + + :technologist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ’ป + ShortCodes + + :woman_technologist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐ŸŽค + ShortCodes + + :man_singer: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐ŸŽจ + ShortCodes + + :artist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐ŸŽจ + ShortCodes + + :woman_artist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€โœˆ๏ธ + ShortCodes + + :man_pilot: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿš€ + ShortCodes + + :astronaut: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿš€ + ShortCodes + + :woman_astronaut: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿš’ + ShortCodes + + :man_firefighter: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฎ + ShortCodes + + :cop: + :police_officer: + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฎโ€โ™€๏ธ + ShortCodes + + :policewoman: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ•ต๏ธโ€โ™‚๏ธ + ShortCodes + + :male_detective: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ’‚ + ShortCodes + + :guard: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ’‚โ€โ™€๏ธ + ShortCodes + + :guardswoman: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ท + ShortCodes + + :construction_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ทโ€โ™€๏ธ + ShortCodes + + :construction_worker_woman: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ธ + ShortCodes + + :princess: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ณโ€โ™‚๏ธ + ShortCodes + + :man_with_turban: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฒ + ShortCodes + + :man_with_gua_pi_mao: + + + + Categories + + Person Role + + + + + Character + ๐Ÿคต + ShortCodes + + :person_in_tuxedo: + + + + Categories + + Person Role + + + + + Character + ๐Ÿคตโ€โ™€๏ธ + ShortCodes + + :woman_in_tuxedo: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฐโ€โ™‚๏ธ + ShortCodes + + :man_with_veil: + + + + Categories + + Person Role + + + + + Character + ๐Ÿคฐ + ShortCodes + + :pregnant_woman: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿผ + ShortCodes + + :woman_feeding_baby: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿผ + ShortCodes + + :person_feeding_baby: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€โš•๏ธ + ShortCodes + + :man_health_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐ŸŽ“ + ShortCodes + + :student: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐ŸŽ“ + ShortCodes + + :woman_student: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿซ + ShortCodes + + :man_teacher: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€โš–๏ธ + ShortCodes + + :judge: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€โš–๏ธ + ShortCodes + + :woman_judge: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐ŸŒพ + ShortCodes + + :man_farmer: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿณ + ShortCodes + + :cook: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿณ + ShortCodes + + :woman_cook: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿ”ง + ShortCodes + + :man_mechanic: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿญ + ShortCodes + + :factory_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿญ + ShortCodes + + :woman_factory_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿ’ผ + ShortCodes + + :man_office_worker: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿ”ฌ + ShortCodes + + :scientist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ”ฌ + ShortCodes + + :woman_scientist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿ’ป + ShortCodes + + :man_technologist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐ŸŽค + ShortCodes + + :singer: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐ŸŽค + ShortCodes + + :woman_singer: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐ŸŽจ + ShortCodes + + :man_artist: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€โœˆ๏ธ + ShortCodes + + :pilot: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€โœˆ๏ธ + ShortCodes + + :woman_pilot: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿš€ + ShortCodes + + :man_astronaut: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง‘โ€๐Ÿš’ + ShortCodes + + :firefighter: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿš’ + ShortCodes + + :woman_firefighter: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฎโ€โ™‚๏ธ + ShortCodes + + :policeman: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ•ต๏ธ + ShortCodes + + :detective: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ•ต๏ธโ€โ™€๏ธ + ShortCodes + + :female_detective: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ’‚โ€โ™‚๏ธ + ShortCodes + + :guardsman: + + + + Categories + + Person Role + + + + + Character + ๐Ÿฅท + ShortCodes + + :ninja: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ทโ€โ™‚๏ธ + ShortCodes + + :construction_worker_man: + + + + Categories + + Person Role + + + + + Character + ๐Ÿคด + ShortCodes + + :prince: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ณ + ShortCodes + + :person_with_turban: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ณโ€โ™€๏ธ + ShortCodes + + :woman_with_turban: + + + + Categories + + Person Role + + + + + Character + ๐Ÿง• + ShortCodes + + :woman_with_headscarf: + + + + Categories + + Person Role + + + + + Character + ๐Ÿคตโ€โ™‚๏ธ + ShortCodes + + :man_in_tuxedo: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฐ + ShortCodes + + :person_with_veil: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ฐโ€โ™€๏ธ + ShortCodes + + :bride_with_veil: + :woman_with_veil: + + + Categories + + Person Role + + + + + Character + ๐Ÿคฑ + ShortCodes + + :breast_feeding: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘จโ€๐Ÿผ + ShortCodes + + :man_feeding_baby: + + + + Categories + + Person Role + + + + + Character + ๐Ÿ‘ผ + ShortCodes + + :angel: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿคถ + ShortCodes + + :mrs_claus: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿฆธ + ShortCodes + + :superhero: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿฆธโ€โ™€๏ธ + ShortCodes + + :superhero_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿฆนโ€โ™‚๏ธ + ShortCodes + + :supervillain_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง™ + ShortCodes + + :mage: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง™โ€โ™€๏ธ + ShortCodes + + :mage_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงšโ€โ™‚๏ธ + ShortCodes + + :fairy_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง› + ShortCodes + + :vampire: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง›โ€โ™€๏ธ + ShortCodes + + :vampire_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงœโ€โ™‚๏ธ + ShortCodes + + :merman: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง + ShortCodes + + :elf: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงโ€โ™€๏ธ + ShortCodes + + :elf_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงžโ€โ™‚๏ธ + ShortCodes + + :genie_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐ŸงŸ + ShortCodes + + :zombie: + + + + Categories + + Person Fantasy + + + + + Character + ๐ŸงŸโ€โ™€๏ธ + ShortCodes + + :zombie_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐ŸŽ… + ShortCodes + + :santa: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง‘โ€๐ŸŽ„ + ShortCodes + + :mx_claus: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿฆธโ€โ™‚๏ธ + ShortCodes + + :superhero_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿฆน + ShortCodes + + :supervillain: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿฆนโ€โ™€๏ธ + ShortCodes + + :supervillain_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง™โ€โ™‚๏ธ + ShortCodes + + :mage_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงš + ShortCodes + + :fairy: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงšโ€โ™€๏ธ + ShortCodes + + :fairy_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿง›โ€โ™‚๏ธ + ShortCodes + + :vampire_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงœ + ShortCodes + + :merperson: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงœโ€โ™€๏ธ + ShortCodes + + :mermaid: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงโ€โ™‚๏ธ + ShortCodes + + :elf_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงž + ShortCodes + + :genie: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿงžโ€โ™€๏ธ + ShortCodes + + :genie_woman: + + + + Categories + + Person Fantasy + + + + + Character + ๐ŸงŸโ€โ™‚๏ธ + ShortCodes + + :zombie_man: + + + + Categories + + Person Fantasy + + + + + Character + ๐Ÿ’† + ShortCodes + + :massage: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ’†โ€โ™€๏ธ + ShortCodes + + :massage_woman: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ’‡โ€โ™‚๏ธ + ShortCodes + + :haircut_man: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿšถ + ShortCodes + + :walking: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿšถโ€โ™€๏ธ + ShortCodes + + :walking_woman: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿงโ€โ™‚๏ธ + ShortCodes + + :standing_man: + + + + Categories + + Person Activity + + + + + Character + ๐ŸงŽ + ShortCodes + + :kneeling_person: + + + + Categories + + Person Activity + + + + + Character + ๐ŸงŽโ€โ™€๏ธ + ShortCodes + + :kneeling_woman: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘จโ€๐Ÿฆฏ + ShortCodes + + :man_with_probing_cane: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง‘โ€๐Ÿฆผ + ShortCodes + + :person_in_motorized_wheelchair: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿฆผ + ShortCodes + + :woman_in_motorized_wheelchair: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘จโ€๐Ÿฆฝ + ShortCodes + + :man_in_manual_wheelchair: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿƒ + ShortCodes + + :runner: + :running: + + + Categories + + Person Activity + + + + + Character + ๐Ÿƒโ€โ™€๏ธ + ShortCodes + + :running_woman: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ•บ + ShortCodes + + :man_dancing: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘ฏ + ShortCodes + + :dancers: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘ฏโ€โ™€๏ธ + ShortCodes + + :dancing_women: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง–โ€โ™‚๏ธ + ShortCodes + + :sauna_man: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง— + ShortCodes + + :climbing: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง—โ€โ™€๏ธ + ShortCodes + + :climbing_woman: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ’†โ€โ™‚๏ธ + ShortCodes + + :massage_man: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ’‡ + ShortCodes + + :haircut: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ’‡โ€โ™€๏ธ + ShortCodes + + :haircut_woman: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿšถโ€โ™‚๏ธ + ShortCodes + + :walking_man: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง + ShortCodes + + :standing_person: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿงโ€โ™€๏ธ + ShortCodes + + :standing_woman: + + + + Categories + + Person Activity + + + + + Character + ๐ŸงŽโ€โ™‚๏ธ + ShortCodes + + :kneeling_man: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง‘โ€๐Ÿฆฏ + ShortCodes + + :person_with_probing_cane: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿฆฏ + ShortCodes + + :woman_with_probing_cane: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘จโ€๐Ÿฆผ + ShortCodes + + :man_in_motorized_wheelchair: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง‘โ€๐Ÿฆฝ + ShortCodes + + :person_in_manual_wheelchair: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘ฉโ€๐Ÿฆฝ + ShortCodes + + :woman_in_manual_wheelchair: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿƒโ€โ™‚๏ธ + ShortCodes + + :running_man: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ’ƒ + ShortCodes + + :dancer: + :woman_dancing: + + + Categories + + Person Activity + + + + + Character + ๐Ÿ•ด๏ธ + ShortCodes + + :business_suit_levitating: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿ‘ฏโ€โ™‚๏ธ + ShortCodes + + :dancing_men: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง– + ShortCodes + + :sauna_person: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง–โ€โ™€๏ธ + ShortCodes + + :sauna_woman: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿง—โ€โ™‚๏ธ + ShortCodes + + :climbing_man: + + + + Categories + + Person Activity + + + + + Character + ๐Ÿคบ + ShortCodes + + :person_fencing: + + + + Categories + + Person Sport + + + + + Character + โ›ท๏ธ + ShortCodes + + :skier: + + + + Categories + + Person Sport + + + + + Character + ๐ŸŒ๏ธ + ShortCodes + + :golfing: + + + + Categories + + Person Sport + + + + + Character + ๐ŸŒ๏ธโ€โ™€๏ธ + ShortCodes + + :golfing_woman: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿ„โ€โ™‚๏ธ + ShortCodes + + :surfing_man: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšฃ + ShortCodes + + :rowboat: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšฃโ€โ™€๏ธ + ShortCodes + + :rowing_woman: + + + + Categories + + Person Sport + + + + + Character + ๐ŸŠโ€โ™‚๏ธ + ShortCodes + + :swimming_man: + + + + Categories + + Person Sport + + + + + Character + โ›น๏ธ + ShortCodes + + :bouncing_ball_person: + + + + Categories + + Person Sport + + + + + Character + โ›น๏ธโ€โ™€๏ธ + ShortCodes + + :basketball_woman: + :bouncing_ball_woman: + + + Categories + + Person Sport + + + + + Character + ๐Ÿ‹๏ธโ€โ™‚๏ธ + ShortCodes + + :weight_lifting_man: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšด + ShortCodes + + :bicyclist: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšดโ€โ™€๏ธ + ShortCodes + + :biking_woman: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšตโ€โ™‚๏ธ + ShortCodes + + :mountain_biking_man: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคธ + ShortCodes + + :cartwheeling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคธโ€โ™€๏ธ + ShortCodes + + :woman_cartwheeling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคผโ€โ™‚๏ธ + ShortCodes + + :men_wrestling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคฝ + ShortCodes + + :water_polo: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคฝโ€โ™€๏ธ + ShortCodes + + :woman_playing_water_polo: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคพโ€โ™‚๏ธ + ShortCodes + + :man_playing_handball: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคน + ShortCodes + + :juggling_person: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคนโ€โ™€๏ธ + ShortCodes + + :woman_juggling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿ‡ + ShortCodes + + :horse_racing: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿ‚ + ShortCodes + + :snowboarder: + + + + Categories + + Person Sport + + + + + Character + ๐ŸŒ๏ธโ€โ™‚๏ธ + ShortCodes + + :golfing_man: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿ„ + ShortCodes + + :surfer: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿ„โ€โ™€๏ธ + ShortCodes + + :surfing_woman: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšฃโ€โ™‚๏ธ + ShortCodes + + :rowing_man: + + + + Categories + + Person Sport + + + + + Character + ๐ŸŠ + ShortCodes + + :swimmer: + + + + Categories + + Person Sport + + + + + Character + ๐ŸŠโ€โ™€๏ธ + ShortCodes + + :swimming_woman: + + + + Categories + + Person Sport + + + + + Character + โ›น๏ธโ€โ™‚๏ธ + ShortCodes + + :basketball_man: + :bouncing_ball_man: + + + Categories + + Person Sport + + + + + Character + ๐Ÿ‹๏ธ + ShortCodes + + :weight_lifting: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿ‹๏ธโ€โ™€๏ธ + ShortCodes + + :weight_lifting_woman: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšดโ€โ™‚๏ธ + ShortCodes + + :biking_man: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšต + ShortCodes + + :mountain_bicyclist: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿšตโ€โ™€๏ธ + ShortCodes + + :mountain_biking_woman: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคธโ€โ™‚๏ธ + ShortCodes + + :man_cartwheeling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคผ + ShortCodes + + :wrestling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคผโ€โ™€๏ธ + ShortCodes + + :women_wrestling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคฝโ€โ™‚๏ธ + ShortCodes + + :man_playing_water_polo: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคพ + ShortCodes + + :handball_person: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคพโ€โ™€๏ธ + ShortCodes + + :woman_playing_handball: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿคนโ€โ™‚๏ธ + ShortCodes + + :man_juggling: + + + + Categories + + Person Sport + + + + + Character + ๐Ÿง˜ + ShortCodes + + :lotus_position: + + + + Categories + + Person Resting + + + + + Character + ๐Ÿง˜โ€โ™€๏ธ + ShortCodes + + :lotus_position_woman: + + + + Categories + + Person Resting + + + + + Character + ๐Ÿ›Œ + ShortCodes + + :sleeping_bed: + + + + Categories + + Person Resting + + + + + Character + ๐Ÿง˜โ€โ™‚๏ธ + ShortCodes + + :lotus_position_man: + + + + Categories + + Person Resting + + + + + Character + ๐Ÿ›€ + ShortCodes + + :bath: + + + + Categories + + Person Resting + + + + + Character + ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ + ShortCodes + + :people_holding_hands: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ซ + ShortCodes + + :couple: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ’ + ShortCodes + + :couplekiss: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ + ShortCodes + + :couplekiss_man_man: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ’‘ + ShortCodes + + :couple_with_heart: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ + ShortCodes + + :couple_with_heart_man_man: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ช + ShortCodes + + :family: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง + ShortCodes + + :family_man_woman_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_woman_boy_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_man_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_man_girl_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง + ShortCodes + + :family_man_man_girl_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง + ShortCodes + + :family_woman_woman_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ + ShortCodes + + :family_woman_woman_boy_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ง + ShortCodes + + :family_man_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง + ShortCodes + + :family_man_girl_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ + ShortCodes + + :family_woman_boy_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ + ShortCodes + + :family_woman_girl_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ญ + ShortCodes + + :two_women_holding_hands: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฌ + ShortCodes + + :two_men_holding_hands: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ + ShortCodes + + :couplekiss_man_woman: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ + ShortCodes + + :couplekiss_woman_woman: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ + ShortCodes + + :couple_with_heart_woman_man: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ + ShortCodes + + :couple_with_heart_woman_woman: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_woman_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_woman_girl_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง + ShortCodes + + :family_man_woman_girl_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง + ShortCodes + + :family_man_man_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_man_boy_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ + ShortCodes + + :family_woman_woman_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ + ShortCodes + + :family_woman_woman_girl_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง + ShortCodes + + :family_woman_woman_girl_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_boy_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ + ShortCodes + + :family_man_girl_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ฆ + ShortCodes + + :family_woman_boy: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘ง + ShortCodes + + :family_woman_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง + ShortCodes + + :family_woman_girl_girl: + + + + Categories + + Person + Family + + + + Character + ๐Ÿ—ฃ๏ธ + ShortCodes + + :speaking_head: + + + + Categories + + Person Symbol + + + + + Character + ๐Ÿ‘ฅ + ShortCodes + + :busts_in_silhouette: + + + + Categories + + Person Symbol + + + + + Character + ๐Ÿ‘ฃ + ShortCodes + + :footprints: + + + + Categories + + Person Symbol + + + + + Character + ๐Ÿ‘ค + ShortCodes + + :bust_in_silhouette: + + + + Categories + + Person Symbol + + + + + Character + ๐Ÿซ‚ + ShortCodes + + :people_hugging: + + + + Categories + + Person Symbol + + + + + Character + ๐Ÿต + ShortCodes + + :monkey_face: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ + ShortCodes + + :gorilla: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿถ + ShortCodes + + :dog: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆฎ + ShortCodes + + :guide_dog: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฉ + ShortCodes + + :poodle: + + + + Categories + + Animal Mammal + + + + + Character + ๐ŸฆŠ + ShortCodes + + :fox_face: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฑ + ShortCodes + + :cat: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿˆโ€โฌ› + ShortCodes + + :black_cat: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฏ + ShortCodes + + :tiger: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ† + ShortCodes + + :leopard: + + + + Categories + + Animal Mammal + + + + + Character + ๐ŸŽ + ShortCodes + + :racehorse: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ“ + ShortCodes + + :zebra: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆฌ + ShortCodes + + :bison: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ‚ + ShortCodes + + :ox: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ„ + ShortCodes + + :cow2: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ– + ShortCodes + + :pig2: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฝ + ShortCodes + + :pig_nose: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ‘ + ShortCodes + + :sheep: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿช + ShortCodes + + :dromedary_camel: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ™ + ShortCodes + + :llama: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ˜ + ShortCodes + + :elephant: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ + ShortCodes + + :rhinoceros: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿญ + ShortCodes + + :mouse: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ€ + ShortCodes + + :rat: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฐ + ShortCodes + + :rabbit: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฟ๏ธ + ShortCodes + + :chipmunk: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ” + ShortCodes + + :hedgehog: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿป + ShortCodes + + :bear: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿจ + ShortCodes + + :koala: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆฅ + ShortCodes + + :sloth: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆจ + ShortCodes + + :skunk: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆก + ShortCodes + + :badger: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ’ + ShortCodes + + :monkey: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆง + ShortCodes + + :orangutan: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ• + ShortCodes + + :dog2: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ•โ€๐Ÿฆบ + ShortCodes + + :service_dog: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿบ + ShortCodes + + :wolf: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ + ShortCodes + + :raccoon: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿˆ + ShortCodes + + :cat2: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ + ShortCodes + + :lion: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ… + ShortCodes + + :tiger2: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿด + ShortCodes + + :horse: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ„ + ShortCodes + + :unicorn: + + + + Categories + + Animal Mammal + + + + + Character + ๐ŸฆŒ + ShortCodes + + :deer: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฎ + ShortCodes + + :cow: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿƒ + ShortCodes + + :water_buffalo: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿท + ShortCodes + + :pig: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ— + ShortCodes + + :boar: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ + ShortCodes + + :ram: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ + ShortCodes + + :goat: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿซ + ShortCodes + + :camel: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ’ + ShortCodes + + :giraffe: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆฃ + ShortCodes + + :mammoth: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ› + ShortCodes + + :hippopotamus: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ + ShortCodes + + :mouse2: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿน + ShortCodes + + :hamster: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿ‡ + ShortCodes + + :rabbit2: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆซ + ShortCodes + + :beaver: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ‡ + ShortCodes + + :bat: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿปโ€โ„๏ธ + ShortCodes + + :polar_bear: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿผ + ShortCodes + + :panda_face: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆฆ + ShortCodes + + :otter: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆ˜ + ShortCodes + + :kangaroo: + + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿพ + ShortCodes + + :feet: + :paw_prints: + + + Categories + + Animal Mammal + + + + + Character + ๐Ÿฆƒ + ShortCodes + + :turkey: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿ“ + ShortCodes + + :rooster: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿค + ShortCodes + + :baby_chick: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆ + ShortCodes + + :bird: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿ•Š๏ธ + ShortCodes + + :dove: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆ† + ShortCodes + + :duck: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆ‰ + ShortCodes + + :owl: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿชถ + ShortCodes + + :feather: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆš + ShortCodes + + :peacock: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿ” + ShortCodes + + :chicken: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฃ + ShortCodes + + :hatching_chick: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฅ + ShortCodes + + :hatched_chick: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿง + ShortCodes + + :penguin: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆ… + ShortCodes + + :eagle: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆข + ShortCodes + + :swan: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆค + ShortCodes + + :dodo: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆฉ + ShortCodes + + :flamingo: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿฆœ + ShortCodes + + :parrot: + + + + Categories + + Animal Bird + + + + + Character + ๐Ÿธ + ShortCodes + + :frog: + + + + Categories + + Animal Amphibian + + + + + Character + ๐ŸŠ + ShortCodes + + :crocodile: + + + + Categories + + Animal Reptile + + + + + Character + ๐ŸฆŽ + ShortCodes + + :lizard: + + + + Categories + + Animal Reptile + + + + + Character + ๐Ÿฒ + ShortCodes + + :dragon_face: + + + + Categories + + Animal Reptile + + + + + Character + ๐Ÿฆ• + ShortCodes + + :sauropod: + + + + Categories + + Animal Reptile + + + + + Character + ๐Ÿข + ShortCodes + + :turtle: + + + + Categories + + Animal Reptile + + + + + Character + ๐Ÿ + ShortCodes + + :snake: + + + + Categories + + Animal Reptile + + + + + Character + ๐Ÿ‰ + ShortCodes + + :dragon: + + + + Categories + + Animal Reptile + + + + + Character + ๐Ÿฆ– + ShortCodes + + :t-rex: + + + + Categories + + Animal Reptile + + + + + Character + ๐Ÿณ + ShortCodes + + :whale: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿฌ + ShortCodes + + :dolphin: + :flipper: + + + Categories + + Animal Marine + + + + + Character + ๐ŸŸ + ShortCodes + + :fish: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿก + ShortCodes + + :blowfish: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿ™ + ShortCodes + + :octopus: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿ‹ + ShortCodes + + :whale2: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿฆญ + ShortCodes + + :seal: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿ  + ShortCodes + + :tropical_fish: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿฆˆ + ShortCodes + + :shark: + + + + Categories + + Animal Marine + + + + + Character + ๐Ÿš + ShortCodes + + :shell: + + + + Categories + + Animal Marine + + + + + Character + ๐ŸŒ + ShortCodes + + :snail: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿ› + ShortCodes + + :bug: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿ + ShortCodes + + :bee: + :honeybee: + + + Categories + + Animal Bug + + + + + Character + ๐Ÿž + ShortCodes + + :lady_beetle: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿชณ + ShortCodes + + :cockroach: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿ•ธ๏ธ + ShortCodes + + :spider_web: + + + + Categories + + Animal Bug + + + + + Character + ๐ŸฆŸ + ShortCodes + + :mosquito: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿชฑ + ShortCodes + + :worm: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿฆ‹ + ShortCodes + + :butterfly: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿœ + ShortCodes + + :ant: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿชฒ + ShortCodes + + :beetle: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿฆ— + ShortCodes + + :cricket: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿ•ท๏ธ + ShortCodes + + :spider: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿฆ‚ + ShortCodes + + :scorpion: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿชฐ + ShortCodes + + :fly: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿฆ  + ShortCodes + + :microbe: + + + + Categories + + Animal Bug + + + + + Character + ๐Ÿ’ + ShortCodes + + :bouquet: + + + + Categories + + Plant Flower + + + + + Character + ๐Ÿ’ฎ + ShortCodes + + :white_flower: + + + + Categories + + Plant Flower + + + + + Character + ๐ŸŒน + ShortCodes + + :rose: + + + + Categories + + Plant Flower + + + + + Character + ๐ŸŒบ + ShortCodes + + :hibiscus: + + + + Categories + + Plant Flower + + + + + Character + ๐ŸŒผ + ShortCodes + + :blossom: + + + + Categories + + Plant Flower + + + + + Character + ๐ŸŒธ + ShortCodes + + :cherry_blossom: + + + + Categories + + Plant Flower + + + + + Character + ๐Ÿต๏ธ + ShortCodes + + :rosette: + + + + Categories + + Plant Flower + + + + + Character + ๐Ÿฅ€ + ShortCodes + + :wilted_flower: + + + + Categories + + Plant Flower + + + + + Character + ๐ŸŒป + ShortCodes + + :sunflower: + + + + Categories + + Plant Flower + + + + + Character + ๐ŸŒท + ShortCodes + + :tulip: + + + + Categories + + Plant Flower + + + + + Character + ๐ŸŒฑ + ShortCodes + + :seedling: + + + + Categories + + Plant Other + + + + + Character + ๐ŸŒฒ + ShortCodes + + :evergreen_tree: + + + + Categories + + Plant Other + + + + + Character + ๐ŸŒด + ShortCodes + + :palm_tree: + + + + Categories + + Plant Other + + + + + Character + ๐ŸŒพ + ShortCodes + + :ear_of_rice: + + + + Categories + + Plant Other + + + + + Character + โ˜˜๏ธ + ShortCodes + + :shamrock: + + + + Categories + + Plant Other + + + + + Character + ๐Ÿ + ShortCodes + + :maple_leaf: + + + + Categories + + Plant Other + + + + + Character + ๐Ÿƒ + ShortCodes + + :leaves: + + + + Categories + + Plant Other + + + + + Character + ๐Ÿชด + ShortCodes + + :potted_plant: + + + + Categories + + Plant Other + + + + + Character + ๐ŸŒณ + ShortCodes + + :deciduous_tree: + + + + Categories + + Plant Other + + + + + Character + ๐ŸŒต + ShortCodes + + :cactus: + + + + Categories + + Plant Other + + + + + Character + ๐ŸŒฟ + ShortCodes + + :herb: + + + + Categories + + Plant Other + + + + + Character + ๐Ÿ€ + ShortCodes + + :four_leaf_clover: + + + + Categories + + Plant Other + + + + + Character + ๐Ÿ‚ + ShortCodes + + :fallen_leaf: + + + + Categories + + Plant Other + + + + + Character + ๐Ÿ‡ + ShortCodes + + :grapes: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ‰ + ShortCodes + + :watermelon: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ‹ + ShortCodes + + :lemon: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ + ShortCodes + + :pineapple: + + + + Categories + + Food Fruit + + + + + Character + ๐ŸŽ + ShortCodes + + :apple: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ + ShortCodes + + :pear: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ’ + ShortCodes + + :cherries: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿซ + ShortCodes + + :blueberries: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ… + ShortCodes + + :tomato: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿฅฅ + ShortCodes + + :coconut: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿˆ + ShortCodes + + :melon: + + + + Categories + + Food Fruit + + + + + Character + ๐ŸŠ + ShortCodes + + :mandarin: + :orange: + :tangerine: + + Categories + + Food Fruit + + + + + Character + ๐ŸŒ + ShortCodes + + :banana: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿฅญ + ShortCodes + + :mango: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ + ShortCodes + + :green_apple: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ‘ + ShortCodes + + :peach: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿ“ + ShortCodes + + :strawberry: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿฅ + ShortCodes + + :kiwi_fruit: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿซ’ + ShortCodes + + :olive: + + + + Categories + + Food Fruit + + + + + Character + ๐Ÿฅ‘ + ShortCodes + + :avocado: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿฅ” + ShortCodes + + :potato: + + + + Categories + + Food Vegetable + + + + + Character + ๐ŸŒฝ + ShortCodes + + :corn: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿซ‘ + ShortCodes + + :bell_pepper: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿฅฌ + ShortCodes + + :leafy_green: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿง„ + ShortCodes + + :garlic: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿ„ + ShortCodes + + :mushroom: + + + + Categories + + Food Vegetable + + + + + Character + ๐ŸŒฐ + ShortCodes + + :chestnut: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿ† + ShortCodes + + :eggplant: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿฅ• + ShortCodes + + :carrot: + + + + Categories + + Food Vegetable + + + + + Character + ๐ŸŒถ๏ธ + ShortCodes + + :hot_pepper: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿฅ’ + ShortCodes + + :cucumber: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿฅฆ + ShortCodes + + :broccoli: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿง… + ShortCodes + + :onion: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿฅœ + ShortCodes + + :peanuts: + + + + Categories + + Food Vegetable + + + + + Character + ๐Ÿž + ShortCodes + + :bread: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅ– + ShortCodes + + :baguette_bread: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅจ + ShortCodes + + :pretzel: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅž + ShortCodes + + :pancakes: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿง€ + ShortCodes + + :cheese: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿ— + ShortCodes + + :poultry_leg: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅ“ + ShortCodes + + :bacon: + + + + Categories + + Food Prepared + + + + + Character + ๐ŸŸ + ShortCodes + + :fries: + + + + Categories + + Food Prepared + + + + + Character + ๐ŸŒญ + ShortCodes + + :hotdog: + + + + Categories + + Food Prepared + + + + + Character + ๐ŸŒฎ + ShortCodes + + :taco: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿซ” + ShortCodes + + :tamale: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿง† + ShortCodes + + :falafel: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿณ + ShortCodes + + :fried_egg: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฒ + ShortCodes + + :stew: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅฃ + ShortCodes + + :bowl_with_spoon: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฟ + ShortCodes + + :popcorn: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿง‚ + ShortCodes + + :salt: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅ + ShortCodes + + :croissant: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿซ“ + ShortCodes + + :flatbread: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅฏ + ShortCodes + + :bagel: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿง‡ + ShortCodes + + :waffle: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿ– + ShortCodes + + :meat_on_bone: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅฉ + ShortCodes + + :cut_of_meat: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿ” + ShortCodes + + :hamburger: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿ• + ShortCodes + + :pizza: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅช + ShortCodes + + :sandwich: + + + + Categories + + Food Prepared + + + + + Character + ๐ŸŒฏ + ShortCodes + + :burrito: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅ™ + ShortCodes + + :stuffed_flatbread: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅš + ShortCodes + + :egg: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅ˜ + ShortCodes + + :shallow_pan_of_food: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿซ• + ShortCodes + + :fondue: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅ— + ShortCodes + + :green_salad: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿงˆ + ShortCodes + + :butter: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฅซ + ShortCodes + + :canned_food: + + + + Categories + + Food Prepared + + + + + Character + ๐Ÿฑ + ShortCodes + + :bento: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿ™ + ShortCodes + + :rice_ball: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿ› + ShortCodes + + :curry: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿ + ShortCodes + + :spaghetti: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿข + ShortCodes + + :oden: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿค + ShortCodes + + :fried_shrimp: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿฅฎ + ShortCodes + + :moon_cake: + + + + Categories + + Food Asian + + + + + Character + ๐ŸฅŸ + ShortCodes + + :dumpling: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿฅก + ShortCodes + + :takeout_box: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿ˜ + ShortCodes + + :rice_cracker: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿš + ShortCodes + + :rice: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿœ + ShortCodes + + :ramen: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿ  + ShortCodes + + :sweet_potato: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿฃ + ShortCodes + + :sushi: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿฅ + ShortCodes + + :fish_cake: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿก + ShortCodes + + :dango: + + + + Categories + + Food Asian + + + + + Character + ๐Ÿฅ  + ShortCodes + + :fortune_cookie: + + + + Categories + + Food Asian + + + + + -- cgit v1.2.3 From ec6c4f102f8b23e0c79dd2c1c0ecbad54f019566 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 6 Nov 2022 16:30:44 +0100 Subject: Switch to using the Twemoji OT-SVG font --- indra/newview/skins/default/xui/en/fonts.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index 681f670f08..40045625fd 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -3,7 +3,7 @@ DejaVuSans.ttf - Twemoji.ttf + TwemojiSVG.ttf meiryo.TTC MSGOTHIC.TTC @@ -72,7 +72,7 @@ - Twemoji.ttf + TwemojiSVG.ttf Date: Tue, 8 Nov 2022 00:16:58 +0100 Subject: [FIXED] Various minor issues - Typing :+1: doesn't replace the short code with the thumbs-up emoji - Moving the mouse over the emoji complete panel highlights the wrong emoji when mScrollPos > 0 - Emoji complete panel is missing attributes - Crash when attempting to show the tooltip for an emoji text segment - Emoji autocomplete panel can sometimes show empty (type ':cat', select the heart eyed one, Ctrl-Z and then type 2 which should show the emoji for :cat2 but shows an empty square instead) --- indra/newview/llpanelemojicomplete.cpp | 4 ++-- indra/newview/skins/default/xui/en/widgets/emoji_complete.xml | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index a7058a6724..f890a14e8e 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -146,9 +146,9 @@ void LLPanelEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_paren void LLPanelEmojiComplete::setEmojiHint(const std::string& hint) { llwchar curEmoji = (mCurSelected < mEmojis.size()) ? mEmojis.at(mCurSelected) : 0; - size_t curEmojiIdx = (curEmoji) ? mEmojis.find(curEmoji) : std::string::npos; mEmojis = LLEmojiDictionary::instance().findMatchingEmojis(hint); + size_t curEmojiIdx = (curEmoji) ? mEmojis.find(curEmoji) : std::string::npos; mCurSelected = (std::string::npos != curEmojiIdx) ? curEmojiIdx : 0; if (mAutoSize) @@ -168,7 +168,7 @@ size_t LLPanelEmojiComplete::posToIndex(S32 x, S32 y) const { if (mRenderRect.pointInRect(x, y)) { - return llmin((size_t)x / mEmojiWidth, mEmojis.size() - 1); + return mScrollPos + llmin((size_t)x / mEmojiWidth, mEmojis.size() - 1); } return npos; } diff --git a/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml b/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml index f35105ff7e..370f1d174e 100644 --- a/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml +++ b/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml @@ -1,7 +1,10 @@ -- cgit v1.2.3 From 17a3924a28770e6910022ad8f627bb8e2b667730 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 8 Nov 2022 01:10:09 +0100 Subject: Add proper mouse down handler to the emoji complete panel -> the previous commit didn't properly set mFrontChild after restoring the topmost floaters -> additionally we don't want mouse clicks in "can't steal focus from frontmost" floaters to set focus to them --- indra/newview/llpanelemojicomplete.cpp | 30 +++++++++++++++++++++++++++--- indra/newview/llpanelemojicomplete.h | 3 +++ 2 files changed, 30 insertions(+), 3 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index f890a14e8e..8b89e3aa14 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -120,9 +120,6 @@ BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent case KEY_RETURN: if (!mEmojis.empty()) { - LLWString wstr; - wstr.push_back(mEmojis.at(mCurSelected)); - setValue(wstring_to_utf8str(wstr)); onCommit(); handled = true; } @@ -137,6 +134,33 @@ BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent return LLUICtrl::handleKey(key, mask, called_from_parent); } +BOOL LLPanelEmojiComplete::handleMouseDown(S32 x, S32 y, MASK mask) +{ + mCurSelected = posToIndex(x, y); + mLastHover = LLVector2(x, y); + + return TRUE; +} + +BOOL LLPanelEmojiComplete::handleMouseUp(S32 x, S32 y, MASK mask) +{ + mCurSelected = posToIndex(x, y); + onCommit(); + + return TRUE; +} + +void LLPanelEmojiComplete::onCommit() +{ + if (npos != mCurSelected) + { + LLWString wstr; + wstr.push_back(mEmojis.at(mCurSelected)); + setValue(wstring_to_utf8str(wstr)); + LLUICtrl::onCommit(); + } +} + void LLPanelEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent) { LLUICtrl::reshape(width, height, called_from_parent); diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h index 138cc465ba..2116b350be 100644 --- a/indra/newview/llpanelemojicomplete.h +++ b/indra/newview/llpanelemojicomplete.h @@ -56,6 +56,9 @@ public: void draw() override; BOOL handleHover(S32 x, S32 y, MASK mask) override; BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override; + BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + void onCommit() override; void reshape(S32 width, S32 height, BOOL called_from_parent) override; public: -- cgit v1.2.3 From f3e7c7454f6647aa09f220baa20c9bbc7480a37b Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 8 Nov 2022 01:14:10 +0100 Subject: Enable color emojis (and the emoji helper) on the chat history and editor --- indra/newview/llchathistory.cpp | 2 ++ indra/newview/skins/default/xui/en/widgets/chat_editor.xml | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index c110e0d815..f07d4658f9 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -1010,6 +1010,8 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) editor_params.enabled = false; // read only editor_params.show_context_menu = "true"; editor_params.trusted_content = false; + editor_params.text_valign = LLFontGL::VAlign::VCENTER; + editor_params.use_color = true; mEditor = LLUICtrlFactory::create(editor_params, this); mEditor->setIsFriendCallback(LLAvatarActions::isFriend); mEditor->setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0)); diff --git a/indra/newview/skins/default/xui/en/widgets/chat_editor.xml b/indra/newview/skins/default/xui/en/widgets/chat_editor.xml index f9facb593a..c550f634e5 100644 --- a/indra/newview/skins/default/xui/en/widgets/chat_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/chat_editor.xml @@ -1,4 +1,7 @@ + show_context_menu="true" + show_emoji_helper="true" + use_color="true" + /> -- cgit v1.2.3 From 1727a31db0e3434adec087d6442fc5eca0ea68cf Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Wed, 9 Nov 2022 00:11:22 +0100 Subject: Show color emojis and emoji helper in notecards --- indra/newview/skins/default/xui/en/floater_preview_notecard.xml | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml index dcbdfa8794..ac5467c036 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml @@ -73,6 +73,8 @@ spellcheck="true" tab_group="1" top="46" + use_color="true" + show_emoji_helper="true" width="392" word_wrap="true"> Loading... -- cgit v1.2.3 From b5033a8859b38df045cc74e074aaee864985f145 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Wed, 9 Nov 2022 00:14:51 +0100 Subject: Enable color on HUD text --- indra/newview/llhudrender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp index dff310ecf9..c1f17c9d33 100644 --- a/indra/newview/llhudrender.cpp +++ b/indra/newview/llhudrender.cpp @@ -138,7 +138,7 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent, LLUI::translate((F32) winX*1.0f/LLFontGL::sScaleX, (F32) winY*1.0f/(LLFontGL::sScaleY), -(((F32) winZ*2.f)-1.f)); F32 right_x; - font.render(wstr, 0, 0, 1, color, LLFontGL::LEFT, LLFontGL::BASELINE, style, shadow, wstr.length(), 1000, &right_x); + font.render(wstr, 0, 0, 1, color, LLFontGL::LEFT, LLFontGL::BASELINE, style, shadow, wstr.length(), 1000, &right_x, /*use_ellipses*/false, /*use_color*/true); LLUI::popMatrix(); gGL.popMatrix(); -- cgit v1.2.3 From 9c5043d8c62ae0d321d01560098edf67bf17ebf7 Mon Sep 17 00:00:00 2001 From: Henri Beauchamp Date: Sat, 19 Nov 2022 21:42:41 +0100 Subject: Fix a thread safety issue in the GL image worker. LLViewerTexture::mNeedsCreateTexture needs to be an attomic bool since it is written both in the main thread and in the GL image worker thread. We can now enable threaded bump maps creation as a result of this fix. I have read the CLA Document and I hereby sign the CLA --- indra/newview/lldrawpoolbump.cpp | 4 +++- indra/newview/llviewertexture.cpp | 16 ++++++++-------- indra/newview/llviewertexture.h | 5 ++++- 3 files changed, 15 insertions(+), 10 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 8db6a10e26..ed991a2bbf 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -77,7 +77,9 @@ static S32 cube_channel = -1; static S32 diffuse_channel = -1; static S32 bump_channel = -1; -#define LL_BUMPLIST_MULTITHREADED 0 // TODO -- figure out why this doesn't work +// Enabled after changing LLViewerTexture::mNeedsCreateTexture to an +// LLAtomicBool; this should work just fine, now. HB +#define LL_BUMPLIST_MULTITHREADED 1 // static void LLStandardBumpmap::init() diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index e3ac56d0d3..8a11c5cf8f 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1118,7 +1118,7 @@ void LLViewerFetchedTexture::init(bool firstinit) mLoadedCallbackDesiredDiscardLevel = S8_MAX; mPauseLoadedCallBacks = FALSE; - mNeedsCreateTexture = FALSE; + mNeedsCreateTexture = false; mIsRawImageValid = FALSE; mRawDiscardLevel = INVALID_DISCARD_LEVEL; @@ -1400,12 +1400,12 @@ void LLViewerFetchedTexture::addToCreateTexture() { //just update some variables, not to create a real GL texture. createGLTexture(mRawDiscardLevel, mRawImage, 0, FALSE); - mNeedsCreateTexture = FALSE; + mNeedsCreateTexture = false; destroyRawImage(); } else if(!force_update && getDiscardLevel() > -1 && getDiscardLevel() <= mRawDiscardLevel) { - mNeedsCreateTexture = FALSE; + mNeedsCreateTexture = false; destroyRawImage(); } else @@ -1441,7 +1441,7 @@ void LLViewerFetchedTexture::addToCreateTexture() mRawDiscardLevel += i; if(mRawDiscardLevel >= getDiscardLevel() && getDiscardLevel() > 0) { - mNeedsCreateTexture = FALSE; + mNeedsCreateTexture = false; destroyRawImage(); return; } @@ -1473,7 +1473,7 @@ BOOL LLViewerFetchedTexture::preCreateTexture(S32 usename/*= 0*/) destroyRawImage(); return FALSE; } - mNeedsCreateTexture = FALSE; + mNeedsCreateTexture = false; if (mRawImage.isNull()) { @@ -1609,14 +1609,14 @@ void LLViewerFetchedTexture::postCreateTexture() destroyRawImage(); } - mNeedsCreateTexture = FALSE; + mNeedsCreateTexture = false; } void LLViewerFetchedTexture::scheduleCreateTexture() { if (!mNeedsCreateTexture) { - mNeedsCreateTexture = TRUE; + mNeedsCreateTexture = true; if (preCreateTexture()) { #if LL_IMAGEGL_THREAD_CHECK @@ -1630,7 +1630,7 @@ void LLViewerFetchedTexture::scheduleCreateTexture() memcpy(data_copy, data, size); } #endif - mNeedsCreateTexture = TRUE; + mNeedsCreateTexture = true; auto mainq = LLImageGLThread::sEnabled ? mMainQueue.lock() : nullptr; if (mainq) { diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index b953d7006b..2f5e0d01df 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -27,6 +27,7 @@ #ifndef LL_LLVIEWERTEXTURE_H #define LL_LLVIEWERTEXTURE_H +#include "llatomic.h" #include "llgltexture.h" #include "lltimer.h" #include "llframetimer.h" @@ -528,7 +529,9 @@ protected: LLFrameTimer mStopFetchingTimer; // Time since mDecodePriority == 0.f. BOOL mInImageList; // TRUE if image is in list (in which case don't reset priority!) - BOOL mNeedsCreateTexture; + // This needs to be atomic, since it is written both in the main thread + // and in the GL image worker thread... HB + LLAtomicBool mNeedsCreateTexture; BOOL mForSculpt ; //a flag if the texture is used as sculpt data. BOOL mIsFetched ; //is loaded from remote or from cache, not generated locally. -- cgit v1.2.3 From f9fbd0333abb474ed265e1be67b2c5b1a4174444 Mon Sep 17 00:00:00 2001 From: Callum Linden Date: Mon, 23 Jan 2023 15:10:17 -0800 Subject: DRTVWR-489-emoji: Update the machinery that copies over the ICU4C DLLs into the right place in Windows builds --- indra/newview/viewer_manifest.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 8cc1cc5bb4..26983bbba8 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -517,6 +517,16 @@ class WindowsManifest(ViewerManifest): self.path("OpenAL32.dll") self.path("alut.dll") + # For ICU4C + self.path("") + self.path("icudt48.dll") + self.path("icuin48.dll") + self.path("icuio48.dll") + self.path("icule48.dll") + self.path("iculx48.dll") + self.path("icutu48.dll") + self.path("icuuc48.dll") + # For textures self.path("openjpeg.dll") -- cgit v1.2.3 From a3e80762f1724388fc6e892a337895966cf942e8 Mon Sep 17 00:00:00 2001 From: Callum Linden Date: Tue, 24 Jan 2023 11:07:56 -0800 Subject: DRTVWR-489-emoji: Fix a warning when packaging Viewer installer. TeamCity builds fail because of 'compiler error' in NSIS - wondering if this warning triggers the error (it doesn't locally) - yes, grasphing at straws --- indra/newview/installers/windows/lang_zh.nsi | Bin 10144 -> 10154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi index 7922d9df52..0985663041 100755 Binary files a/indra/newview/installers/windows/lang_zh.nsi and b/indra/newview/installers/windows/lang_zh.nsi differ -- cgit v1.2.3 From 054f57151541654ab8b68fc935e184377747ab75 Mon Sep 17 00:00:00 2001 From: Callum Linden Date: Tue, 24 Jan 2023 13:14:25 -0800 Subject: DRTVWR-489-emoji: Trying to get to the bottom of a TeamCity build failure with access to TeramCity - one theory is that the extra size of these DLLs consumes too much disk space and results in the NSIS internal compiler error we observe - removing these tempoorarily to see what difference that makes --- indra/newview/viewer_manifest.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 26983bbba8..76cd4ce049 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -518,14 +518,13 @@ class WindowsManifest(ViewerManifest): self.path("alut.dll") # For ICU4C - self.path("") - self.path("icudt48.dll") - self.path("icuin48.dll") - self.path("icuio48.dll") - self.path("icule48.dll") - self.path("iculx48.dll") - self.path("icutu48.dll") - self.path("icuuc48.dll") + # self.path("icudt48.dll") + # self.path("icuin48.dll") + # self.path("icuio48.dll") + # self.path("icule48.dll") + # self.path("iculx48.dll") + # self.path("icutu48.dll") + # self.path("icuuc48.dll") # For textures self.path("openjpeg.dll") -- cgit v1.2.3 From 5dcdf8330409779591d35c05888efd02e412cf50 Mon Sep 17 00:00:00 2001 From: Callum Linden Date: Tue, 24 Jan 2023 16:00:53 -0800 Subject: DRTVWR-489-emoji: Trying to get to the bottom of a TeamCity build failure with access to TeramCity - with all the ICU4C DLLs removed, the viewer builds fine which does suggest a size/disk space issue. Trying with the (porposed) minimum set to see if this helps. Likely it won't because the main one (icudt48.dll) is much, much bigger than the others combined - but we shall see --- indra/newview/viewer_manifest.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 76cd4ce049..60f8cfc26b 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -518,13 +518,8 @@ class WindowsManifest(ViewerManifest): self.path("alut.dll") # For ICU4C - # self.path("icudt48.dll") - # self.path("icuin48.dll") - # self.path("icuio48.dll") - # self.path("icule48.dll") - # self.path("iculx48.dll") - # self.path("icutu48.dll") - # self.path("icuuc48.dll") + self.path("icudt48.dll") + self.path("icuuc48.dll") # For textures self.path("openjpeg.dll") -- cgit v1.2.3 From 66f59478d09122ddf43c4ba3445754d1698bf016 Mon Sep 17 00:00:00 2001 From: Callum Linden Date: Wed, 25 Jan 2023 10:57:29 -0800 Subject: DRTVWR-489-emoji: declaring this variable as a U16 leads to a warning (and therefore an error) but only on 32bit Windows builds - 64bit is fine. I don't know why that's the case (should be both surely) but in any case, I think the variable should be declared as a size_t --- indra/newview/llpanelemojicomplete.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h index 2116b350be..aa0f806525 100644 --- a/indra/newview/llpanelemojicomplete.h +++ b/indra/newview/llpanelemojicomplete.h @@ -85,7 +85,7 @@ protected: LLUIImagePtr mSelectedImage; LLWString mEmojis; - U16 mVisibleEmojis = 0; + size_t mVisibleEmojis = 0; size_t mFirstVisible = 0; size_t mScrollPos = 0; size_t mCurSelected = 0; -- cgit v1.2.3 From 3185bdea27b19e155c2ccc03c80624e113d312a6 Mon Sep 17 00:00:00 2001 From: Callum Prentice Date: Thu, 26 Jan 2023 14:45:45 -0800 Subject: DRTVWR-489-emoji: As part of the work to get macOS version of the Viewer working, the flag was introduced to warn (and therefore error out) when a virtual override was not marked with the 'override' keyword. Fixing this up involved a large number of changes and this commit represents just those changes - nothing specially from the DRTVWR-489 viewer --- indra/newview/llautoreplace.h | 2 +- indra/newview/llchannelmanager.h | 2 +- indra/newview/llchicletbar.h | 4 +- indra/newview/llconversationlog.h | 10 +- indra/newview/llfeaturemanager.h | 2 +- indra/newview/llfriendcard.h | 2 +- indra/newview/llgesturemgr.h | 4 +- indra/newview/llimagefiltersmanager.h | 2 +- indra/newview/llimview.h | 2 +- indra/newview/llmutelist.h | 2 +- indra/newview/llnavigationbar.h | 8 +- indra/newview/lloutfitobserver.h | 2 +- indra/newview/llpaneltopinfobar.h | 6 +- indra/newview/llpathfindingpathtool.h | 18 ++-- indra/newview/llproductinforequest.h | 2 +- indra/newview/llrecentpeople.h | 2 +- indra/newview/llspeakers.h | 4 +- indra/newview/llspeakingindicatormanager.cpp | 2 +- indra/newview/lltoolbrush.h | 20 ++-- indra/newview/lltoolcomp.h | 72 ++++++------- indra/newview/lltooldraganddrop.h | 12 +-- indra/newview/lltoolface.h | 10 +- indra/newview/lltoolfocus.h | 14 +-- indra/newview/lltoolindividual.h | 8 +- indra/newview/lltoolobjpicker.h | 14 +-- indra/newview/lltoolpie.h | 32 +++--- indra/newview/lltoolpipette.h | 8 +- indra/newview/lltoolselectland.h | 16 +-- indra/newview/llversioninfo.h | 2 +- indra/newview/llviewerhelp.h | 10 +- indra/newview/llviewermedia.h | 2 +- indra/newview/llviewermediafocus.h | 16 +-- indra/newview/llviewerparcelaskplay.h | 4 +- indra/newview/llviewerparcelmedia.h | 2 +- indra/newview/llviewerparcelmediaautoplay.h | 2 +- indra/newview/llviewertexturelist.h | 6 +- indra/newview/llvoicechannel.h | 22 ++-- indra/newview/llvoicevivox.h | 146 +++++++++++++-------------- indra/newview/llwearableitemslist.h | 6 +- indra/newview/llwindebug.h | 4 +- 40 files changed, 251 insertions(+), 253 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llautoreplace.h b/indra/newview/llautoreplace.h index 23cc313646..a1eebf9dcb 100644 --- a/indra/newview/llautoreplace.h +++ b/indra/newview/llautoreplace.h @@ -203,7 +203,7 @@ public: void setSettings(const LLAutoReplaceSettings& settings); private: - /*virtual*/ void initSingleton(); + /*virtual*/ void initSingleton() override; LLAutoReplaceSettings mSettings; ///< configuration information diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h index 8abe350196..22ae595d66 100644 --- a/indra/newview/llchannelmanager.h +++ b/indra/newview/llchannelmanager.h @@ -46,7 +46,7 @@ class LLChannelManager : public LLSingleton LLSINGLETON(LLChannelManager); virtual ~LLChannelManager(); - void cleanupSingleton(); + void cleanupSingleton() override; public: diff --git a/indra/newview/llchicletbar.h b/indra/newview/llchicletbar.h index 6c521dc1d5..c295b99962 100644 --- a/indra/newview/llchicletbar.h +++ b/indra/newview/llchicletbar.h @@ -43,11 +43,11 @@ class LLChicletBar public: - BOOL postBuild(); + BOOL postBuild() override; LLChicletPanel* getChicletPanel() { return mChicletPanel; } - /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent); + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent) override; /** diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h index 820a5db491..54aeedcf9a 100644 --- a/indra/newview/llconversationlog.h +++ b/indra/newview/llconversationlog.h @@ -125,11 +125,11 @@ public: void removeObserver(LLConversationLogObserver* observer); // LLIMSessionObserver triggers - virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg); - virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) {}; // Stub - virtual void sessionRemoved(const LLUUID& session_id){} // Stub - virtual void sessionVoiceOrIMStarted(const LLUUID& session_id){}; // Stub - virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id){}; // Stub + virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg) override; + virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) override {}; // Stub + virtual void sessionRemoved(const LLUUID& session_id) override{} // Stub + virtual void sessionVoiceOrIMStarted(const LLUUID& session_id) override{}; // Stub + virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id) override{}; // Stub void notifyObservers(); diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h index 42a226cd18..d9269224af 100644 --- a/indra/newview/llfeaturemanager.h +++ b/indra/newview/llfeaturemanager.h @@ -101,7 +101,7 @@ class LLFeatureManager : public LLFeatureList, public LLSingleton mFiltersList; diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 326e8f22e3..353373f3b4 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -506,7 +506,7 @@ public: static void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent); private: - void initSingleton(); + void initSingleton() override; void onVoiceChannelChangedInt(const LLUUID &session_id); void onVoiceChannelStateChangedInt(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent); diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index 0d426fbd48..f86c2acd10 100644 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -73,7 +73,7 @@ class LLMuteList : public LLSingleton { LLSINGLETON(LLMuteList); ~LLMuteList(); - /*virtual*/ void cleanupSingleton(); + /*virtual*/ void cleanupSingleton() override; public: // reasons for auto-unmuting a resident enum EAutoReason diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h index 11c671294a..4649f5bcb0 100755 --- a/indra/newview/llnavigationbar.h +++ b/indra/newview/llnavigationbar.h @@ -92,10 +92,10 @@ class LLNavigationBar public: - /*virtual*/ void draw(); - /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); - /*virtual*/ BOOL postBuild(); - /*virtual*/ void setVisible(BOOL visible); + /*virtual*/ void draw() override; + /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override; + /*virtual*/ BOOL postBuild() override; + /*virtual*/ void setVisible(BOOL visible) override; void handleLoginComplete(); void clearHistoryCache(); diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h index 77041db68d..77bb3543aa 100644 --- a/indra/newview/lloutfitobserver.h +++ b/indra/newview/lloutfitobserver.h @@ -41,7 +41,7 @@ class LLOutfitObserver: public LLInventoryObserver, public LLSingleton, public: typedef boost::signals2::signal resize_signal_t; - /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); + /*virtual*/ BOOL postBuild() override; + /*virtual*/ void draw() override; /** * Updates location and parcel icons on login complete @@ -83,7 +83,7 @@ private: */ void initParcelIcons(); - BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override; /** * Handles clicks on the parcel icons. diff --git a/indra/newview/llpathfindingpathtool.h b/indra/newview/llpathfindingpathtool.h index 88cb3a15f8..f98624e30d 100644 --- a/indra/newview/llpathfindingpathtool.h +++ b/indra/newview/llpathfindingpathtool.h @@ -66,17 +66,17 @@ public: typedef boost::signals2::signal path_event_signal_t; typedef boost::signals2::connection path_event_slot_t; - virtual BOOL handleMouseDown(S32 pX, S32 pY, MASK pMask); - virtual BOOL handleMouseUp(S32 pX, S32 pY, MASK pMask); - virtual BOOL handleMiddleMouseDown(S32 pX, S32 pY, MASK pMask); - virtual BOOL handleMiddleMouseUp(S32 pX, S32 pY, MASK pMask); - virtual BOOL handleRightMouseDown(S32 pX, S32 pY, MASK pMask); - virtual BOOL handleRightMouseUp(S32 pX, S32 pY, MASK pMask); - virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); + virtual BOOL handleMouseDown(S32 pX, S32 pY, MASK pMask) override; + virtual BOOL handleMouseUp(S32 pX, S32 pY, MASK pMask) override; + virtual BOOL handleMiddleMouseDown(S32 pX, S32 pY, MASK pMask) override; + virtual BOOL handleMiddleMouseUp(S32 pX, S32 pY, MASK pMask) override; + virtual BOOL handleRightMouseDown(S32 pX, S32 pY, MASK pMask) override; + virtual BOOL handleRightMouseUp(S32 pX, S32 pY, MASK pMask) override; + virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override; - virtual BOOL handleHover(S32 pX, S32 pY, MASK pMask); + virtual BOOL handleHover(S32 pX, S32 pY, MASK pMask) override; - virtual BOOL handleKey(KEY pKey, MASK pMask); + virtual BOOL handleKey(KEY pKey, MASK pMask) override; EPathStatus getPathStatus() const; diff --git a/indra/newview/llproductinforequest.h b/indra/newview/llproductinforequest.h index d1036374e8..0b94c39d11 100644 --- a/indra/newview/llproductinforequest.h +++ b/indra/newview/llproductinforequest.h @@ -46,7 +46,7 @@ public: std::string getDescriptionForSku(const std::string& sku); private: - /* virtual */ void initSingleton(); + /* virtual */ void initSingleton() override; void getLandDescriptionsCoro(std::string url); LLSD mSkuDescriptions; diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h index 1b322f2c0a..0c04222a9f 100644 --- a/indra/newview/llrecentpeople.h +++ b/indra/newview/llrecentpeople.h @@ -106,7 +106,7 @@ public: /** * LLSimpleListener interface. */ - /*virtual*/ bool handleEvent(LLPointer event, const LLSD& userdata); + /*virtual*/ bool handleEvent(LLPointer event, const LLSD& userdata) override; void updateAvatarsArrivalTime(uuid_vec_t& uuids); F32 getArrivalTimeByID(const LLUUID& id); diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index ed795b5155..22c9481687 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -338,7 +338,7 @@ class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton @@ -347,7 +347,7 @@ class LLLocalSpeakerMgr : public LLSpeakerMgr, public LLSingleton speaker_ids_t; diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h index c108d83256..6545ee3611 100644 --- a/indra/newview/lltoolbrush.h +++ b/indra/newview/lltoolbrush.h @@ -49,27 +49,27 @@ class LLToolBrushLand : public LLTool, public LLEditMenuHandler, public LLSingle public: // x,y in window coords, 0,0 = left,bot - virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ); - virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ); - virtual BOOL handleHover( S32 x, S32 y, MASK mask ); - virtual void handleSelect(); - virtual void handleDeselect(); + virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ) override; + virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ) override; + virtual BOOL handleHover( S32 x, S32 y, MASK mask ) override; + virtual void handleSelect() override; + virtual void handleDeselect() override; // isAlwaysRendered() - return true if this is a tool that should // always be rendered regardless of selection. - virtual BOOL isAlwaysRendered() { return TRUE; } + virtual BOOL isAlwaysRendered() override { return TRUE; } // Draw the area that will be affected. - virtual void render(); + virtual void render() override; // on Idle is where the land modification actually occurs static void onIdle(void* brush_tool); - void onMouseCaptureLost(); + void onMouseCaptureLost() override; void modifyLandInSelectionGlobal(); - virtual void undo(); - virtual BOOL canUndo() const { return TRUE; } + virtual void undo() override; + virtual BOOL canUndo() const override { return TRUE; } protected: void brush( void ); diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h index 86506f725e..f539a045b7 100644 --- a/indra/newview/lltoolcomp.h +++ b/indra/newview/lltoolcomp.h @@ -108,11 +108,11 @@ class LLToolCompInspect : public LLToolComposite, public LLSingleton public: // Overridden from LLToolComposite - virtual BOOL handleHover(S32 x, S32 y, MASK mask); - virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); - virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); - virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); - virtual void onMouseCaptureLost(); - virtual void handleSelect(); - virtual void handleDeselect(); - virtual LLTool* getOverrideTool(MASK mask) { return NULL; } + virtual BOOL handleHover(S32 x, S32 y, MASK mask) override; + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override; + virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) override; + virtual void onMouseCaptureLost() override; + virtual void handleSelect() override; + virtual void handleDeselect() override; + virtual LLTool* getOverrideTool(MASK mask) override { return NULL; } protected: LLToolGun* mGun; diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 4537d73332..8ec027cb0e 100644 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -48,12 +48,12 @@ public: typedef boost::signals2::signal enddrag_signal_t; // overridden from LLTool - virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); - virtual BOOL handleHover(S32 x, S32 y, MASK mask); - virtual BOOL handleKey(KEY key, MASK mask); - virtual BOOL handleToolTip(S32 x, S32 y, MASK mask); - virtual void onMouseCaptureLost(); - virtual void handleDeselect(); + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + virtual BOOL handleHover(S32 x, S32 y, MASK mask) override; + virtual BOOL handleKey(KEY key, MASK mask) override; + virtual BOOL handleToolTip(S32 x, S32 y, MASK mask) override; + virtual void onMouseCaptureLost() override; + virtual void handleDeselect() override; void setDragStart( S32 x, S32 y ); // In screen space BOOL isOverThreshold( S32 x, S32 y ); // In screen space diff --git a/indra/newview/lltoolface.h b/indra/newview/lltoolface.h index e4b8ae12b8..7c8ff20480 100644 --- a/indra/newview/lltoolface.h +++ b/indra/newview/lltoolface.h @@ -39,11 +39,11 @@ class LLToolFace virtual ~LLToolFace(); public: - virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); - virtual void handleSelect(); - virtual void handleDeselect(); - virtual void render(); // draw face highlights + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override; + virtual void handleSelect() override; + virtual void handleDeselect() override; + virtual void render() override; // draw face highlights static void pickCallback(const LLPickInfo& pick_info); }; diff --git a/indra/newview/lltoolfocus.h b/indra/newview/lltoolfocus.h index cfc235b6c2..c9dd39ff4b 100644 --- a/indra/newview/lltoolfocus.h +++ b/indra/newview/lltoolfocus.h @@ -38,16 +38,16 @@ class LLToolCamera virtual ~LLToolCamera(); public: - virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); - virtual BOOL handleHover(S32 x, S32 y, MASK mask); + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + virtual BOOL handleHover(S32 x, S32 y, MASK mask) override; - virtual void onMouseCaptureLost(); + virtual void onMouseCaptureLost() override; - virtual void handleSelect(); - virtual void handleDeselect(); + virtual void handleSelect() override; + virtual void handleDeselect() override; - virtual LLTool* getOverrideTool(MASK mask) { return NULL; } + virtual LLTool* getOverrideTool(MASK mask) override { return NULL; } static void pickCallback(const LLPickInfo& pick_info); BOOL mouseSteerMode() { return mMouseSteering; } diff --git a/indra/newview/lltoolindividual.h b/indra/newview/lltoolindividual.h index e7c2060fba..89dd9d9796 100644 --- a/indra/newview/lltoolindividual.h +++ b/indra/newview/lltoolindividual.h @@ -43,11 +43,9 @@ class LLToolIndividual : public LLTool, public LLSingleton virtual ~LLToolIndividual(); public: - virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); - virtual void handleSelect(); - //virtual void handleDeselect(); - //virtual void render(); + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override; + virtual void handleSelect() override; static void pickCallback(const LLPickInfo& pick_info); diff --git a/indra/newview/lltoolobjpicker.h b/indra/newview/lltoolobjpicker.h index 5ad9b67e21..a55cd223de 100644 --- a/indra/newview/lltoolobjpicker.h +++ b/indra/newview/lltoolobjpicker.h @@ -38,16 +38,16 @@ class LLToolObjPicker : public LLTool, public LLSingleton LLSINGLETON(LLToolObjPicker); public: - virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); - virtual BOOL handleHover(S32 x, S32 y, MASK mask); + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + virtual BOOL handleHover(S32 x, S32 y, MASK mask) override; - virtual void handleSelect(); - virtual void handleDeselect(); + virtual void handleSelect() override; + virtual void handleDeselect() override; - virtual void onMouseCaptureLost(); + virtual void onMouseCaptureLost() override; - virtual void setExitCallback(void (*callback)(void *), void *callback_data); + void setExitCallback(void (*callback)(void *), void *callback_data); LLUUID getObjectID() const { return mHitObjectID; } diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index 8f6100e4b4..dca0d12cf6 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -42,26 +42,26 @@ class LLToolPie : public LLTool, public LLSingleton public: // Virtual functions inherited from LLMouseHandler - virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down); - virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); - virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask); - virtual BOOL handleHover(S32 x, S32 y, MASK mask); - virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); + virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down) override; + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask) override; + virtual BOOL handleHover(S32 x, S32 y, MASK mask) override; + virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override; BOOL handleScrollWheelAny(S32 x, S32 y, S32 clicks_x, S32 clicks_y); - virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); - virtual BOOL handleScrollHWheel(S32 x, S32 y, S32 clicks); - virtual BOOL handleToolTip(S32 x, S32 y, MASK mask); + virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) override; + virtual BOOL handleScrollHWheel(S32 x, S32 y, S32 clicks) override; + virtual BOOL handleToolTip(S32 x, S32 y, MASK mask) override; - virtual void render(); + virtual void render() override; - virtual void stopEditing(); + virtual void stopEditing() override; - virtual void onMouseCaptureLost(); - virtual void handleSelect(); - virtual void handleDeselect(); - virtual LLTool* getOverrideTool(MASK mask); + virtual void onMouseCaptureLost() override; + virtual void handleSelect() override; + virtual void handleDeselect() override; + virtual LLTool* getOverrideTool(MASK mask) override; LLPickInfo& getPick() { return mPick; } U8 getClickAction() { return mClickAction; } diff --git a/indra/newview/lltoolpipette.h b/indra/newview/lltoolpipette.h index 7575d8ad18..2636811c66 100644 --- a/indra/newview/lltoolpipette.h +++ b/indra/newview/lltoolpipette.h @@ -47,10 +47,10 @@ class LLToolPipette virtual ~LLToolPipette(); public: - virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); - virtual BOOL handleHover(S32 x, S32 y, MASK mask); - virtual BOOL handleToolTip(S32 x, S32 y, MASK mask); + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + virtual BOOL handleHover(S32 x, S32 y, MASK mask) override; + virtual BOOL handleToolTip(S32 x, S32 y, MASK mask) override; // Note: Don't return connection; use boost::bind + boost::signals2::trackable to disconnect slots typedef boost::signals2::signal signal_t; diff --git a/indra/newview/lltoolselectland.h b/indra/newview/lltoolselectland.h index b5ba72f16d..88bc4e2e3d 100644 --- a/indra/newview/lltoolselectland.h +++ b/indra/newview/lltoolselectland.h @@ -39,15 +39,15 @@ class LLToolSelectLand virtual ~LLToolSelectLand(); public: - /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); - /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); - /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); - /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); - /*virtual*/ void render(); // draw the select rectangle - /*virtual*/ BOOL isAlwaysRendered() { return TRUE; } + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; + /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override; + /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) override; + /*virtual*/ void render() override; // draw the select rectangle + /*virtual*/ BOOL isAlwaysRendered() override { return TRUE; } - /*virtual*/ void handleSelect(); - /*virtual*/ void handleDeselect(); + /*virtual*/ void handleSelect() override; + /*virtual*/ void handleDeselect() override; protected: BOOL outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y); diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h index 02ff0c094a..37382243f6 100644 --- a/indra/newview/llversioninfo.h +++ b/indra/newview/llversioninfo.h @@ -47,7 +47,7 @@ class LLStoreListener; class LLVersionInfo: public LLSingleton { LLSINGLETON(LLVersionInfo); - void initSingleton(); + void initSingleton() override; public: ~LLVersionInfo(); diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h index da50e07a43..bbd20bc07e 100644 --- a/indra/newview/llviewerhelp.h +++ b/indra/newview/llviewerhelp.h @@ -43,21 +43,21 @@ class LLViewerHelp : public LLHelp, public LLSingleton public: /// display the specified help topic in the help viewer - /*virtual*/ void showTopic(const std::string &topic); + /*virtual*/ void showTopic(const std::string &topic) override; - std::string getURL(const std::string& topic); + std::string getURL(const std::string& topic) override; // return topic derived from viewer UI focus, else default topic std::string getTopicFromFocus(); /// return default (fallback) topic name suitable for showTopic() - /*virtual*/ std::string defaultTopic(); + /*virtual*/ std::string defaultTopic() override; // return topic to use before the user logs in - /*virtual*/ std::string preLoginTopic(); + /*virtual*/ std::string preLoginTopic() override; // return topic to use for the top-level help, invoked by F1 - /*virtual*/ std::string f1HelpTopic(); + /*virtual*/ std::string f1HelpTopic() override; }; #endif // header guard diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index f1f42afd81..ad7c4bcefa 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -74,7 +74,7 @@ class LLViewerMedia: public LLSingleton { LLSINGLETON(LLViewerMedia); ~LLViewerMedia(); - void initSingleton(); + void initSingleton() override; LOG_CLASS(LLViewerMedia); public: diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h index effd08a559..2310e4dbfc 100644 --- a/indra/newview/llviewermediafocus.h +++ b/indra/newview/llviewermediafocus.h @@ -54,10 +54,10 @@ public: void setHoverFace(LLPointer objectp, S32 face, viewer_media_t media_impl, LLVector3 pick_normal = LLVector3::zero); void clearHover(); - /*virtual*/ bool getFocus(); - /*virtual*/ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); - /*virtual*/ BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent); - /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent); + bool getFocus(); + /*virtual*/ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override; + /*virtual*/ BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent) override; + /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent) override; BOOL handleScrollWheel(const LLVector2& texture_coords, S32 clicks_x, S32 clicks_y); BOOL handleScrollWheel(S32 x, S32 y, S32 clicks_x, S32 clicks_y); @@ -92,12 +92,12 @@ public: LLUUID getControlsMediaID(); // The MoaP object wants keyup and keydown events. Overridden to return true. - virtual bool wantsKeyUpKeyDown() const; - virtual bool wantsReturnKey() const; + virtual bool wantsKeyUpKeyDown() const override; + virtual bool wantsReturnKey() const override; protected: - /*virtual*/ void onFocusReceived(); - /*virtual*/ void onFocusLost(); + /*virtual*/ void onFocusReceived() override; + /*virtual*/ void onFocusLost() override; private: diff --git a/indra/newview/llviewerparcelaskplay.h b/indra/newview/llviewerparcelaskplay.h index dc711917d2..56faddae66 100644 --- a/indra/newview/llviewerparcelaskplay.h +++ b/indra/newview/llviewerparcelaskplay.h @@ -34,8 +34,8 @@ class LLViewerParcelAskPlay : public LLSingleton { LLSINGLETON(LLViewerParcelAskPlay); ~LLViewerParcelAskPlay(); - void initSingleton(); - void cleanupSingleton(); + void initSingleton() override; + void cleanupSingleton() override; public: // functor expects functor(region_id, parcel_id, url, play/stop) typedef boost::function ask_callback; diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h index 779a65bdf8..790b2b71fc 100644 --- a/indra/newview/llviewerparcelmedia.h +++ b/indra/newview/llviewerparcelmedia.h @@ -74,7 +74,7 @@ public: void sendMediaNavigateMessage(const std::string& url); // inherited from LLViewerMediaObserver - virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); + virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override; private: void processParcelMediaCommandMessage(LLMessageSystem *msg); diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h index d71fd4c075..e83085dee0 100644 --- a/indra/newview/llviewerparcelmediaautoplay.h +++ b/indra/newview/llviewerparcelmediaautoplay.h @@ -35,7 +35,7 @@ class LLViewerParcelMediaAutoPlay : LLEventTimer, public LLSingleton getUIImageByID(const LLUUID& id, S32 priority); - /*virtual*/ LLPointer getUIImage(const std::string& name, S32 priority); - void cleanUp(); + /*virtual*/ LLPointer getUIImageByID(const LLUUID& id, S32 priority) override; + /*virtual*/ LLPointer getUIImage(const std::string& name, S32 priority) override; + void cleanUp() override; bool initFromFile(); diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index 309c3eebdd..e68bfbe1ff 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -170,12 +170,12 @@ class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton &participants); - virtual bool isParticipant(const LLUUID& speaker_id); + virtual void getParticipantList(std::set &participants) override; + virtual bool isParticipant(const LLUUID& speaker_id) override; // Send a text message to the specified user, initiating the session if necessary. // virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message) const {return false;}; // close any existing text IM session with the specified user - virtual void endUserIMSession(const LLUUID &uuid); + virtual void endUserIMSession(const LLUUID &uuid) override; // Returns true if calling back the session URI after the session has closed is possible. // Currently this will be false only for PSTN P2P calls. // NOTE: this will return true if the session can't be found. - virtual BOOL isSessionCallBackPossible(const LLUUID &session_id); + virtual BOOL isSessionCallBackPossible(const LLUUID &session_id) override; // Returns true if the session can accepte text IM's. // Currently this will be false only for PSTN P2P calls. // NOTE: this will return true if the session can't be found. - virtual BOOL isSessionTextIMPossible(const LLUUID &session_id); + virtual BOOL isSessionTextIMPossible(const LLUUID &session_id) override; //////////////////////////// @@ -134,21 +134,21 @@ public: //@{ // returns true iff the user is currently in a proximal (local spatial) channel. // Note that gestures should only fire if this returns true. - virtual bool inProximalChannel(); + virtual bool inProximalChannel() override; virtual void setNonSpatialChannel(const std::string &uri, - const std::string &credentials); + const std::string &credentials) override; virtual bool setSpatialChannel(const std::string &uri, - const std::string &credentials); + const std::string &credentials) override; - virtual void leaveNonSpatialChannel(); + virtual void leaveNonSpatialChannel() override; - virtual void leaveChannel(void); + virtual void leaveChannel(void) override; // Returns the URI of the current channel, or an empty string if not currently in a channel. // NOTE that it will return an empty string if it's in the process of joining a channel. - virtual std::string getCurrentChannel(); + virtual std::string getCurrentChannel() override; //@} @@ -156,59 +156,59 @@ public: /// @name invitations //@{ // start a voice channel with the specified user - virtual void callUser(const LLUUID &uuid); - virtual bool isValidChannel(std::string &channelHandle); - virtual bool answerInvite(std::string &channelHandle); - virtual void declineInvite(std::string &channelHandle); + virtual void callUser(const LLUUID &uuid) override; + virtual bool isValidChannel(std::string &channelHandle) override; + virtual bool answerInvite(std::string &channelHandle) override; + virtual void declineInvite(std::string &channelHandle) override; //@} ///////////////////////// /// @name Volume/gain //@{ - virtual void setVoiceVolume(F32 volume); - virtual void setMicGain(F32 volume); + virtual void setVoiceVolume(F32 volume) override; + virtual void setMicGain(F32 volume) override; //@} ///////////////////////// /// @name enable disable voice and features //@{ - virtual bool voiceEnabled(); - virtual void setVoiceEnabled(bool enabled); - virtual BOOL lipSyncEnabled(); - virtual void setLipSyncEnabled(BOOL enabled); - virtual void setMuteMic(bool muted); // Set the mute state of the local mic. + virtual bool voiceEnabled() override; + virtual void setVoiceEnabled(bool enabled) override; + virtual BOOL lipSyncEnabled() override; + virtual void setLipSyncEnabled(BOOL enabled) override; + virtual void setMuteMic(bool muted) override; // Set the mute state of the local mic. //@} ////////////////////////// /// @name nearby speaker accessors //@{ - virtual BOOL getVoiceEnabled(const LLUUID& id); // true if we've received data for this avatar - virtual std::string getDisplayName(const LLUUID& id); - virtual BOOL isParticipantAvatar(const LLUUID &id); - virtual BOOL getIsSpeaking(const LLUUID& id); - virtual BOOL getIsModeratorMuted(const LLUUID& id); - virtual F32 getCurrentPower(const LLUUID& id); // "power" is related to "amplitude" in a defined way. I'm just not sure what the formula is... - virtual BOOL getOnMuteList(const LLUUID& id); - virtual F32 getUserVolume(const LLUUID& id); - virtual void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal) + virtual BOOL getVoiceEnabled(const LLUUID& id) override; // true if we've received data for this avatar + virtual std::string getDisplayName(const LLUUID& id) override; + virtual BOOL isParticipantAvatar(const LLUUID &id) override; + virtual BOOL getIsSpeaking(const LLUUID& id) override; + virtual BOOL getIsModeratorMuted(const LLUUID& id) override; + virtual F32 getCurrentPower(const LLUUID& id) override; // "power" is related to "amplitude" in a defined way. I'm just not sure what the formula is... + virtual BOOL getOnMuteList(const LLUUID& id) override; + virtual F32 getUserVolume(const LLUUID& id) override; + virtual void setUserVolume(const LLUUID& id, F32 volume) override; // set's volume for specified agent, from 0-1 (where .5 is nominal) //@} // authorize the user virtual void userAuthorized(const std::string& user_id, - const LLUUID &agentID); + const LLUUID &agentID) override; ////////////////////////////// /// @name Status notification //@{ - virtual void addObserver(LLVoiceClientStatusObserver* observer); - virtual void removeObserver(LLVoiceClientStatusObserver* observer); - virtual void addObserver(LLFriendObserver* observer); - virtual void removeObserver(LLFriendObserver* observer); - virtual void addObserver(LLVoiceClientParticipantObserver* observer); - virtual void removeObserver(LLVoiceClientParticipantObserver* observer); + virtual void addObserver(LLVoiceClientStatusObserver* observer) override; + virtual void removeObserver(LLVoiceClientStatusObserver* observer) override; + virtual void addObserver(LLFriendObserver* observer) override; + virtual void removeObserver(LLFriendObserver* observer) override; + virtual void addObserver(LLVoiceClientParticipantObserver* observer) override; + virtual void removeObserver(LLVoiceClientParticipantObserver* observer) override; //@} - virtual std::string sipURIFromID(const LLUUID &id); + virtual std::string sipURIFromID(const LLUUID &id) override; //@} /// @name LLVoiceEffectInterface virtual implementations @@ -218,32 +218,32 @@ public: ////////////////////////// /// @name Accessors //@{ - virtual bool setVoiceEffect(const LLUUID& id); - virtual const LLUUID getVoiceEffect(); - virtual LLSD getVoiceEffectProperties(const LLUUID& id); + virtual bool setVoiceEffect(const LLUUID& id) override; + virtual const LLUUID getVoiceEffect() override; + virtual LLSD getVoiceEffectProperties(const LLUUID& id) override; - virtual void refreshVoiceEffectLists(bool clear_lists); - virtual const voice_effect_list_t& getVoiceEffectList() const; - virtual const voice_effect_list_t& getVoiceEffectTemplateList() const; + virtual void refreshVoiceEffectLists(bool clear_lists) override; + virtual const voice_effect_list_t& getVoiceEffectList() const override; + virtual const voice_effect_list_t& getVoiceEffectTemplateList() const override; //@} ////////////////////////////// /// @name Status notification //@{ - virtual void addObserver(LLVoiceEffectObserver* observer); - virtual void removeObserver(LLVoiceEffectObserver* observer); + virtual void addObserver(LLVoiceEffectObserver* observer) override; + virtual void removeObserver(LLVoiceEffectObserver* observer) override; //@} ////////////////////////////// /// @name Effect preview buffer //@{ - virtual void enablePreviewBuffer(bool enable); - virtual void recordPreviewBuffer(); - virtual void playPreviewBuffer(const LLUUID& effect_id = LLUUID::null); - virtual void stopPreviewBuffer(); + virtual void enablePreviewBuffer(bool enable) override; + virtual void recordPreviewBuffer() override; + virtual void playPreviewBuffer(const LLUUID& effect_id = LLUUID::null) override; + virtual void stopPreviewBuffer() override; - virtual bool isPreviewRecording(); - virtual bool isPreviewPlaying(); + virtual bool isPreviewRecording() override; + virtual bool isPreviewPlaying() override; //@} //@} @@ -754,7 +754,7 @@ private: std::string getAudioSessionURI(); std::string getAudioSessionHandle(); - void setHidden(bool hidden); //virtual + void setHidden(bool hidden) override; //virtual void sendPositionAndVolumeUpdate(void); void sendCaptureAndRenderDevices(); diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index ba8488b237..602e8f0711 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -413,7 +413,7 @@ public: { LLSINGLETON(ContextMenu); public: - /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y); + /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) override; void show(LLView* spawning_view, LLWearableType::EType w_type, S32 x, S32 y); @@ -426,7 +426,7 @@ public: MASK_UNKNOWN = 0x10, }; - /* virtual */ LLContextMenu* createMenu(); + /* virtual */ LLContextMenu* createMenu() override; void updateItemsVisibility(LLContextMenu* menu); void updateItemsLabels(LLContextMenu* menu); static void setMenuItemVisible(LLContextMenu* menu, const std::string& name, bool val); @@ -456,7 +456,7 @@ public: virtual ~LLWearableItemsList(); - /*virtual*/ LLPanel* createNewItem(LLViewerInventoryItem* item); + /*virtual*/ LLPanel* createNewItem(LLViewerInventoryItem* item) override; void updateList(const LLUUID& category_id); diff --git a/indra/newview/llwindebug.h b/indra/newview/llwindebug.h index 524adba652..31dbfb8ffd 100644 --- a/indra/newview/llwindebug.h +++ b/indra/newview/llwindebug.h @@ -40,9 +40,9 @@ class LLWinDebug: { LLSINGLETON_EMPTY_CTOR(LLWinDebug); public: - void initSingleton(); + void initSingleton() override; static void generateMinidump(struct _EXCEPTION_POINTERS *pExceptionInfo = NULL); - void cleanupSingleton(); + void cleanupSingleton() override; private: static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const std::string& filename); }; -- cgit v1.2.3 From d9e82ab14aaa3e0daceacda8cf72ade379e9caf1 Mon Sep 17 00:00:00 2001 From: Callum Prentice Date: Thu, 26 Jan 2023 17:04:35 -0800 Subject: DRTVWR-489-emoji: Pull in some small changes from Kitty's work to move the macOS build forwards --- indra/newview/CMakeLists.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 36f4680c44..ee55657dd8 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -449,7 +449,7 @@ set(viewer_SOURCE_FILES llpaneleditsky.cpp llpaneleditwater.cpp llpaneleditwearable.cpp - llpanelemojicomplete.cpp + llpanelemojicomplete.cpp llpanelenvironment.cpp llpanelexperiencelisteditor.cpp llpanelexperiencelog.cpp @@ -1081,7 +1081,7 @@ set(viewer_HEADER_FILES llpaneleditsky.h llpaneleditwater.h llpaneleditwearable.h - llpanelemojicomplete.h + llpanelemojicomplete.h llpanelenvironment.h llpanelexperiencelisteditor.h llpanelexperiencelog.h @@ -1506,12 +1506,6 @@ if (WINDOWS) set(viewer_SOURCE_FILES "${viewer_SOURCE_FILES}" llviewerprecompiledheaders.cpp) endif(USE_PRECOMPILED_HEADERS) - message("Copying fonts") - file(GLOB FONT_FILE_GLOB_LIST - "${AUTOBUILD_INSTALL_DIR}/fonts/*" - ) - file(COPY ${FONT_FILE_GLOB_LIST} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/fonts") - # Replace the icons with the appropriate ones for the channel # ('test' is the default) set(ICON_PATH "test") @@ -2087,6 +2081,12 @@ endif (USE_BUGSPLAT) set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH "Path to artwork files.") +message("Copying fonts") +file(GLOB FONT_FILE_GLOB_LIST + "${AUTOBUILD_INSTALL_DIR}/fonts/*" +) +file(COPY ${FONT_FILE_GLOB_LIST} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/fonts") + if (LINUX) set(product SecondLife-${ARCH}-${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}) -- cgit v1.2.3