diff --git a/fonts/MaterialIcons-Regular.ttf b/fonts/MaterialIcons-Regular.ttf new file mode 100644 index 00000000..453b3e4c Binary files /dev/null and b/fonts/MaterialIcons-Regular.ttf differ diff --git a/fonts/Urbanist-Light.ttf b/fonts/Urbanist-Light.ttf new file mode 100644 index 00000000..eb5ab979 Binary files /dev/null and b/fonts/Urbanist-Light.ttf differ diff --git a/fonts/forkawesome-webfont.ttf b/fonts/forkawesome-webfont.ttf new file mode 100644 index 00000000..1ec65334 Binary files /dev/null and b/fonts/forkawesome-webfont.ttf differ diff --git a/src/moon/imgui/icons/IconsForkAwesome.h b/src/moon/imgui/icons/IconsForkAwesome.h new file mode 100644 index 00000000..9aaeb989 --- /dev/null +++ b/src/moon/imgui/icons/IconsForkAwesome.h @@ -0,0 +1,805 @@ +// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ +// from https://raw.githubusercontent.com/ForkAwesome/Fork-Awesome/master/src/icons/icons.yml +// for use with https://github.com/ForkAwesome/Fork-Awesome/blob/master/fonts/forkawesome-webfont.ttf +#pragma once + +#define FONT_ICON_FILE_NAME_FK "forkawesome-webfont.ttf" + +#define ICON_MIN_FK 0xf000 +#define ICON_MAX_FK 0xf35f +#define ICON_FK_GLASS "\xef\x80\x80" // U+f000 +#define ICON_FK_MUSIC "\xef\x80\x81" // U+f001 +#define ICON_FK_SEARCH "\xef\x80\x82" // U+f002 +#define ICON_FK_ENVELOPE_O "\xef\x80\x83" // U+f003 +#define ICON_FK_HEART "\xef\x80\x84" // U+f004 +#define ICON_FK_STAR "\xef\x80\x85" // U+f005 +#define ICON_FK_STAR_O "\xef\x80\x86" // U+f006 +#define ICON_FK_USER "\xef\x80\x87" // U+f007 +#define ICON_FK_FILM "\xef\x80\x88" // U+f008 +#define ICON_FK_TH_LARGE "\xef\x80\x89" // U+f009 +#define ICON_FK_TH "\xef\x80\x8a" // U+f00a +#define ICON_FK_TH_LIST "\xef\x80\x8b" // U+f00b +#define ICON_FK_CHECK "\xef\x80\x8c" // U+f00c +#define ICON_FK_TIMES "\xef\x80\x8d" // U+f00d +#define ICON_FK_SEARCH_PLUS "\xef\x80\x8e" // U+f00e +#define ICON_FK_SEARCH_MINUS "\xef\x80\x90" // U+f010 +#define ICON_FK_POWER_OFF "\xef\x80\x91" // U+f011 +#define ICON_FK_SIGNAL "\xef\x80\x92" // U+f012 +#define ICON_FK_COG "\xef\x80\x93" // U+f013 +#define ICON_FK_TRASH_O "\xef\x80\x94" // U+f014 +#define ICON_FK_HOME "\xef\x80\x95" // U+f015 +#define ICON_FK_FILE_O "\xef\x80\x96" // U+f016 +#define ICON_FK_CLOCK_O "\xef\x80\x97" // U+f017 +#define ICON_FK_ROAD "\xef\x80\x98" // U+f018 +#define ICON_FK_DOWNLOAD "\xef\x80\x99" // U+f019 +#define ICON_FK_ARROW_CIRCLE_O_DOWN "\xef\x80\x9a" // U+f01a +#define ICON_FK_ARROW_CIRCLE_O_UP "\xef\x80\x9b" // U+f01b +#define ICON_FK_INBOX "\xef\x80\x9c" // U+f01c +#define ICON_FK_PLAY_CIRCLE_O "\xef\x80\x9d" // U+f01d +#define ICON_FK_REPEAT "\xef\x80\x9e" // U+f01e +#define ICON_FK_REFRESH "\xef\x80\xa1" // U+f021 +#define ICON_FK_LIST_ALT "\xef\x80\xa2" // U+f022 +#define ICON_FK_LOCK "\xef\x80\xa3" // U+f023 +#define ICON_FK_FLAG "\xef\x80\xa4" // U+f024 +#define ICON_FK_HEADPHONES "\xef\x80\xa5" // U+f025 +#define ICON_FK_VOLUME_OFF "\xef\x80\xa6" // U+f026 +#define ICON_FK_VOLUME_DOWN "\xef\x80\xa7" // U+f027 +#define ICON_FK_VOLUME_UP "\xef\x80\xa8" // U+f028 +#define ICON_FK_QRCODE "\xef\x80\xa9" // U+f029 +#define ICON_FK_BARCODE "\xef\x80\xaa" // U+f02a +#define ICON_FK_TAG "\xef\x80\xab" // U+f02b +#define ICON_FK_TAGS "\xef\x80\xac" // U+f02c +#define ICON_FK_BOOK "\xef\x80\xad" // U+f02d +#define ICON_FK_BOOKMARK "\xef\x80\xae" // U+f02e +#define ICON_FK_PRINT "\xef\x80\xaf" // U+f02f +#define ICON_FK_CAMERA "\xef\x80\xb0" // U+f030 +#define ICON_FK_FONT "\xef\x80\xb1" // U+f031 +#define ICON_FK_BOLD "\xef\x80\xb2" // U+f032 +#define ICON_FK_ITALIC "\xef\x80\xb3" // U+f033 +#define ICON_FK_TEXT_HEIGHT "\xef\x80\xb4" // U+f034 +#define ICON_FK_TEXT_WIDTH "\xef\x80\xb5" // U+f035 +#define ICON_FK_ALIGN_LEFT "\xef\x80\xb6" // U+f036 +#define ICON_FK_ALIGN_CENTER "\xef\x80\xb7" // U+f037 +#define ICON_FK_ALIGN_RIGHT "\xef\x80\xb8" // U+f038 +#define ICON_FK_ALIGN_JUSTIFY "\xef\x80\xb9" // U+f039 +#define ICON_FK_LIST "\xef\x80\xba" // U+f03a +#define ICON_FK_OUTDENT "\xef\x80\xbb" // U+f03b +#define ICON_FK_INDENT "\xef\x80\xbc" // U+f03c +#define ICON_FK_VIDEO_CAMERA "\xef\x80\xbd" // U+f03d +#define ICON_FK_PICTURE_O "\xef\x80\xbe" // U+f03e +#define ICON_FK_PENCIL "\xef\x81\x80" // U+f040 +#define ICON_FK_MAP_MARKER "\xef\x81\x81" // U+f041 +#define ICON_FK_ADJUST "\xef\x81\x82" // U+f042 +#define ICON_FK_TINT "\xef\x81\x83" // U+f043 +#define ICON_FK_PENCIL_SQUARE_O "\xef\x81\x84" // U+f044 +#define ICON_FK_SHARE_SQUARE_O "\xef\x81\x85" // U+f045 +#define ICON_FK_CHECK_SQUARE_O "\xef\x81\x86" // U+f046 +#define ICON_FK_ARROWS "\xef\x81\x87" // U+f047 +#define ICON_FK_STEP_BACKWARD "\xef\x81\x88" // U+f048 +#define ICON_FK_FAST_BACKWARD "\xef\x81\x89" // U+f049 +#define ICON_FK_BACKWARD "\xef\x81\x8a" // U+f04a +#define ICON_FK_PLAY "\xef\x81\x8b" // U+f04b +#define ICON_FK_PAUSE "\xef\x81\x8c" // U+f04c +#define ICON_FK_STOP "\xef\x81\x8d" // U+f04d +#define ICON_FK_FORWARD "\xef\x81\x8e" // U+f04e +#define ICON_FK_FAST_FORWARD "\xef\x81\x90" // U+f050 +#define ICON_FK_STEP_FORWARD "\xef\x81\x91" // U+f051 +#define ICON_FK_EJECT "\xef\x81\x92" // U+f052 +#define ICON_FK_CHEVRON_LEFT "\xef\x81\x93" // U+f053 +#define ICON_FK_CHEVRON_RIGHT "\xef\x81\x94" // U+f054 +#define ICON_FK_PLUS_CIRCLE "\xef\x81\x95" // U+f055 +#define ICON_FK_MINUS_CIRCLE "\xef\x81\x96" // U+f056 +#define ICON_FK_TIMES_CIRCLE "\xef\x81\x97" // U+f057 +#define ICON_FK_CHECK_CIRCLE "\xef\x81\x98" // U+f058 +#define ICON_FK_QUESTION_CIRCLE "\xef\x81\x99" // U+f059 +#define ICON_FK_INFO_CIRCLE "\xef\x81\x9a" // U+f05a +#define ICON_FK_CROSSHAIRS "\xef\x81\x9b" // U+f05b +#define ICON_FK_TIMES_CIRCLE_O "\xef\x81\x9c" // U+f05c +#define ICON_FK_CHECK_CIRCLE_O "\xef\x81\x9d" // U+f05d +#define ICON_FK_BAN "\xef\x81\x9e" // U+f05e +#define ICON_FK_ARROW_LEFT "\xef\x81\xa0" // U+f060 +#define ICON_FK_ARROW_RIGHT "\xef\x81\xa1" // U+f061 +#define ICON_FK_ARROW_UP "\xef\x81\xa2" // U+f062 +#define ICON_FK_ARROW_DOWN "\xef\x81\xa3" // U+f063 +#define ICON_FK_SHARE "\xef\x81\xa4" // U+f064 +#define ICON_FK_EXPAND "\xef\x81\xa5" // U+f065 +#define ICON_FK_COMPRESS "\xef\x81\xa6" // U+f066 +#define ICON_FK_PLUS "\xef\x81\xa7" // U+f067 +#define ICON_FK_MINUS "\xef\x81\xa8" // U+f068 +#define ICON_FK_ASTERISK "\xef\x81\xa9" // U+f069 +#define ICON_FK_EXCLAMATION_CIRCLE "\xef\x81\xaa" // U+f06a +#define ICON_FK_GIFT "\xef\x81\xab" // U+f06b +#define ICON_FK_LEAF "\xef\x81\xac" // U+f06c +#define ICON_FK_FIRE "\xef\x81\xad" // U+f06d +#define ICON_FK_EYE "\xef\x81\xae" // U+f06e +#define ICON_FK_EYE_SLASH "\xef\x81\xb0" // U+f070 +#define ICON_FK_EXCLAMATION_TRIANGLE "\xef\x81\xb1" // U+f071 +#define ICON_FK_PLANE "\xef\x81\xb2" // U+f072 +#define ICON_FK_CALENDAR "\xef\x81\xb3" // U+f073 +#define ICON_FK_RANDOM "\xef\x81\xb4" // U+f074 +#define ICON_FK_COMMENT "\xef\x81\xb5" // U+f075 +#define ICON_FK_MAGNET "\xef\x81\xb6" // U+f076 +#define ICON_FK_CHEVRON_UP "\xef\x81\xb7" // U+f077 +#define ICON_FK_CHEVRON_DOWN "\xef\x81\xb8" // U+f078 +#define ICON_FK_RETWEET "\xef\x81\xb9" // U+f079 +#define ICON_FK_SHOPPING_CART "\xef\x81\xba" // U+f07a +#define ICON_FK_FOLDER "\xef\x81\xbb" // U+f07b +#define ICON_FK_FOLDER_OPEN "\xef\x81\xbc" // U+f07c +#define ICON_FK_ARROWS_V "\xef\x81\xbd" // U+f07d +#define ICON_FK_ARROWS_H "\xef\x81\xbe" // U+f07e +#define ICON_FK_BAR_CHART "\xef\x82\x80" // U+f080 +#define ICON_FK_TWITTER_SQUARE "\xef\x82\x81" // U+f081 +#define ICON_FK_FACEBOOK_SQUARE "\xef\x82\x82" // U+f082 +#define ICON_FK_CAMERA_RETRO "\xef\x82\x83" // U+f083 +#define ICON_FK_KEY "\xef\x82\x84" // U+f084 +#define ICON_FK_COGS "\xef\x82\x85" // U+f085 +#define ICON_FK_COMMENTS "\xef\x82\x86" // U+f086 +#define ICON_FK_THUMBS_O_UP "\xef\x82\x87" // U+f087 +#define ICON_FK_THUMBS_O_DOWN "\xef\x82\x88" // U+f088 +#define ICON_FK_STAR_HALF "\xef\x82\x89" // U+f089 +#define ICON_FK_HEART_O "\xef\x82\x8a" // U+f08a +#define ICON_FK_SIGN_OUT "\xef\x82\x8b" // U+f08b +#define ICON_FK_LINKEDIN_SQUARE "\xef\x82\x8c" // U+f08c +#define ICON_FK_THUMB_TACK "\xef\x82\x8d" // U+f08d +#define ICON_FK_EXTERNAL_LINK "\xef\x82\x8e" // U+f08e +#define ICON_FK_SIGN_IN "\xef\x82\x90" // U+f090 +#define ICON_FK_TROPHY "\xef\x82\x91" // U+f091 +#define ICON_FK_GITHUB_SQUARE "\xef\x82\x92" // U+f092 +#define ICON_FK_UPLOAD "\xef\x82\x93" // U+f093 +#define ICON_FK_LEMON_O "\xef\x82\x94" // U+f094 +#define ICON_FK_PHONE "\xef\x82\x95" // U+f095 +#define ICON_FK_SQUARE_O "\xef\x82\x96" // U+f096 +#define ICON_FK_BOOKMARK_O "\xef\x82\x97" // U+f097 +#define ICON_FK_PHONE_SQUARE "\xef\x82\x98" // U+f098 +#define ICON_FK_TWITTER "\xef\x82\x99" // U+f099 +#define ICON_FK_FACEBOOK "\xef\x82\x9a" // U+f09a +#define ICON_FK_GITHUB "\xef\x82\x9b" // U+f09b +#define ICON_FK_UNLOCK "\xef\x82\x9c" // U+f09c +#define ICON_FK_CREDIT_CARD "\xef\x82\x9d" // U+f09d +#define ICON_FK_RSS "\xef\x82\x9e" // U+f09e +#define ICON_FK_HDD_O "\xef\x82\xa0" // U+f0a0 +#define ICON_FK_BULLHORN "\xef\x82\xa1" // U+f0a1 +#define ICON_FK_BELL_O "\xef\x83\xb3" // U+f0f3 +#define ICON_FK_CERTIFICATE "\xef\x82\xa3" // U+f0a3 +#define ICON_FK_HAND_O_RIGHT "\xef\x82\xa4" // U+f0a4 +#define ICON_FK_HAND_O_LEFT "\xef\x82\xa5" // U+f0a5 +#define ICON_FK_HAND_O_UP "\xef\x82\xa6" // U+f0a6 +#define ICON_FK_HAND_O_DOWN "\xef\x82\xa7" // U+f0a7 +#define ICON_FK_ARROW_CIRCLE_LEFT "\xef\x82\xa8" // U+f0a8 +#define ICON_FK_ARROW_CIRCLE_RIGHT "\xef\x82\xa9" // U+f0a9 +#define ICON_FK_ARROW_CIRCLE_UP "\xef\x82\xaa" // U+f0aa +#define ICON_FK_ARROW_CIRCLE_DOWN "\xef\x82\xab" // U+f0ab +#define ICON_FK_GLOBE "\xef\x82\xac" // U+f0ac +#define ICON_FK_GLOBE_E "\xef\x8c\x84" // U+f304 +#define ICON_FK_GLOBE_W "\xef\x8c\x85" // U+f305 +#define ICON_FK_WRENCH "\xef\x82\xad" // U+f0ad +#define ICON_FK_TASKS "\xef\x82\xae" // U+f0ae +#define ICON_FK_FILTER "\xef\x82\xb0" // U+f0b0 +#define ICON_FK_BRIEFCASE "\xef\x82\xb1" // U+f0b1 +#define ICON_FK_ARROWS_ALT "\xef\x82\xb2" // U+f0b2 +#define ICON_FK_USERS "\xef\x83\x80" // U+f0c0 +#define ICON_FK_LINK "\xef\x83\x81" // U+f0c1 +#define ICON_FK_CLOUD "\xef\x83\x82" // U+f0c2 +#define ICON_FK_FLASK "\xef\x83\x83" // U+f0c3 +#define ICON_FK_SCISSORS "\xef\x83\x84" // U+f0c4 +#define ICON_FK_FILES_O "\xef\x83\x85" // U+f0c5 +#define ICON_FK_PAPERCLIP "\xef\x83\x86" // U+f0c6 +#define ICON_FK_FLOPPY_O "\xef\x83\x87" // U+f0c7 +#define ICON_FK_SQUARE "\xef\x83\x88" // U+f0c8 +#define ICON_FK_BARS "\xef\x83\x89" // U+f0c9 +#define ICON_FK_LIST_UL "\xef\x83\x8a" // U+f0ca +#define ICON_FK_LIST_OL "\xef\x83\x8b" // U+f0cb +#define ICON_FK_STRIKETHROUGH "\xef\x83\x8c" // U+f0cc +#define ICON_FK_UNDERLINE "\xef\x83\x8d" // U+f0cd +#define ICON_FK_TABLE "\xef\x83\x8e" // U+f0ce +#define ICON_FK_MAGIC "\xef\x83\x90" // U+f0d0 +#define ICON_FK_TRUCK "\xef\x83\x91" // U+f0d1 +#define ICON_FK_PINTEREST "\xef\x83\x92" // U+f0d2 +#define ICON_FK_PINTEREST_SQUARE "\xef\x83\x93" // U+f0d3 +#define ICON_FK_GOOGLE_PLUS_SQUARE "\xef\x83\x94" // U+f0d4 +#define ICON_FK_GOOGLE_PLUS "\xef\x83\x95" // U+f0d5 +#define ICON_FK_MONEY "\xef\x83\x96" // U+f0d6 +#define ICON_FK_CARET_DOWN "\xef\x83\x97" // U+f0d7 +#define ICON_FK_CARET_UP "\xef\x83\x98" // U+f0d8 +#define ICON_FK_CARET_LEFT "\xef\x83\x99" // U+f0d9 +#define ICON_FK_CARET_RIGHT "\xef\x83\x9a" // U+f0da +#define ICON_FK_COLUMNS "\xef\x83\x9b" // U+f0db +#define ICON_FK_SORT "\xef\x83\x9c" // U+f0dc +#define ICON_FK_SORT_DESC "\xef\x83\x9d" // U+f0dd +#define ICON_FK_SORT_ASC "\xef\x83\x9e" // U+f0de +#define ICON_FK_ENVELOPE "\xef\x83\xa0" // U+f0e0 +#define ICON_FK_LINKEDIN "\xef\x83\xa1" // U+f0e1 +#define ICON_FK_UNDO "\xef\x83\xa2" // U+f0e2 +#define ICON_FK_GAVEL "\xef\x83\xa3" // U+f0e3 +#define ICON_FK_TACHOMETER "\xef\x83\xa4" // U+f0e4 +#define ICON_FK_COMMENT_O "\xef\x83\xa5" // U+f0e5 +#define ICON_FK_COMMENTS_O "\xef\x83\xa6" // U+f0e6 +#define ICON_FK_BOLT "\xef\x83\xa7" // U+f0e7 +#define ICON_FK_SITEMAP "\xef\x83\xa8" // U+f0e8 +#define ICON_FK_UMBRELLA "\xef\x83\xa9" // U+f0e9 +#define ICON_FK_CLIPBOARD "\xef\x83\xaa" // U+f0ea +#define ICON_FK_LIGHTBULB_O "\xef\x83\xab" // U+f0eb +#define ICON_FK_EXCHANGE "\xef\x83\xac" // U+f0ec +#define ICON_FK_CLOUD_DOWNLOAD "\xef\x83\xad" // U+f0ed +#define ICON_FK_CLOUD_UPLOAD "\xef\x83\xae" // U+f0ee +#define ICON_FK_USER_MD "\xef\x83\xb0" // U+f0f0 +#define ICON_FK_STETHOSCOPE "\xef\x83\xb1" // U+f0f1 +#define ICON_FK_SUITCASE "\xef\x83\xb2" // U+f0f2 +#define ICON_FK_BELL "\xef\x82\xa2" // U+f0a2 +#define ICON_FK_COFFEE "\xef\x83\xb4" // U+f0f4 +#define ICON_FK_CUTLERY "\xef\x83\xb5" // U+f0f5 +#define ICON_FK_FILE_TEXT_O "\xef\x83\xb6" // U+f0f6 +#define ICON_FK_BUILDING_O "\xef\x83\xb7" // U+f0f7 +#define ICON_FK_HOSPITAL_O "\xef\x83\xb8" // U+f0f8 +#define ICON_FK_AMBULANCE "\xef\x83\xb9" // U+f0f9 +#define ICON_FK_MEDKIT "\xef\x83\xba" // U+f0fa +#define ICON_FK_FIGHTER_JET "\xef\x83\xbb" // U+f0fb +#define ICON_FK_BEER "\xef\x83\xbc" // U+f0fc +#define ICON_FK_H_SQUARE "\xef\x83\xbd" // U+f0fd +#define ICON_FK_PLUS_SQUARE "\xef\x83\xbe" // U+f0fe +#define ICON_FK_ANGLE_DOUBLE_LEFT "\xef\x84\x80" // U+f100 +#define ICON_FK_ANGLE_DOUBLE_RIGHT "\xef\x84\x81" // U+f101 +#define ICON_FK_ANGLE_DOUBLE_UP "\xef\x84\x82" // U+f102 +#define ICON_FK_ANGLE_DOUBLE_DOWN "\xef\x84\x83" // U+f103 +#define ICON_FK_ANGLE_LEFT "\xef\x84\x84" // U+f104 +#define ICON_FK_ANGLE_RIGHT "\xef\x84\x85" // U+f105 +#define ICON_FK_ANGLE_UP "\xef\x84\x86" // U+f106 +#define ICON_FK_ANGLE_DOWN "\xef\x84\x87" // U+f107 +#define ICON_FK_DESKTOP "\xef\x84\x88" // U+f108 +#define ICON_FK_LAPTOP "\xef\x84\x89" // U+f109 +#define ICON_FK_TABLET "\xef\x84\x8a" // U+f10a +#define ICON_FK_MOBILE "\xef\x84\x8b" // U+f10b +#define ICON_FK_CIRCLE_O "\xef\x84\x8c" // U+f10c +#define ICON_FK_QUOTE_LEFT "\xef\x84\x8d" // U+f10d +#define ICON_FK_QUOTE_RIGHT "\xef\x84\x8e" // U+f10e +#define ICON_FK_SPINNER "\xef\x84\x90" // U+f110 +#define ICON_FK_CIRCLE "\xef\x84\x91" // U+f111 +#define ICON_FK_REPLY "\xef\x84\x92" // U+f112 +#define ICON_FK_GITHUB_ALT "\xef\x84\x93" // U+f113 +#define ICON_FK_FOLDER_O "\xef\x84\x94" // U+f114 +#define ICON_FK_FOLDER_OPEN_O "\xef\x84\x95" // U+f115 +#define ICON_FK_SMILE_O "\xef\x84\x98" // U+f118 +#define ICON_FK_FROWN_O "\xef\x84\x99" // U+f119 +#define ICON_FK_MEH_O "\xef\x84\x9a" // U+f11a +#define ICON_FK_GAMEPAD "\xef\x84\x9b" // U+f11b +#define ICON_FK_KEYBOARD_O "\xef\x84\x9c" // U+f11c +#define ICON_FK_FLAG_O "\xef\x84\x9d" // U+f11d +#define ICON_FK_FLAG_CHECKERED "\xef\x84\x9e" // U+f11e +#define ICON_FK_TERMINAL "\xef\x84\xa0" // U+f120 +#define ICON_FK_CODE "\xef\x84\xa1" // U+f121 +#define ICON_FK_REPLY_ALL "\xef\x84\xa2" // U+f122 +#define ICON_FK_STAR_HALF_O "\xef\x84\xa3" // U+f123 +#define ICON_FK_LOCATION_ARROW "\xef\x84\xa4" // U+f124 +#define ICON_FK_CROP "\xef\x84\xa5" // U+f125 +#define ICON_FK_CODE_FORK "\xef\x84\xa6" // U+f126 +#define ICON_FK_CHAIN_BROKEN "\xef\x84\xa7" // U+f127 +#define ICON_FK_QUESTION "\xef\x84\xa8" // U+f128 +#define ICON_FK_INFO "\xef\x84\xa9" // U+f129 +#define ICON_FK_EXCLAMATION "\xef\x84\xaa" // U+f12a +#define ICON_FK_SUPERSCRIPT "\xef\x84\xab" // U+f12b +#define ICON_FK_SUBSCRIPT "\xef\x84\xac" // U+f12c +#define ICON_FK_ERASER "\xef\x84\xad" // U+f12d +#define ICON_FK_PUZZLE_PIECE "\xef\x84\xae" // U+f12e +#define ICON_FK_MICROPHONE "\xef\x84\xb0" // U+f130 +#define ICON_FK_MICROPHONE_SLASH "\xef\x84\xb1" // U+f131 +#define ICON_FK_SHIELD "\xef\x84\xb2" // U+f132 +#define ICON_FK_CALENDAR_O "\xef\x84\xb3" // U+f133 +#define ICON_FK_FIRE_EXTINGUISHER "\xef\x84\xb4" // U+f134 +#define ICON_FK_ROCKET "\xef\x84\xb5" // U+f135 +#define ICON_FK_MAXCDN "\xef\x84\xb6" // U+f136 +#define ICON_FK_CHEVRON_CIRCLE_LEFT "\xef\x84\xb7" // U+f137 +#define ICON_FK_CHEVRON_CIRCLE_RIGHT "\xef\x84\xb8" // U+f138 +#define ICON_FK_CHEVRON_CIRCLE_UP "\xef\x84\xb9" // U+f139 +#define ICON_FK_CHEVRON_CIRCLE_DOWN "\xef\x84\xba" // U+f13a +#define ICON_FK_HTML5 "\xef\x84\xbb" // U+f13b +#define ICON_FK_CSS3 "\xef\x84\xbc" // U+f13c +#define ICON_FK_ANCHOR "\xef\x84\xbd" // U+f13d +#define ICON_FK_UNLOCK_ALT "\xef\x84\xbe" // U+f13e +#define ICON_FK_BULLSEYE "\xef\x85\x80" // U+f140 +#define ICON_FK_ELLIPSIS_H "\xef\x85\x81" // U+f141 +#define ICON_FK_ELLIPSIS_V "\xef\x85\x82" // U+f142 +#define ICON_FK_RSS_SQUARE "\xef\x85\x83" // U+f143 +#define ICON_FK_PLAY_CIRCLE "\xef\x85\x84" // U+f144 +#define ICON_FK_TICKET "\xef\x85\x85" // U+f145 +#define ICON_FK_MINUS_SQUARE "\xef\x85\x86" // U+f146 +#define ICON_FK_MINUS_SQUARE_O "\xef\x85\x87" // U+f147 +#define ICON_FK_LEVEL_UP "\xef\x85\x88" // U+f148 +#define ICON_FK_LEVEL_DOWN "\xef\x85\x89" // U+f149 +#define ICON_FK_CHECK_SQUARE "\xef\x85\x8a" // U+f14a +#define ICON_FK_PENCIL_SQUARE "\xef\x85\x8b" // U+f14b +#define ICON_FK_EXTERNAL_LINK_SQUARE "\xef\x85\x8c" // U+f14c +#define ICON_FK_SHARE_SQUARE "\xef\x85\x8d" // U+f14d +#define ICON_FK_COMPASS "\xef\x85\x8e" // U+f14e +#define ICON_FK_CARET_SQUARE_O_DOWN "\xef\x85\x90" // U+f150 +#define ICON_FK_CARET_SQUARE_O_UP "\xef\x85\x91" // U+f151 +#define ICON_FK_CARET_SQUARE_O_RIGHT "\xef\x85\x92" // U+f152 +#define ICON_FK_EUR "\xef\x85\x93" // U+f153 +#define ICON_FK_GBP "\xef\x85\x94" // U+f154 +#define ICON_FK_USD "\xef\x85\x95" // U+f155 +#define ICON_FK_INR "\xef\x85\x96" // U+f156 +#define ICON_FK_JPY "\xef\x85\x97" // U+f157 +#define ICON_FK_RUB "\xef\x85\x98" // U+f158 +#define ICON_FK_KRW "\xef\x85\x99" // U+f159 +#define ICON_FK_BTC "\xef\x85\x9a" // U+f15a +#define ICON_FK_FILE "\xef\x85\x9b" // U+f15b +#define ICON_FK_FILE_TEXT "\xef\x85\x9c" // U+f15c +#define ICON_FK_SORT_ALPHA_ASC "\xef\x85\x9d" // U+f15d +#define ICON_FK_SORT_ALPHA_DESC "\xef\x85\x9e" // U+f15e +#define ICON_FK_SORT_AMOUNT_ASC "\xef\x85\xa0" // U+f160 +#define ICON_FK_SORT_AMOUNT_DESC "\xef\x85\xa1" // U+f161 +#define ICON_FK_SORT_NUMERIC_ASC "\xef\x85\xa2" // U+f162 +#define ICON_FK_SORT_NUMERIC_DESC "\xef\x85\xa3" // U+f163 +#define ICON_FK_THUMBS_UP "\xef\x85\xa4" // U+f164 +#define ICON_FK_THUMBS_DOWN "\xef\x85\xa5" // U+f165 +#define ICON_FK_YOUTUBE_SQUARE "\xef\x85\xa6" // U+f166 +#define ICON_FK_YOUTUBE "\xef\x85\xa7" // U+f167 +#define ICON_FK_XING "\xef\x85\xa8" // U+f168 +#define ICON_FK_XING_SQUARE "\xef\x85\xa9" // U+f169 +#define ICON_FK_YOUTUBE_PLAY "\xef\x85\xaa" // U+f16a +#define ICON_FK_DROPBOX "\xef\x85\xab" // U+f16b +#define ICON_FK_STACK_OVERFLOW "\xef\x85\xac" // U+f16c +#define ICON_FK_INSTAGRAM "\xef\x85\xad" // U+f16d +#define ICON_FK_FLICKR "\xef\x85\xae" // U+f16e +#define ICON_FK_ADN "\xef\x85\xb0" // U+f170 +#define ICON_FK_BITBUCKET "\xef\x85\xb1" // U+f171 +#define ICON_FK_BITBUCKET_SQUARE "\xef\x85\xb2" // U+f172 +#define ICON_FK_TUMBLR "\xef\x85\xb3" // U+f173 +#define ICON_FK_TUMBLR_SQUARE "\xef\x85\xb4" // U+f174 +#define ICON_FK_LONG_ARROW_DOWN "\xef\x85\xb5" // U+f175 +#define ICON_FK_LONG_ARROW_UP "\xef\x85\xb6" // U+f176 +#define ICON_FK_LONG_ARROW_LEFT "\xef\x85\xb7" // U+f177 +#define ICON_FK_LONG_ARROW_RIGHT "\xef\x85\xb8" // U+f178 +#define ICON_FK_APPLE "\xef\x85\xb9" // U+f179 +#define ICON_FK_WINDOWS "\xef\x85\xba" // U+f17a +#define ICON_FK_ANDROID "\xef\x85\xbb" // U+f17b +#define ICON_FK_LINUX "\xef\x85\xbc" // U+f17c +#define ICON_FK_DRIBBBLE "\xef\x85\xbd" // U+f17d +#define ICON_FK_SKYPE "\xef\x85\xbe" // U+f17e +#define ICON_FK_FOURSQUARE "\xef\x86\x80" // U+f180 +#define ICON_FK_TRELLO "\xef\x86\x81" // U+f181 +#define ICON_FK_FEMALE "\xef\x86\x82" // U+f182 +#define ICON_FK_MALE "\xef\x86\x83" // U+f183 +#define ICON_FK_GRATIPAY "\xef\x86\x84" // U+f184 +#define ICON_FK_SUN_O "\xef\x86\x85" // U+f185 +#define ICON_FK_MOON_O "\xef\x86\x86" // U+f186 +#define ICON_FK_ARCHIVE "\xef\x86\x87" // U+f187 +#define ICON_FK_BUG "\xef\x86\x88" // U+f188 +#define ICON_FK_VK "\xef\x86\x89" // U+f189 +#define ICON_FK_WEIBO "\xef\x86\x8a" // U+f18a +#define ICON_FK_RENREN "\xef\x86\x8b" // U+f18b +#define ICON_FK_PAGELINES "\xef\x86\x8c" // U+f18c +#define ICON_FK_STACK_EXCHANGE "\xef\x86\x8d" // U+f18d +#define ICON_FK_ARROW_CIRCLE_O_RIGHT "\xef\x86\x8e" // U+f18e +#define ICON_FK_ARROW_CIRCLE_O_LEFT "\xef\x86\x90" // U+f190 +#define ICON_FK_CARET_SQUARE_O_LEFT "\xef\x86\x91" // U+f191 +#define ICON_FK_DOT_CIRCLE_O "\xef\x86\x92" // U+f192 +#define ICON_FK_WHEELCHAIR "\xef\x86\x93" // U+f193 +#define ICON_FK_VIMEO_SQUARE "\xef\x86\x94" // U+f194 +#define ICON_FK_TRY "\xef\x86\x95" // U+f195 +#define ICON_FK_PLUS_SQUARE_O "\xef\x86\x96" // U+f196 +#define ICON_FK_SPACE_SHUTTLE "\xef\x86\x97" // U+f197 +#define ICON_FK_SLACK "\xef\x86\x98" // U+f198 +#define ICON_FK_ENVELOPE_SQUARE "\xef\x86\x99" // U+f199 +#define ICON_FK_WORDPRESS "\xef\x86\x9a" // U+f19a +#define ICON_FK_OPENID "\xef\x86\x9b" // U+f19b +#define ICON_FK_UNIVERSITY "\xef\x86\x9c" // U+f19c +#define ICON_FK_GRADUATION_CAP "\xef\x86\x9d" // U+f19d +#define ICON_FK_YAHOO "\xef\x86\x9e" // U+f19e +#define ICON_FK_GOOGLE "\xef\x86\xa0" // U+f1a0 +#define ICON_FK_REDDIT "\xef\x86\xa1" // U+f1a1 +#define ICON_FK_REDDIT_SQUARE "\xef\x86\xa2" // U+f1a2 +#define ICON_FK_STUMBLEUPON_CIRCLE "\xef\x86\xa3" // U+f1a3 +#define ICON_FK_STUMBLEUPON "\xef\x86\xa4" // U+f1a4 +#define ICON_FK_DELICIOUS "\xef\x86\xa5" // U+f1a5 +#define ICON_FK_DIGG "\xef\x86\xa6" // U+f1a6 +#define ICON_FK_DRUPAL "\xef\x86\xa9" // U+f1a9 +#define ICON_FK_JOOMLA "\xef\x86\xaa" // U+f1aa +#define ICON_FK_LANGUAGE "\xef\x86\xab" // U+f1ab +#define ICON_FK_FAX "\xef\x86\xac" // U+f1ac +#define ICON_FK_BUILDING "\xef\x86\xad" // U+f1ad +#define ICON_FK_CHILD "\xef\x86\xae" // U+f1ae +#define ICON_FK_PAW "\xef\x86\xb0" // U+f1b0 +#define ICON_FK_SPOON "\xef\x86\xb1" // U+f1b1 +#define ICON_FK_CUBE "\xef\x86\xb2" // U+f1b2 +#define ICON_FK_CUBES "\xef\x86\xb3" // U+f1b3 +#define ICON_FK_BEHANCE "\xef\x86\xb4" // U+f1b4 +#define ICON_FK_BEHANCE_SQUARE "\xef\x86\xb5" // U+f1b5 +#define ICON_FK_STEAM "\xef\x86\xb6" // U+f1b6 +#define ICON_FK_STEAM_SQUARE "\xef\x86\xb7" // U+f1b7 +#define ICON_FK_RECYCLE "\xef\x86\xb8" // U+f1b8 +#define ICON_FK_CAR "\xef\x86\xb9" // U+f1b9 +#define ICON_FK_TAXI "\xef\x86\xba" // U+f1ba +#define ICON_FK_TREE "\xef\x86\xbb" // U+f1bb +#define ICON_FK_SPOTIFY "\xef\x86\xbc" // U+f1bc +#define ICON_FK_DEVIANTART "\xef\x86\xbd" // U+f1bd +#define ICON_FK_SOUNDCLOUD "\xef\x86\xbe" // U+f1be +#define ICON_FK_DATABASE "\xef\x87\x80" // U+f1c0 +#define ICON_FK_FILE_PDF_O "\xef\x87\x81" // U+f1c1 +#define ICON_FK_FILE_WORD_O "\xef\x87\x82" // U+f1c2 +#define ICON_FK_FILE_EXCEL_O "\xef\x87\x83" // U+f1c3 +#define ICON_FK_FILE_POWERPOINT_O "\xef\x87\x84" // U+f1c4 +#define ICON_FK_FILE_IMAGE_O "\xef\x87\x85" // U+f1c5 +#define ICON_FK_FILE_ARCHIVE_O "\xef\x87\x86" // U+f1c6 +#define ICON_FK_FILE_AUDIO_O "\xef\x87\x87" // U+f1c7 +#define ICON_FK_FILE_VIDEO_O "\xef\x87\x88" // U+f1c8 +#define ICON_FK_FILE_CODE_O "\xef\x87\x89" // U+f1c9 +#define ICON_FK_VINE "\xef\x87\x8a" // U+f1ca +#define ICON_FK_CODEPEN "\xef\x87\x8b" // U+f1cb +#define ICON_FK_JSFIDDLE "\xef\x87\x8c" // U+f1cc +#define ICON_FK_LIFE_RING "\xef\x87\x8d" // U+f1cd +#define ICON_FK_CIRCLE_O_NOTCH "\xef\x87\x8e" // U+f1ce +#define ICON_FK_REBEL "\xef\x87\x90" // U+f1d0 +#define ICON_FK_EMPIRE "\xef\x87\x91" // U+f1d1 +#define ICON_FK_GIT_SQUARE "\xef\x87\x92" // U+f1d2 +#define ICON_FK_GIT "\xef\x87\x93" // U+f1d3 +#define ICON_FK_HACKER_NEWS "\xef\x87\x94" // U+f1d4 +#define ICON_FK_TENCENT_WEIBO "\xef\x87\x95" // U+f1d5 +#define ICON_FK_QQ "\xef\x87\x96" // U+f1d6 +#define ICON_FK_WEIXIN "\xef\x87\x97" // U+f1d7 +#define ICON_FK_PAPER_PLANE "\xef\x87\x98" // U+f1d8 +#define ICON_FK_PAPER_PLANE_O "\xef\x87\x99" // U+f1d9 +#define ICON_FK_HISTORY "\xef\x87\x9a" // U+f1da +#define ICON_FK_CIRCLE_THIN "\xef\x87\x9b" // U+f1db +#define ICON_FK_HEADER "\xef\x87\x9c" // U+f1dc +#define ICON_FK_PARAGRAPH "\xef\x87\x9d" // U+f1dd +#define ICON_FK_SLIDERS "\xef\x87\x9e" // U+f1de +#define ICON_FK_SHARE_ALT "\xef\x87\xa0" // U+f1e0 +#define ICON_FK_SHARE_ALT_SQUARE "\xef\x87\xa1" // U+f1e1 +#define ICON_FK_BOMB "\xef\x87\xa2" // U+f1e2 +#define ICON_FK_FUTBOL_O "\xef\x87\xa3" // U+f1e3 +#define ICON_FK_TTY "\xef\x87\xa4" // U+f1e4 +#define ICON_FK_BINOCULARS "\xef\x87\xa5" // U+f1e5 +#define ICON_FK_PLUG "\xef\x87\xa6" // U+f1e6 +#define ICON_FK_SLIDESHARE "\xef\x87\xa7" // U+f1e7 +#define ICON_FK_TWITCH "\xef\x87\xa8" // U+f1e8 +#define ICON_FK_YELP "\xef\x87\xa9" // U+f1e9 +#define ICON_FK_NEWSPAPER_O "\xef\x87\xaa" // U+f1ea +#define ICON_FK_WIFI "\xef\x87\xab" // U+f1eb +#define ICON_FK_CALCULATOR "\xef\x87\xac" // U+f1ec +#define ICON_FK_PAYPAL "\xef\x87\xad" // U+f1ed +#define ICON_FK_GOOGLE_WALLET "\xef\x87\xae" // U+f1ee +#define ICON_FK_CC_VISA "\xef\x87\xb0" // U+f1f0 +#define ICON_FK_CC_MASTERCARD "\xef\x87\xb1" // U+f1f1 +#define ICON_FK_CC_DISCOVER "\xef\x87\xb2" // U+f1f2 +#define ICON_FK_CC_AMEX "\xef\x87\xb3" // U+f1f3 +#define ICON_FK_CC_PAYPAL "\xef\x87\xb4" // U+f1f4 +#define ICON_FK_CC_STRIPE "\xef\x87\xb5" // U+f1f5 +#define ICON_FK_BELL_SLASH "\xef\x87\xb6" // U+f1f6 +#define ICON_FK_BELL_SLASH_O "\xef\x87\xb7" // U+f1f7 +#define ICON_FK_TRASH "\xef\x87\xb8" // U+f1f8 +#define ICON_FK_COPYRIGHT "\xef\x87\xb9" // U+f1f9 +#define ICON_FK_AT "\xef\x87\xba" // U+f1fa +#define ICON_FK_EYEDROPPER "\xef\x87\xbb" // U+f1fb +#define ICON_FK_PAINT_BRUSH "\xef\x87\xbc" // U+f1fc +#define ICON_FK_BIRTHDAY_CAKE "\xef\x87\xbd" // U+f1fd +#define ICON_FK_AREA_CHART "\xef\x87\xbe" // U+f1fe +#define ICON_FK_PIE_CHART "\xef\x88\x80" // U+f200 +#define ICON_FK_LINE_CHART "\xef\x88\x81" // U+f201 +#define ICON_FK_LASTFM "\xef\x88\x82" // U+f202 +#define ICON_FK_LASTFM_SQUARE "\xef\x88\x83" // U+f203 +#define ICON_FK_TOGGLE_OFF "\xef\x88\x84" // U+f204 +#define ICON_FK_TOGGLE_ON "\xef\x88\x85" // U+f205 +#define ICON_FK_BICYCLE "\xef\x88\x86" // U+f206 +#define ICON_FK_BUS "\xef\x88\x87" // U+f207 +#define ICON_FK_IOXHOST "\xef\x88\x88" // U+f208 +#define ICON_FK_ANGELLIST "\xef\x88\x89" // U+f209 +#define ICON_FK_CC "\xef\x88\x8a" // U+f20a +#define ICON_FK_ILS "\xef\x88\x8b" // U+f20b +#define ICON_FK_MEANPATH "\xef\x88\x8c" // U+f20c +#define ICON_FK_BUYSELLADS "\xef\x88\x8d" // U+f20d +#define ICON_FK_CONNECTDEVELOP "\xef\x88\x8e" // U+f20e +#define ICON_FK_DASHCUBE "\xef\x88\x90" // U+f210 +#define ICON_FK_FORUMBEE "\xef\x88\x91" // U+f211 +#define ICON_FK_LEANPUB "\xef\x88\x92" // U+f212 +#define ICON_FK_SELLSY "\xef\x88\x93" // U+f213 +#define ICON_FK_SHIRTSINBULK "\xef\x88\x94" // U+f214 +#define ICON_FK_SIMPLYBUILT "\xef\x88\x95" // U+f215 +#define ICON_FK_SKYATLAS "\xef\x88\x96" // U+f216 +#define ICON_FK_CART_PLUS "\xef\x88\x97" // U+f217 +#define ICON_FK_CART_ARROW_DOWN "\xef\x88\x98" // U+f218 +#define ICON_FK_DIAMOND "\xef\x88\x99" // U+f219 +#define ICON_FK_SHIP "\xef\x88\x9a" // U+f21a +#define ICON_FK_USER_SECRET "\xef\x88\x9b" // U+f21b +#define ICON_FK_MOTORCYCLE "\xef\x88\x9c" // U+f21c +#define ICON_FK_STREET_VIEW "\xef\x88\x9d" // U+f21d +#define ICON_FK_HEARTBEAT "\xef\x88\x9e" // U+f21e +#define ICON_FK_VENUS "\xef\x88\xa1" // U+f221 +#define ICON_FK_MARS "\xef\x88\xa2" // U+f222 +#define ICON_FK_MERCURY "\xef\x88\xa3" // U+f223 +#define ICON_FK_TRANSGENDER "\xef\x88\xa4" // U+f224 +#define ICON_FK_TRANSGENDER_ALT "\xef\x88\xa5" // U+f225 +#define ICON_FK_VENUS_DOUBLE "\xef\x88\xa6" // U+f226 +#define ICON_FK_MARS_DOUBLE "\xef\x88\xa7" // U+f227 +#define ICON_FK_VENUS_MARS "\xef\x88\xa8" // U+f228 +#define ICON_FK_MARS_STROKE "\xef\x88\xa9" // U+f229 +#define ICON_FK_MARS_STROKE_V "\xef\x88\xaa" // U+f22a +#define ICON_FK_MARS_STROKE_H "\xef\x88\xab" // U+f22b +#define ICON_FK_NEUTER "\xef\x88\xac" // U+f22c +#define ICON_FK_GENDERLESS "\xef\x88\xad" // U+f22d +#define ICON_FK_FACEBOOK_OFFICIAL "\xef\x88\xb0" // U+f230 +#define ICON_FK_PINTEREST_P "\xef\x88\xb1" // U+f231 +#define ICON_FK_WHATSAPP "\xef\x88\xb2" // U+f232 +#define ICON_FK_SERVER "\xef\x88\xb3" // U+f233 +#define ICON_FK_USER_PLUS "\xef\x88\xb4" // U+f234 +#define ICON_FK_USER_TIMES "\xef\x88\xb5" // U+f235 +#define ICON_FK_BED "\xef\x88\xb6" // U+f236 +#define ICON_FK_VIACOIN "\xef\x88\xb7" // U+f237 +#define ICON_FK_TRAIN "\xef\x88\xb8" // U+f238 +#define ICON_FK_SUBWAY "\xef\x88\xb9" // U+f239 +#define ICON_FK_MEDIUM "\xef\x88\xba" // U+f23a +#define ICON_FK_MEDIUM_SQUARE "\xef\x8b\xb8" // U+f2f8 +#define ICON_FK_Y_COMBINATOR "\xef\x88\xbb" // U+f23b +#define ICON_FK_OPTIN_MONSTER "\xef\x88\xbc" // U+f23c +#define ICON_FK_OPENCART "\xef\x88\xbd" // U+f23d +#define ICON_FK_EXPEDITEDSSL "\xef\x88\xbe" // U+f23e +#define ICON_FK_BATTERY_FULL "\xef\x89\x80" // U+f240 +#define ICON_FK_BATTERY_THREE_QUARTERS "\xef\x89\x81" // U+f241 +#define ICON_FK_BATTERY_HALF "\xef\x89\x82" // U+f242 +#define ICON_FK_BATTERY_QUARTER "\xef\x89\x83" // U+f243 +#define ICON_FK_BATTERY_EMPTY "\xef\x89\x84" // U+f244 +#define ICON_FK_MOUSE_POINTER "\xef\x89\x85" // U+f245 +#define ICON_FK_I_CURSOR "\xef\x89\x86" // U+f246 +#define ICON_FK_OBJECT_GROUP "\xef\x89\x87" // U+f247 +#define ICON_FK_OBJECT_UNGROUP "\xef\x89\x88" // U+f248 +#define ICON_FK_STICKY_NOTE "\xef\x89\x89" // U+f249 +#define ICON_FK_STICKY_NOTE_O "\xef\x89\x8a" // U+f24a +#define ICON_FK_CC_JCB "\xef\x89\x8b" // U+f24b +#define ICON_FK_CC_DINERS_CLUB "\xef\x89\x8c" // U+f24c +#define ICON_FK_CLONE "\xef\x89\x8d" // U+f24d +#define ICON_FK_BALANCE_SCALE "\xef\x89\x8e" // U+f24e +#define ICON_FK_HOURGLASS_O "\xef\x89\x90" // U+f250 +#define ICON_FK_HOURGLASS_START "\xef\x89\x91" // U+f251 +#define ICON_FK_HOURGLASS_HALF "\xef\x89\x92" // U+f252 +#define ICON_FK_HOURGLASS_END "\xef\x89\x93" // U+f253 +#define ICON_FK_HOURGLASS "\xef\x89\x94" // U+f254 +#define ICON_FK_HAND_ROCK_O "\xef\x89\x95" // U+f255 +#define ICON_FK_HAND_PAPER_O "\xef\x89\x96" // U+f256 +#define ICON_FK_HAND_SCISSORS_O "\xef\x89\x97" // U+f257 +#define ICON_FK_HAND_LIZARD_O "\xef\x89\x98" // U+f258 +#define ICON_FK_HAND_SPOCK_O "\xef\x89\x99" // U+f259 +#define ICON_FK_HAND_POINTER_O "\xef\x89\x9a" // U+f25a +#define ICON_FK_HAND_PEACE_O "\xef\x89\x9b" // U+f25b +#define ICON_FK_TRADEMARK "\xef\x89\x9c" // U+f25c +#define ICON_FK_REGISTERED "\xef\x89\x9d" // U+f25d +#define ICON_FK_CREATIVE_COMMONS "\xef\x89\x9e" // U+f25e +#define ICON_FK_GG "\xef\x89\xa0" // U+f260 +#define ICON_FK_GG_CIRCLE "\xef\x89\xa1" // U+f261 +#define ICON_FK_TRIPADVISOR "\xef\x89\xa2" // U+f262 +#define ICON_FK_ODNOKLASSNIKI "\xef\x89\xa3" // U+f263 +#define ICON_FK_ODNOKLASSNIKI_SQUARE "\xef\x89\xa4" // U+f264 +#define ICON_FK_GET_POCKET "\xef\x89\xa5" // U+f265 +#define ICON_FK_WIKIPEDIA_W "\xef\x89\xa6" // U+f266 +#define ICON_FK_SAFARI "\xef\x89\xa7" // U+f267 +#define ICON_FK_CHROME "\xef\x89\xa8" // U+f268 +#define ICON_FK_FIREFOX "\xef\x89\xa9" // U+f269 +#define ICON_FK_OPERA "\xef\x89\xaa" // U+f26a +#define ICON_FK_INTERNET_EXPLORER "\xef\x89\xab" // U+f26b +#define ICON_FK_TELEVISION "\xef\x89\xac" // U+f26c +#define ICON_FK_CONTAO "\xef\x89\xad" // U+f26d +#define ICON_FK_500PX "\xef\x89\xae" // U+f26e +#define ICON_FK_AMAZON "\xef\x89\xb0" // U+f270 +#define ICON_FK_CALENDAR_PLUS_O "\xef\x89\xb1" // U+f271 +#define ICON_FK_CALENDAR_MINUS_O "\xef\x89\xb2" // U+f272 +#define ICON_FK_CALENDAR_TIMES_O "\xef\x89\xb3" // U+f273 +#define ICON_FK_CALENDAR_CHECK_O "\xef\x89\xb4" // U+f274 +#define ICON_FK_INDUSTRY "\xef\x89\xb5" // U+f275 +#define ICON_FK_MAP_PIN "\xef\x89\xb6" // U+f276 +#define ICON_FK_MAP_SIGNS "\xef\x89\xb7" // U+f277 +#define ICON_FK_MAP_O "\xef\x89\xb8" // U+f278 +#define ICON_FK_MAP "\xef\x89\xb9" // U+f279 +#define ICON_FK_COMMENTING "\xef\x89\xba" // U+f27a +#define ICON_FK_COMMENTING_O "\xef\x89\xbb" // U+f27b +#define ICON_FK_HOUZZ "\xef\x89\xbc" // U+f27c +#define ICON_FK_VIMEO "\xef\x89\xbd" // U+f27d +#define ICON_FK_BLACK_TIE "\xef\x89\xbe" // U+f27e +#define ICON_FK_FONTICONS "\xef\x8a\x80" // U+f280 +#define ICON_FK_REDDIT_ALIEN "\xef\x8a\x81" // U+f281 +#define ICON_FK_EDGE "\xef\x8a\x82" // U+f282 +#define ICON_FK_CREDIT_CARD_ALT "\xef\x8a\x83" // U+f283 +#define ICON_FK_CODIEPIE "\xef\x8a\x84" // U+f284 +#define ICON_FK_MODX "\xef\x8a\x85" // U+f285 +#define ICON_FK_FORT_AWESOME "\xef\x8a\x86" // U+f286 +#define ICON_FK_USB "\xef\x8a\x87" // U+f287 +#define ICON_FK_PRODUCT_HUNT "\xef\x8a\x88" // U+f288 +#define ICON_FK_MIXCLOUD "\xef\x8a\x89" // U+f289 +#define ICON_FK_SCRIBD "\xef\x8a\x8a" // U+f28a +#define ICON_FK_PAUSE_CIRCLE "\xef\x8a\x8b" // U+f28b +#define ICON_FK_PAUSE_CIRCLE_O "\xef\x8a\x8c" // U+f28c +#define ICON_FK_STOP_CIRCLE "\xef\x8a\x8d" // U+f28d +#define ICON_FK_STOP_CIRCLE_O "\xef\x8a\x8e" // U+f28e +#define ICON_FK_SHOPPING_BAG "\xef\x8a\x90" // U+f290 +#define ICON_FK_SHOPPING_BASKET "\xef\x8a\x91" // U+f291 +#define ICON_FK_HASHTAG "\xef\x8a\x92" // U+f292 +#define ICON_FK_BLUETOOTH "\xef\x8a\x93" // U+f293 +#define ICON_FK_BLUETOOTH_B "\xef\x8a\x94" // U+f294 +#define ICON_FK_PERCENT "\xef\x8a\x95" // U+f295 +#define ICON_FK_GITLAB "\xef\x8a\x96" // U+f296 +#define ICON_FK_WPBEGINNER "\xef\x8a\x97" // U+f297 +#define ICON_FK_WPFORMS "\xef\x8a\x98" // U+f298 +#define ICON_FK_ENVIRA "\xef\x8a\x99" // U+f299 +#define ICON_FK_UNIVERSAL_ACCESS "\xef\x8a\x9a" // U+f29a +#define ICON_FK_WHEELCHAIR_ALT "\xef\x8a\x9b" // U+f29b +#define ICON_FK_QUESTION_CIRCLE_O "\xef\x8a\x9c" // U+f29c +#define ICON_FK_BLIND "\xef\x8a\x9d" // U+f29d +#define ICON_FK_AUDIO_DESCRIPTION "\xef\x8a\x9e" // U+f29e +#define ICON_FK_VOLUME_CONTROL_PHONE "\xef\x8a\xa0" // U+f2a0 +#define ICON_FK_BRAILLE "\xef\x8a\xa1" // U+f2a1 +#define ICON_FK_ASSISTIVE_LISTENING_SYSTEMS "\xef\x8a\xa2" // U+f2a2 +#define ICON_FK_AMERICAN_SIGN_LANGUAGE_INTERPRETING "\xef\x8a\xa3" // U+f2a3 +#define ICON_FK_DEAF "\xef\x8a\xa4" // U+f2a4 +#define ICON_FK_GLIDE "\xef\x8a\xa5" // U+f2a5 +#define ICON_FK_GLIDE_G "\xef\x8a\xa6" // U+f2a6 +#define ICON_FK_SIGN_LANGUAGE "\xef\x8a\xa7" // U+f2a7 +#define ICON_FK_LOW_VISION "\xef\x8a\xa8" // U+f2a8 +#define ICON_FK_VIADEO "\xef\x8a\xa9" // U+f2a9 +#define ICON_FK_VIADEO_SQUARE "\xef\x8a\xaa" // U+f2aa +#define ICON_FK_SNAPCHAT "\xef\x8a\xab" // U+f2ab +#define ICON_FK_SNAPCHAT_GHOST "\xef\x8a\xac" // U+f2ac +#define ICON_FK_SNAPCHAT_SQUARE "\xef\x8a\xad" // U+f2ad +#define ICON_FK_FIRST_ORDER "\xef\x8a\xb0" // U+f2b0 +#define ICON_FK_YOAST "\xef\x8a\xb1" // U+f2b1 +#define ICON_FK_THEMEISLE "\xef\x8a\xb2" // U+f2b2 +#define ICON_FK_GOOGLE_PLUS_OFFICIAL "\xef\x8a\xb3" // U+f2b3 +#define ICON_FK_FONT_AWESOME "\xef\x8a\xb4" // U+f2b4 +#define ICON_FK_HANDSHAKE_O "\xef\x8a\xb5" // U+f2b5 +#define ICON_FK_ENVELOPE_OPEN "\xef\x8a\xb6" // U+f2b6 +#define ICON_FK_ENVELOPE_OPEN_O "\xef\x8a\xb7" // U+f2b7 +#define ICON_FK_LINODE "\xef\x8a\xb8" // U+f2b8 +#define ICON_FK_ADDRESS_BOOK "\xef\x8a\xb9" // U+f2b9 +#define ICON_FK_ADDRESS_BOOK_O "\xef\x8a\xba" // U+f2ba +#define ICON_FK_ADDRESS_CARD "\xef\x8a\xbb" // U+f2bb +#define ICON_FK_ADDRESS_CARD_O "\xef\x8a\xbc" // U+f2bc +#define ICON_FK_USER_CIRCLE "\xef\x8a\xbd" // U+f2bd +#define ICON_FK_USER_CIRCLE_O "\xef\x8a\xbe" // U+f2be +#define ICON_FK_USER_O "\xef\x8b\x80" // U+f2c0 +#define ICON_FK_ID_BADGE "\xef\x8b\x81" // U+f2c1 +#define ICON_FK_ID_CARD "\xef\x8b\x82" // U+f2c2 +#define ICON_FK_ID_CARD_O "\xef\x8b\x83" // U+f2c3 +#define ICON_FK_QUORA "\xef\x8b\x84" // U+f2c4 +#define ICON_FK_FREE_CODE_CAMP "\xef\x8b\x85" // U+f2c5 +#define ICON_FK_TELEGRAM "\xef\x8b\x86" // U+f2c6 +#define ICON_FK_THERMOMETER_FULL "\xef\x8b\x87" // U+f2c7 +#define ICON_FK_THERMOMETER_THREE_QUARTERS "\xef\x8b\x88" // U+f2c8 +#define ICON_FK_THERMOMETER_HALF "\xef\x8b\x89" // U+f2c9 +#define ICON_FK_THERMOMETER_QUARTER "\xef\x8b\x8a" // U+f2ca +#define ICON_FK_THERMOMETER_EMPTY "\xef\x8b\x8b" // U+f2cb +#define ICON_FK_SHOWER "\xef\x8b\x8c" // U+f2cc +#define ICON_FK_BATH "\xef\x8b\x8d" // U+f2cd +#define ICON_FK_PODCAST "\xef\x8b\x8e" // U+f2ce +#define ICON_FK_WINDOW_MAXIMIZE "\xef\x8b\x90" // U+f2d0 +#define ICON_FK_WINDOW_MINIMIZE "\xef\x8b\x91" // U+f2d1 +#define ICON_FK_WINDOW_RESTORE "\xef\x8b\x92" // U+f2d2 +#define ICON_FK_WINDOW_CLOSE "\xef\x8b\x93" // U+f2d3 +#define ICON_FK_WINDOW_CLOSE_O "\xef\x8b\x94" // U+f2d4 +#define ICON_FK_BANDCAMP "\xef\x8b\x95" // U+f2d5 +#define ICON_FK_GRAV "\xef\x8b\x96" // U+f2d6 +#define ICON_FK_ETSY "\xef\x8b\x97" // U+f2d7 +#define ICON_FK_IMDB "\xef\x8b\x98" // U+f2d8 +#define ICON_FK_RAVELRY "\xef\x8b\x99" // U+f2d9 +#define ICON_FK_EERCAST "\xef\x8b\x9a" // U+f2da +#define ICON_FK_MICROCHIP "\xef\x8b\x9b" // U+f2db +#define ICON_FK_SNOWFLAKE_O "\xef\x8b\x9c" // U+f2dc +#define ICON_FK_SUPERPOWERS "\xef\x8b\x9d" // U+f2dd +#define ICON_FK_WPEXPLORER "\xef\x8b\x9e" // U+f2de +#define ICON_FK_MEETUP "\xef\x8b\xa0" // U+f2e0 +#define ICON_FK_MASTODON "\xef\x8b\xa1" // U+f2e1 +#define ICON_FK_MASTODON_ALT "\xef\x8b\xa2" // U+f2e2 +#define ICON_FK_FORK_AWESOME "\xef\x8b\xa3" // U+f2e3 +#define ICON_FK_PEERTUBE "\xef\x8b\xa4" // U+f2e4 +#define ICON_FK_DIASPORA "\xef\x8b\xa5" // U+f2e5 +#define ICON_FK_FRIENDICA "\xef\x8b\xa6" // U+f2e6 +#define ICON_FK_GNU_SOCIAL "\xef\x8b\xa7" // U+f2e7 +#define ICON_FK_LIBERAPAY_SQUARE "\xef\x8b\xa8" // U+f2e8 +#define ICON_FK_LIBERAPAY "\xef\x8b\xa9" // U+f2e9 +#define ICON_FK_SCUTTLEBUTT "\xef\x8b\xaa" // U+f2ea +#define ICON_FK_HUBZILLA "\xef\x8b\xab" // U+f2eb +#define ICON_FK_SOCIAL_HOME "\xef\x8b\xac" // U+f2ec +#define ICON_FK_ARTSTATION "\xef\x8b\xad" // U+f2ed +#define ICON_FK_DISCORD "\xef\x8b\xae" // U+f2ee +#define ICON_FK_DISCORD_ALT "\xef\x8b\xaf" // U+f2ef +#define ICON_FK_PATREON "\xef\x8b\xb0" // U+f2f0 +#define ICON_FK_SNOWDRIFT "\xef\x8b\xb1" // U+f2f1 +#define ICON_FK_ACTIVITYPUB "\xef\x8b\xb2" // U+f2f2 +#define ICON_FK_ETHEREUM "\xef\x8b\xb3" // U+f2f3 +#define ICON_FK_KEYBASE "\xef\x8b\xb4" // U+f2f4 +#define ICON_FK_SHAARLI "\xef\x8b\xb5" // U+f2f5 +#define ICON_FK_SHAARLI_O "\xef\x8b\xb6" // U+f2f6 +#define ICON_FK_KEY_MODERN "\xef\x8b\xb7" // U+f2f7 +#define ICON_FK_XMPP "\xef\x8b\xb9" // U+f2f9 +#define ICON_FK_ARCHIVE_ORG "\xef\x8b\xbc" // U+f2fc +#define ICON_FK_FREEDOMBOX "\xef\x8b\xbd" // U+f2fd +#define ICON_FK_FACEBOOK_MESSENGER "\xef\x8b\xbe" // U+f2fe +#define ICON_FK_DEBIAN "\xef\x8b\xbf" // U+f2ff +#define ICON_FK_MASTODON_SQUARE "\xef\x8c\x80" // U+f300 +#define ICON_FK_TIPEEE "\xef\x8c\x81" // U+f301 +#define ICON_FK_REACT "\xef\x8c\x82" // U+f302 +#define ICON_FK_DOGMAZIC "\xef\x8c\x83" // U+f303 +#define ICON_FK_ZOTERO "\xef\x8c\x89" // U+f309 +#define ICON_FK_NODEJS "\xef\x8c\x88" // U+f308 +#define ICON_FK_NEXTCLOUD "\xef\x8c\x86" // U+f306 +#define ICON_FK_NEXTCLOUD_SQUARE "\xef\x8c\x87" // U+f307 +#define ICON_FK_HACKADAY "\xef\x8c\x8a" // U+f30a +#define ICON_FK_LARAVEL "\xef\x8c\x8b" // U+f30b +#define ICON_FK_SIGNALAPP "\xef\x8c\x8c" // U+f30c +#define ICON_FK_GNUPG "\xef\x8c\x8d" // U+f30d +#define ICON_FK_PHP "\xef\x8c\x8e" // U+f30e +#define ICON_FK_FFMPEG "\xef\x8c\x8f" // U+f30f +#define ICON_FK_JOPLIN "\xef\x8c\x90" // U+f310 +#define ICON_FK_SYNCTHING "\xef\x8c\x91" // U+f311 +#define ICON_FK_INKSCAPE "\xef\x8c\x92" // U+f312 +#define ICON_FK_MATRIX_ORG "\xef\x8c\x93" // U+f313 +#define ICON_FK_PIXELFED "\xef\x8c\x94" // U+f314 +#define ICON_FK_BOOTSTRAP "\xef\x8c\x95" // U+f315 +#define ICON_FK_DEV_TO "\xef\x8c\x96" // U+f316 +#define ICON_FK_HASHNODE "\xef\x8c\x97" // U+f317 +#define ICON_FK_JIRAFEAU "\xef\x8c\x98" // U+f318 +#define ICON_FK_EMBY "\xef\x8c\x99" // U+f319 +#define ICON_FK_WIKIDATA "\xef\x8c\x9a" // U+f31a +#define ICON_FK_GIMP "\xef\x8c\x9b" // U+f31b +#define ICON_FK_C "\xef\x8c\x9c" // U+f31c +#define ICON_FK_DIGITALOCEAN "\xef\x8c\x9d" // U+f31d +#define ICON_FK_ATT "\xef\x8c\x9e" // U+f31e +#define ICON_FK_GITEA "\xef\x8c\x9f" // U+f31f +#define ICON_FK_FILE_EPUB "\xef\x8c\xa1" // U+f321 +#define ICON_FK_PYTHON "\xef\x8c\xa2" // U+f322 +#define ICON_FK_ARCHLINUX "\xef\x8c\xa3" // U+f323 +#define ICON_FK_PLEROMA "\xef\x8c\xa4" // U+f324 +#define ICON_FK_UNSPLASH "\xef\x8c\xa5" // U+f325 +#define ICON_FK_HACKSTER "\xef\x8c\xa6" // U+f326 +#define ICON_FK_SPELL_CHECK "\xef\x8c\xa7" // U+f327 +#define ICON_FK_MOON "\xef\x8c\xa8" // U+f328 +#define ICON_FK_SUN "\xef\x8c\xa9" // U+f329 +#define ICON_FK_F_DROID "\xef\x8c\xaa" // U+f32a +#define ICON_FK_BIOMETRIC "\xef\x8c\xab" // U+f32b +#define ICON_FK_WIRE "\xef\x8c\xac" // U+f32c +#define ICON_FK_TOR_ONION "\xef\x8c\xae" // U+f32e +#define ICON_FK_VOLUME_MUTE "\xef\x8c\xaf" // U+f32f +#define ICON_FK_BELL_RINGING "\xef\x8c\xad" // U+f32d +#define ICON_FK_BELL_RINGING_O "\xef\x8c\xb0" // U+f330 +#define ICON_FK_HAL "\xef\x8c\xb3" // U+f333 +#define ICON_FK_JUPYTER "\xef\x8c\xb5" // U+f335 +#define ICON_FK_JULIA "\xef\x8c\xb4" // U+f334 +#define ICON_FK_CLASSICPRESS "\xef\x8c\xb1" // U+f331 +#define ICON_FK_CLASSICPRESS_CIRCLE "\xef\x8c\xb2" // U+f332 +#define ICON_FK_OPEN_COLLECTIVE "\xef\x8c\xb6" // U+f336 +#define ICON_FK_ORCID "\xef\x8c\xb7" // U+f337 +#define ICON_FK_RESEARCHGATE "\xef\x8c\xb8" // U+f338 +#define ICON_FK_FUNKWHALE "\xef\x8c\xb9" // U+f339 +#define ICON_FK_ASKFM "\xef\x8c\xba" // U+f33a +#define ICON_FK_BLOCKSTACK "\xef\x8c\xbb" // U+f33b +#define ICON_FK_BOARDGAMEGEEK "\xef\x8c\xbc" // U+f33c +#define ICON_FK_BUNNY "\xef\x8d\x9f" // U+f35f +#define ICON_FK_BUYMEACOFFEE "\xef\x8c\xbd" // U+f33d +#define ICON_FK_CC_BY "\xef\x8c\xbe" // U+f33e +#define ICON_FK_CC_CC "\xef\x8c\xbf" // U+f33f +#define ICON_FK_CC_NC_EU "\xef\x8d\x81" // U+f341 +#define ICON_FK_CC_NC_JP "\xef\x8d\x82" // U+f342 +#define ICON_FK_CC_NC "\xef\x8d\x80" // U+f340 +#define ICON_FK_CC_ND "\xef\x8d\x83" // U+f343 +#define ICON_FK_CC_PD "\xef\x8d\x84" // U+f344 +#define ICON_FK_CC_REMIX "\xef\x8d\x85" // U+f345 +#define ICON_FK_CC_SA "\xef\x8d\x86" // U+f346 +#define ICON_FK_CC_SHARE "\xef\x8d\x87" // U+f347 +#define ICON_FK_CC_ZERO "\xef\x8d\x88" // U+f348 +#define ICON_FK_CONWAY_GLIDER "\xef\x8d\x89" // U+f349 +#define ICON_FK_CSHARP "\xef\x8d\x8a" // U+f34a +#define ICON_FK_EMAIL_BULK "\xef\x8d\x8b" // U+f34b +#define ICON_FK_EMAIL_BULK_O "\xef\x8d\x8c" // U+f34c +#define ICON_FK_GNU "\xef\x8d\x8d" // U+f34d +#define ICON_FK_GOOGLE_PLAY "\xef\x8d\x8e" // U+f34e +#define ICON_FK_HEROKU "\xef\x8d\x8f" // U+f34f +#define ICON_FK_HOME_ASSISTANT "\xef\x8d\x90" // U+f350 +#define ICON_FK_JAVA "\xef\x8d\x91" // U+f351 +#define ICON_FK_MARIADB "\xef\x8d\x92" // U+f352 +#define ICON_FK_MARKDOWN "\xef\x8d\x93" // U+f353 +#define ICON_FK_MYSQL "\xef\x8d\x94" // U+f354 +#define ICON_FK_NORDCAST "\xef\x8d\x95" // U+f355 +#define ICON_FK_PLUME "\xef\x8d\x96" // U+f356 +#define ICON_FK_POSTGRESQL "\xef\x8d\x97" // U+f357 +#define ICON_FK_SASS_ALT "\xef\x8d\x99" // U+f359 +#define ICON_FK_SASS "\xef\x8d\x98" // U+f358 +#define ICON_FK_SKATE "\xef\x8d\x9a" // U+f35a +#define ICON_FK_SKETCHFAB "\xef\x8d\x9b" // U+f35b +#define ICON_FK_TEX "\xef\x8d\x9c" // U+f35c +#define ICON_FK_TEXTPATTERN "\xef\x8d\x9d" // U+f35d +#define ICON_FK_UNITY "\xef\x8d\x9e" // U+f35e diff --git a/src/moon/imgui/icons/IconsMaterialDesign.h b/src/moon/imgui/icons/IconsMaterialDesign.h new file mode 100644 index 00000000..59ffa5f2 --- /dev/null +++ b/src/moon/imgui/icons/IconsMaterialDesign.h @@ -0,0 +1,939 @@ +// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ +// from https://raw.githubusercontent.com/google/material-design-icons/master/iconfont/codepoints +// for use with https://github.com/google/material-design-icons/blob/master/iconfont/MaterialIcons-Regular.ttf +#define FONT_ICON_FILE_NAME_MD "MaterialIcons-Regular.ttf" + +#define ICON_MIN_MD 0xe000 +#define ICON_MAX_MD 0xeb4c +#define ICON_MD_3D_ROTATION "\xee\xa1\x8d" +#define ICON_MD_AC_UNIT "\xee\xac\xbb" +#define ICON_MD_ACCESS_ALARM "\xee\x86\x90" +#define ICON_MD_ACCESS_ALARMS "\xee\x86\x91" +#define ICON_MD_ACCESS_TIME "\xee\x86\x92" +#define ICON_MD_ACCESSIBILITY "\xee\xa1\x8e" +#define ICON_MD_ACCESSIBLE "\xee\xa4\x94" +#define ICON_MD_ACCOUNT_BALANCE "\xee\xa1\x8f" +#define ICON_MD_ACCOUNT_BALANCE_WALLET "\xee\xa1\x90" +#define ICON_MD_ACCOUNT_BOX "\xee\xa1\x91" +#define ICON_MD_ACCOUNT_CIRCLE "\xee\xa1\x93" +#define ICON_MD_ADB "\xee\x98\x8e" +#define ICON_MD_ADD "\xee\x85\x85" +#define ICON_MD_ADD_A_PHOTO "\xee\x90\xb9" +#define ICON_MD_ADD_ALARM "\xee\x86\x93" +#define ICON_MD_ADD_ALERT "\xee\x80\x83" +#define ICON_MD_ADD_BOX "\xee\x85\x86" +#define ICON_MD_ADD_CIRCLE "\xee\x85\x87" +#define ICON_MD_ADD_CIRCLE_OUTLINE "\xee\x85\x88" +#define ICON_MD_ADD_LOCATION "\xee\x95\xa7" +#define ICON_MD_ADD_SHOPPING_CART "\xee\xa1\x94" +#define ICON_MD_ADD_TO_PHOTOS "\xee\x8e\x9d" +#define ICON_MD_ADD_TO_QUEUE "\xee\x81\x9c" +#define ICON_MD_ADJUST "\xee\x8e\x9e" +#define ICON_MD_AIRLINE_SEAT_FLAT "\xee\x98\xb0" +#define ICON_MD_AIRLINE_SEAT_FLAT_ANGLED "\xee\x98\xb1" +#define ICON_MD_AIRLINE_SEAT_INDIVIDUAL_SUITE "\xee\x98\xb2" +#define ICON_MD_AIRLINE_SEAT_LEGROOM_EXTRA "\xee\x98\xb3" +#define ICON_MD_AIRLINE_SEAT_LEGROOM_NORMAL "\xee\x98\xb4" +#define ICON_MD_AIRLINE_SEAT_LEGROOM_REDUCED "\xee\x98\xb5" +#define ICON_MD_AIRLINE_SEAT_RECLINE_EXTRA "\xee\x98\xb6" +#define ICON_MD_AIRLINE_SEAT_RECLINE_NORMAL "\xee\x98\xb7" +#define ICON_MD_AIRPLANEMODE_ACTIVE "\xee\x86\x95" +#define ICON_MD_AIRPLANEMODE_INACTIVE "\xee\x86\x94" +#define ICON_MD_AIRPLAY "\xee\x81\x95" +#define ICON_MD_AIRPORT_SHUTTLE "\xee\xac\xbc" +#define ICON_MD_ALARM "\xee\xa1\x95" +#define ICON_MD_ALARM_ADD "\xee\xa1\x96" +#define ICON_MD_ALARM_OFF "\xee\xa1\x97" +#define ICON_MD_ALARM_ON "\xee\xa1\x98" +#define ICON_MD_ALBUM "\xee\x80\x99" +#define ICON_MD_ALL_INCLUSIVE "\xee\xac\xbd" +#define ICON_MD_ALL_OUT "\xee\xa4\x8b" +#define ICON_MD_ANDROID "\xee\xa1\x99" +#define ICON_MD_ANNOUNCEMENT "\xee\xa1\x9a" +#define ICON_MD_APPS "\xee\x97\x83" +#define ICON_MD_ARCHIVE "\xee\x85\x89" +#define ICON_MD_ARROW_BACK "\xee\x97\x84" +#define ICON_MD_ARROW_DOWNWARD "\xee\x97\x9b" +#define ICON_MD_ARROW_DROP_DOWN "\xee\x97\x85" +#define ICON_MD_ARROW_DROP_DOWN_CIRCLE "\xee\x97\x86" +#define ICON_MD_ARROW_DROP_UP "\xee\x97\x87" +#define ICON_MD_ARROW_FORWARD "\xee\x97\x88" +#define ICON_MD_ARROW_UPWARD "\xee\x97\x98" +#define ICON_MD_ART_TRACK "\xee\x81\xa0" +#define ICON_MD_ASPECT_RATIO "\xee\xa1\x9b" +#define ICON_MD_ASSESSMENT "\xee\xa1\x9c" +#define ICON_MD_ASSIGNMENT "\xee\xa1\x9d" +#define ICON_MD_ASSIGNMENT_IND "\xee\xa1\x9e" +#define ICON_MD_ASSIGNMENT_LATE "\xee\xa1\x9f" +#define ICON_MD_ASSIGNMENT_RETURN "\xee\xa1\xa0" +#define ICON_MD_ASSIGNMENT_RETURNED "\xee\xa1\xa1" +#define ICON_MD_ASSIGNMENT_TURNED_IN "\xee\xa1\xa2" +#define ICON_MD_ASSISTANT "\xee\x8e\x9f" +#define ICON_MD_ASSISTANT_PHOTO "\xee\x8e\xa0" +#define ICON_MD_ATTACH_FILE "\xee\x88\xa6" +#define ICON_MD_ATTACH_MONEY "\xee\x88\xa7" +#define ICON_MD_ATTACHMENT "\xee\x8a\xbc" +#define ICON_MD_AUDIOTRACK "\xee\x8e\xa1" +#define ICON_MD_AUTORENEW "\xee\xa1\xa3" +#define ICON_MD_AV_TIMER "\xee\x80\x9b" +#define ICON_MD_BACKSPACE "\xee\x85\x8a" +#define ICON_MD_BACKUP "\xee\xa1\xa4" +#define ICON_MD_BATTERY_ALERT "\xee\x86\x9c" +#define ICON_MD_BATTERY_CHARGING_FULL "\xee\x86\xa3" +#define ICON_MD_BATTERY_FULL "\xee\x86\xa4" +#define ICON_MD_BATTERY_STD "\xee\x86\xa5" +#define ICON_MD_BATTERY_UNKNOWN "\xee\x86\xa6" +#define ICON_MD_BEACH_ACCESS "\xee\xac\xbe" +#define ICON_MD_BEENHERE "\xee\x94\xad" +#define ICON_MD_BLOCK "\xee\x85\x8b" +#define ICON_MD_BLUETOOTH "\xee\x86\xa7" +#define ICON_MD_BLUETOOTH_AUDIO "\xee\x98\x8f" +#define ICON_MD_BLUETOOTH_CONNECTED "\xee\x86\xa8" +#define ICON_MD_BLUETOOTH_DISABLED "\xee\x86\xa9" +#define ICON_MD_BLUETOOTH_SEARCHING "\xee\x86\xaa" +#define ICON_MD_BLUR_CIRCULAR "\xee\x8e\xa2" +#define ICON_MD_BLUR_LINEAR "\xee\x8e\xa3" +#define ICON_MD_BLUR_OFF "\xee\x8e\xa4" +#define ICON_MD_BLUR_ON "\xee\x8e\xa5" +#define ICON_MD_BOOK "\xee\xa1\xa5" +#define ICON_MD_BOOKMARK "\xee\xa1\xa6" +#define ICON_MD_BOOKMARK_BORDER "\xee\xa1\xa7" +#define ICON_MD_BORDER_ALL "\xee\x88\xa8" +#define ICON_MD_BORDER_BOTTOM "\xee\x88\xa9" +#define ICON_MD_BORDER_CLEAR "\xee\x88\xaa" +#define ICON_MD_BORDER_COLOR "\xee\x88\xab" +#define ICON_MD_BORDER_HORIZONTAL "\xee\x88\xac" +#define ICON_MD_BORDER_INNER "\xee\x88\xad" +#define ICON_MD_BORDER_LEFT "\xee\x88\xae" +#define ICON_MD_BORDER_OUTER "\xee\x88\xaf" +#define ICON_MD_BORDER_RIGHT "\xee\x88\xb0" +#define ICON_MD_BORDER_STYLE "\xee\x88\xb1" +#define ICON_MD_BORDER_TOP "\xee\x88\xb2" +#define ICON_MD_BORDER_VERTICAL "\xee\x88\xb3" +#define ICON_MD_BRANDING_WATERMARK "\xee\x81\xab" +#define ICON_MD_BRIGHTNESS_1 "\xee\x8e\xa6" +#define ICON_MD_BRIGHTNESS_2 "\xee\x8e\xa7" +#define ICON_MD_BRIGHTNESS_3 "\xee\x8e\xa8" +#define ICON_MD_BRIGHTNESS_4 "\xee\x8e\xa9" +#define ICON_MD_BRIGHTNESS_5 "\xee\x8e\xaa" +#define ICON_MD_BRIGHTNESS_6 "\xee\x8e\xab" +#define ICON_MD_BRIGHTNESS_7 "\xee\x8e\xac" +#define ICON_MD_BRIGHTNESS_AUTO "\xee\x86\xab" +#define ICON_MD_BRIGHTNESS_HIGH "\xee\x86\xac" +#define ICON_MD_BRIGHTNESS_LOW "\xee\x86\xad" +#define ICON_MD_BRIGHTNESS_MEDIUM "\xee\x86\xae" +#define ICON_MD_BROKEN_IMAGE "\xee\x8e\xad" +#define ICON_MD_BRUSH "\xee\x8e\xae" +#define ICON_MD_BUBBLE_CHART "\xee\x9b\x9d" +#define ICON_MD_BUG_REPORT "\xee\xa1\xa8" +#define ICON_MD_BUILD "\xee\xa1\xa9" +#define ICON_MD_BURST_MODE "\xee\x90\xbc" +#define ICON_MD_BUSINESS "\xee\x82\xaf" +#define ICON_MD_BUSINESS_CENTER "\xee\xac\xbf" +#define ICON_MD_CACHED "\xee\xa1\xaa" +#define ICON_MD_CAKE "\xee\x9f\xa9" +#define ICON_MD_CALL "\xee\x82\xb0" +#define ICON_MD_CALL_END "\xee\x82\xb1" +#define ICON_MD_CALL_MADE "\xee\x82\xb2" +#define ICON_MD_CALL_MERGE "\xee\x82\xb3" +#define ICON_MD_CALL_MISSED "\xee\x82\xb4" +#define ICON_MD_CALL_MISSED_OUTGOING "\xee\x83\xa4" +#define ICON_MD_CALL_RECEIVED "\xee\x82\xb5" +#define ICON_MD_CALL_SPLIT "\xee\x82\xb6" +#define ICON_MD_CALL_TO_ACTION "\xee\x81\xac" +#define ICON_MD_CAMERA "\xee\x8e\xaf" +#define ICON_MD_CAMERA_ALT "\xee\x8e\xb0" +#define ICON_MD_CAMERA_ENHANCE "\xee\xa3\xbc" +#define ICON_MD_CAMERA_FRONT "\xee\x8e\xb1" +#define ICON_MD_CAMERA_REAR "\xee\x8e\xb2" +#define ICON_MD_CAMERA_ROLL "\xee\x8e\xb3" +#define ICON_MD_CANCEL "\xee\x97\x89" +#define ICON_MD_CARD_GIFTCARD "\xee\xa3\xb6" +#define ICON_MD_CARD_MEMBERSHIP "\xee\xa3\xb7" +#define ICON_MD_CARD_TRAVEL "\xee\xa3\xb8" +#define ICON_MD_CASINO "\xee\xad\x80" +#define ICON_MD_CAST "\xee\x8c\x87" +#define ICON_MD_CAST_CONNECTED "\xee\x8c\x88" +#define ICON_MD_CENTER_FOCUS_STRONG "\xee\x8e\xb4" +#define ICON_MD_CENTER_FOCUS_WEAK "\xee\x8e\xb5" +#define ICON_MD_CHANGE_HISTORY "\xee\xa1\xab" +#define ICON_MD_CHAT "\xee\x82\xb7" +#define ICON_MD_CHAT_BUBBLE "\xee\x83\x8a" +#define ICON_MD_CHAT_BUBBLE_OUTLINE "\xee\x83\x8b" +#define ICON_MD_CHECK "\xee\x97\x8a" +#define ICON_MD_CHECK_BOX "\xee\xa0\xb4" +#define ICON_MD_CHECK_BOX_OUTLINE_BLANK "\xee\xa0\xb5" +#define ICON_MD_CHECK_CIRCLE "\xee\xa1\xac" +#define ICON_MD_CHEVRON_LEFT "\xee\x97\x8b" +#define ICON_MD_CHEVRON_RIGHT "\xee\x97\x8c" +#define ICON_MD_CHILD_CARE "\xee\xad\x81" +#define ICON_MD_CHILD_FRIENDLY "\xee\xad\x82" +#define ICON_MD_CHROME_READER_MODE "\xee\xa1\xad" +#define ICON_MD_CLASS "\xee\xa1\xae" +#define ICON_MD_CLEAR "\xee\x85\x8c" +#define ICON_MD_CLEAR_ALL "\xee\x82\xb8" +#define ICON_MD_CLOSE "\xee\x97\x8d" +#define ICON_MD_CLOSED_CAPTION "\xee\x80\x9c" +#define ICON_MD_CLOUD "\xee\x8a\xbd" +#define ICON_MD_CLOUD_CIRCLE "\xee\x8a\xbe" +#define ICON_MD_CLOUD_DONE "\xee\x8a\xbf" +#define ICON_MD_CLOUD_DOWNLOAD "\xee\x8b\x80" +#define ICON_MD_CLOUD_OFF "\xee\x8b\x81" +#define ICON_MD_CLOUD_QUEUE "\xee\x8b\x82" +#define ICON_MD_CLOUD_UPLOAD "\xee\x8b\x83" +#define ICON_MD_CODE "\xee\xa1\xaf" +#define ICON_MD_COLLECTIONS "\xee\x8e\xb6" +#define ICON_MD_COLLECTIONS_BOOKMARK "\xee\x90\xb1" +#define ICON_MD_COLOR_LENS "\xee\x8e\xb7" +#define ICON_MD_COLORIZE "\xee\x8e\xb8" +#define ICON_MD_COMMENT "\xee\x82\xb9" +#define ICON_MD_COMPARE "\xee\x8e\xb9" +#define ICON_MD_COMPARE_ARROWS "\xee\xa4\x95" +#define ICON_MD_COMPUTER "\xee\x8c\x8a" +#define ICON_MD_CONFIRMATION_NUMBER "\xee\x98\xb8" +#define ICON_MD_CONTACT_MAIL "\xee\x83\x90" +#define ICON_MD_CONTACT_PHONE "\xee\x83\x8f" +#define ICON_MD_CONTACTS "\xee\x82\xba" +#define ICON_MD_CONTENT_COPY "\xee\x85\x8d" +#define ICON_MD_CONTENT_CUT "\xee\x85\x8e" +#define ICON_MD_CONTENT_PASTE "\xee\x85\x8f" +#define ICON_MD_CONTROL_POINT "\xee\x8e\xba" +#define ICON_MD_CONTROL_POINT_DUPLICATE "\xee\x8e\xbb" +#define ICON_MD_COPYRIGHT "\xee\xa4\x8c" +#define ICON_MD_CREATE "\xee\x85\x90" +#define ICON_MD_CREATE_NEW_FOLDER "\xee\x8b\x8c" +#define ICON_MD_CREDIT_CARD "\xee\xa1\xb0" +#define ICON_MD_CROP "\xee\x8e\xbe" +#define ICON_MD_CROP_16_9 "\xee\x8e\xbc" +#define ICON_MD_CROP_3_2 "\xee\x8e\xbd" +#define ICON_MD_CROP_5_4 "\xee\x8e\xbf" +#define ICON_MD_CROP_7_5 "\xee\x8f\x80" +#define ICON_MD_CROP_DIN "\xee\x8f\x81" +#define ICON_MD_CROP_FREE "\xee\x8f\x82" +#define ICON_MD_CROP_LANDSCAPE "\xee\x8f\x83" +#define ICON_MD_CROP_ORIGINAL "\xee\x8f\x84" +#define ICON_MD_CROP_PORTRAIT "\xee\x8f\x85" +#define ICON_MD_CROP_ROTATE "\xee\x90\xb7" +#define ICON_MD_CROP_SQUARE "\xee\x8f\x86" +#define ICON_MD_DASHBOARD "\xee\xa1\xb1" +#define ICON_MD_DATA_USAGE "\xee\x86\xaf" +#define ICON_MD_DATE_RANGE "\xee\xa4\x96" +#define ICON_MD_DEHAZE "\xee\x8f\x87" +#define ICON_MD_DELETE "\xee\xa1\xb2" +#define ICON_MD_DELETE_FOREVER "\xee\xa4\xab" +#define ICON_MD_DELETE_SWEEP "\xee\x85\xac" +#define ICON_MD_DESCRIPTION "\xee\xa1\xb3" +#define ICON_MD_DESKTOP_MAC "\xee\x8c\x8b" +#define ICON_MD_DESKTOP_WINDOWS "\xee\x8c\x8c" +#define ICON_MD_DETAILS "\xee\x8f\x88" +#define ICON_MD_DEVELOPER_BOARD "\xee\x8c\x8d" +#define ICON_MD_DEVELOPER_MODE "\xee\x86\xb0" +#define ICON_MD_DEVICE_HUB "\xee\x8c\xb5" +#define ICON_MD_DEVICES "\xee\x86\xb1" +#define ICON_MD_DEVICES_OTHER "\xee\x8c\xb7" +#define ICON_MD_DIALER_SIP "\xee\x82\xbb" +#define ICON_MD_DIALPAD "\xee\x82\xbc" +#define ICON_MD_DIRECTIONS "\xee\x94\xae" +#define ICON_MD_DIRECTIONS_BIKE "\xee\x94\xaf" +#define ICON_MD_DIRECTIONS_BOAT "\xee\x94\xb2" +#define ICON_MD_DIRECTIONS_BUS "\xee\x94\xb0" +#define ICON_MD_DIRECTIONS_CAR "\xee\x94\xb1" +#define ICON_MD_DIRECTIONS_RAILWAY "\xee\x94\xb4" +#define ICON_MD_DIRECTIONS_RUN "\xee\x95\xa6" +#define ICON_MD_DIRECTIONS_SUBWAY "\xee\x94\xb3" +#define ICON_MD_DIRECTIONS_TRANSIT "\xee\x94\xb5" +#define ICON_MD_DIRECTIONS_WALK "\xee\x94\xb6" +#define ICON_MD_DISC_FULL "\xee\x98\x90" +#define ICON_MD_DNS "\xee\xa1\xb5" +#define ICON_MD_DO_NOT_DISTURB "\xee\x98\x92" +#define ICON_MD_DO_NOT_DISTURB_ALT "\xee\x98\x91" +#define ICON_MD_DO_NOT_DISTURB_OFF "\xee\x99\x83" +#define ICON_MD_DO_NOT_DISTURB_ON "\xee\x99\x84" +#define ICON_MD_DOCK "\xee\x8c\x8e" +#define ICON_MD_DOMAIN "\xee\x9f\xae" +#define ICON_MD_DONE "\xee\xa1\xb6" +#define ICON_MD_DONE_ALL "\xee\xa1\xb7" +#define ICON_MD_DONUT_LARGE "\xee\xa4\x97" +#define ICON_MD_DONUT_SMALL "\xee\xa4\x98" +#define ICON_MD_DRAFTS "\xee\x85\x91" +#define ICON_MD_DRAG_HANDLE "\xee\x89\x9d" +#define ICON_MD_DRIVE_ETA "\xee\x98\x93" +#define ICON_MD_DVR "\xee\x86\xb2" +#define ICON_MD_EDIT "\xee\x8f\x89" +#define ICON_MD_EDIT_LOCATION "\xee\x95\xa8" +#define ICON_MD_EJECT "\xee\xa3\xbb" +#define ICON_MD_EMAIL "\xee\x82\xbe" +#define ICON_MD_ENHANCED_ENCRYPTION "\xee\x98\xbf" +#define ICON_MD_EQUALIZER "\xee\x80\x9d" +#define ICON_MD_ERROR "\xee\x80\x80" +#define ICON_MD_ERROR_OUTLINE "\xee\x80\x81" +#define ICON_MD_EURO_SYMBOL "\xee\xa4\xa6" +#define ICON_MD_EV_STATION "\xee\x95\xad" +#define ICON_MD_EVENT "\xee\xa1\xb8" +#define ICON_MD_EVENT_AVAILABLE "\xee\x98\x94" +#define ICON_MD_EVENT_BUSY "\xee\x98\x95" +#define ICON_MD_EVENT_NOTE "\xee\x98\x96" +#define ICON_MD_EVENT_SEAT "\xee\xa4\x83" +#define ICON_MD_EXIT_TO_APP "\xee\xa1\xb9" +#define ICON_MD_EXPAND_LESS "\xee\x97\x8e" +#define ICON_MD_EXPAND_MORE "\xee\x97\x8f" +#define ICON_MD_EXPLICIT "\xee\x80\x9e" +#define ICON_MD_EXPLORE "\xee\xa1\xba" +#define ICON_MD_EXPOSURE "\xee\x8f\x8a" +#define ICON_MD_EXPOSURE_NEG_1 "\xee\x8f\x8b" +#define ICON_MD_EXPOSURE_NEG_2 "\xee\x8f\x8c" +#define ICON_MD_EXPOSURE_PLUS_1 "\xee\x8f\x8d" +#define ICON_MD_EXPOSURE_PLUS_2 "\xee\x8f\x8e" +#define ICON_MD_EXPOSURE_ZERO "\xee\x8f\x8f" +#define ICON_MD_EXTENSION "\xee\xa1\xbb" +#define ICON_MD_FACE "\xee\xa1\xbc" +#define ICON_MD_FAST_FORWARD "\xee\x80\x9f" +#define ICON_MD_FAST_REWIND "\xee\x80\xa0" +#define ICON_MD_FAVORITE "\xee\xa1\xbd" +#define ICON_MD_FAVORITE_BORDER "\xee\xa1\xbe" +#define ICON_MD_FEATURED_PLAY_LIST "\xee\x81\xad" +#define ICON_MD_FEATURED_VIDEO "\xee\x81\xae" +#define ICON_MD_FEEDBACK "\xee\xa1\xbf" +#define ICON_MD_FIBER_DVR "\xee\x81\x9d" +#define ICON_MD_FIBER_MANUAL_RECORD "\xee\x81\xa1" +#define ICON_MD_FIBER_NEW "\xee\x81\x9e" +#define ICON_MD_FIBER_PIN "\xee\x81\xaa" +#define ICON_MD_FIBER_SMART_RECORD "\xee\x81\xa2" +#define ICON_MD_FILE_DOWNLOAD "\xee\x8b\x84" +#define ICON_MD_FILE_UPLOAD "\xee\x8b\x86" +#define ICON_MD_FILTER "\xee\x8f\x93" +#define ICON_MD_FILTER_1 "\xee\x8f\x90" +#define ICON_MD_FILTER_2 "\xee\x8f\x91" +#define ICON_MD_FILTER_3 "\xee\x8f\x92" +#define ICON_MD_FILTER_4 "\xee\x8f\x94" +#define ICON_MD_FILTER_5 "\xee\x8f\x95" +#define ICON_MD_FILTER_6 "\xee\x8f\x96" +#define ICON_MD_FILTER_7 "\xee\x8f\x97" +#define ICON_MD_FILTER_8 "\xee\x8f\x98" +#define ICON_MD_FILTER_9 "\xee\x8f\x99" +#define ICON_MD_FILTER_9_PLUS "\xee\x8f\x9a" +#define ICON_MD_FILTER_B_AND_W "\xee\x8f\x9b" +#define ICON_MD_FILTER_CENTER_FOCUS "\xee\x8f\x9c" +#define ICON_MD_FILTER_DRAMA "\xee\x8f\x9d" +#define ICON_MD_FILTER_FRAMES "\xee\x8f\x9e" +#define ICON_MD_FILTER_HDR "\xee\x8f\x9f" +#define ICON_MD_FILTER_LIST "\xee\x85\x92" +#define ICON_MD_FILTER_NONE "\xee\x8f\xa0" +#define ICON_MD_FILTER_TILT_SHIFT "\xee\x8f\xa2" +#define ICON_MD_FILTER_VINTAGE "\xee\x8f\xa3" +#define ICON_MD_FIND_IN_PAGE "\xee\xa2\x80" +#define ICON_MD_FIND_REPLACE "\xee\xa2\x81" +#define ICON_MD_FINGERPRINT "\xee\xa4\x8d" +#define ICON_MD_FIRST_PAGE "\xee\x97\x9c" +#define ICON_MD_FITNESS_CENTER "\xee\xad\x83" +#define ICON_MD_FLAG "\xee\x85\x93" +#define ICON_MD_FLARE "\xee\x8f\xa4" +#define ICON_MD_FLASH_AUTO "\xee\x8f\xa5" +#define ICON_MD_FLASH_OFF "\xee\x8f\xa6" +#define ICON_MD_FLASH_ON "\xee\x8f\xa7" +#define ICON_MD_FLIGHT "\xee\x94\xb9" +#define ICON_MD_FLIGHT_LAND "\xee\xa4\x84" +#define ICON_MD_FLIGHT_TAKEOFF "\xee\xa4\x85" +#define ICON_MD_FLIP "\xee\x8f\xa8" +#define ICON_MD_FLIP_TO_BACK "\xee\xa2\x82" +#define ICON_MD_FLIP_TO_FRONT "\xee\xa2\x83" +#define ICON_MD_FOLDER "\xee\x8b\x87" +#define ICON_MD_FOLDER_OPEN "\xee\x8b\x88" +#define ICON_MD_FOLDER_SHARED "\xee\x8b\x89" +#define ICON_MD_FOLDER_SPECIAL "\xee\x98\x97" +#define ICON_MD_FONT_DOWNLOAD "\xee\x85\xa7" +#define ICON_MD_FORMAT_ALIGN_CENTER "\xee\x88\xb4" +#define ICON_MD_FORMAT_ALIGN_JUSTIFY "\xee\x88\xb5" +#define ICON_MD_FORMAT_ALIGN_LEFT "\xee\x88\xb6" +#define ICON_MD_FORMAT_ALIGN_RIGHT "\xee\x88\xb7" +#define ICON_MD_FORMAT_BOLD "\xee\x88\xb8" +#define ICON_MD_FORMAT_CLEAR "\xee\x88\xb9" +#define ICON_MD_FORMAT_COLOR_FILL "\xee\x88\xba" +#define ICON_MD_FORMAT_COLOR_RESET "\xee\x88\xbb" +#define ICON_MD_FORMAT_COLOR_TEXT "\xee\x88\xbc" +#define ICON_MD_FORMAT_INDENT_DECREASE "\xee\x88\xbd" +#define ICON_MD_FORMAT_INDENT_INCREASE "\xee\x88\xbe" +#define ICON_MD_FORMAT_ITALIC "\xee\x88\xbf" +#define ICON_MD_FORMAT_LINE_SPACING "\xee\x89\x80" +#define ICON_MD_FORMAT_LIST_BULLETED "\xee\x89\x81" +#define ICON_MD_FORMAT_LIST_NUMBERED "\xee\x89\x82" +#define ICON_MD_FORMAT_PAINT "\xee\x89\x83" +#define ICON_MD_FORMAT_QUOTE "\xee\x89\x84" +#define ICON_MD_FORMAT_SHAPES "\xee\x89\x9e" +#define ICON_MD_FORMAT_SIZE "\xee\x89\x85" +#define ICON_MD_FORMAT_STRIKETHROUGH "\xee\x89\x86" +#define ICON_MD_FORMAT_TEXTDIRECTION_L_TO_R "\xee\x89\x87" +#define ICON_MD_FORMAT_TEXTDIRECTION_R_TO_L "\xee\x89\x88" +#define ICON_MD_FORMAT_UNDERLINED "\xee\x89\x89" +#define ICON_MD_FORUM "\xee\x82\xbf" +#define ICON_MD_FORWARD "\xee\x85\x94" +#define ICON_MD_FORWARD_10 "\xee\x81\x96" +#define ICON_MD_FORWARD_30 "\xee\x81\x97" +#define ICON_MD_FORWARD_5 "\xee\x81\x98" +#define ICON_MD_FREE_BREAKFAST "\xee\xad\x84" +#define ICON_MD_FULLSCREEN "\xee\x97\x90" +#define ICON_MD_FULLSCREEN_EXIT "\xee\x97\x91" +#define ICON_MD_FUNCTIONS "\xee\x89\x8a" +#define ICON_MD_G_TRANSLATE "\xee\xa4\xa7" +#define ICON_MD_GAMEPAD "\xee\x8c\x8f" +#define ICON_MD_GAMES "\xee\x80\xa1" +#define ICON_MD_GAVEL "\xee\xa4\x8e" +#define ICON_MD_GESTURE "\xee\x85\x95" +#define ICON_MD_GET_APP "\xee\xa2\x84" +#define ICON_MD_GIF "\xee\xa4\x88" +#define ICON_MD_GOLF_COURSE "\xee\xad\x85" +#define ICON_MD_GPS_FIXED "\xee\x86\xb3" +#define ICON_MD_GPS_NOT_FIXED "\xee\x86\xb4" +#define ICON_MD_GPS_OFF "\xee\x86\xb5" +#define ICON_MD_GRADE "\xee\xa2\x85" +#define ICON_MD_GRADIENT "\xee\x8f\xa9" +#define ICON_MD_GRAIN "\xee\x8f\xaa" +#define ICON_MD_GRAPHIC_EQ "\xee\x86\xb8" +#define ICON_MD_GRID_OFF "\xee\x8f\xab" +#define ICON_MD_GRID_ON "\xee\x8f\xac" +#define ICON_MD_GROUP "\xee\x9f\xaf" +#define ICON_MD_GROUP_ADD "\xee\x9f\xb0" +#define ICON_MD_GROUP_WORK "\xee\xa2\x86" +#define ICON_MD_HD "\xee\x81\x92" +#define ICON_MD_HDR_OFF "\xee\x8f\xad" +#define ICON_MD_HDR_ON "\xee\x8f\xae" +#define ICON_MD_HDR_STRONG "\xee\x8f\xb1" +#define ICON_MD_HDR_WEAK "\xee\x8f\xb2" +#define ICON_MD_HEADSET "\xee\x8c\x90" +#define ICON_MD_HEADSET_MIC "\xee\x8c\x91" +#define ICON_MD_HEALING "\xee\x8f\xb3" +#define ICON_MD_HEARING "\xee\x80\xa3" +#define ICON_MD_HELP "\xee\xa2\x87" +#define ICON_MD_HELP_OUTLINE "\xee\xa3\xbd" +#define ICON_MD_HIGH_QUALITY "\xee\x80\xa4" +#define ICON_MD_HIGHLIGHT "\xee\x89\x9f" +#define ICON_MD_HIGHLIGHT_OFF "\xee\xa2\x88" +#define ICON_MD_HISTORY "\xee\xa2\x89" +#define ICON_MD_HOME "\xee\xa2\x8a" +#define ICON_MD_HOT_TUB "\xee\xad\x86" +#define ICON_MD_HOTEL "\xee\x94\xba" +#define ICON_MD_HOURGLASS_EMPTY "\xee\xa2\x8b" +#define ICON_MD_HOURGLASS_FULL "\xee\xa2\x8c" +#define ICON_MD_HTTP "\xee\xa4\x82" +#define ICON_MD_HTTPS "\xee\xa2\x8d" +#define ICON_MD_IMAGE "\xee\x8f\xb4" +#define ICON_MD_IMAGE_ASPECT_RATIO "\xee\x8f\xb5" +#define ICON_MD_IMPORT_CONTACTS "\xee\x83\xa0" +#define ICON_MD_IMPORT_EXPORT "\xee\x83\x83" +#define ICON_MD_IMPORTANT_DEVICES "\xee\xa4\x92" +#define ICON_MD_INBOX "\xee\x85\x96" +#define ICON_MD_INDETERMINATE_CHECK_BOX "\xee\xa4\x89" +#define ICON_MD_INFO "\xee\xa2\x8e" +#define ICON_MD_INFO_OUTLINE "\xee\xa2\x8f" +#define ICON_MD_INPUT "\xee\xa2\x90" +#define ICON_MD_INSERT_CHART "\xee\x89\x8b" +#define ICON_MD_INSERT_COMMENT "\xee\x89\x8c" +#define ICON_MD_INSERT_DRIVE_FILE "\xee\x89\x8d" +#define ICON_MD_INSERT_EMOTICON "\xee\x89\x8e" +#define ICON_MD_INSERT_INVITATION "\xee\x89\x8f" +#define ICON_MD_INSERT_LINK "\xee\x89\x90" +#define ICON_MD_INSERT_PHOTO "\xee\x89\x91" +#define ICON_MD_INVERT_COLORS "\xee\xa2\x91" +#define ICON_MD_INVERT_COLORS_OFF "\xee\x83\x84" +#define ICON_MD_ISO "\xee\x8f\xb6" +#define ICON_MD_KEYBOARD "\xee\x8c\x92" +#define ICON_MD_KEYBOARD_ARROW_DOWN "\xee\x8c\x93" +#define ICON_MD_KEYBOARD_ARROW_LEFT "\xee\x8c\x94" +#define ICON_MD_KEYBOARD_ARROW_RIGHT "\xee\x8c\x95" +#define ICON_MD_KEYBOARD_ARROW_UP "\xee\x8c\x96" +#define ICON_MD_KEYBOARD_BACKSPACE "\xee\x8c\x97" +#define ICON_MD_KEYBOARD_CAPSLOCK "\xee\x8c\x98" +#define ICON_MD_KEYBOARD_HIDE "\xee\x8c\x9a" +#define ICON_MD_KEYBOARD_RETURN "\xee\x8c\x9b" +#define ICON_MD_KEYBOARD_TAB "\xee\x8c\x9c" +#define ICON_MD_KEYBOARD_VOICE "\xee\x8c\x9d" +#define ICON_MD_KITCHEN "\xee\xad\x87" +#define ICON_MD_LABEL "\xee\xa2\x92" +#define ICON_MD_LABEL_OUTLINE "\xee\xa2\x93" +#define ICON_MD_LANDSCAPE "\xee\x8f\xb7" +#define ICON_MD_LANGUAGE "\xee\xa2\x94" +#define ICON_MD_LAPTOP "\xee\x8c\x9e" +#define ICON_MD_LAPTOP_CHROMEBOOK "\xee\x8c\x9f" +#define ICON_MD_LAPTOP_MAC "\xee\x8c\xa0" +#define ICON_MD_LAPTOP_WINDOWS "\xee\x8c\xa1" +#define ICON_MD_LAST_PAGE "\xee\x97\x9d" +#define ICON_MD_LAUNCH "\xee\xa2\x95" +#define ICON_MD_LAYERS "\xee\x94\xbb" +#define ICON_MD_LAYERS_CLEAR "\xee\x94\xbc" +#define ICON_MD_LEAK_ADD "\xee\x8f\xb8" +#define ICON_MD_LEAK_REMOVE "\xee\x8f\xb9" +#define ICON_MD_LENS "\xee\x8f\xba" +#define ICON_MD_LIBRARY_ADD "\xee\x80\xae" +#define ICON_MD_LIBRARY_BOOKS "\xee\x80\xaf" +#define ICON_MD_LIBRARY_MUSIC "\xee\x80\xb0" +#define ICON_MD_LIGHTBULB_OUTLINE "\xee\xa4\x8f" +#define ICON_MD_LINE_STYLE "\xee\xa4\x99" +#define ICON_MD_LINE_WEIGHT "\xee\xa4\x9a" +#define ICON_MD_LINEAR_SCALE "\xee\x89\xa0" +#define ICON_MD_LINK "\xee\x85\x97" +#define ICON_MD_LINKED_CAMERA "\xee\x90\xb8" +#define ICON_MD_LIST "\xee\xa2\x96" +#define ICON_MD_LIVE_HELP "\xee\x83\x86" +#define ICON_MD_LIVE_TV "\xee\x98\xb9" +#define ICON_MD_LOCAL_ACTIVITY "\xee\x94\xbf" +#define ICON_MD_LOCAL_AIRPORT "\xee\x94\xbd" +#define ICON_MD_LOCAL_ATM "\xee\x94\xbe" +#define ICON_MD_LOCAL_BAR "\xee\x95\x80" +#define ICON_MD_LOCAL_CAFE "\xee\x95\x81" +#define ICON_MD_LOCAL_CAR_WASH "\xee\x95\x82" +#define ICON_MD_LOCAL_CONVENIENCE_STORE "\xee\x95\x83" +#define ICON_MD_LOCAL_DINING "\xee\x95\x96" +#define ICON_MD_LOCAL_DRINK "\xee\x95\x84" +#define ICON_MD_LOCAL_FLORIST "\xee\x95\x85" +#define ICON_MD_LOCAL_GAS_STATION "\xee\x95\x86" +#define ICON_MD_LOCAL_GROCERY_STORE "\xee\x95\x87" +#define ICON_MD_LOCAL_HOSPITAL "\xee\x95\x88" +#define ICON_MD_LOCAL_HOTEL "\xee\x95\x89" +#define ICON_MD_LOCAL_LAUNDRY_SERVICE "\xee\x95\x8a" +#define ICON_MD_LOCAL_LIBRARY "\xee\x95\x8b" +#define ICON_MD_LOCAL_MALL "\xee\x95\x8c" +#define ICON_MD_LOCAL_MOVIES "\xee\x95\x8d" +#define ICON_MD_LOCAL_OFFER "\xee\x95\x8e" +#define ICON_MD_LOCAL_PARKING "\xee\x95\x8f" +#define ICON_MD_LOCAL_PHARMACY "\xee\x95\x90" +#define ICON_MD_LOCAL_PHONE "\xee\x95\x91" +#define ICON_MD_LOCAL_PIZZA "\xee\x95\x92" +#define ICON_MD_LOCAL_PLAY "\xee\x95\x93" +#define ICON_MD_LOCAL_POST_OFFICE "\xee\x95\x94" +#define ICON_MD_LOCAL_PRINTSHOP "\xee\x95\x95" +#define ICON_MD_LOCAL_SEE "\xee\x95\x97" +#define ICON_MD_LOCAL_SHIPPING "\xee\x95\x98" +#define ICON_MD_LOCAL_TAXI "\xee\x95\x99" +#define ICON_MD_LOCATION_CITY "\xee\x9f\xb1" +#define ICON_MD_LOCATION_DISABLED "\xee\x86\xb6" +#define ICON_MD_LOCATION_OFF "\xee\x83\x87" +#define ICON_MD_LOCATION_ON "\xee\x83\x88" +#define ICON_MD_LOCATION_SEARCHING "\xee\x86\xb7" +#define ICON_MD_LOCK "\xee\xa2\x97" +#define ICON_MD_LOCK_OPEN "\xee\xa2\x98" +#define ICON_MD_LOCK_OUTLINE "\xee\xa2\x99" +#define ICON_MD_LOOKS "\xee\x8f\xbc" +#define ICON_MD_LOOKS_3 "\xee\x8f\xbb" +#define ICON_MD_LOOKS_4 "\xee\x8f\xbd" +#define ICON_MD_LOOKS_5 "\xee\x8f\xbe" +#define ICON_MD_LOOKS_6 "\xee\x8f\xbf" +#define ICON_MD_LOOKS_ONE "\xee\x90\x80" +#define ICON_MD_LOOKS_TWO "\xee\x90\x81" +#define ICON_MD_LOOP "\xee\x80\xa8" +#define ICON_MD_LOUPE "\xee\x90\x82" +#define ICON_MD_LOW_PRIORITY "\xee\x85\xad" +#define ICON_MD_LOYALTY "\xee\xa2\x9a" +#define ICON_MD_MAIL "\xee\x85\x98" +#define ICON_MD_MAIL_OUTLINE "\xee\x83\xa1" +#define ICON_MD_MAP "\xee\x95\x9b" +#define ICON_MD_MARKUNREAD "\xee\x85\x99" +#define ICON_MD_MARKUNREAD_MAILBOX "\xee\xa2\x9b" +#define ICON_MD_MEMORY "\xee\x8c\xa2" +#define ICON_MD_MENU "\xee\x97\x92" +#define ICON_MD_MERGE_TYPE "\xee\x89\x92" +#define ICON_MD_MESSAGE "\xee\x83\x89" +#define ICON_MD_MIC "\xee\x80\xa9" +#define ICON_MD_MIC_NONE "\xee\x80\xaa" +#define ICON_MD_MIC_OFF "\xee\x80\xab" +#define ICON_MD_MMS "\xee\x98\x98" +#define ICON_MD_MODE_COMMENT "\xee\x89\x93" +#define ICON_MD_MODE_EDIT "\xee\x89\x94" +#define ICON_MD_MONETIZATION_ON "\xee\x89\xa3" +#define ICON_MD_MONEY_OFF "\xee\x89\x9c" +#define ICON_MD_MONOCHROME_PHOTOS "\xee\x90\x83" +#define ICON_MD_MOOD "\xee\x9f\xb2" +#define ICON_MD_MOOD_BAD "\xee\x9f\xb3" +#define ICON_MD_MORE "\xee\x98\x99" +#define ICON_MD_MORE_HORIZ "\xee\x97\x93" +#define ICON_MD_MORE_VERT "\xee\x97\x94" +#define ICON_MD_MOTORCYCLE "\xee\xa4\x9b" +#define ICON_MD_MOUSE "\xee\x8c\xa3" +#define ICON_MD_MOVE_TO_INBOX "\xee\x85\xa8" +#define ICON_MD_MOVIE "\xee\x80\xac" +#define ICON_MD_MOVIE_CREATION "\xee\x90\x84" +#define ICON_MD_MOVIE_FILTER "\xee\x90\xba" +#define ICON_MD_MULTILINE_CHART "\xee\x9b\x9f" +#define ICON_MD_MUSIC_NOTE "\xee\x90\x85" +#define ICON_MD_MUSIC_VIDEO "\xee\x81\xa3" +#define ICON_MD_MY_LOCATION "\xee\x95\x9c" +#define ICON_MD_NATURE "\xee\x90\x86" +#define ICON_MD_NATURE_PEOPLE "\xee\x90\x87" +#define ICON_MD_NAVIGATE_BEFORE "\xee\x90\x88" +#define ICON_MD_NAVIGATE_NEXT "\xee\x90\x89" +#define ICON_MD_NAVIGATION "\xee\x95\x9d" +#define ICON_MD_NEAR_ME "\xee\x95\xa9" +#define ICON_MD_NETWORK_CELL "\xee\x86\xb9" +#define ICON_MD_NETWORK_CHECK "\xee\x99\x80" +#define ICON_MD_NETWORK_LOCKED "\xee\x98\x9a" +#define ICON_MD_NETWORK_WIFI "\xee\x86\xba" +#define ICON_MD_NEW_RELEASES "\xee\x80\xb1" +#define ICON_MD_NEXT_WEEK "\xee\x85\xaa" +#define ICON_MD_NFC "\xee\x86\xbb" +#define ICON_MD_NO_ENCRYPTION "\xee\x99\x81" +#define ICON_MD_NO_SIM "\xee\x83\x8c" +#define ICON_MD_NOT_INTERESTED "\xee\x80\xb3" +#define ICON_MD_NOTE "\xee\x81\xaf" +#define ICON_MD_NOTE_ADD "\xee\xa2\x9c" +#define ICON_MD_NOTIFICATIONS "\xee\x9f\xb4" +#define ICON_MD_NOTIFICATIONS_ACTIVE "\xee\x9f\xb7" +#define ICON_MD_NOTIFICATIONS_NONE "\xee\x9f\xb5" +#define ICON_MD_NOTIFICATIONS_OFF "\xee\x9f\xb6" +#define ICON_MD_NOTIFICATIONS_PAUSED "\xee\x9f\xb8" +#define ICON_MD_OFFLINE_PIN "\xee\xa4\x8a" +#define ICON_MD_ONDEMAND_VIDEO "\xee\x98\xba" +#define ICON_MD_OPACITY "\xee\xa4\x9c" +#define ICON_MD_OPEN_IN_BROWSER "\xee\xa2\x9d" +#define ICON_MD_OPEN_IN_NEW "\xee\xa2\x9e" +#define ICON_MD_OPEN_WITH "\xee\xa2\x9f" +#define ICON_MD_PAGES "\xee\x9f\xb9" +#define ICON_MD_PAGEVIEW "\xee\xa2\xa0" +#define ICON_MD_PALETTE "\xee\x90\x8a" +#define ICON_MD_PAN_TOOL "\xee\xa4\xa5" +#define ICON_MD_PANORAMA "\xee\x90\x8b" +#define ICON_MD_PANORAMA_FISH_EYE "\xee\x90\x8c" +#define ICON_MD_PANORAMA_HORIZONTAL "\xee\x90\x8d" +#define ICON_MD_PANORAMA_VERTICAL "\xee\x90\x8e" +#define ICON_MD_PANORAMA_WIDE_ANGLE "\xee\x90\x8f" +#define ICON_MD_PARTY_MODE "\xee\x9f\xba" +#define ICON_MD_PAUSE "\xee\x80\xb4" +#define ICON_MD_PAUSE_CIRCLE_FILLED "\xee\x80\xb5" +#define ICON_MD_PAUSE_CIRCLE_OUTLINE "\xee\x80\xb6" +#define ICON_MD_PAYMENT "\xee\xa2\xa1" +#define ICON_MD_PEOPLE "\xee\x9f\xbb" +#define ICON_MD_PEOPLE_OUTLINE "\xee\x9f\xbc" +#define ICON_MD_PERM_CAMERA_MIC "\xee\xa2\xa2" +#define ICON_MD_PERM_CONTACT_CALENDAR "\xee\xa2\xa3" +#define ICON_MD_PERM_DATA_SETTING "\xee\xa2\xa4" +#define ICON_MD_PERM_DEVICE_INFORMATION "\xee\xa2\xa5" +#define ICON_MD_PERM_IDENTITY "\xee\xa2\xa6" +#define ICON_MD_PERM_MEDIA "\xee\xa2\xa7" +#define ICON_MD_PERM_PHONE_MSG "\xee\xa2\xa8" +#define ICON_MD_PERM_SCAN_WIFI "\xee\xa2\xa9" +#define ICON_MD_PERSON "\xee\x9f\xbd" +#define ICON_MD_PERSON_ADD "\xee\x9f\xbe" +#define ICON_MD_PERSON_OUTLINE "\xee\x9f\xbf" +#define ICON_MD_PERSON_PIN "\xee\x95\x9a" +#define ICON_MD_PERSON_PIN_CIRCLE "\xee\x95\xaa" +#define ICON_MD_PERSONAL_VIDEO "\xee\x98\xbb" +#define ICON_MD_PETS "\xee\xa4\x9d" +#define ICON_MD_PHONE "\xee\x83\x8d" +#define ICON_MD_PHONE_ANDROID "\xee\x8c\xa4" +#define ICON_MD_PHONE_BLUETOOTH_SPEAKER "\xee\x98\x9b" +#define ICON_MD_PHONE_FORWARDED "\xee\x98\x9c" +#define ICON_MD_PHONE_IN_TALK "\xee\x98\x9d" +#define ICON_MD_PHONE_IPHONE "\xee\x8c\xa5" +#define ICON_MD_PHONE_LOCKED "\xee\x98\x9e" +#define ICON_MD_PHONE_MISSED "\xee\x98\x9f" +#define ICON_MD_PHONE_PAUSED "\xee\x98\xa0" +#define ICON_MD_PHONELINK "\xee\x8c\xa6" +#define ICON_MD_PHONELINK_ERASE "\xee\x83\x9b" +#define ICON_MD_PHONELINK_LOCK "\xee\x83\x9c" +#define ICON_MD_PHONELINK_OFF "\xee\x8c\xa7" +#define ICON_MD_PHONELINK_RING "\xee\x83\x9d" +#define ICON_MD_PHONELINK_SETUP "\xee\x83\x9e" +#define ICON_MD_PHOTO "\xee\x90\x90" +#define ICON_MD_PHOTO_ALBUM "\xee\x90\x91" +#define ICON_MD_PHOTO_CAMERA "\xee\x90\x92" +#define ICON_MD_PHOTO_FILTER "\xee\x90\xbb" +#define ICON_MD_PHOTO_LIBRARY "\xee\x90\x93" +#define ICON_MD_PHOTO_SIZE_SELECT_ACTUAL "\xee\x90\xb2" +#define ICON_MD_PHOTO_SIZE_SELECT_LARGE "\xee\x90\xb3" +#define ICON_MD_PHOTO_SIZE_SELECT_SMALL "\xee\x90\xb4" +#define ICON_MD_PICTURE_AS_PDF "\xee\x90\x95" +#define ICON_MD_PICTURE_IN_PICTURE "\xee\xa2\xaa" +#define ICON_MD_PICTURE_IN_PICTURE_ALT "\xee\xa4\x91" +#define ICON_MD_PIE_CHART "\xee\x9b\x84" +#define ICON_MD_PIE_CHART_OUTLINED "\xee\x9b\x85" +#define ICON_MD_PIN_DROP "\xee\x95\x9e" +#define ICON_MD_PLACE "\xee\x95\x9f" +#define ICON_MD_PLAY_ARROW "\xee\x80\xb7" +#define ICON_MD_PLAY_CIRCLE_FILLED "\xee\x80\xb8" +#define ICON_MD_PLAY_CIRCLE_OUTLINE "\xee\x80\xb9" +#define ICON_MD_PLAY_FOR_WORK "\xee\xa4\x86" +#define ICON_MD_PLAYLIST_ADD "\xee\x80\xbb" +#define ICON_MD_PLAYLIST_ADD_CHECK "\xee\x81\xa5" +#define ICON_MD_PLAYLIST_PLAY "\xee\x81\x9f" +#define ICON_MD_PLUS_ONE "\xee\xa0\x80" +#define ICON_MD_POLL "\xee\xa0\x81" +#define ICON_MD_POLYMER "\xee\xa2\xab" +#define ICON_MD_POOL "\xee\xad\x88" +#define ICON_MD_PORTABLE_WIFI_OFF "\xee\x83\x8e" +#define ICON_MD_PORTRAIT "\xee\x90\x96" +#define ICON_MD_POWER "\xee\x98\xbc" +#define ICON_MD_POWER_INPUT "\xee\x8c\xb6" +#define ICON_MD_POWER_SETTINGS_NEW "\xee\xa2\xac" +#define ICON_MD_PREGNANT_WOMAN "\xee\xa4\x9e" +#define ICON_MD_PRESENT_TO_ALL "\xee\x83\x9f" +#define ICON_MD_PRINT "\xee\xa2\xad" +#define ICON_MD_PRIORITY_HIGH "\xee\x99\x85" +#define ICON_MD_PUBLIC "\xee\xa0\x8b" +#define ICON_MD_PUBLISH "\xee\x89\x95" +#define ICON_MD_QUERY_BUILDER "\xee\xa2\xae" +#define ICON_MD_QUESTION_ANSWER "\xee\xa2\xaf" +#define ICON_MD_QUEUE "\xee\x80\xbc" +#define ICON_MD_QUEUE_MUSIC "\xee\x80\xbd" +#define ICON_MD_QUEUE_PLAY_NEXT "\xee\x81\xa6" +#define ICON_MD_RADIO "\xee\x80\xbe" +#define ICON_MD_RADIO_BUTTON_CHECKED "\xee\xa0\xb7" +#define ICON_MD_RADIO_BUTTON_UNCHECKED "\xee\xa0\xb6" +#define ICON_MD_RATE_REVIEW "\xee\x95\xa0" +#define ICON_MD_RECEIPT "\xee\xa2\xb0" +#define ICON_MD_RECENT_ACTORS "\xee\x80\xbf" +#define ICON_MD_RECORD_VOICE_OVER "\xee\xa4\x9f" +#define ICON_MD_REDEEM "\xee\xa2\xb1" +#define ICON_MD_REDO "\xee\x85\x9a" +#define ICON_MD_REFRESH "\xee\x97\x95" +#define ICON_MD_REMOVE "\xee\x85\x9b" +#define ICON_MD_REMOVE_CIRCLE "\xee\x85\x9c" +#define ICON_MD_REMOVE_CIRCLE_OUTLINE "\xee\x85\x9d" +#define ICON_MD_REMOVE_FROM_QUEUE "\xee\x81\xa7" +#define ICON_MD_REMOVE_RED_EYE "\xee\x90\x97" +#define ICON_MD_REMOVE_SHOPPING_CART "\xee\xa4\xa8" +#define ICON_MD_REORDER "\xee\xa3\xbe" +#define ICON_MD_REPEAT "\xee\x81\x80" +#define ICON_MD_REPEAT_ONE "\xee\x81\x81" +#define ICON_MD_REPLAY "\xee\x81\x82" +#define ICON_MD_REPLAY_10 "\xee\x81\x99" +#define ICON_MD_REPLAY_30 "\xee\x81\x9a" +#define ICON_MD_REPLAY_5 "\xee\x81\x9b" +#define ICON_MD_REPLY "\xee\x85\x9e" +#define ICON_MD_REPLY_ALL "\xee\x85\x9f" +#define ICON_MD_REPORT "\xee\x85\xa0" +#define ICON_MD_REPORT_PROBLEM "\xee\xa2\xb2" +#define ICON_MD_RESTAURANT "\xee\x95\xac" +#define ICON_MD_RESTAURANT_MENU "\xee\x95\xa1" +#define ICON_MD_RESTORE "\xee\xa2\xb3" +#define ICON_MD_RESTORE_PAGE "\xee\xa4\xa9" +#define ICON_MD_RING_VOLUME "\xee\x83\x91" +#define ICON_MD_ROOM "\xee\xa2\xb4" +#define ICON_MD_ROOM_SERVICE "\xee\xad\x89" +#define ICON_MD_ROTATE_90_DEGREES_CCW "\xee\x90\x98" +#define ICON_MD_ROTATE_LEFT "\xee\x90\x99" +#define ICON_MD_ROTATE_RIGHT "\xee\x90\x9a" +#define ICON_MD_ROUNDED_CORNER "\xee\xa4\xa0" +#define ICON_MD_ROUTER "\xee\x8c\xa8" +#define ICON_MD_ROWING "\xee\xa4\xa1" +#define ICON_MD_RSS_FEED "\xee\x83\xa5" +#define ICON_MD_RV_HOOKUP "\xee\x99\x82" +#define ICON_MD_SATELLITE "\xee\x95\xa2" +#define ICON_MD_SAVE "\xee\x85\xa1" +#define ICON_MD_SCANNER "\xee\x8c\xa9" +#define ICON_MD_SCHEDULE "\xee\xa2\xb5" +#define ICON_MD_SCHOOL "\xee\xa0\x8c" +#define ICON_MD_SCREEN_LOCK_LANDSCAPE "\xee\x86\xbe" +#define ICON_MD_SCREEN_LOCK_PORTRAIT "\xee\x86\xbf" +#define ICON_MD_SCREEN_LOCK_ROTATION "\xee\x87\x80" +#define ICON_MD_SCREEN_ROTATION "\xee\x87\x81" +#define ICON_MD_SCREEN_SHARE "\xee\x83\xa2" +#define ICON_MD_SD_CARD "\xee\x98\xa3" +#define ICON_MD_SD_STORAGE "\xee\x87\x82" +#define ICON_MD_SEARCH "\xee\xa2\xb6" +#define ICON_MD_SECURITY "\xee\x8c\xaa" +#define ICON_MD_SELECT_ALL "\xee\x85\xa2" +#define ICON_MD_SEND "\xee\x85\xa3" +#define ICON_MD_SENTIMENT_DISSATISFIED "\xee\xa0\x91" +#define ICON_MD_SENTIMENT_NEUTRAL "\xee\xa0\x92" +#define ICON_MD_SENTIMENT_SATISFIED "\xee\xa0\x93" +#define ICON_MD_SENTIMENT_VERY_DISSATISFIED "\xee\xa0\x94" +#define ICON_MD_SENTIMENT_VERY_SATISFIED "\xee\xa0\x95" +#define ICON_MD_SETTINGS "\xee\xa2\xb8" +#define ICON_MD_SETTINGS_APPLICATIONS "\xee\xa2\xb9" +#define ICON_MD_SETTINGS_BACKUP_RESTORE "\xee\xa2\xba" +#define ICON_MD_SETTINGS_BLUETOOTH "\xee\xa2\xbb" +#define ICON_MD_SETTINGS_BRIGHTNESS "\xee\xa2\xbd" +#define ICON_MD_SETTINGS_CELL "\xee\xa2\xbc" +#define ICON_MD_SETTINGS_ETHERNET "\xee\xa2\xbe" +#define ICON_MD_SETTINGS_INPUT_ANTENNA "\xee\xa2\xbf" +#define ICON_MD_SETTINGS_INPUT_COMPONENT "\xee\xa3\x80" +#define ICON_MD_SETTINGS_INPUT_COMPOSITE "\xee\xa3\x81" +#define ICON_MD_SETTINGS_INPUT_HDMI "\xee\xa3\x82" +#define ICON_MD_SETTINGS_INPUT_SVIDEO "\xee\xa3\x83" +#define ICON_MD_SETTINGS_OVERSCAN "\xee\xa3\x84" +#define ICON_MD_SETTINGS_PHONE "\xee\xa3\x85" +#define ICON_MD_SETTINGS_POWER "\xee\xa3\x86" +#define ICON_MD_SETTINGS_REMOTE "\xee\xa3\x87" +#define ICON_MD_SETTINGS_SYSTEM_DAYDREAM "\xee\x87\x83" +#define ICON_MD_SETTINGS_VOICE "\xee\xa3\x88" +#define ICON_MD_SHARE "\xee\xa0\x8d" +#define ICON_MD_SHOP "\xee\xa3\x89" +#define ICON_MD_SHOP_TWO "\xee\xa3\x8a" +#define ICON_MD_SHOPPING_BASKET "\xee\xa3\x8b" +#define ICON_MD_SHOPPING_CART "\xee\xa3\x8c" +#define ICON_MD_SHORT_TEXT "\xee\x89\xa1" +#define ICON_MD_SHOW_CHART "\xee\x9b\xa1" +#define ICON_MD_SHUFFLE "\xee\x81\x83" +#define ICON_MD_SIGNAL_CELLULAR_4_BAR "\xee\x87\x88" +#define ICON_MD_SIGNAL_CELLULAR_CONNECTED_NO_INTERNET_4_BAR "\xee\x87\x8d" +#define ICON_MD_SIGNAL_CELLULAR_NO_SIM "\xee\x87\x8e" +#define ICON_MD_SIGNAL_CELLULAR_NULL "\xee\x87\x8f" +#define ICON_MD_SIGNAL_CELLULAR_OFF "\xee\x87\x90" +#define ICON_MD_SIGNAL_WIFI_4_BAR "\xee\x87\x98" +#define ICON_MD_SIGNAL_WIFI_4_BAR_LOCK "\xee\x87\x99" +#define ICON_MD_SIGNAL_WIFI_OFF "\xee\x87\x9a" +#define ICON_MD_SIM_CARD "\xee\x8c\xab" +#define ICON_MD_SIM_CARD_ALERT "\xee\x98\xa4" +#define ICON_MD_SKIP_NEXT "\xee\x81\x84" +#define ICON_MD_SKIP_PREVIOUS "\xee\x81\x85" +#define ICON_MD_SLIDESHOW "\xee\x90\x9b" +#define ICON_MD_SLOW_MOTION_VIDEO "\xee\x81\xa8" +#define ICON_MD_SMARTPHONE "\xee\x8c\xac" +#define ICON_MD_SMOKE_FREE "\xee\xad\x8a" +#define ICON_MD_SMOKING_ROOMS "\xee\xad\x8b" +#define ICON_MD_SMS "\xee\x98\xa5" +#define ICON_MD_SMS_FAILED "\xee\x98\xa6" +#define ICON_MD_SNOOZE "\xee\x81\x86" +#define ICON_MD_SORT "\xee\x85\xa4" +#define ICON_MD_SORT_BY_ALPHA "\xee\x81\x93" +#define ICON_MD_SPA "\xee\xad\x8c" +#define ICON_MD_SPACE_BAR "\xee\x89\x96" +#define ICON_MD_SPEAKER "\xee\x8c\xad" +#define ICON_MD_SPEAKER_GROUP "\xee\x8c\xae" +#define ICON_MD_SPEAKER_NOTES "\xee\xa3\x8d" +#define ICON_MD_SPEAKER_NOTES_OFF "\xee\xa4\xaa" +#define ICON_MD_SPEAKER_PHONE "\xee\x83\x92" +#define ICON_MD_SPELLCHECK "\xee\xa3\x8e" +#define ICON_MD_STAR "\xee\xa0\xb8" +#define ICON_MD_STAR_BORDER "\xee\xa0\xba" +#define ICON_MD_STAR_HALF "\xee\xa0\xb9" +#define ICON_MD_STARS "\xee\xa3\x90" +#define ICON_MD_STAY_CURRENT_LANDSCAPE "\xee\x83\x93" +#define ICON_MD_STAY_CURRENT_PORTRAIT "\xee\x83\x94" +#define ICON_MD_STAY_PRIMARY_LANDSCAPE "\xee\x83\x95" +#define ICON_MD_STAY_PRIMARY_PORTRAIT "\xee\x83\x96" +#define ICON_MD_STOP "\xee\x81\x87" +#define ICON_MD_STOP_SCREEN_SHARE "\xee\x83\xa3" +#define ICON_MD_STORAGE "\xee\x87\x9b" +#define ICON_MD_STORE "\xee\xa3\x91" +#define ICON_MD_STORE_MALL_DIRECTORY "\xee\x95\xa3" +#define ICON_MD_STRAIGHTEN "\xee\x90\x9c" +#define ICON_MD_STREETVIEW "\xee\x95\xae" +#define ICON_MD_STRIKETHROUGH_S "\xee\x89\x97" +#define ICON_MD_STYLE "\xee\x90\x9d" +#define ICON_MD_SUBDIRECTORY_ARROW_LEFT "\xee\x97\x99" +#define ICON_MD_SUBDIRECTORY_ARROW_RIGHT "\xee\x97\x9a" +#define ICON_MD_SUBJECT "\xee\xa3\x92" +#define ICON_MD_SUBSCRIPTIONS "\xee\x81\xa4" +#define ICON_MD_SUBTITLES "\xee\x81\x88" +#define ICON_MD_SUBWAY "\xee\x95\xaf" +#define ICON_MD_SUPERVISOR_ACCOUNT "\xee\xa3\x93" +#define ICON_MD_SURROUND_SOUND "\xee\x81\x89" +#define ICON_MD_SWAP_CALLS "\xee\x83\x97" +#define ICON_MD_SWAP_HORIZ "\xee\xa3\x94" +#define ICON_MD_SWAP_VERT "\xee\xa3\x95" +#define ICON_MD_SWAP_VERTICAL_CIRCLE "\xee\xa3\x96" +#define ICON_MD_SWITCH_CAMERA "\xee\x90\x9e" +#define ICON_MD_SWITCH_VIDEO "\xee\x90\x9f" +#define ICON_MD_SYNC "\xee\x98\xa7" +#define ICON_MD_SYNC_DISABLED "\xee\x98\xa8" +#define ICON_MD_SYNC_PROBLEM "\xee\x98\xa9" +#define ICON_MD_SYSTEM_UPDATE "\xee\x98\xaa" +#define ICON_MD_SYSTEM_UPDATE_ALT "\xee\xa3\x97" +#define ICON_MD_TAB "\xee\xa3\x98" +#define ICON_MD_TAB_UNSELECTED "\xee\xa3\x99" +#define ICON_MD_TABLET "\xee\x8c\xaf" +#define ICON_MD_TABLET_ANDROID "\xee\x8c\xb0" +#define ICON_MD_TABLET_MAC "\xee\x8c\xb1" +#define ICON_MD_TAG_FACES "\xee\x90\xa0" +#define ICON_MD_TAP_AND_PLAY "\xee\x98\xab" +#define ICON_MD_TERRAIN "\xee\x95\xa4" +#define ICON_MD_TEXT_FIELDS "\xee\x89\xa2" +#define ICON_MD_TEXT_FORMAT "\xee\x85\xa5" +#define ICON_MD_TEXTSMS "\xee\x83\x98" +#define ICON_MD_TEXTURE "\xee\x90\xa1" +#define ICON_MD_THEATERS "\xee\xa3\x9a" +#define ICON_MD_THUMB_DOWN "\xee\xa3\x9b" +#define ICON_MD_THUMB_UP "\xee\xa3\x9c" +#define ICON_MD_THUMBS_UP_DOWN "\xee\xa3\x9d" +#define ICON_MD_TIME_TO_LEAVE "\xee\x98\xac" +#define ICON_MD_TIMELAPSE "\xee\x90\xa2" +#define ICON_MD_TIMELINE "\xee\xa4\xa2" +#define ICON_MD_TIMER "\xee\x90\xa5" +#define ICON_MD_TIMER_10 "\xee\x90\xa3" +#define ICON_MD_TIMER_3 "\xee\x90\xa4" +#define ICON_MD_TIMER_OFF "\xee\x90\xa6" +#define ICON_MD_TITLE "\xee\x89\xa4" +#define ICON_MD_TOC "\xee\xa3\x9e" +#define ICON_MD_TODAY "\xee\xa3\x9f" +#define ICON_MD_TOLL "\xee\xa3\xa0" +#define ICON_MD_TONALITY "\xee\x90\xa7" +#define ICON_MD_TOUCH_APP "\xee\xa4\x93" +#define ICON_MD_TOYS "\xee\x8c\xb2" +#define ICON_MD_TRACK_CHANGES "\xee\xa3\xa1" +#define ICON_MD_TRAFFIC "\xee\x95\xa5" +#define ICON_MD_TRAIN "\xee\x95\xb0" +#define ICON_MD_TRAM "\xee\x95\xb1" +#define ICON_MD_TRANSFER_WITHIN_A_STATION "\xee\x95\xb2" +#define ICON_MD_TRANSFORM "\xee\x90\xa8" +#define ICON_MD_TRANSLATE "\xee\xa3\xa2" +#define ICON_MD_TRENDING_DOWN "\xee\xa3\xa3" +#define ICON_MD_TRENDING_FLAT "\xee\xa3\xa4" +#define ICON_MD_TRENDING_UP "\xee\xa3\xa5" +#define ICON_MD_TUNE "\xee\x90\xa9" +#define ICON_MD_TURNED_IN "\xee\xa3\xa6" +#define ICON_MD_TURNED_IN_NOT "\xee\xa3\xa7" +#define ICON_MD_TV "\xee\x8c\xb3" +#define ICON_MD_UNARCHIVE "\xee\x85\xa9" +#define ICON_MD_UNDO "\xee\x85\xa6" +#define ICON_MD_UNFOLD_LESS "\xee\x97\x96" +#define ICON_MD_UNFOLD_MORE "\xee\x97\x97" +#define ICON_MD_UPDATE "\xee\xa4\xa3" +#define ICON_MD_USB "\xee\x87\xa0" +#define ICON_MD_VERIFIED_USER "\xee\xa3\xa8" +#define ICON_MD_VERTICAL_ALIGN_BOTTOM "\xee\x89\x98" +#define ICON_MD_VERTICAL_ALIGN_CENTER "\xee\x89\x99" +#define ICON_MD_VERTICAL_ALIGN_TOP "\xee\x89\x9a" +#define ICON_MD_VIBRATION "\xee\x98\xad" +#define ICON_MD_VIDEO_CALL "\xee\x81\xb0" +#define ICON_MD_VIDEO_LABEL "\xee\x81\xb1" +#define ICON_MD_VIDEO_LIBRARY "\xee\x81\x8a" +#define ICON_MD_VIDEOCAM "\xee\x81\x8b" +#define ICON_MD_VIDEOCAM_OFF "\xee\x81\x8c" +#define ICON_MD_VIDEOGAME_ASSET "\xee\x8c\xb8" +#define ICON_MD_VIEW_AGENDA "\xee\xa3\xa9" +#define ICON_MD_VIEW_ARRAY "\xee\xa3\xaa" +#define ICON_MD_VIEW_CAROUSEL "\xee\xa3\xab" +#define ICON_MD_VIEW_COLUMN "\xee\xa3\xac" +#define ICON_MD_VIEW_COMFY "\xee\x90\xaa" +#define ICON_MD_VIEW_COMPACT "\xee\x90\xab" +#define ICON_MD_VIEW_DAY "\xee\xa3\xad" +#define ICON_MD_VIEW_HEADLINE "\xee\xa3\xae" +#define ICON_MD_VIEW_LIST "\xee\xa3\xaf" +#define ICON_MD_VIEW_MODULE "\xee\xa3\xb0" +#define ICON_MD_VIEW_QUILT "\xee\xa3\xb1" +#define ICON_MD_VIEW_STREAM "\xee\xa3\xb2" +#define ICON_MD_VIEW_WEEK "\xee\xa3\xb3" +#define ICON_MD_VIGNETTE "\xee\x90\xb5" +#define ICON_MD_VISIBILITY "\xee\xa3\xb4" +#define ICON_MD_VISIBILITY_OFF "\xee\xa3\xb5" +#define ICON_MD_VOICE_CHAT "\xee\x98\xae" +#define ICON_MD_VOICEMAIL "\xee\x83\x99" +#define ICON_MD_VOLUME_DOWN "\xee\x81\x8d" +#define ICON_MD_VOLUME_MUTE "\xee\x81\x8e" +#define ICON_MD_VOLUME_OFF "\xee\x81\x8f" +#define ICON_MD_VOLUME_UP "\xee\x81\x90" +#define ICON_MD_VPN_KEY "\xee\x83\x9a" +#define ICON_MD_VPN_LOCK "\xee\x98\xaf" +#define ICON_MD_WALLPAPER "\xee\x86\xbc" +#define ICON_MD_WARNING "\xee\x80\x82" +#define ICON_MD_WATCH "\xee\x8c\xb4" +#define ICON_MD_WATCH_LATER "\xee\xa4\xa4" +#define ICON_MD_WB_AUTO "\xee\x90\xac" +#define ICON_MD_WB_CLOUDY "\xee\x90\xad" +#define ICON_MD_WB_INCANDESCENT "\xee\x90\xae" +#define ICON_MD_WB_IRIDESCENT "\xee\x90\xb6" +#define ICON_MD_WB_SUNNY "\xee\x90\xb0" +#define ICON_MD_WC "\xee\x98\xbd" +#define ICON_MD_WEB "\xee\x81\x91" +#define ICON_MD_WEB_ASSET "\xee\x81\xa9" +#define ICON_MD_WEEKEND "\xee\x85\xab" +#define ICON_MD_WHATSHOT "\xee\xa0\x8e" +#define ICON_MD_WIDGETS "\xee\x86\xbd" +#define ICON_MD_WIFI "\xee\x98\xbe" +#define ICON_MD_WIFI_LOCK "\xee\x87\xa1" +#define ICON_MD_WIFI_TETHERING "\xee\x87\xa2" +#define ICON_MD_WORK "\xee\xa3\xb9" +#define ICON_MD_WRAP_TEXT "\xee\x89\x9b" +#define ICON_MD_YOUTUBE_SEARCHED_FOR "\xee\xa3\xba" +#define ICON_MD_ZOOM_IN "\xee\xa3\xbf" +#define ICON_MD_ZOOM_OUT "\xee\xa4\x80" +#define ICON_MD_ZOOM_OUT_MAP "\xee\x95\xab" \ No newline at end of file diff --git a/src/moon/imgui/imgui_impl.cpp b/src/moon/imgui/imgui_impl.cpp index ccce3df4..d1dda416 100644 --- a/src/moon/imgui/imgui_impl.cpp +++ b/src/moon/imgui/imgui_impl.cpp @@ -1,5 +1,6 @@ #include "imgui_impl.h" +#include #include #include @@ -11,6 +12,9 @@ #include "moon/mod-engine/hooks/hook.h" #include "moon/mod-engine/textures/mod-texture.h" #include "moon/mod-engine/engine.h" +#include "icons/IconsForkAwesome.h" +#include "icons/IconsMaterialDesign.h" + #include #ifdef __MINGW32__ @@ -64,6 +68,7 @@ using namespace std; bool showMenu = true; bool showWindowMoon = true; bool showWindowDemo = false; +bool showWindowDebug = false; SDL_Window* window = nullptr; ImGuiIO io; @@ -120,6 +125,31 @@ namespace MoonNX { namespace MoonInternal { + map fontMap; + + void setupFonts() { + ImGuiIO& io = ImGui::GetIO(); + // for (auto entry = Moon::fonts.begin(); entry != Moon::fonts.end(); entry++){ + // if(entry->first == FONT_ICON_FILE_NAME_FK) continue; +// + // ImFontConfig font_cfg; + // ImFont* tmp = io.Fonts->AddFontFromMemoryTTF((void*) entry->second->data, entry->second->size, 18.f, &font_cfg); + // cout << "Loading font: " << entry->first << endl; + // fontMap[entry->first] = tmp; + // } +// + // io.FontDefault = fontMap["monogram.ttf"]; + + // Setup Material Design Icons + static const ImWchar icons_ranges[] = { ICON_MIN_MD, ICON_MAX_MD, 0 }; + io.Fonts->AddFontDefault(); + ImFontConfig config; + config.GlyphOffset = ImVec2(0.0f, 6.0f); + config.MergeMode = true; + io.Fonts->AddFontFromMemoryTTF((void*) Moon::fonts[FONT_ICON_FILE_NAME_MD]->data, Moon::fonts[FONT_ICON_FILE_NAME_MD]->size, 20.f, &config, icons_ranges); + io.Fonts->Build(); + } + void setupImGuiModule(string status) { MoonInternal::setupWindowHook(status); if(status == "PreStartup"){ @@ -130,13 +160,10 @@ namespace MoonInternal { io = ImGui::GetIO(); (void)io; io.WantSetMousePos = false; io.ConfigWindowsMoveFromTitleBarOnly = true; - for (auto entry = Moon::fonts.begin(); entry != Moon::fonts.end(); entry++){ - ImFontConfig font_cfg; - font_cfg.FontDataOwnedByAtlas = false; - io.Fonts->AddFontFromMemoryTTF((void*) entry->second->data, entry->second->size, 18.f, &font_cfg); - } ImGui::StyleColorsLightGreen(); + setupFonts(); + MoonInternal::bindHook(IMGUI_API_INIT); MoonInternal::initBindHook(1, (struct HookParameter){.name = "io", .parameter = (void*) &io} @@ -167,7 +194,6 @@ namespace MoonInternal { Moon::registerHookListener({ GFX_POST_END_FRAME, [](HookCall call){ // recv(socketID, NULL, 1, MSG_PEEK | MSG_DONTWAIT) != 0 // bool retval = 0; - ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplSDL2_NewFrame(window); ImGui::NewFrame(); @@ -185,6 +211,7 @@ namespace MoonInternal { ImGui::BeginMainMenuBar(); ImGui::MenuItem("Moon64", NULL, &showWindowMoon); ImGui::MenuItem("ImGui Demo", NULL, &showWindowDemo); + ImGui::MenuItem("Texture Debug", NULL, &showWindowDebug); ImGui::EndMainMenuBar(); if (showWindowMoon){ @@ -199,6 +226,36 @@ namespace MoonInternal { ImGui::PopStyleColor(); } } + + if(showWindowDebug) { + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0)); + ImGui::Begin("Loaded textures", NULL, ImGuiWindowFlags_None); + if (ImGui::BeginTable("table1", 3, ImGuiTableFlags_Borders)) { + ImGui::TableSetupColumn("Image", ImGuiTableColumnFlags_WidthFixed, 64.0f); + ImGui::TableSetupColumn("Path"); + ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 64.0f); + ImGui::TableHeadersRow(); + for(auto &entry : textureMap){ + if(entry.second == nullptr) continue; + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); + ImGui::Image((ImTextureID) entry.second->texture_id, ImVec2(64, 64 * entry.second->height / entry.second->width)); + ImGui::TableSetColumnIndex(1); + ImGui::Text("%s", entry.second->texture_addr); + ImGui::TableSetColumnIndex(2); + if(ImGui::Button(ICON_MD_EDIT, ImVec2(64, 64))){ + if(ImGui::BeginPopupContextWindow("options")){ + if (ImGui::Selectable("Clear")) { + } + ImGui::EndPopup(); + } + } + } + ImGui::EndTable(); + } + ImGui::End(); + ImGui::PopStyleColor(); + } #endif ImGui::Render(); GLint last_program; diff --git a/src/moon/mod-engine/textures/mod-texture.cpp b/src/moon/mod-engine/textures/mod-texture.cpp index 1a0e7fa4..36834190 100644 --- a/src/moon/mod-engine/textures/mod-texture.cpp +++ b/src/moon/mod-engine/textures/mod-texture.cpp @@ -27,11 +27,10 @@ using namespace std; using json = nlohmann::json; std::map baseGameTextures; +map textureMods; map textureMap; map textureCache; -map textureMods; - namespace Moon { void saveAddonTexture(BitModule *addon, std::string texturePath, EntryFileData* data){ addon->textures.insert(pair(texturePath, data)); @@ -117,13 +116,15 @@ namespace MoonInternal { } } - void loadTexture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi){ + void loadTexture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi){ int w, h; u64 imgsize = 0; string path(fullpath); if(!strcmp(fullpath, "gfx/mod-icons://Moon64.png")){ + textureMap[string(rawpath)]->width = moon64_logo.width; + textureMap[string(rawpath)]->height = moon64_logo.height; gfx_rapi->upload_texture(moon64_logo.pixel_data, moon64_logo.width, moon64_logo.height); return; } @@ -134,6 +135,8 @@ namespace MoonInternal { EntryFileData * imgdata = getTextureData(fixedPath.c_str()); if (imgdata) { u8 *data = stbi_load_from_memory(reinterpret_cast(imgdata->data), imgdata->size, &w, &h, NULL, 4); + textureMap[string(rawpath)]->width = w; + textureMap[string(rawpath)]->height = h; if (data) { @@ -177,6 +180,9 @@ namespace MoonInternal { textureCache.insert(pair(entry->first, addon)); } } + for(auto &tex : textureMap) + gfx_get_current_rendering_api()->delete_texture(tex.second->texture_id); + textureMap.clear(); } diff --git a/src/moon/mod-engine/textures/mod-texture.h b/src/moon/mod-engine/textures/mod-texture.h index 8dae545c..024c9a2b 100644 --- a/src/moon/mod-engine/textures/mod-texture.h +++ b/src/moon/mod-engine/textures/mod-texture.h @@ -24,7 +24,7 @@ namespace Moon { namespace MoonInternal { EntryFileData *getTextureData(const char *fullpath); - void loadTexture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi); + void loadTexture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi); void saveTexture(TextureData *data, std::string texturePath); void buildTextureCache(std::vector order); void setupTextureEngine( std::string state ); diff --git a/src/moon/moon64.cpp b/src/moon/moon64.cpp index 3fdcb2ac..34e718d3 100644 --- a/src/moon/moon64.cpp +++ b/src/moon/moon64.cpp @@ -104,8 +104,8 @@ void moon_load_base_texture(char* data, long size, char* texture){ } -void moon_load_texture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi){ - MoonInternal::loadTexture(tile, fullpath, gfx_rapi); +void moon_load_texture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi){ + MoonInternal::loadTexture(tile, fullpath, rawpath, gfx_rapi); } } \ No newline at end of file diff --git a/src/moon/moon64.h b/src/moon/moon64.h index c4383156..5ddfbcd4 100644 --- a/src/moon/moon64.h +++ b/src/moon/moon64.h @@ -47,7 +47,7 @@ void moon_save_texture(struct TextureData* data, char* tex); struct TextureData* moon_get_texture(char* tex); struct TextureData* moon_create_texture(); void moon_load_base_texture(char* data, long size, char* texture); -void moon_load_texture(int tile, const char *fullpath, struct GfxRenderingAPI *gfx_rapi); +void moon_load_texture(int tile, const char *fullpath, const char *rawpath, struct GfxRenderingAPI *gfx_rapi); #endif #endif \ No newline at end of file diff --git a/src/pc/gfx/gfx_opengl.c b/src/pc/gfx/gfx_opengl.cpp similarity index 91% rename from src/pc/gfx/gfx_opengl.c rename to src/pc/gfx/gfx_opengl.cpp index 03b39a0b..e97098b7 100644 --- a/src/pc/gfx/gfx_opengl.c +++ b/src/pc/gfx/gfx_opengl.cpp @@ -38,6 +38,10 @@ #include "gfx_rendering_api.h" #include "moon/mod-engine/hooks/hook.h" +#include +#include +using namespace std; + #define TEX_CACHE_STEP 512 struct ShaderProgram { @@ -63,13 +67,10 @@ static struct ShaderProgram shader_program_pool[64]; static uint8_t shader_program_pool_size; static GLuint opengl_vbo; -static int tex_cache_size = 0; -static int num_textures = 0; -static struct GLTexture *tex_cache = NULL; - static struct ShaderProgram *opengl_prg = NULL; -static struct GLTexture *opengl_tex[2]; -static int opengl_curtex = 0; +static struct GLTexture* opengl_texture; + +map texture_map; static uint32_t frame_count; @@ -94,9 +95,9 @@ static inline void gfx_opengl_set_shader_uniforms(struct ShaderProgram *prg) { } static inline void gfx_opengl_set_texture_uniforms(struct ShaderProgram *prg, const int tile) { - if (prg->used_textures[tile] && opengl_tex[tile]) { - glUniform2f(prg->uniform_locations[tile*2 + 0], opengl_tex[tile]->size[0], opengl_tex[tile]->size[1]); - glUniform1i(prg->uniform_locations[tile*2 + 1], opengl_tex[tile]->filter); + if (prg->used_textures[tile] && opengl_texture) { + glUniform2f(prg->uniform_locations[tile*2 + 0], opengl_texture->size[0], opengl_texture->size[1]); + glUniform1i(prg->uniform_locations[tile*2 + 1], opengl_texture->filter); } } @@ -512,30 +513,32 @@ static void gfx_opengl_shader_get_info(struct ShaderProgram *prg, uint8_t *num_i } static GLuint gfx_opengl_new_texture(void) { - if (num_textures >= tex_cache_size) { - tex_cache_size += TEX_CACHE_STEP; - tex_cache = realloc(tex_cache, sizeof(struct GLTexture) * tex_cache_size); - if (!tex_cache) sys_fatal("out of memory allocating texture cache"); - // invalidate these because they might be pointing to garbage now - opengl_tex[0] = NULL; - opengl_tex[1] = NULL; - } - glGenTextures(1, &tex_cache[num_textures].gltex); - return num_textures++; + GLuint texture_id; + glGenTextures(1, &texture_id); + + cout << texture_id << endl; + texture_map[texture_id] = new GLTexture(); + return texture_id; +} + +static void gfx_opengl_delete_texture(GLuint texture_id) { + if(texture_id > 0) + glDeleteTextures(1, &texture_id); } static void gfx_opengl_select_texture(int tile, GLuint texture_id) { - opengl_tex[tile] = tex_cache + texture_id; - opengl_curtex = tile; - glActiveTexture(GL_TEXTURE0 + tile); - glBindTexture(GL_TEXTURE_2D, opengl_tex[tile]->gltex); - gfx_opengl_set_texture_uniforms(opengl_prg, tile); + opengl_texture = texture_map[texture_id]; + opengl_texture->gltex = texture_id; + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, opengl_texture->gltex); + gfx_opengl_set_texture_uniforms(opengl_prg, tile); } -static void gfx_opengl_upload_texture(uint8_t *rgba32_buf, int width, int height) { +static void gfx_opengl_upload_texture(const unsigned char *rgba32_buf, int width, int height) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf); - opengl_tex[opengl_curtex]->size[0] = width; - opengl_tex[opengl_curtex]->size[1] = height; + opengl_texture->size[0] = width; + opengl_texture->size[1] = height; } static uint32_t gfx_cm_to_opengl(uint32_t val) { @@ -552,9 +555,8 @@ static void gfx_opengl_set_sampler_parameters(int tile, bool linear_filter, uint glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gfx_cm_to_opengl(cms)); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gfx_cm_to_opengl(cmt)); - opengl_curtex = tile; - if (opengl_tex[tile]) { - opengl_tex[tile]->filter = linear_filter; + if (opengl_texture) { + opengl_texture->filter = linear_filter; gfx_opengl_set_texture_uniforms(opengl_prg, tile); } } @@ -622,19 +624,15 @@ static void gfx_opengl_init(void) { #if FOR_WINDOWS || defined(OSX_BUILD) GLenum err; if ((err = glewInit()) != GLEW_OK) - sys_fatal("could not init GLEW:\n%s", glewGetErrorString(err)); + printf("could not init GLEW:\n%s", glewGetErrorString(err)); #endif - tex_cache_size = TEX_CACHE_STEP; - tex_cache = calloc(tex_cache_size, sizeof(struct GLTexture)); - if (!tex_cache) sys_fatal("out of memory allocating texture cache"); - // check GL version int vmajor, vminor; bool is_es = false; gl_get_version(&vmajor, &vminor, &is_es); if (vmajor < 2 && vminor < 1 && !is_es) - sys_fatal("OpenGL 2.1+ is required.\nReported version: %s%d.%d", is_es ? "ES" : "", vmajor, vminor); + printf("OpenGL 2.1+ is required.\nReported version: %s%d.%d", is_es ? "ES" : "", vmajor, vminor); glGenBuffers(1, &opengl_vbo); @@ -643,25 +641,23 @@ static void gfx_opengl_init(void) { glDepthFunc(GL_LEQUAL); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - moon_bind_hook(GFX_INIT); - moon_init_hook(0); - moon_call_hook(0); + MoonInternal::bindHook(GFX_INIT); + MoonInternal::initBindHook(0); + MoonInternal::callBindHook(0); } static void gfx_opengl_on_resize(void) { - moon_bind_hook(GFX_ON_REZISE); - moon_init_hook(0); - moon_call_hook(0); + MoonInternal::bindHook(GFX_ON_REZISE); + MoonInternal::initBindHook(0); + MoonInternal::callBindHook(0); } static void gfx_opengl_start_frame(void) { - moon_bind_hook(GFX_PRE_START_FRAME); - moon_init_hook(0); - if(moon_call_hook(0)){ - return; - } + MoonInternal::bindHook(GFX_PRE_START_FRAME); + MoonInternal::initBindHook(0); + if(MoonInternal::callBindHook(0)) return; frame_count++; @@ -676,28 +672,28 @@ static void gfx_opengl_start_frame(void) { else glDisable(GL_MULTISAMPLE); #endif - moon_bind_hook(GFX_POST_START_FRAME); - moon_init_hook(0); - moon_call_hook(0); + MoonInternal::bindHook(GFX_POST_START_FRAME); + MoonInternal::initBindHook(0); + MoonInternal::callBindHook(0); } static void gfx_opengl_end_frame(void) { - moon_bind_hook(GFX_PRE_END_FRAME); - moon_init_hook(0); - moon_call_hook(0); + MoonInternal::bindHook(GFX_PRE_END_FRAME); + MoonInternal::initBindHook(0); + MoonInternal::callBindHook(0); - moon_bind_hook(GFX_POST_END_FRAME); - moon_init_hook(0); - moon_call_hook(0); + MoonInternal::bindHook(GFX_POST_END_FRAME); + MoonInternal::initBindHook(0); + MoonInternal::callBindHook(0); } static void gfx_opengl_finish_render(void) { } static void gfx_opengl_shutdown(void) { - moon_bind_hook(GFX_SHUTDOWN); - moon_init_hook(0); - moon_call_hook(0); + MoonInternal::bindHook(GFX_SHUTDOWN); + MoonInternal::initBindHook(0); + MoonInternal::callBindHook(0); } @@ -710,6 +706,7 @@ struct GfxRenderingAPI gfx_opengl_api = { gfx_opengl_shader_get_info, gfx_opengl_new_texture, gfx_opengl_select_texture, + gfx_opengl_delete_texture, gfx_opengl_upload_texture, gfx_opengl_set_sampler_parameters, gfx_opengl_set_depth_test, diff --git a/src/pc/gfx/gfx_opengl_legacy.c b/src/pc/gfx/gfx_opengl_legacy.c deleted file mode 100644 index 49cc849c..00000000 --- a/src/pc/gfx/gfx_opengl_legacy.c +++ /dev/null @@ -1,646 +0,0 @@ -#ifdef RAPI_GL_LEGACY - -#include -#include -#include - -#ifndef _LANGUAGE_C -# define _LANGUAGE_C -#endif -#include - -#ifdef __MINGW32__ -# define FOR_WINDOWS 1 -#else -# define FOR_WINDOWS 0 -#endif - -#include - -#if FOR_WINDOWS || defined(OSX_BUILD) -# define GLEW_STATIC -# include -#endif - -#define GL_GLEXT_PROTOTYPES 1 -#include - -// redefine this if using a different GL loader -#define mglGetProcAddress(name) SDL_GL_GetProcAddress(name) - -// we'll define and load it manually in init, just in case -typedef void (*PFNMGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); -static PFNMGLFOGCOORDPOINTERPROC mglFogCoordPointer = NULL; - -// since these can have different names, might as well redefine them to a single one -#undef GL_FOG_COORD_SRC -#undef GL_FOG_COORD -#undef GL_FOG_COORD_ARRAY -#define GL_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_FOG_COORD_ARRAY 0x8457 - -#include "../platform.h" -#include "gfx_cc.h" -#include "macros.h" -#include "gfx_rendering_api.h" -#include "moon/mod-engine/hooks/hook.h" - -enum MixFlags { - SH_MF_OVERRIDE_ALPHA = 1, - - SH_MF_MULTIPLY = 2, - SH_MF_MIX = 4, - SH_MF_SINGLE = 8, - - SH_MF_MULTIPLY_ALPHA = 16, - SH_MF_MIX_ALPHA = 32, - SH_MF_SINGLE_ALPHA = 64, - - SH_MF_INPUT_ALPHA = 128, -}; - -enum MixType { - SH_MT_NONE, - SH_MT_TEXTURE, - SH_MT_COLOR, - SH_MT_TEXTURE_TEXTURE, - SH_MT_TEXTURE_COLOR, - SH_MT_COLOR_COLOR, -}; - -struct ShaderProgram { - uint32_t shader_id; - enum MixType mix; - uint32_t mix_flags; - bool texture_used[2]; - int num_inputs; -}; - -static struct ShaderProgram shader_program_pool[64]; -static uint8_t shader_program_pool_size; -static struct ShaderProgram *cur_shader = NULL; - -static const float *cur_buf = NULL; -static const float *cur_fog_ofs = NULL; -static size_t cur_buf_size = 0; -static size_t cur_buf_num_tris = 0; -static size_t cur_buf_stride = 0; -static bool gl_blend = false; -static bool gl_adv_fog = false; - -static const float c_white[] = { 1.f, 1.f, 1.f, 1.f }; - -static bool gfx_opengl_z_is_from_0_to_1(void) { - return false; -} - -#define TEXENV_COMBINE_ON() glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE) -#define TEXENV_COMBINE_OFF() glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) - -#define TEXENV_COMBINE_OP(num, cval, aval) \ - do { \ - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND ## num ## _RGB, cval); \ - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND ## num ## _ALPHA, aval); \ - } while (0) - -#define TEXENV_COMBINE_SET1(what, mode, val) \ - do { \ - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ ## what, mode); \ - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ ## what, val); \ - } while (0) - -#define TEXENV_COMBINE_SET2(what, mode, val1, val2) \ - do { \ - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ ## what, mode); \ - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ ## what, val1); \ - glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ ## what, val2); \ - } while (0) - -#define TEXENV_COMBINE_SET3(what, mode, val1, val2, val3) \ - do { \ - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ ## what, mode); \ - glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ ## what, val1); \ - glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ ## what, val2); \ - glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_ ## what, val3); \ - } while (0) - -static inline void texenv_set_texture_color(struct ShaderProgram *prg) { - glActiveTexture(GL_TEXTURE0); - - if (prg->mix_flags & SH_MF_OVERRIDE_ALPHA) { - TEXENV_COMBINE_ON(); - if (prg->mix_flags & SH_MF_SINGLE_ALPHA) { - if (prg->mix_flags & SH_MF_MULTIPLY) { - // keep the alpha but modulate the color - const GLenum alphasrc = (prg->mix_flags & SH_MF_INPUT_ALPHA) ? GL_PRIMARY_COLOR : GL_TEXTURE; - TEXENV_COMBINE_SET2(RGB, GL_MODULATE, GL_TEXTURE, GL_PRIMARY_COLOR); - TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, alphasrc); - } else { - // somehow makes it keep the color while taking the alpha from primary color - TEXENV_COMBINE_SET1(RGB, GL_REPLACE, GL_TEXTURE); - } - } else { // if (prg->mix_flags & SH_MF_SINGLE) { - if (prg->mix_flags & SH_MF_MULTIPLY_ALPHA) { - // modulate the alpha but keep the color - TEXENV_COMBINE_SET2(ALPHA, GL_MODULATE, GL_TEXTURE, GL_PRIMARY_COLOR); - TEXENV_COMBINE_SET1(RGB, GL_REPLACE, GL_TEXTURE); - } else { - // somehow makes it keep the alpha - TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, GL_TEXTURE); - } - } - // TODO: MIX and the other one - } else if (prg->mix_flags & SH_MF_MULTIPLY) { - // TODO: is this right? - TEXENV_COMBINE_OFF(); - } else if (prg->mix_flags & SH_MF_MIX) { - TEXENV_COMBINE_ON(); - // HACK: determine this using flags and not this crap - if (prg->num_inputs > 1) { - // out.rgb = mix(color0.rgb, color1.rgb, texel0.rgb); - // no color1 tho, so mix with white (texenv color is set in init()) - TEXENV_COMBINE_OP(2, GL_SRC_COLOR, GL_SRC_ALPHA); - TEXENV_COMBINE_SET3(RGB, GL_INTERPOLATE, GL_CONSTANT, GL_PRIMARY_COLOR, GL_TEXTURE); - TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, GL_CONSTANT); - } else { - // out.rgb = mix(color0.rgb, texel0.rgb, texel0.a); - TEXENV_COMBINE_OP(2, GL_SRC_ALPHA, GL_SRC_ALPHA); - TEXENV_COMBINE_SET3(RGB, GL_INTERPOLATE, GL_TEXTURE, GL_PRIMARY_COLOR, GL_TEXTURE); - } - } else { - TEXENV_COMBINE_OFF(); - } -} - -static inline void texenv_set_texture_texture(UNUSED struct ShaderProgram *prg) { - glActiveTexture(GL_TEXTURE0); - TEXENV_COMBINE_OFF(); - glActiveTexture(GL_TEXTURE1); - TEXENV_COMBINE_ON(); - // out.rgb = mix(texel0.rgb, texel1.rgb, color0.rgb); - TEXENV_COMBINE_OP(2, GL_SRC_COLOR, GL_SRC_ALPHA); - TEXENV_COMBINE_SET3(RGB, GL_INTERPOLATE, GL_PREVIOUS, GL_TEXTURE, GL_PRIMARY_COLOR); - // out.a = texel0.a; - TEXENV_COMBINE_SET1(ALPHA, GL_REPLACE, GL_PREVIOUS); -} - -static void gfx_opengl_apply_shader(struct ShaderProgram *prg) { - const float *ofs = cur_buf; - - // vertices are always there - glVertexPointer(4, GL_FLOAT, cur_buf_stride, ofs); - ofs += 4; - - // have texture(s), specify same texcoords for every active texture - for (int i = 0; i < 2; ++i) { - if (prg->texture_used[i]) { - glEnable(GL_TEXTURE0 + i); - glClientActiveTexture(GL_TEXTURE0 + i); - glActiveTexture(GL_TEXTURE0 + i); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(2, GL_FLOAT, cur_buf_stride, ofs); - glEnable(GL_TEXTURE_2D); - ofs += 2; - } - } - - if (prg->shader_id & SHADER_OPT_FOG) { - // fog requested, we can deal with it in one of two ways - if (gl_adv_fog) { - // if GL_EXT_fog_coord is available, use the provided fog factor as scaled depth for GL fog - const float fogrgb[] = { ofs[0], ofs[1], ofs[2] }; - glEnable(GL_FOG); - glFogfv(GL_FOG_COLOR, fogrgb); // color is the same for all verts, only intensity is different - glEnableClientState(GL_FOG_COORD_ARRAY); - mglFogCoordPointer(GL_FLOAT, cur_buf_stride, ofs + 3); // point it to alpha, which is fog factor - } else { - // if there's no fog coords available, blend it on top of normal tris later - cur_fog_ofs = ofs; - } - ofs += 4; - } - - if (prg->num_inputs) { - // have colors - // TODO: more than one color (maybe glSecondaryColorPointer?) - // HACK: if there's a texture and two colors, one of them is likely for speculars or some shit (see mario head) - // if there's two colors but no texture, the real color is likely the second one - const int hack = (prg->num_inputs > 1) * (4 - (int)prg->texture_used[0]); - glEnableClientState(GL_COLOR_ARRAY); - glColorPointer(4, GL_FLOAT, cur_buf_stride, ofs + hack); - ofs += 4 * prg->num_inputs; - } - - if (prg->shader_id & SHADER_OPT_TEXTURE_EDGE) { - // (horrible) alpha discard - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.3f); - } - - // configure formulae - switch (prg->mix) { - case SH_MT_TEXTURE: - glActiveTexture(GL_TEXTURE0); - TEXENV_COMBINE_OFF(); - break; - - case SH_MT_TEXTURE_COLOR: - texenv_set_texture_color(prg); - break; - - case SH_MT_TEXTURE_TEXTURE: - texenv_set_texture_texture(prg); - break; - - default: - break; - } -} - -static void gfx_opengl_unload_shader(struct ShaderProgram *old_prg) { - if (cur_shader == old_prg || old_prg == NULL) - cur_shader = NULL; - - glClientActiveTexture(GL_TEXTURE0); - glActiveTexture(GL_TEXTURE0); - glDisable(GL_TEXTURE_2D); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - - glClientActiveTexture(GL_TEXTURE1); - glActiveTexture(GL_TEXTURE1); - glDisable(GL_TEXTURE_2D); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - - glDisable(GL_TEXTURE1); - glDisable(GL_TEXTURE0); - glDisable(GL_TEXTURE_2D); - glDisable(GL_ALPHA_TEST); - glDisable(GL_FOG); - cur_fog_ofs = NULL; // clear fog colors - - glDisableClientState(GL_COLOR_ARRAY); - if (gl_adv_fog) glDisableClientState(GL_FOG_COORD_ARRAY); -} - -static void gfx_opengl_load_shader(struct ShaderProgram *new_prg) { - cur_shader = new_prg; - // gfx_opengl_apply_shader(cur_shader); -} - -static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(uint32_t shader_id) { - uint8_t c[2][4]; - for (int i = 0; i < 4; i++) { - c[0][i] = (shader_id >> (i * 3)) & 7; - c[1][i] = (shader_id >> (12 + i * 3)) & 7; - } - - bool used_textures[2] = {0, 0}; - int num_inputs = 0; - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 4; j++) { - if (c[i][j] >= SHADER_INPUT_1 && c[i][j] <= SHADER_INPUT_4) { - if (c[i][j] > num_inputs) { - num_inputs = c[i][j]; - } - } - if (c[i][j] == SHADER_TEXEL0 || c[i][j] == SHADER_TEXEL0A) { - used_textures[0] = true; - } - if (c[i][j] == SHADER_TEXEL1) { - used_textures[1] = true; - } - } - } - - const bool color_alpha_same = (shader_id & 0xfff) == ((shader_id >> 12) & 0xfff); - const bool do_multiply[2] = {c[0][1] == 0 && c[0][3] == 0, c[1][1] == 0 && c[1][3] == 0}; - const bool do_mix[2] = {c[0][1] == c[0][3], c[1][1] == c[1][3]}; - const bool do_single[2] = {c[0][2] == 0, c[1][2] == 0}; - - struct ShaderProgram *prg = &shader_program_pool[shader_program_pool_size++]; - - prg->shader_id = shader_id; - prg->num_inputs = num_inputs; - prg->texture_used[0] = used_textures[0]; - prg->texture_used[1] = used_textures[1]; - - if (used_textures[0] && used_textures[1]) - prg->mix = SH_MT_TEXTURE_TEXTURE; - else if (used_textures[0] && num_inputs) - prg->mix = SH_MT_TEXTURE_COLOR; - else if (used_textures[0]) - prg->mix = SH_MT_TEXTURE; - else if (num_inputs > 1) - prg->mix = SH_MT_COLOR_COLOR; - else if (num_inputs) - prg->mix = SH_MT_COLOR; - - if (do_single[0]) prg->mix_flags |= SH_MF_SINGLE; - if (do_multiply[0]) prg->mix_flags |= SH_MF_MULTIPLY; - if (do_mix[0]) prg->mix_flags |= SH_MF_MIX; - - if (!color_alpha_same && (shader_id & SHADER_OPT_ALPHA)) { - prg->mix_flags |= SH_MF_OVERRIDE_ALPHA; - if (do_single[1]) prg->mix_flags |= SH_MF_SINGLE_ALPHA; - if (do_multiply[1]) prg->mix_flags |= SH_MF_MULTIPLY_ALPHA; - if (do_mix[1]) prg->mix_flags |= SH_MF_MIX_ALPHA; - if (c[1][3] < SHADER_TEXEL0) prg->mix_flags |= SH_MF_INPUT_ALPHA; - } - - gfx_opengl_load_shader(prg); - - return prg; -} - -static struct ShaderProgram *gfx_opengl_lookup_shader(uint32_t shader_id) { - for (size_t i = 0; i < shader_program_pool_size; i++) { - if (shader_program_pool[i].shader_id == shader_id) { - return &shader_program_pool[i]; - } - } - return NULL; -} - -static void gfx_opengl_shader_get_info(struct ShaderProgram *prg, uint8_t *num_inputs, bool used_textures[2]) { - *num_inputs = prg->num_inputs; - used_textures[0] = prg->texture_used[0]; - used_textures[1] = prg->texture_used[1]; -} - -static GLuint gfx_opengl_new_texture(void) { - GLuint ret; - glGenTextures(1, &ret); - return ret; -} - -static void gfx_opengl_select_texture(int tile, GLuint texture_id) { - glActiveTexture(GL_TEXTURE0 + tile); - glBindTexture(GL_TEXTURE_2D, texture_id); -} - -static void gfx_opengl_upload_texture(uint8_t *rgba32_buf, int width, int height) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf); -} - -static uint32_t gfx_cm_to_opengl(uint32_t val) { - if (val & G_TX_CLAMP) - return GL_CLAMP_TO_EDGE; - return (val & G_TX_MIRROR) ? GL_MIRRORED_REPEAT : GL_REPEAT; -} - -static void gfx_opengl_set_sampler_parameters(int tile, bool linear_filter, uint32_t cms, uint32_t cmt) { - const GLenum filter = linear_filter ? GL_LINEAR : GL_NEAREST; - glActiveTexture(GL_TEXTURE0 + tile); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gfx_cm_to_opengl(cms)); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gfx_cm_to_opengl(cmt)); -} - -static void gfx_opengl_set_depth_test(bool depth_test) { - if (depth_test) { - glEnable(GL_DEPTH_TEST); - } else { - glDisable(GL_DEPTH_TEST); - } -} - -static void gfx_opengl_set_depth_mask(bool z_upd) { - glDepthMask(z_upd ? GL_TRUE : GL_FALSE); -} - -static void gfx_opengl_set_zmode_decal(bool zmode_decal) { - if (zmode_decal) { - glPolygonOffset(-2, -2); - glEnable(GL_POLYGON_OFFSET_FILL); - } else { - glPolygonOffset(0, 0); - glDisable(GL_POLYGON_OFFSET_FILL); - } -} - -static void gfx_opengl_set_viewport(int x, int y, int width, int height) { - glViewport(x, y, width, height); -} - -static void gfx_opengl_set_scissor(int x, int y, int width, int height) { - glScissor(x, y, width, height); -} - -static void gfx_opengl_set_use_alpha(bool use_alpha) { - gl_blend = use_alpha; - if (use_alpha) { - glEnable(GL_BLEND); - } else { - glDisable(GL_BLEND); - } -} - -// draws the same triangles as plain fog color + fog intensity as alpha -// on top of the normal tris and blends them to achieve sort of the same effect -// as fog would -static inline void gfx_opengl_blend_fog_tris(void) { - // if a texture was used, replace it with fog color instead, but still keep the alpha - if (cur_shader->texture_used[0]) { - glActiveTexture(GL_TEXTURE0); - TEXENV_COMBINE_ON(); - // out.rgb = input0.rgb - TEXENV_COMBINE_SET1(RGB, GL_REPLACE, GL_PRIMARY_COLOR); - // out.a = texel0.a * input0.a - TEXENV_COMBINE_SET2(ALPHA, GL_MODULATE, GL_TEXTURE, GL_PRIMARY_COLOR); - } - - glEnableClientState(GL_COLOR_ARRAY); // enable color array temporarily - glColorPointer(4, GL_FLOAT, cur_buf_stride, cur_fog_ofs); // set fog colors as primary colors - if (!gl_blend) glEnable(GL_BLEND); // enable blending temporarily - glDepthFunc(GL_LEQUAL); // Z is the same as the base triangles - - glDrawArrays(GL_TRIANGLES, 0, 3 * cur_buf_num_tris); - - glDepthFunc(GL_LESS); // set back to default - if (!gl_blend) glDisable(GL_BLEND); // disable blending if it was disabled - glDisableClientState(GL_COLOR_ARRAY); // will get reenabled later anyway -} - -static void gfx_opengl_draw_triangles(float buf_vbo[], size_t buf_vbo_len, size_t buf_vbo_num_tris) { - //printf("flushing %d tris\n", buf_vbo_num_tris); - - cur_buf = buf_vbo; - cur_buf_size = buf_vbo_len * 4; - cur_buf_num_tris = buf_vbo_num_tris; - cur_buf_stride = cur_buf_size / (3 * cur_buf_num_tris); - - gfx_opengl_apply_shader(cur_shader); - - glDrawArrays(GL_TRIANGLES, 0, 3 * cur_buf_num_tris); - - // cur_fog_ofs is only set if GL_EXT_fog_coord isn't used - if (cur_fog_ofs) gfx_opengl_blend_fog_tris(); -} - -static inline bool gl_check_ext(const char *name) { - static const char *extstr = NULL; - - if (extstr == NULL) - extstr = (const char *)glGetString(GL_EXTENSIONS); - - if (!strstr(extstr, name)) { - fprintf(stderr, "GL extension not supported: %s\n", name); - return false; - } - - printf("GL extension detected: %s\n", name); - return true; -} - -static inline bool gl_get_version(int *major, int *minor, bool *is_es) { - const char *vstr = (const char *)glGetString(GL_VERSION); - if (!vstr || !vstr[0]) return false; - - if (!strncmp(vstr, "OpenGL ES ", 10)) { - vstr += 10; - *is_es = true; - } else if (!strncmp(vstr, "OpenGL ES-CM ", 13)) { - vstr += 13; - *is_es = true; - } - - return (sscanf(vstr, "%d.%d", major, minor) == 2); -} - -static void gfx_opengl_init(void) { -#if FOR_WINDOWS || defined(OSX_BUILD) - GLenum err; - if ((err = glewInit()) != GLEW_OK) - sys_fatal("could not init GLEW:\n%s", glewGetErrorString(err)); -#endif - - // check GL version - int vmajor, vminor; - bool is_es = false; - gl_get_version(&vmajor, &vminor, &is_es); - if (vmajor < 2 && vminor < 2 && !is_es) - sys_fatal("OpenGL 1.2+ is required.\nReported version: %s%d.%d", is_es ? "ES" : "", vmajor, vminor); - - // check extensions that we need - const bool supported = - gl_check_ext("GL_ARB_multitexture") && - gl_check_ext("GL_ARB_texture_env_combine"); - - if (!supported) - sys_fatal("required GL extensions are not supported"); - - gl_adv_fog = false; - - // check whether we can use advanced fog shit - const bool fog_ext = - vmajor > 1 || vminor > 3 || - gl_check_ext("GL_EXT_fog_coord") || - gl_check_ext("GL_ARB_fog_coord"); - - if (fog_ext) { - // try to load manually, as this might be an extension, and even then the ext list may lie - mglFogCoordPointer = mglGetProcAddress("glFogCoordPointer"); - if (!mglFogCoordPointer) mglFogCoordPointer = mglGetProcAddress("glFogCoordPointerEXT"); - if (!mglFogCoordPointer) mglFogCoordPointer = mglGetProcAddress("glFogCoordPointerARB"); - if (!mglFogCoordPointer) - printf("glFogCoordPointer is not actually available, it won't be used.\n"); - else - gl_adv_fog = true; // appears to be all good - } - - printf("GL_VERSION = %s\n", glGetString(GL_VERSION)); - printf("GL_EXTENSIONS =\n%s\n", glGetString(GL_EXTENSIONS)); - - if (gl_adv_fog) { - // set fog params, they never change - printf("GL_EXT_fog_coord available, using that for fog\n"); - glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD); - glFogi(GL_FOG_MODE, GL_LINEAR); - glFogf(GL_FOG_START, 0.0f); - glFogf(GL_FOG_END, 1.0f); - } - - // these also never change - glEnableClientState(GL_VERTEX_ARRAY); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, c_white); - TEXENV_COMBINE_OP(0, GL_SRC_COLOR, GL_SRC_ALPHA); - TEXENV_COMBINE_OP(1, GL_SRC_COLOR, GL_SRC_ALPHA); - moon_bind_hook(GFX_INIT); - moon_init_hook(0); - moon_call_hook(0); -} - -static void gfx_opengl_on_resize(void) { - moon_bind_hook(GFX_ON_REZISE); - moon_init_hook(0); - moon_call_hook(0); -} - -static void gfx_opengl_start_frame(void) { - - moon_bind_hook(GFX_PRE_START_FRAME); - moon_init_hook(0); - if(moon_call_hook(0)){ - return; - } - - glDisable(GL_SCISSOR_TEST); - glDepthMask(GL_TRUE); // Must be set to clear Z-buffer - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_SCISSOR_TEST); - moon_bind_hook(GFX_POST_START_FRAME); - moon_init_hook(0); - moon_call_hook(0); - -} - -static void gfx_opengl_end_frame(void) { - moon_bind_hook(GFX_PRE_END_FRAME); - moon_init_hook(0); - moon_call_hook(0); - - moon_bind_hook(GFX_POST_END_FRAME); - moon_init_hook(0); - moon_call_hook(0); -} - -static void gfx_opengl_finish_render(void) { -} - -static void gfx_opengl_shutdown(void) { - moon_bind_hook(GFX_SHUTDOWN); - moon_init_hook(0); - moon_call_hook(0); -} - -struct GfxRenderingAPI gfx_opengl_api = { - gfx_opengl_z_is_from_0_to_1, - gfx_opengl_unload_shader, - gfx_opengl_load_shader, - gfx_opengl_create_and_load_new_shader, - gfx_opengl_lookup_shader, - gfx_opengl_shader_get_info, - gfx_opengl_new_texture, - gfx_opengl_select_texture, - gfx_opengl_upload_texture, - gfx_opengl_set_sampler_parameters, - gfx_opengl_set_depth_test, - gfx_opengl_set_depth_mask, - gfx_opengl_set_zmode_decal, - gfx_opengl_set_viewport, - gfx_opengl_set_scissor, - gfx_opengl_set_use_alpha, - gfx_opengl_draw_triangles, - gfx_opengl_init, - gfx_opengl_on_resize, - gfx_opengl_start_frame, - gfx_opengl_end_frame, - gfx_opengl_finish_render, - gfx_opengl_shutdown -}; - -#endif // RAPI_GL_LEGACY diff --git a/src/pc/gfx/gfx_pc.c b/src/pc/gfx/gfx_pc.c index 3305c3b0..239ca579 100644 --- a/src/pc/gfx/gfx_pc.c +++ b/src/pc/gfx/gfx_pc.c @@ -259,13 +259,16 @@ static bool gfx_texture_cache_lookup(int tile, struct TextureData **n, const uin struct TextureData *node = moon_get_texture(orig_addr); if(node != NULL){ + if(tile) + printf("Tile: %d\n", tile); gfx_rapi->select_texture(tile, node->texture_id); + if(n != NULL) *n = node; return true; } else node = moon_create_texture(); if (node->texture_addr == NULL) - node->texture_id = gfx_rapi->new_texture(); + node->texture_id = gfx_rapi->new_texture(); gfx_rapi->select_texture(tile, node->texture_id); gfx_rapi->set_sampler_parameters(tile, false, 0, 0); @@ -298,15 +301,14 @@ static inline void load_memory_texture(void *imgdata, long size) { struct TextureData * forceTextureLoad(char* path) { struct TextureData *node = NULL; - if (gfx_texture_cache_lookup(0, &node, path, 0, 0)) { + if (gfx_texture_cache_lookup(0, &node, path, 0, 0)) return node; - } // the "texture data" is actually a C string with the path to our texture in it // load it from an external image in our data path char texname[SYS_MAX_PATH]; snprintf(texname, sizeof(texname), FS_TEXTUREDIR "/%s.png", (const char*)path); - moon_load_texture(0, texname, gfx_rapi); + moon_load_texture(0, texname, (const char*) path, gfx_rapi); return node; } @@ -325,7 +327,7 @@ static void import_texture(int tile) { // load it from an external image in our data path char texname[SYS_MAX_PATH]; snprintf(texname, sizeof(texname), FS_TEXTUREDIR "/%s.png", (const char*)rdp.loaded_texture[tile].addr); - moon_load_texture(tile, texname, gfx_rapi); + moon_load_texture(tile, texname, (const char*) rdp.loaded_texture[tile].addr, gfx_rapi); } static void gfx_normalize_vector(float v[3]) { diff --git a/src/pc/gfx/gfx_pc.h b/src/pc/gfx/gfx_pc.h index 37beac52..cf51133a 100644 --- a/src/pc/gfx/gfx_pc.h +++ b/src/pc/gfx/gfx_pc.h @@ -24,6 +24,7 @@ struct TextureData { uint32_t texture_id; uint8_t cms, cmt; char linear_filter; + int width, height; }; extern struct GfxDimensions gfx_current_dimensions; diff --git a/src/pc/gfx/gfx_rendering_api.h b/src/pc/gfx/gfx_rendering_api.h index e76efe74..d9e63b48 100644 --- a/src/pc/gfx/gfx_rendering_api.h +++ b/src/pc/gfx/gfx_rendering_api.h @@ -16,6 +16,7 @@ struct GfxRenderingAPI { void (*shader_get_info)(struct ShaderProgram *prg, uint8_t *num_inputs, bool used_textures[2]); uint32_t (*new_texture)(void); void (*select_texture)(int tile, uint32_t texture_id); + void (*delete_texture)(uint32_t texture_id); void (*upload_texture)(const uint8_t *rgba32_buf, int width, int height); void (*set_sampler_parameters)(int sampler, bool linear_filter, uint32_t cms, uint32_t cmt); void (*set_depth_test)(bool depth_test);