diff --git a/Externals/imgui/imgui.cpp b/Externals/imgui/imgui.cpp index 8f56ab6c55..a6e2bfb795 100644 --- a/Externals/imgui/imgui.cpp +++ b/Externals/imgui/imgui.cpp @@ -2365,7 +2365,7 @@ void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end // Default clip_rect uses (pos_min,pos_max) // Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges) -void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_display_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect) +void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_display_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect, const ImVec4& color) { // Perform CPU side clipping for single clipped element to avoid using scissor state ImVec2 pos = pos_min; @@ -2385,15 +2385,15 @@ void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, co if (need_clipping) { ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y); - draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect); + draw_list->AddText(NULL, 0.0f, pos, GetColorU32(color), text, text_display_end, 0.0f, &fine_clip_rect); } else { - draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL); + draw_list->AddText(NULL, 0.0f, pos, GetColorU32(color), text, text_display_end, 0.0f, NULL); } } -void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect) +void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect, const ImVec4& color) { // Hide anything after a '##' string const char* text_display_end = FindRenderedTextEnd(text, text_end); @@ -2403,7 +2403,7 @@ void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, cons ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; - RenderTextClippedEx(window->DrawList, pos_min, pos_max, text, text_display_end, text_size_if_known, align, clip_rect); + RenderTextClippedEx(window->DrawList, pos_min, pos_max, text, text_display_end, text_size_if_known, align, clip_rect, color); if (g.LogEnabled) LogRenderedText(&pos_min, text, text_display_end); } diff --git a/Externals/imgui/imgui_internal.h b/Externals/imgui/imgui_internal.h index 9107cfeaff..5e47cb6016 100644 --- a/Externals/imgui/imgui_internal.h +++ b/Externals/imgui/imgui_internal.h @@ -1511,8 +1511,8 @@ namespace ImGui // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally) IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true); IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width); - IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL); - IMGUI_API void RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL); + IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL, const ImVec4& color = ImGui::GetStyle().Colors[ImGuiCol_Text]); + IMGUI_API void RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL, const ImVec4& color = ImGui::GetStyle().Colors[ImGuiCol_Text]); IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f); IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f); IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0); diff --git a/Source/Core/VideoCommon/CMakeLists.txt b/Source/Core/VideoCommon/CMakeLists.txt index 8e957f4a8d..9d29a6eff1 100644 --- a/Source/Core/VideoCommon/CMakeLists.txt +++ b/Source/Core/VideoCommon/CMakeLists.txt @@ -42,6 +42,7 @@ add_library(videocommon HiresTextures.cpp HiresTextures.h HiresTextures_DDSLoader.cpp + IconsFontAwesome4.h ImageWrite.cpp ImageWrite.h IndexGenerator.cpp diff --git a/Source/Core/VideoCommon/IconsFontAwesome4.h b/Source/Core/VideoCommon/IconsFontAwesome4.h new file mode 100644 index 0000000000..c3bb1f60f4 --- /dev/null +++ b/Source/Core/VideoCommon/IconsFontAwesome4.h @@ -0,0 +1,684 @@ +// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11 +// from https://raw.githubusercontent.com/FortAwesome/Font-Awesome/fa-4/src/icons.yml +// for use with https://github.com/FortAwesome/Font-Awesome/blob/fa-4/fonts/fontawesome-webfont.ttf +#pragma once + +#define FONT_ICON_FILE_NAME_FA "fontawesome-webfont.ttf" + +#define ICON_MIN_FA 0xf000 +#define ICON_MAX_FA 0xf2e0 +#define ICON_FA_GLASS u8"\uf000" +#define ICON_FA_MUSIC u8"\uf001" +#define ICON_FA_SEARCH u8"\uf002" +#define ICON_FA_ENVELOPE_O u8"\uf003" +#define ICON_FA_HEART u8"\uf004" +#define ICON_FA_STAR u8"\uf005" +#define ICON_FA_STAR_O u8"\uf006" +#define ICON_FA_USER u8"\uf007" +#define ICON_FA_FILM u8"\uf008" +#define ICON_FA_TH_LARGE u8"\uf009" +#define ICON_FA_TH u8"\uf00a" +#define ICON_FA_TH_LIST u8"\uf00b" +#define ICON_FA_CHECK u8"\uf00c" +#define ICON_FA_TIMES u8"\uf00d" +#define ICON_FA_SEARCH_PLUS u8"\uf00e" +#define ICON_FA_SEARCH_MINUS u8"\uf010" +#define ICON_FA_POWER_OFF u8"\uf011" +#define ICON_FA_SIGNAL u8"\uf012" +#define ICON_FA_COG u8"\uf013" +#define ICON_FA_TRASH_O u8"\uf014" +#define ICON_FA_HOME u8"\uf015" +#define ICON_FA_FILE_O u8"\uf016" +#define ICON_FA_CLOCK_O u8"\uf017" +#define ICON_FA_ROAD u8"\uf018" +#define ICON_FA_DOWNLOAD u8"\uf019" +#define ICON_FA_ARROW_CIRCLE_O_DOWN u8"\uf01a" +#define ICON_FA_ARROW_CIRCLE_O_UP u8"\uf01b" +#define ICON_FA_INBOX u8"\uf01c" +#define ICON_FA_PLAY_CIRCLE_O u8"\uf01d" +#define ICON_FA_REPEAT u8"\uf01e" +#define ICON_FA_REFRESH u8"\uf021" +#define ICON_FA_LIST_ALT u8"\uf022" +#define ICON_FA_LOCK u8"\uf023" +#define ICON_FA_FLAG u8"\uf024" +#define ICON_FA_HEADPHONES u8"\uf025" +#define ICON_FA_VOLUME_OFF u8"\uf026" +#define ICON_FA_VOLUME_DOWN u8"\uf027" +#define ICON_FA_VOLUME_UP u8"\uf028" +#define ICON_FA_QRCODE u8"\uf029" +#define ICON_FA_BARCODE u8"\uf02a" +#define ICON_FA_TAG u8"\uf02b" +#define ICON_FA_TAGS u8"\uf02c" +#define ICON_FA_BOOK u8"\uf02d" +#define ICON_FA_BOOKMARK u8"\uf02e" +#define ICON_FA_PRINT u8"\uf02f" +#define ICON_FA_CAMERA u8"\uf030" +#define ICON_FA_FONT u8"\uf031" +#define ICON_FA_BOLD u8"\uf032" +#define ICON_FA_ITALIC u8"\uf033" +#define ICON_FA_TEXT_HEIGHT u8"\uf034" +#define ICON_FA_TEXT_WIDTH u8"\uf035" +#define ICON_FA_ALIGN_LEFT u8"\uf036" +#define ICON_FA_ALIGN_CENTER u8"\uf037" +#define ICON_FA_ALIGN_RIGHT u8"\uf038" +#define ICON_FA_ALIGN_JUSTIFY u8"\uf039" +#define ICON_FA_LIST u8"\uf03a" +#define ICON_FA_OUTDENT u8"\uf03b" +#define ICON_FA_INDENT u8"\uf03c" +#define ICON_FA_VIDEO_CAMERA u8"\uf03d" +#define ICON_FA_PICTURE_O u8"\uf03e" +#define ICON_FA_PENCIL u8"\uf040" +#define ICON_FA_MAP_MARKER u8"\uf041" +#define ICON_FA_ADJUST u8"\uf042" +#define ICON_FA_TINT u8"\uf043" +#define ICON_FA_PENCIL_SQUARE_O u8"\uf044" +#define ICON_FA_SHARE_SQUARE_O u8"\uf045" +#define ICON_FA_CHECK_SQUARE_O u8"\uf046" +#define ICON_FA_ARROWS u8"\uf047" +#define ICON_FA_STEP_BACKWARD u8"\uf048" +#define ICON_FA_FAST_BACKWARD u8"\uf049" +#define ICON_FA_BACKWARD u8"\uf04a" +#define ICON_FA_PLAY u8"\uf04b" +#define ICON_FA_PAUSE u8"\uf04c" +#define ICON_FA_STOP u8"\uf04d" +#define ICON_FA_FORWARD u8"\uf04e" +#define ICON_FA_FAST_FORWARD u8"\uf050" +#define ICON_FA_STEP_FORWARD u8"\uf051" +#define ICON_FA_EJECT u8"\uf052" +#define ICON_FA_CHEVRON_LEFT u8"\uf053" +#define ICON_FA_CHEVRON_RIGHT u8"\uf054" +#define ICON_FA_PLUS_CIRCLE u8"\uf055" +#define ICON_FA_MINUS_CIRCLE u8"\uf056" +#define ICON_FA_TIMES_CIRCLE u8"\uf057" +#define ICON_FA_CHECK_CIRCLE u8"\uf058" +#define ICON_FA_QUESTION_CIRCLE u8"\uf059" +#define ICON_FA_INFO_CIRCLE u8"\uf05a" +#define ICON_FA_CROSSHAIRS u8"\uf05b" +#define ICON_FA_TIMES_CIRCLE_O u8"\uf05c" +#define ICON_FA_CHECK_CIRCLE_O u8"\uf05d" +#define ICON_FA_BAN u8"\uf05e" +#define ICON_FA_ARROW_LEFT u8"\uf060" +#define ICON_FA_ARROW_RIGHT u8"\uf061" +#define ICON_FA_ARROW_UP u8"\uf062" +#define ICON_FA_ARROW_DOWN u8"\uf063" +#define ICON_FA_SHARE u8"\uf064" +#define ICON_FA_EXPAND u8"\uf065" +#define ICON_FA_COMPRESS u8"\uf066" +#define ICON_FA_PLUS u8"\uf067" +#define ICON_FA_MINUS u8"\uf068" +#define ICON_FA_ASTERISK u8"\uf069" +#define ICON_FA_EXCLAMATION_CIRCLE u8"\uf06a" +#define ICON_FA_GIFT u8"\uf06b" +#define ICON_FA_LEAF u8"\uf06c" +#define ICON_FA_FIRE u8"\uf06d" +#define ICON_FA_EYE u8"\uf06e" +#define ICON_FA_EYE_SLASH u8"\uf070" +#define ICON_FA_EXCLAMATION_TRIANGLE u8"\uf071" +#define ICON_FA_PLANE u8"\uf072" +#define ICON_FA_CALENDAR u8"\uf073" +#define ICON_FA_RANDOM u8"\uf074" +#define ICON_FA_COMMENT u8"\uf075" +#define ICON_FA_MAGNET u8"\uf076" +#define ICON_FA_CHEVRON_UP u8"\uf077" +#define ICON_FA_CHEVRON_DOWN u8"\uf078" +#define ICON_FA_RETWEET u8"\uf079" +#define ICON_FA_SHOPPING_CART u8"\uf07a" +#define ICON_FA_FOLDER u8"\uf07b" +#define ICON_FA_FOLDER_OPEN u8"\uf07c" +#define ICON_FA_ARROWS_V u8"\uf07d" +#define ICON_FA_ARROWS_H u8"\uf07e" +#define ICON_FA_BAR_CHART u8"\uf080" +#define ICON_FA_TWITTER_SQUARE u8"\uf081" +#define ICON_FA_FACEBOOK_SQUARE u8"\uf082" +#define ICON_FA_CAMERA_RETRO u8"\uf083" +#define ICON_FA_KEY u8"\uf084" +#define ICON_FA_COGS u8"\uf085" +#define ICON_FA_COMMENTS u8"\uf086" +#define ICON_FA_THUMBS_O_UP u8"\uf087" +#define ICON_FA_THUMBS_O_DOWN u8"\uf088" +#define ICON_FA_STAR_HALF u8"\uf089" +#define ICON_FA_HEART_O u8"\uf08a" +#define ICON_FA_SIGN_OUT u8"\uf08b" +#define ICON_FA_LINKEDIN_SQUARE u8"\uf08c" +#define ICON_FA_THUMB_TACK u8"\uf08d" +#define ICON_FA_EXTERNAL_LINK u8"\uf08e" +#define ICON_FA_SIGN_IN u8"\uf090" +#define ICON_FA_TROPHY u8"\uf091" +#define ICON_FA_GITHUB_SQUARE u8"\uf092" +#define ICON_FA_UPLOAD u8"\uf093" +#define ICON_FA_LEMON_O u8"\uf094" +#define ICON_FA_PHONE u8"\uf095" +#define ICON_FA_SQUARE_O u8"\uf096" +#define ICON_FA_BOOKMARK_O u8"\uf097" +#define ICON_FA_PHONE_SQUARE u8"\uf098" +#define ICON_FA_TWITTER u8"\uf099" +#define ICON_FA_FACEBOOK u8"\uf09a" +#define ICON_FA_GITHUB u8"\uf09b" +#define ICON_FA_UNLOCK u8"\uf09c" +#define ICON_FA_CREDIT_CARD u8"\uf09d" +#define ICON_FA_RSS u8"\uf09e" +#define ICON_FA_HDD_O u8"\uf0a0" +#define ICON_FA_BULLHORN u8"\uf0a1" +#define ICON_FA_BELL u8"\uf0f3" +#define ICON_FA_CERTIFICATE u8"\uf0a3" +#define ICON_FA_HAND_O_RIGHT u8"\uf0a4" +#define ICON_FA_HAND_O_LEFT u8"\uf0a5" +#define ICON_FA_HAND_O_UP u8"\uf0a6" +#define ICON_FA_HAND_O_DOWN u8"\uf0a7" +#define ICON_FA_ARROW_CIRCLE_LEFT u8"\uf0a8" +#define ICON_FA_ARROW_CIRCLE_RIGHT u8"\uf0a9" +#define ICON_FA_ARROW_CIRCLE_UP u8"\uf0aa" +#define ICON_FA_ARROW_CIRCLE_DOWN u8"\uf0ab" +#define ICON_FA_GLOBE u8"\uf0ac" +#define ICON_FA_WRENCH u8"\uf0ad" +#define ICON_FA_TASKS u8"\uf0ae" +#define ICON_FA_FILTER u8"\uf0b0" +#define ICON_FA_BRIEFCASE u8"\uf0b1" +#define ICON_FA_ARROWS_ALT u8"\uf0b2" +#define ICON_FA_USERS u8"\uf0c0" +#define ICON_FA_LINK u8"\uf0c1" +#define ICON_FA_CLOUD u8"\uf0c2" +#define ICON_FA_FLASK u8"\uf0c3" +#define ICON_FA_SCISSORS u8"\uf0c4" +#define ICON_FA_FILES_O u8"\uf0c5" +#define ICON_FA_PAPERCLIP u8"\uf0c6" +#define ICON_FA_FLOPPY_O u8"\uf0c7" +#define ICON_FA_SQUARE u8"\uf0c8" +#define ICON_FA_BARS u8"\uf0c9" +#define ICON_FA_LIST_UL u8"\uf0ca" +#define ICON_FA_LIST_OL u8"\uf0cb" +#define ICON_FA_STRIKETHROUGH u8"\uf0cc" +#define ICON_FA_UNDERLINE u8"\uf0cd" +#define ICON_FA_TABLE u8"\uf0ce" +#define ICON_FA_MAGIC u8"\uf0d0" +#define ICON_FA_TRUCK u8"\uf0d1" +#define ICON_FA_PINTEREST u8"\uf0d2" +#define ICON_FA_PINTEREST_SQUARE u8"\uf0d3" +#define ICON_FA_GOOGLE_PLUS_SQUARE u8"\uf0d4" +#define ICON_FA_GOOGLE_PLUS u8"\uf0d5" +#define ICON_FA_MONEY u8"\uf0d6" +#define ICON_FA_CARET_DOWN u8"\uf0d7" +#define ICON_FA_CARET_UP u8"\uf0d8" +#define ICON_FA_CARET_LEFT u8"\uf0d9" +#define ICON_FA_CARET_RIGHT u8"\uf0da" +#define ICON_FA_COLUMNS u8"\uf0db" +#define ICON_FA_SORT u8"\uf0dc" +#define ICON_FA_SORT_DESC u8"\uf0dd" +#define ICON_FA_SORT_ASC u8"\uf0de" +#define ICON_FA_ENVELOPE u8"\uf0e0" +#define ICON_FA_LINKEDIN u8"\uf0e1" +#define ICON_FA_UNDO u8"\uf0e2" +#define ICON_FA_GAVEL u8"\uf0e3" +#define ICON_FA_TACHOMETER u8"\uf0e4" +#define ICON_FA_COMMENT_O u8"\uf0e5" +#define ICON_FA_COMMENTS_O u8"\uf0e6" +#define ICON_FA_BOLT u8"\uf0e7" +#define ICON_FA_SITEMAP u8"\uf0e8" +#define ICON_FA_UMBRELLA u8"\uf0e9" +#define ICON_FA_CLIPBOARD u8"\uf0ea" +#define ICON_FA_LIGHTBULB_O u8"\uf0eb" +#define ICON_FA_EXCHANGE u8"\uf0ec" +#define ICON_FA_CLOUD_DOWNLOAD u8"\uf0ed" +#define ICON_FA_CLOUD_UPLOAD u8"\uf0ee" +#define ICON_FA_USER_MD u8"\uf0f0" +#define ICON_FA_STETHOSCOPE u8"\uf0f1" +#define ICON_FA_SUITCASE u8"\uf0f2" +#define ICON_FA_BELL_O u8"\uf0a2" +#define ICON_FA_COFFEE u8"\uf0f4" +#define ICON_FA_CUTLERY u8"\uf0f5" +#define ICON_FA_FILE_TEXT_O u8"\uf0f6" +#define ICON_FA_BUILDING_O u8"\uf0f7" +#define ICON_FA_HOSPITAL_O u8"\uf0f8" +#define ICON_FA_AMBULANCE u8"\uf0f9" +#define ICON_FA_MEDKIT u8"\uf0fa" +#define ICON_FA_FIGHTER_JET u8"\uf0fb" +#define ICON_FA_BEER u8"\uf0fc" +#define ICON_FA_H_SQUARE u8"\uf0fd" +#define ICON_FA_PLUS_SQUARE u8"\uf0fe" +#define ICON_FA_ANGLE_DOUBLE_LEFT u8"\uf100" +#define ICON_FA_ANGLE_DOUBLE_RIGHT u8"\uf101" +#define ICON_FA_ANGLE_DOUBLE_UP u8"\uf102" +#define ICON_FA_ANGLE_DOUBLE_DOWN u8"\uf103" +#define ICON_FA_ANGLE_LEFT u8"\uf104" +#define ICON_FA_ANGLE_RIGHT u8"\uf105" +#define ICON_FA_ANGLE_UP u8"\uf106" +#define ICON_FA_ANGLE_DOWN u8"\uf107" +#define ICON_FA_DESKTOP u8"\uf108" +#define ICON_FA_LAPTOP u8"\uf109" +#define ICON_FA_TABLET u8"\uf10a" +#define ICON_FA_MOBILE u8"\uf10b" +#define ICON_FA_CIRCLE_O u8"\uf10c" +#define ICON_FA_QUOTE_LEFT u8"\uf10d" +#define ICON_FA_QUOTE_RIGHT u8"\uf10e" +#define ICON_FA_SPINNER u8"\uf110" +#define ICON_FA_CIRCLE u8"\uf111" +#define ICON_FA_REPLY u8"\uf112" +#define ICON_FA_GITHUB_ALT u8"\uf113" +#define ICON_FA_FOLDER_O u8"\uf114" +#define ICON_FA_FOLDER_OPEN_O u8"\uf115" +#define ICON_FA_SMILE_O u8"\uf118" +#define ICON_FA_FROWN_O u8"\uf119" +#define ICON_FA_MEH_O u8"\uf11a" +#define ICON_FA_GAMEPAD u8"\uf11b" +#define ICON_FA_KEYBOARD_O u8"\uf11c" +#define ICON_FA_FLAG_O u8"\uf11d" +#define ICON_FA_FLAG_CHECKERED u8"\uf11e" +#define ICON_FA_TERMINAL u8"\uf120" +#define ICON_FA_CODE u8"\uf121" +#define ICON_FA_REPLY_ALL u8"\uf122" +#define ICON_FA_STAR_HALF_O u8"\uf123" +#define ICON_FA_LOCATION_ARROW u8"\uf124" +#define ICON_FA_CROP u8"\uf125" +#define ICON_FA_CODE_FORK u8"\uf126" +#define ICON_FA_CHAIN_BROKEN u8"\uf127" +#define ICON_FA_QUESTION u8"\uf128" +#define ICON_FA_INFO u8"\uf129" +#define ICON_FA_EXCLAMATION u8"\uf12a" +#define ICON_FA_SUPERSCRIPT u8"\uf12b" +#define ICON_FA_SUBSCRIPT u8"\uf12c" +#define ICON_FA_ERASER u8"\uf12d" +#define ICON_FA_PUZZLE_PIECE u8"\uf12e" +#define ICON_FA_MICROPHONE u8"\uf130" +#define ICON_FA_MICROPHONE_SLASH u8"\uf131" +#define ICON_FA_SHIELD u8"\uf132" +#define ICON_FA_CALENDAR_O u8"\uf133" +#define ICON_FA_FIRE_EXTINGUISHER u8"\uf134" +#define ICON_FA_ROCKET u8"\uf135" +#define ICON_FA_MAXCDN u8"\uf136" +#define ICON_FA_CHEVRON_CIRCLE_LEFT u8"\uf137" +#define ICON_FA_CHEVRON_CIRCLE_RIGHT u8"\uf138" +#define ICON_FA_CHEVRON_CIRCLE_UP u8"\uf139" +#define ICON_FA_CHEVRON_CIRCLE_DOWN u8"\uf13a" +#define ICON_FA_HTML5 u8"\uf13b" +#define ICON_FA_CSS3 u8"\uf13c" +#define ICON_FA_ANCHOR u8"\uf13d" +#define ICON_FA_UNLOCK_ALT u8"\uf13e" +#define ICON_FA_BULLSEYE u8"\uf140" +#define ICON_FA_ELLIPSIS_H u8"\uf141" +#define ICON_FA_ELLIPSIS_V u8"\uf142" +#define ICON_FA_RSS_SQUARE u8"\uf143" +#define ICON_FA_PLAY_CIRCLE u8"\uf144" +#define ICON_FA_TICKET u8"\uf145" +#define ICON_FA_MINUS_SQUARE u8"\uf146" +#define ICON_FA_MINUS_SQUARE_O u8"\uf147" +#define ICON_FA_LEVEL_UP u8"\uf148" +#define ICON_FA_LEVEL_DOWN u8"\uf149" +#define ICON_FA_CHECK_SQUARE u8"\uf14a" +#define ICON_FA_PENCIL_SQUARE u8"\uf14b" +#define ICON_FA_EXTERNAL_LINK_SQUARE u8"\uf14c" +#define ICON_FA_SHARE_SQUARE u8"\uf14d" +#define ICON_FA_COMPASS u8"\uf14e" +#define ICON_FA_CARET_SQUARE_O_DOWN u8"\uf150" +#define ICON_FA_CARET_SQUARE_O_UP u8"\uf151" +#define ICON_FA_CARET_SQUARE_O_RIGHT u8"\uf152" +#define ICON_FA_EUR u8"\uf153" +#define ICON_FA_GBP u8"\uf154" +#define ICON_FA_USD u8"\uf155" +#define ICON_FA_INR u8"\uf156" +#define ICON_FA_JPY u8"\uf157" +#define ICON_FA_RUB u8"\uf158" +#define ICON_FA_KRW u8"\uf159" +#define ICON_FA_BTC u8"\uf15a" +#define ICON_FA_FILE u8"\uf15b" +#define ICON_FA_FILE_TEXT u8"\uf15c" +#define ICON_FA_SORT_ALPHA_ASC u8"\uf15d" +#define ICON_FA_SORT_ALPHA_DESC u8"\uf15e" +#define ICON_FA_SORT_AMOUNT_ASC u8"\uf160" +#define ICON_FA_SORT_AMOUNT_DESC u8"\uf161" +#define ICON_FA_SORT_NUMERIC_ASC u8"\uf162" +#define ICON_FA_SORT_NUMERIC_DESC u8"\uf163" +#define ICON_FA_THUMBS_UP u8"\uf164" +#define ICON_FA_THUMBS_DOWN u8"\uf165" +#define ICON_FA_YOUTUBE_SQUARE u8"\uf166" +#define ICON_FA_YOUTUBE u8"\uf167" +#define ICON_FA_XING u8"\uf168" +#define ICON_FA_XING_SQUARE u8"\uf169" +#define ICON_FA_YOUTUBE_PLAY u8"\uf16a" +#define ICON_FA_DROPBOX u8"\uf16b" +#define ICON_FA_STACK_OVERFLOW u8"\uf16c" +#define ICON_FA_INSTAGRAM u8"\uf16d" +#define ICON_FA_FLICKR u8"\uf16e" +#define ICON_FA_ADN u8"\uf170" +#define ICON_FA_BITBUCKET u8"\uf171" +#define ICON_FA_BITBUCKET_SQUARE u8"\uf172" +#define ICON_FA_TUMBLR u8"\uf173" +#define ICON_FA_TUMBLR_SQUARE u8"\uf174" +#define ICON_FA_LONG_ARROW_DOWN u8"\uf175" +#define ICON_FA_LONG_ARROW_UP u8"\uf176" +#define ICON_FA_LONG_ARROW_LEFT u8"\uf177" +#define ICON_FA_LONG_ARROW_RIGHT u8"\uf178" +#define ICON_FA_APPLE u8"\uf179" +#define ICON_FA_WINDOWS u8"\uf17a" +#define ICON_FA_ANDROID u8"\uf17b" +#define ICON_FA_LINUX u8"\uf17c" +#define ICON_FA_DRIBBBLE u8"\uf17d" +#define ICON_FA_SKYPE u8"\uf17e" +#define ICON_FA_FOURSQUARE u8"\uf180" +#define ICON_FA_TRELLO u8"\uf181" +#define ICON_FA_FEMALE u8"\uf182" +#define ICON_FA_MALE u8"\uf183" +#define ICON_FA_GRATIPAY u8"\uf184" +#define ICON_FA_SUN_O u8"\uf185" +#define ICON_FA_MOON_O u8"\uf186" +#define ICON_FA_ARCHIVE u8"\uf187" +#define ICON_FA_BUG u8"\uf188" +#define ICON_FA_VK u8"\uf189" +#define ICON_FA_WEIBO u8"\uf18a" +#define ICON_FA_RENREN u8"\uf18b" +#define ICON_FA_PAGELINES u8"\uf18c" +#define ICON_FA_STACK_EXCHANGE u8"\uf18d" +#define ICON_FA_ARROW_CIRCLE_O_RIGHT u8"\uf18e" +#define ICON_FA_ARROW_CIRCLE_O_LEFT u8"\uf190" +#define ICON_FA_CARET_SQUARE_O_LEFT u8"\uf191" +#define ICON_FA_DOT_CIRCLE_O u8"\uf192" +#define ICON_FA_WHEELCHAIR u8"\uf193" +#define ICON_FA_VIMEO_SQUARE u8"\uf194" +#define ICON_FA_TRY u8"\uf195" +#define ICON_FA_PLUS_SQUARE_O u8"\uf196" +#define ICON_FA_SPACE_SHUTTLE u8"\uf197" +#define ICON_FA_SLACK u8"\uf198" +#define ICON_FA_ENVELOPE_SQUARE u8"\uf199" +#define ICON_FA_WORDPRESS u8"\uf19a" +#define ICON_FA_OPENID u8"\uf19b" +#define ICON_FA_UNIVERSITY u8"\uf19c" +#define ICON_FA_GRADUATION_CAP u8"\uf19d" +#define ICON_FA_YAHOO u8"\uf19e" +#define ICON_FA_GOOGLE u8"\uf1a0" +#define ICON_FA_REDDIT u8"\uf1a1" +#define ICON_FA_REDDIT_SQUARE u8"\uf1a2" +#define ICON_FA_STUMBLEUPON_CIRCLE u8"\uf1a3" +#define ICON_FA_STUMBLEUPON u8"\uf1a4" +#define ICON_FA_DELICIOUS u8"\uf1a5" +#define ICON_FA_DIGG u8"\uf1a6" +#define ICON_FA_PIED_PIPER_PP u8"\uf1a7" +#define ICON_FA_PIED_PIPER_ALT u8"\uf1a8" +#define ICON_FA_DRUPAL u8"\uf1a9" +#define ICON_FA_JOOMLA u8"\uf1aa" +#define ICON_FA_LANGUAGE u8"\uf1ab" +#define ICON_FA_FAX u8"\uf1ac" +#define ICON_FA_BUILDING u8"\uf1ad" +#define ICON_FA_CHILD u8"\uf1ae" +#define ICON_FA_PAW u8"\uf1b0" +#define ICON_FA_SPOON u8"\uf1b1" +#define ICON_FA_CUBE u8"\uf1b2" +#define ICON_FA_CUBES u8"\uf1b3" +#define ICON_FA_BEHANCE u8"\uf1b4" +#define ICON_FA_BEHANCE_SQUARE u8"\uf1b5" +#define ICON_FA_STEAM u8"\uf1b6" +#define ICON_FA_STEAM_SQUARE u8"\uf1b7" +#define ICON_FA_RECYCLE u8"\uf1b8" +#define ICON_FA_CAR u8"\uf1b9" +#define ICON_FA_TAXI u8"\uf1ba" +#define ICON_FA_TREE u8"\uf1bb" +#define ICON_FA_SPOTIFY u8"\uf1bc" +#define ICON_FA_DEVIANTART u8"\uf1bd" +#define ICON_FA_SOUNDCLOUD u8"\uf1be" +#define ICON_FA_DATABASE u8"\uf1c0" +#define ICON_FA_FILE_PDF_O u8"\uf1c1" +#define ICON_FA_FILE_WORD_O u8"\uf1c2" +#define ICON_FA_FILE_EXCEL_O u8"\uf1c3" +#define ICON_FA_FILE_POWERPOINT_O u8"\uf1c4" +#define ICON_FA_FILE_IMAGE_O u8"\uf1c5" +#define ICON_FA_FILE_ARCHIVE_O u8"\uf1c6" +#define ICON_FA_FILE_AUDIO_O u8"\uf1c7" +#define ICON_FA_FILE_VIDEO_O u8"\uf1c8" +#define ICON_FA_FILE_CODE_O u8"\uf1c9" +#define ICON_FA_VINE u8"\uf1ca" +#define ICON_FA_CODEPEN u8"\uf1cb" +#define ICON_FA_JSFIDDLE u8"\uf1cc" +#define ICON_FA_LIFE_RING u8"\uf1cd" +#define ICON_FA_CIRCLE_O_NOTCH u8"\uf1ce" +#define ICON_FA_REBEL u8"\uf1d0" +#define ICON_FA_EMPIRE u8"\uf1d1" +#define ICON_FA_GIT_SQUARE u8"\uf1d2" +#define ICON_FA_GIT u8"\uf1d3" +#define ICON_FA_HACKER_NEWS u8"\uf1d4" +#define ICON_FA_TENCENT_WEIBO u8"\uf1d5" +#define ICON_FA_QQ u8"\uf1d6" +#define ICON_FA_WEIXIN u8"\uf1d7" +#define ICON_FA_PAPER_PLANE u8"\uf1d8" +#define ICON_FA_PAPER_PLANE_O u8"\uf1d9" +#define ICON_FA_HISTORY u8"\uf1da" +#define ICON_FA_CIRCLE_THIN u8"\uf1db" +#define ICON_FA_HEADER u8"\uf1dc" +#define ICON_FA_PARAGRAPH u8"\uf1dd" +#define ICON_FA_SLIDERS u8"\uf1de" +#define ICON_FA_SHARE_ALT u8"\uf1e0" +#define ICON_FA_SHARE_ALT_SQUARE u8"\uf1e1" +#define ICON_FA_BOMB u8"\uf1e2" +#define ICON_FA_FUTBOL_O u8"\uf1e3" +#define ICON_FA_TTY u8"\uf1e4" +#define ICON_FA_BINOCULARS u8"\uf1e5" +#define ICON_FA_PLUG u8"\uf1e6" +#define ICON_FA_SLIDESHARE u8"\uf1e7" +#define ICON_FA_TWITCH u8"\uf1e8" +#define ICON_FA_YELP u8"\uf1e9" +#define ICON_FA_NEWSPAPER_O u8"\uf1ea" +#define ICON_FA_WIFI u8"\uf1eb" +#define ICON_FA_CALCULATOR u8"\uf1ec" +#define ICON_FA_PAYPAL u8"\uf1ed" +#define ICON_FA_GOOGLE_WALLET u8"\uf1ee" +#define ICON_FA_CC_VISA u8"\uf1f0" +#define ICON_FA_CC_MASTERCARD u8"\uf1f1" +#define ICON_FA_CC_DISCOVER u8"\uf1f2" +#define ICON_FA_CC_AMEX u8"\uf1f3" +#define ICON_FA_CC_PAYPAL u8"\uf1f4" +#define ICON_FA_CC_STRIPE u8"\uf1f5" +#define ICON_FA_BELL_SLASH u8"\uf1f6" +#define ICON_FA_BELL_SLASH_O u8"\uf1f7" +#define ICON_FA_TRASH u8"\uf1f8" +#define ICON_FA_COPYRIGHT u8"\uf1f9" +#define ICON_FA_AT u8"\uf1fa" +#define ICON_FA_EYEDROPPER u8"\uf1fb" +#define ICON_FA_PAINT_BRUSH u8"\uf1fc" +#define ICON_FA_BIRTHDAY_CAKE u8"\uf1fd" +#define ICON_FA_AREA_CHART u8"\uf1fe" +#define ICON_FA_PIE_CHART u8"\uf200" +#define ICON_FA_LINE_CHART u8"\uf201" +#define ICON_FA_LASTFM u8"\uf202" +#define ICON_FA_LASTFM_SQUARE u8"\uf203" +#define ICON_FA_TOGGLE_OFF u8"\uf204" +#define ICON_FA_TOGGLE_ON u8"\uf205" +#define ICON_FA_BICYCLE u8"\uf206" +#define ICON_FA_BUS u8"\uf207" +#define ICON_FA_IOXHOST u8"\uf208" +#define ICON_FA_ANGELLIST u8"\uf209" +#define ICON_FA_CC u8"\uf20a" +#define ICON_FA_ILS u8"\uf20b" +#define ICON_FA_MEANPATH u8"\uf20c" +#define ICON_FA_BUYSELLADS u8"\uf20d" +#define ICON_FA_CONNECTDEVELOP u8"\uf20e" +#define ICON_FA_DASHCUBE u8"\uf210" +#define ICON_FA_FORUMBEE u8"\uf211" +#define ICON_FA_LEANPUB u8"\uf212" +#define ICON_FA_SELLSY u8"\uf213" +#define ICON_FA_SHIRTSINBULK u8"\uf214" +#define ICON_FA_SIMPLYBUILT u8"\uf215" +#define ICON_FA_SKYATLAS u8"\uf216" +#define ICON_FA_CART_PLUS u8"\uf217" +#define ICON_FA_CART_ARROW_DOWN u8"\uf218" +#define ICON_FA_DIAMOND u8"\uf219" +#define ICON_FA_SHIP u8"\uf21a" +#define ICON_FA_USER_SECRET u8"\uf21b" +#define ICON_FA_MOTORCYCLE u8"\uf21c" +#define ICON_FA_STREET_VIEW u8"\uf21d" +#define ICON_FA_HEARTBEAT u8"\uf21e" +#define ICON_FA_VENUS u8"\uf221" +#define ICON_FA_MARS u8"\uf222" +#define ICON_FA_MERCURY u8"\uf223" +#define ICON_FA_TRANSGENDER u8"\uf224" +#define ICON_FA_TRANSGENDER_ALT u8"\uf225" +#define ICON_FA_VENUS_DOUBLE u8"\uf226" +#define ICON_FA_MARS_DOUBLE u8"\uf227" +#define ICON_FA_VENUS_MARS u8"\uf228" +#define ICON_FA_MARS_STROKE u8"\uf229" +#define ICON_FA_MARS_STROKE_V u8"\uf22a" +#define ICON_FA_MARS_STROKE_H u8"\uf22b" +#define ICON_FA_NEUTER u8"\uf22c" +#define ICON_FA_GENDERLESS u8"\uf22d" +#define ICON_FA_FACEBOOK_OFFICIAL u8"\uf230" +#define ICON_FA_PINTEREST_P u8"\uf231" +#define ICON_FA_WHATSAPP u8"\uf232" +#define ICON_FA_SERVER u8"\uf233" +#define ICON_FA_USER_PLUS u8"\uf234" +#define ICON_FA_USER_TIMES u8"\uf235" +#define ICON_FA_BED u8"\uf236" +#define ICON_FA_VIACOIN u8"\uf237" +#define ICON_FA_TRAIN u8"\uf238" +#define ICON_FA_SUBWAY u8"\uf239" +#define ICON_FA_MEDIUM u8"\uf23a" +#define ICON_FA_Y_COMBINATOR u8"\uf23b" +#define ICON_FA_OPTIN_MONSTER u8"\uf23c" +#define ICON_FA_OPENCART u8"\uf23d" +#define ICON_FA_EXPEDITEDSSL u8"\uf23e" +#define ICON_FA_BATTERY_FULL u8"\uf240" +#define ICON_FA_BATTERY_THREE_QUARTERS u8"\uf241" +#define ICON_FA_BATTERY_HALF u8"\uf242" +#define ICON_FA_BATTERY_QUARTER u8"\uf243" +#define ICON_FA_BATTERY_EMPTY u8"\uf244" +#define ICON_FA_MOUSE_POINTER u8"\uf245" +#define ICON_FA_I_CURSOR u8"\uf246" +#define ICON_FA_OBJECT_GROUP u8"\uf247" +#define ICON_FA_OBJECT_UNGROUP u8"\uf248" +#define ICON_FA_STICKY_NOTE u8"\uf249" +#define ICON_FA_STICKY_NOTE_O u8"\uf24a" +#define ICON_FA_CC_JCB u8"\uf24b" +#define ICON_FA_CC_DINERS_CLUB u8"\uf24c" +#define ICON_FA_CLONE u8"\uf24d" +#define ICON_FA_BALANCE_SCALE u8"\uf24e" +#define ICON_FA_HOURGLASS_O u8"\uf250" +#define ICON_FA_HOURGLASS_START u8"\uf251" +#define ICON_FA_HOURGLASS_HALF u8"\uf252" +#define ICON_FA_HOURGLASS_END u8"\uf253" +#define ICON_FA_HOURGLASS u8"\uf254" +#define ICON_FA_HAND_ROCK_O u8"\uf255" +#define ICON_FA_HAND_PAPER_O u8"\uf256" +#define ICON_FA_HAND_SCISSORS_O u8"\uf257" +#define ICON_FA_HAND_LIZARD_O u8"\uf258" +#define ICON_FA_HAND_SPOCK_O u8"\uf259" +#define ICON_FA_HAND_POINTER_O u8"\uf25a" +#define ICON_FA_HAND_PEACE_O u8"\uf25b" +#define ICON_FA_TRADEMARK u8"\uf25c" +#define ICON_FA_REGISTERED u8"\uf25d" +#define ICON_FA_CREATIVE_COMMONS u8"\uf25e" +#define ICON_FA_GG u8"\uf260" +#define ICON_FA_GG_CIRCLE u8"\uf261" +#define ICON_FA_TRIPADVISOR u8"\uf262" +#define ICON_FA_ODNOKLASSNIKI u8"\uf263" +#define ICON_FA_ODNOKLASSNIKI_SQUARE u8"\uf264" +#define ICON_FA_GET_POCKET u8"\uf265" +#define ICON_FA_WIKIPEDIA_W u8"\uf266" +#define ICON_FA_SAFARI u8"\uf267" +#define ICON_FA_CHROME u8"\uf268" +#define ICON_FA_FIREFOX u8"\uf269" +#define ICON_FA_OPERA u8"\uf26a" +#define ICON_FA_INTERNET_EXPLORER u8"\uf26b" +#define ICON_FA_TELEVISION u8"\uf26c" +#define ICON_FA_CONTAO u8"\uf26d" +#define ICON_FA_500PX u8"\uf26e" +#define ICON_FA_AMAZON u8"\uf270" +#define ICON_FA_CALENDAR_PLUS_O u8"\uf271" +#define ICON_FA_CALENDAR_MINUS_O u8"\uf272" +#define ICON_FA_CALENDAR_TIMES_O u8"\uf273" +#define ICON_FA_CALENDAR_CHECK_O u8"\uf274" +#define ICON_FA_INDUSTRY u8"\uf275" +#define ICON_FA_MAP_PIN u8"\uf276" +#define ICON_FA_MAP_SIGNS u8"\uf277" +#define ICON_FA_MAP_O u8"\uf278" +#define ICON_FA_MAP u8"\uf279" +#define ICON_FA_COMMENTING u8"\uf27a" +#define ICON_FA_COMMENTING_O u8"\uf27b" +#define ICON_FA_HOUZZ u8"\uf27c" +#define ICON_FA_VIMEO u8"\uf27d" +#define ICON_FA_BLACK_TIE u8"\uf27e" +#define ICON_FA_FONTICONS u8"\uf280" +#define ICON_FA_REDDIT_ALIEN u8"\uf281" +#define ICON_FA_EDGE u8"\uf282" +#define ICON_FA_CREDIT_CARD_ALT u8"\uf283" +#define ICON_FA_CODIEPIE u8"\uf284" +#define ICON_FA_MODX u8"\uf285" +#define ICON_FA_FORT_AWESOME u8"\uf286" +#define ICON_FA_USB u8"\uf287" +#define ICON_FA_PRODUCT_HUNT u8"\uf288" +#define ICON_FA_MIXCLOUD u8"\uf289" +#define ICON_FA_SCRIBD u8"\uf28a" +#define ICON_FA_PAUSE_CIRCLE u8"\uf28b" +#define ICON_FA_PAUSE_CIRCLE_O u8"\uf28c" +#define ICON_FA_STOP_CIRCLE u8"\uf28d" +#define ICON_FA_STOP_CIRCLE_O u8"\uf28e" +#define ICON_FA_SHOPPING_BAG u8"\uf290" +#define ICON_FA_SHOPPING_BASKET u8"\uf291" +#define ICON_FA_HASHTAG u8"\uf292" +#define ICON_FA_BLUETOOTH u8"\uf293" +#define ICON_FA_BLUETOOTH_B u8"\uf294" +#define ICON_FA_PERCENT u8"\uf295" +#define ICON_FA_GITLAB u8"\uf296" +#define ICON_FA_WPBEGINNER u8"\uf297" +#define ICON_FA_WPFORMS u8"\uf298" +#define ICON_FA_ENVIRA u8"\uf299" +#define ICON_FA_UNIVERSAL_ACCESS u8"\uf29a" +#define ICON_FA_WHEELCHAIR_ALT u8"\uf29b" +#define ICON_FA_QUESTION_CIRCLE_O u8"\uf29c" +#define ICON_FA_BLIND u8"\uf29d" +#define ICON_FA_AUDIO_DESCRIPTION u8"\uf29e" +#define ICON_FA_VOLUME_CONTROL_PHONE u8"\uf2a0" +#define ICON_FA_BRAILLE u8"\uf2a1" +#define ICON_FA_ASSISTIVE_LISTENING_SYSTEMS u8"\uf2a2" +#define ICON_FA_AMERICAN_SIGN_LANGUAGE_INTERPRETING u8"\uf2a3" +#define ICON_FA_DEAF u8"\uf2a4" +#define ICON_FA_GLIDE u8"\uf2a5" +#define ICON_FA_GLIDE_G u8"\uf2a6" +#define ICON_FA_SIGN_LANGUAGE u8"\uf2a7" +#define ICON_FA_LOW_VISION u8"\uf2a8" +#define ICON_FA_VIADEO u8"\uf2a9" +#define ICON_FA_VIADEO_SQUARE u8"\uf2aa" +#define ICON_FA_SNAPCHAT u8"\uf2ab" +#define ICON_FA_SNAPCHAT_GHOST u8"\uf2ac" +#define ICON_FA_SNAPCHAT_SQUARE u8"\uf2ad" +#define ICON_FA_PIED_PIPER u8"\uf2ae" +#define ICON_FA_FIRST_ORDER u8"\uf2b0" +#define ICON_FA_YOAST u8"\uf2b1" +#define ICON_FA_THEMEISLE u8"\uf2b2" +#define ICON_FA_GOOGLE_PLUS_OFFICIAL u8"\uf2b3" +#define ICON_FA_FONT_AWESOME u8"\uf2b4" +#define ICON_FA_HANDSHAKE_O u8"\uf2b5" +#define ICON_FA_ENVELOPE_OPEN u8"\uf2b6" +#define ICON_FA_ENVELOPE_OPEN_O u8"\uf2b7" +#define ICON_FA_LINODE u8"\uf2b8" +#define ICON_FA_ADDRESS_BOOK u8"\uf2b9" +#define ICON_FA_ADDRESS_BOOK_O u8"\uf2ba" +#define ICON_FA_ADDRESS_CARD u8"\uf2bb" +#define ICON_FA_ADDRESS_CARD_O u8"\uf2bc" +#define ICON_FA_USER_CIRCLE u8"\uf2bd" +#define ICON_FA_USER_CIRCLE_O u8"\uf2be" +#define ICON_FA_USER_O u8"\uf2c0" +#define ICON_FA_ID_BADGE u8"\uf2c1" +#define ICON_FA_ID_CARD u8"\uf2c2" +#define ICON_FA_ID_CARD_O u8"\uf2c3" +#define ICON_FA_QUORA u8"\uf2c4" +#define ICON_FA_FREE_CODE_CAMP u8"\uf2c5" +#define ICON_FA_TELEGRAM u8"\uf2c6" +#define ICON_FA_THERMOMETER_FULL u8"\uf2c7" +#define ICON_FA_THERMOMETER_THREE_QUARTERS u8"\uf2c8" +#define ICON_FA_THERMOMETER_HALF u8"\uf2c9" +#define ICON_FA_THERMOMETER_QUARTER u8"\uf2ca" +#define ICON_FA_THERMOMETER_EMPTY u8"\uf2cb" +#define ICON_FA_SHOWER u8"\uf2cc" +#define ICON_FA_BATH u8"\uf2cd" +#define ICON_FA_PODCAST u8"\uf2ce" +#define ICON_FA_WINDOW_MAXIMIZE u8"\uf2d0" +#define ICON_FA_WINDOW_MINIMIZE u8"\uf2d1" +#define ICON_FA_WINDOW_RESTORE u8"\uf2d2" +#define ICON_FA_WINDOW_CLOSE u8"\uf2d3" +#define ICON_FA_WINDOW_CLOSE_O u8"\uf2d4" +#define ICON_FA_BANDCAMP u8"\uf2d5" +#define ICON_FA_GRAV u8"\uf2d6" +#define ICON_FA_ETSY u8"\uf2d7" +#define ICON_FA_IMDB u8"\uf2d8" +#define ICON_FA_RAVELRY u8"\uf2d9" +#define ICON_FA_EERCAST u8"\uf2da" +#define ICON_FA_MICROCHIP u8"\uf2db" +#define ICON_FA_SNOWFLAKE_O u8"\uf2dc" +#define ICON_FA_SUPERPOWERS u8"\uf2dd" +#define ICON_FA_WPEXPLORER u8"\uf2de" +#define ICON_FA_MEETUP u8"\uf2e0" diff --git a/Source/Core/VideoCommon/OnScreenDisplay.cpp b/Source/Core/VideoCommon/OnScreenDisplay.cpp index 49db1f62e5..2020eb593e 100644 --- a/Source/Core/VideoCommon/OnScreenDisplay.cpp +++ b/Source/Core/VideoCommon/OnScreenDisplay.cpp @@ -3,7 +3,7 @@ // Refer to the license.txt file included. #include "VideoCommon/OnScreenDisplay.h" - +#include "VideoCommon/IconsFontAwesome4.h" #include #include #include @@ -15,7 +15,7 @@ #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" #include "Common/Timer.h" - +#include "Core/Core.h" #include "Core/ConfigManager.h" #include "imgui.h" #ifndef IMGUI_DEFINE_MATH_OPERATORS @@ -135,38 +135,50 @@ void ClearMessages() s_messages.clear(); } -void DrawSlippiPlaybackControls() +bool ButtonCustom(const char* label, const ImVec2& size_arg, ImGuiButtonFlags flags = 0) { - const auto height = ImGui::GetWindowHeight(); - // We have to provide a window name, and these shouldn't be duplicated. - // So instead, we generate a name based on the number of messages drawn. - const std::string window_name = fmt::format("Slippi Playback Controls"); + ImGuiWindow* window = ImGui::GetCurrentWindow(); + if (window->SkipItems) + return false; - const float alpha = 0.5f; - ImGui::PushStyleVar(ImGuiStyleVar_Alpha, alpha); + ImGuiContext& g = *GImGui; + const ImGuiStyle& style = g.Style; + const ImGuiID id = window->GetID(label); + const ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true); - ImGui::SetNextWindowPos(ImVec2(0, 0)); - ImGui::SetNextWindowSize(ImGui::GetIO().DisplaySize); + ImVec2 pos = window->DC.CursorPos; + if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrentLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag) + pos.y += window->DC.CurrentLineTextBaseOffset - style.FramePadding.y; + ImVec2 size = ImGui::CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f); - if (ImGui::Begin(window_name.c_str(), nullptr, - ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings | - ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoBackground | - ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing)) - { - //if (ImGui::Button("start")) { - // INFO_LOG(SLIPPI, "pressed button!"); - //}; - //if (ImGui::Button("stop")) { - // INFO_LOG(SLIPPI, "pressed button!"); - //}; + const ImRect bb(pos, pos + size); + ImGui::ItemSize(size, style.FramePadding.y); + if (!ImGui::ItemAdd(bb, id)) + return false; - ImGui::PushItemWidth(ImGui::GetWindowWidth()); - ImGui::Dummy(ImVec2(0.0f, ImGui::GetWindowHeight() - 50)); - ImGui::SliderCustom("test", ImVec4(1.0f, 0.0f, 0.0f, 1.0f), &frame, 0, 8000, 1.0); - } + if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat) + flags |= ImGuiButtonFlags_Repeat; + bool hovered, held; + bool pressed = ImGui::ButtonBehavior(bb, id, &hovered, &held, flags); + if (pressed) + ImGui::MarkItemEdited(id); - ImGui::End(); - ImGui::PopStyleVar(); + // Render + const ImU32 col = ImGui::GetColorU32(ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); + ImGui::RenderNavHighlight(bb, id); + ImGui::RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding); + + if (hovered || held) + ImGui::RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb, ImVec4(0.9f, 0.9f, 0.9f, 1.0f)); + else + ImGui::RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb, ImVec4(0.9f, 0.9f, 0.9f, 0.6f)); + + // Automatically close popups + //if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup)) + // CloseCurrentPopup(); + + IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags); + return pressed; } bool SliderCustomBehavior(const ImRect& bb, ImGuiID id, int* v, int v_min, int v_max, float power, ImGuiSliderFlags flags, ImVec4 color, ImVec2 valuesize, const char* label, char* value) @@ -239,6 +251,7 @@ bool SliderCustomBehavior(const ImRect& bb, ImGuiID id, int* v, int v_min, int v { *v = new_value; value_changed = true; + ImGui::MarkItemEdited(id); } } @@ -254,7 +267,7 @@ bool SliderCustomBehavior(const ImRect& bb, ImGuiID id, int* v, int v_min, int v ImRect new_grab_bb; ImRect curr_grab_bb; if (axis == ImGuiAxis_X) { - new_grab_bb = ImRect(ImVec2(new_grab_pos, bb.Min.y), ImVec2(new_grab_pos * 0.5f, bb.Max.y)); + new_grab_bb = ImRect(ImVec2(new_grab_pos, bb.Min.y), ImVec2(new_grab_pos, bb.Max.y)); curr_grab_bb = ImRect(ImVec2(curr_grab_pos, bb.Min.y), ImVec2(curr_grab_pos, bb.Max.y)); } else @@ -264,27 +277,32 @@ bool SliderCustomBehavior(const ImRect& bb, ImGuiID id, int* v, int v_min, int v } // Draw all the things + + // Darken screen when seeking if (isDown && hovered) window->DrawList->AddRectFilled(ImVec2(0, 0), ImGui::GetIO().DisplaySize, ImGui::ColorConvertFloat4ToU32(ImVec4(0.0f, 0.0f, 0.0f, 0.5f))); - // Whiter, more opaque line up to mouse position - if (hovered) - window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImVec2(new_grab_bb.Min.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImGui::ColorConvertFloat4ToU32(ImVec4(1.0f, 1.0f, 1.0f, 1.0f)), 4); + // Grey background line + window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Max.y - 6), ImVec2(bb.Max.x, bb.Max.y - 6), ImGui::ColorConvertFloat4ToU32(ImVec4(1.0f, 1.0f, 1.0f, 0.5f)), 4); + // Whiter, more opaque line up to mouse position + if (hovered && !isDown) + window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Max.y - 6), ImVec2(new_grab_bb.Min.x, bb.Max.y - 6), ImGui::ColorConvertFloat4ToU32(ImVec4(1.0f, 1.0f, 1.0f, 1.0f)), 4); + + // Colored line, circle indicator, and text if (isDown && hovered) { - window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImVec2(new_grab_bb.Min.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImGui::ColorConvertFloat4ToU32(ImVec4(0.0f, 1.0f, 0.0f, 1.00f)), 4); - window->DrawList->AddCircleFilled(ImVec2(new_grab_bb.Min.x, new_grab_bb.Min.y + ((new_grab_bb.Max.y - new_grab_bb.Min.y) / 2)), 8, ImGui::ColorConvertFloat4ToU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f))); - window->DrawList->AddText(ImVec2(new_grab_bb.GetCenter().x - valuesize.x / 2, bb.Min.y), ImColor(255, 255, 255), value, label); + window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Max.y - 6), ImVec2(new_grab_bb.Min.x, bb.Max.y - 6), ImGui::ColorConvertFloat4ToU32(ImVec4(0.0f, 1.0f, 0.0f, 1.00f)), 4); + window->DrawList->AddCircleFilled(ImVec2(new_grab_bb.Min.x, new_grab_bb.Max.y - 6), 6, ImGui::ColorConvertFloat4ToU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f))); + window->DrawList->AddText(ImVec2(new_grab_bb.GetCenter().x - valuesize.x / 2, bb.Max.y - 30), ImColor(255, 255, 255), value, label); } // Progress bar - window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImVec2(curr_grab_bb.Min.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImGui::ColorConvertFloat4ToU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f)), 4); + if (!(isDown && hovered)) + window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Max.y - 6), ImVec2(curr_grab_bb.Min.x, bb.Max.y - 6), ImGui::ColorConvertFloat4ToU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f)), 4); - // Grey background line - window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImVec2(bb.Max.x, bb.Min.y + ((bb.Max.y - bb.Min.y) / 2)), ImGui::ColorConvertFloat4ToU32(ImVec4(1.0f, 1.0f, 1.0f, 0.5f)), 4); + //window->DrawList->AddRectFilled(ImVec2(grab_bb.Min.x, bb.Min.y + 2), ImVec2(grab_bb.Max.x + valuesize.x, bb.Min.y + 14), ColorConvertFloat4ToU32(ImVec4(0.21f, 0.20f, 0.21f, 1.00f)), 3); - return value_changed; } @@ -299,15 +317,8 @@ bool SliderCustom(const char* label, ImVec4 color, int* v, int v_min, int v_max, const ImGuiID id = window->GetID(label); const float w = ImGui::CalcItemWidth(); - const ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true) * 2.7f; - const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 0.5f)); - const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); - - if (!ImGui::ItemAdd(total_bb, id)) - { - ImGui::ItemSize(total_bb, style.FramePadding.y); - return false; - } + const ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true) * 1.0f; + const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y)); const bool hovered = ImGui::ItemHoverable(frame_bb, id); if (hovered) @@ -332,8 +343,6 @@ bool SliderCustom(const char* label, ImVec4 color, int* v, int v_min, int v_max, if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) return ImGui::InputScalarAsWidgetReplacement(frame_bb, id, label, ImGuiDataType_S32, v, format); - ImGui::ItemSize(total_bb, style.FramePadding.y); - char value_buf[64]; const char* value_buf_end = value_buf + ImFormatString(value_buf, IM_ARRAYSIZE(value_buf), format, *v); const bool value_changed = SliderCustomBehavior(frame_bb, id, v, v_min, v_max, power, ImGuiSliderFlags_None, color, ImGui::CalcTextSize(value_buf, NULL, true), value_buf_end, value_buf); @@ -343,4 +352,54 @@ bool SliderCustom(const char* label, ImVec4 color, int* v, int v_min, int v_max, return value_changed; } + +void DrawSlippiPlaybackControls() +{ + const auto height = ImGui::GetWindowHeight(); + // We have to provide a window name, and these shouldn't be duplicated. + // So instead, we generate a name based on the number of messages drawn. + const std::string window_name = fmt::format("Slippi Playback Controls"); + + const float alpha = 1.0f; + ImGui::PushStyleVar(ImGuiStyleVar_Alpha, alpha); + + + ImGui::SetNextWindowPos(ImVec2(0, 0)); + ImGui::SetNextWindowSize(ImGui::GetIO().DisplaySize); + + if (ImGui::Begin(window_name.c_str(), nullptr, + ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings | + ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoBackground | + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing)) + { + ImGui::PushItemWidth(ImGui::GetWindowWidth()); + ImGui::SetCursorPos(ImVec2(0.0f, ImGui::GetWindowHeight() - 44)); + SliderCustom("", ImVec4(1.0f, 0.0f, 0.0f, 1.0f), &frame, 0, 8000, 1.0, "%d"); + ImGui::SetCursorPos(ImVec2(0.0f, ImGui::GetWindowHeight() - 30)); + ImGui::PushStyleVar(ImGuiStyleVar_ButtonTextAlign, ImVec2(1.0f, 0.5f)); + if (ButtonCustom(ICON_FA_PLAY, ImVec2(32.0f, 32.0f))) { + INFO_LOG(SLIPPI, "playing"); + } + ImGui::PopStyleVar(1); + ImGui::SameLine(0.0f); + if (ButtonCustom(ICON_FA_FAST_BACKWARD, ImVec2(32.0f, 32.0f))) { + INFO_LOG(SLIPPI, "fast back"); + } + ImGui::SameLine(0.0f, 0.0f); + if (ButtonCustom(ICON_FA_STEP_BACKWARD, ImVec2(32.0f, 32.0f))) { + INFO_LOG(SLIPPI, "step back"); + } + ImGui::SameLine(0.0f, 0.0f); + if (ButtonCustom(ICON_FA_STEP_FORWARD, ImVec2(32.0f, 32.0f))) { + INFO_LOG(SLIPPI, "step forward"); + } + ImGui::SameLine(0.0f, 0.0f); + if (ButtonCustom(ICON_FA_FAST_FORWARD, ImVec2(32.0f, 32.0f))) { + INFO_LOG(SLIPPI, "fast_foward"); + } + } + + ImGui::End(); + ImGui::PopStyleVar(); +} } // namespace OSD diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index ba33f5c97d..dc51872679 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -13,6 +13,7 @@ // --------------------------------------------------------------------------------------------- #include "VideoCommon/RenderBase.h" +#include "VideoCommon/IconsFontAwesome4.h" #include #include @@ -913,6 +914,11 @@ bool Renderer::InitializeImGui() return false; } + ImGui::GetIO().Fonts->AddFontDefault(); + static const ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; + ImFontConfig icons_config; icons_config.MergeMode = true; icons_config.PixelSnapH = true; + ImGui::GetIO().Fonts->AddFontFromFileTTF(FONT_ICON_FILE_NAME_FA, 20.0f, &icons_config, icons_ranges); + // Don't create an ini file. TODO: Do we want this in the future? ImGui::GetIO().IniFilename = nullptr; ImGui::GetIO().DisplayFramebufferScale.x = m_backbuffer_scale; diff --git a/fontawesome-webfont.ttf b/fontawesome-webfont.ttf new file mode 100644 index 0000000000..35acda2fa1 Binary files /dev/null and b/fontawesome-webfont.ttf differ