diff --git a/external/IconFontCppHeaders/IconsFontAwesome5.h b/external/IconFontCppHeaders/IconsFontAwesome5.h new file mode 100644 index 0000000..f70a5f0 --- /dev/null +++ b/external/IconFontCppHeaders/IconsFontAwesome5.h @@ -0,0 +1,861 @@ +// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11 +// from https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/advanced-options/metadata/icons.yml +// for use with https://github.com/FortAwesome/Font-Awesome/blob/master/web-fonts-with-css/webfonts/fa-solid-900.ttf, https://github.com/FortAwesome/Font-Awesome/blob/master/web-fonts-with-css/webfonts/fa-regular-400.ttf, +#pragma once + +#define FONT_ICON_FILE_NAME_FAR "fa-regular-400.ttf" +#define FONT_ICON_FILE_NAME_FAS "fa-solid-900.ttf" + +#define ICON_MIN_FA 0xf000 +#define ICON_MAX_FA 0xf72f +#define ICON_FA_NOTES_MEDICAL u8"\uf481" +#define ICON_FA_COPY u8"\uf0c5" +#define ICON_FA_CHEVRON_CIRCLE_RIGHT u8"\uf138" +#define ICON_FA_CROSSHAIRS u8"\uf05b" +#define ICON_FA_BROADCAST_TOWER u8"\uf519" +#define ICON_FA_EXTERNAL_LINK_SQUARE_ALT u8"\uf360" +#define ICON_FA_KISS_BEAM u8"\uf597" +#define ICON_FA_CHESS_BISHOP u8"\uf43a" +#define ICON_FA_TV u8"\uf26c" +#define ICON_FA_CROP_ALT u8"\uf565" +#define ICON_FA_TH u8"\uf00a" +#define ICON_FA_RECYCLE u8"\uf1b8" +#define ICON_FA_SMILE u8"\uf118" +#define ICON_FA_FAX u8"\uf1ac" +#define ICON_FA_DRAFTING_COMPASS u8"\uf568" +#define ICON_FA_USER_INJURED u8"\uf728" +#define ICON_FA_SCREWDRIVER u8"\uf54a" +#define ICON_FA_DHARMACHAKRA u8"\uf655" +#define ICON_FA_PRINT u8"\uf02f" +#define ICON_FA_GOPURAM u8"\uf664" +#define ICON_FA_CARET_UP u8"\uf0d8" +#define ICON_FA_SCHOOL u8"\uf549" +#define ICON_FA_FILE_PDF u8"\uf1c1" +#define ICON_FA_USERS_COG u8"\uf509" +#define ICON_FA_LIST u8"\uf03a" +#define ICON_FA_UPLOAD u8"\uf093" +#define ICON_FA_ADJUST u8"\uf042" +#define ICON_FA_VENUS u8"\uf221" +#define ICON_FA_HEADING u8"\uf1dc" +#define ICON_FA_ARROW_DOWN u8"\uf063" +#define ICON_FA_BICYCLE u8"\uf206" +#define ICON_FA_TIRED u8"\uf5c8" +#define ICON_FA_AIR_FRESHENER u8"\uf5d0" +#define ICON_FA_SYNC u8"\uf021" +#define ICON_FA_PAPER_PLANE u8"\uf1d8" +#define ICON_FA_VOLLEYBALL_BALL u8"\uf45f" +#define ICON_FA_RIBBON u8"\uf4d6" +#define ICON_FA_HAND_LIZARD u8"\uf258" +#define ICON_FA_CLOCK u8"\uf017" +#define ICON_FA_SUN u8"\uf185" +#define ICON_FA_FILE_POWERPOINT u8"\uf1c4" +#define ICON_FA_MICROCHIP u8"\uf2db" +#define ICON_FA_GRADUATION_CAP u8"\uf19d" +#define ICON_FA_ANGLE_DOUBLE_DOWN u8"\uf103" +#define ICON_FA_INFO_CIRCLE u8"\uf05a" +#define ICON_FA_TAGS u8"\uf02c" +#define ICON_FA_FILE_ALT u8"\uf15c" +#define ICON_FA_EQUALS u8"\uf52c" +#define ICON_FA_DIRECTIONS u8"\uf5eb" +#define ICON_FA_FILE_INVOICE u8"\uf570" +#define ICON_FA_SEARCH u8"\uf002" +#define ICON_FA_BIBLE u8"\uf647" +#define ICON_FA_FLASK u8"\uf0c3" +#define ICON_FA_CALENDAR_TIMES u8"\uf273" +#define ICON_FA_DIVIDE u8"\uf529" +#define ICON_FA_GREATER_THAN_EQUAL u8"\uf532" +#define ICON_FA_SLIDERS_H u8"\uf1de" +#define ICON_FA_EYE_SLASH u8"\uf070" +#define ICON_FA_BIRTHDAY_CAKE u8"\uf1fd" +#define ICON_FA_FEATHER_ALT u8"\uf56b" +#define ICON_FA_DNA u8"\uf471" +#define ICON_FA_BASEBALL_BALL u8"\uf433" +#define ICON_FA_HOSPITAL u8"\uf0f8" +#define ICON_FA_COINS u8"\uf51e" +#define ICON_FA_HRYVNIA u8"\uf6f2" +#define ICON_FA_FONT_AWESOME_LOGO_FULL u8"\uf4e6" +#define ICON_FA_PASSPORT u8"\uf5ab" +#define ICON_FA_SHOPPING_CART u8"\uf07a" +#define ICON_FA_AWARD u8"\uf559" +#define ICON_FA_WINDOW_RESTORE u8"\uf2d2" +#define ICON_FA_PHONE u8"\uf095" +#define ICON_FA_FLAG u8"\uf024" +#define ICON_FA_STETHOSCOPE u8"\uf0f1" +#define ICON_FA_DICE_D6 u8"\uf6d1" +#define ICON_FA_OUTDENT u8"\uf03b" +#define ICON_FA_LONG_ARROW_ALT_RIGHT u8"\uf30b" +#define ICON_FA_ADDRESS_CARD u8"\uf2bb" +#define ICON_FA_PARAGRAPH u8"\uf1dd" +#define ICON_FA_MALE u8"\uf183" +#define ICON_FA_HISTORY u8"\uf1da" +#define ICON_FA_USER_TIE u8"\uf508" +#define ICON_FA_SEARCH_PLUS u8"\uf00e" +#define ICON_FA_LIFE_RING u8"\uf1cd" +#define ICON_FA_SHARE u8"\uf064" +#define ICON_FA_ALIGN_JUSTIFY u8"\uf039" +#define ICON_FA_TOILET_PAPER u8"\uf71e" +#define ICON_FA_BATTERY_THREE_QUARTERS u8"\uf241" +#define ICON_FA_OBJECT_UNGROUP u8"\uf248" +#define ICON_FA_BRIEFCASE u8"\uf0b1" +#define ICON_FA_OIL_CAN u8"\uf613" +#define ICON_FA_THERMOMETER_FULL u8"\uf2c7" +#define ICON_FA_PLANE u8"\uf072" +#define ICON_FA_UNLINK u8"\uf127" +#define ICON_FA_WINDOW_MAXIMIZE u8"\uf2d0" +#define ICON_FA_STEP_BACKWARD u8"\uf048" +#define ICON_FA_DRAGON u8"\uf6d5" +#define ICON_FA_MICROPHONE_SLASH u8"\uf131" +#define ICON_FA_USER_PLUS u8"\uf234" +#define ICON_FA_WRENCH u8"\uf0ad" +#define ICON_FA_AMBULANCE u8"\uf0f9" +#define ICON_FA_WIND u8"\uf72e" +#define ICON_FA_UNIVERSAL_ACCESS u8"\uf29a" +#define ICON_FA_DICE_ONE u8"\uf525" +#define ICON_FA_KEYBOARD u8"\uf11c" +#define ICON_FA_CHECK_DOUBLE u8"\uf560" +#define ICON_FA_HEADPHONES_ALT u8"\uf58f" +#define ICON_FA_BATTERY_HALF u8"\uf242" +#define ICON_FA_PROJECT_DIAGRAM u8"\uf542" +#define ICON_FA_PRAY u8"\uf683" +#define ICON_FA_DOLLY u8"\uf472" +#define ICON_FA_GRIN_TEARS u8"\uf588" +#define ICON_FA_SORT_AMOUNT_UP u8"\uf161" +#define ICON_FA_COFFEE u8"\uf0f4" +#define ICON_FA_TABLET_ALT u8"\uf3fa" +#define ICON_FA_GRIN_BEAM_SWEAT u8"\uf583" +#define ICON_FA_HAND_POINT_RIGHT u8"\uf0a4" +#define ICON_FA_MAGIC u8"\uf0d0" +#define ICON_FA_CHARGING_STATION u8"\uf5e7" +#define ICON_FA_VOLUME_OFF u8"\uf026" +#define ICON_FA_SAD_TEAR u8"\uf5b4" +#define ICON_FA_CARET_RIGHT u8"\uf0da" +#define ICON_FA_BONG u8"\uf55c" +#define ICON_FA_BONE u8"\uf5d7" +#define ICON_FA_ELLIPSIS_V u8"\uf142" +#define ICON_FA_BALANCE_SCALE u8"\uf24e" +#define ICON_FA_FISH u8"\uf578" +#define ICON_FA_SPIDER u8"\uf717" +#define ICON_FA_CAMPGROUND u8"\uf6bb" +#define ICON_FA_CARET_SQUARE_UP u8"\uf151" +#define ICON_FA_RUPEE_SIGN u8"\uf156" +#define ICON_FA_ASSISTIVE_LISTENING_SYSTEMS u8"\uf2a2" +#define ICON_FA_POUND_SIGN u8"\uf154" +#define ICON_FA_ANKH u8"\uf644" +#define ICON_FA_BATTERY_QUARTER u8"\uf243" +#define ICON_FA_HAND_PEACE u8"\uf25b" +#define ICON_FA_SURPRISE u8"\uf5c2" +#define ICON_FA_SORT_NUMERIC_UP u8"\uf163" +#define ICON_FA_VIDEO_SLASH u8"\uf4e2" +#define ICON_FA_SUBWAY u8"\uf239" +#define ICON_FA_HORSE u8"\uf6f0" +#define ICON_FA_WINE_BOTTLE u8"\uf72f" +#define ICON_FA_BOOK_READER u8"\uf5da" +#define ICON_FA_COOKIE u8"\uf563" +#define ICON_FA_MONEY_BILL u8"\uf0d6" +#define ICON_FA_CHEVRON_DOWN u8"\uf078" +#define ICON_FA_CAR_SIDE u8"\uf5e4" +#define ICON_FA_FILTER u8"\uf0b0" +#define ICON_FA_BOOKMARK u8"\uf02e" +#define ICON_FA_FOLDER_OPEN u8"\uf07c" +#define ICON_FA_SIGNATURE u8"\uf5b7" +#define ICON_FA_HEARTBEAT u8"\uf21e" +#define ICON_FA_THUMBTACK u8"\uf08d" +#define ICON_FA_DICE_TWO u8"\uf528" +#define ICON_FA_LAUGH_WINK u8"\uf59c" +#define ICON_FA_TEXT_HEIGHT u8"\uf034" +#define ICON_FA_VOLUME_MUTE u8"\uf6a9" +#define ICON_FA_GRIN_TONGUE u8"\uf589" +#define ICON_FA_QRCODE u8"\uf029" +#define ICON_FA_MERCURY u8"\uf223" +#define ICON_FA_USER_ASTRONAUT u8"\uf4fb" +#define ICON_FA_SORT_AMOUNT_DOWN u8"\uf160" +#define ICON_FA_SORT_DOWN u8"\uf0dd" +#define ICON_FA_COMPACT_DISC u8"\uf51f" +#define ICON_FA_PERCENTAGE u8"\uf541" +#define ICON_FA_STORE u8"\uf54e" +#define ICON_FA_COMMENT_DOTS u8"\uf4ad" +#define ICON_FA_SMILE_WINK u8"\uf4da" +#define ICON_FA_HOTEL u8"\uf594" +#define ICON_FA_GLOBE_ASIA u8"\uf57e" +#define ICON_FA_VIAL u8"\uf492" +#define ICON_FA_STROOPWAFEL u8"\uf551" +#define ICON_FA_DATABASE u8"\uf1c0" +#define ICON_FA_TREE u8"\uf1bb" +#define ICON_FA_SHOWER u8"\uf2cc" +#define ICON_FA_DRUM_STEELPAN u8"\uf56a" +#define ICON_FA_FILE_UPLOAD u8"\uf574" +#define ICON_FA_MEDKIT u8"\uf0fa" +#define ICON_FA_MINUS u8"\uf068" +#define ICON_FA_SHEKEL_SIGN u8"\uf20b" +#define ICON_FA_BELL_SLASH u8"\uf1f6" +#define ICON_FA_MAIL_BULK u8"\uf674" +#define ICON_FA_MOUNTAIN u8"\uf6fc" +#define ICON_FA_COUCH u8"\uf4b8" +#define ICON_FA_CHESS u8"\uf439" +#define ICON_FA_FILE_EXPORT u8"\uf56e" +#define ICON_FA_SIGN_LANGUAGE u8"\uf2a7" +#define ICON_FA_SNOWFLAKE u8"\uf2dc" +#define ICON_FA_PLAY u8"\uf04b" +#define ICON_FA_HEADSET u8"\uf590" +#define ICON_FA_SQUARE_ROOT_ALT u8"\uf698" +#define ICON_FA_CHART_BAR u8"\uf080" +#define ICON_FA_CHART_AREA u8"\uf1fe" +#define ICON_FA_EURO_SIGN u8"\uf153" +#define ICON_FA_CHESS_KING u8"\uf43f" +#define ICON_FA_MOBILE u8"\uf10b" +#define ICON_FA_BOX_OPEN u8"\uf49e" +#define ICON_FA_DOG u8"\uf6d3" +#define ICON_FA_FUTBOL u8"\uf1e3" +#define ICON_FA_LIRA_SIGN u8"\uf195" +#define ICON_FA_LIGHTBULB u8"\uf0eb" +#define ICON_FA_BOMB u8"\uf1e2" +#define ICON_FA_TRUCK_MONSTER u8"\uf63b" +#define ICON_FA_ARROWS_ALT_H u8"\uf337" +#define ICON_FA_CHESS_ROOK u8"\uf447" +#define ICON_FA_FIRE_EXTINGUISHER u8"\uf134" +#define ICON_FA_ARROWS_ALT_V u8"\uf338" +#define ICON_FA_EYE_DROPPER u8"\uf1fb" +#define ICON_FA_FONT u8"\uf031" +#define ICON_FA_CAMERA_RETRO u8"\uf083" +#define ICON_FA_BLENDER u8"\uf517" +#define ICON_FA_THUMBS_DOWN u8"\uf165" +#define ICON_FA_GAMEPAD u8"\uf11b" +#define ICON_FA_COPYRIGHT u8"\uf1f9" +#define ICON_FA_JEDI u8"\uf669" +#define ICON_FA_HOCKEY_PUCK u8"\uf453" +#define ICON_FA_STOP_CIRCLE u8"\uf28d" +#define ICON_FA_BEZIER_CURVE u8"\uf55b" +#define ICON_FA_FOLDER u8"\uf07b" +#define ICON_FA_RSS u8"\uf09e" +#define ICON_FA_COLUMNS u8"\uf0db" +#define ICON_FA_GRIN_WINK u8"\uf58c" +#define ICON_FA_STOP u8"\uf04d" +#define ICON_FA_MONEY_CHECK_ALT u8"\uf53d" +#define ICON_FA_COMPASS u8"\uf14e" +#define ICON_FA_TOOLBOX u8"\uf552" +#define ICON_FA_LIST_OL u8"\uf0cb" +#define ICON_FA_WINE_GLASS u8"\uf4e3" +#define ICON_FA_USER_ALT_SLASH u8"\uf4fa" +#define ICON_FA_USER_TAG u8"\uf507" +#define ICON_FA_MICROSCOPE u8"\uf610" +#define ICON_FA_BRUSH u8"\uf55d" +#define ICON_FA_BAN u8"\uf05e" +#define ICON_FA_BARS u8"\uf0c9" +#define ICON_FA_CAR_CRASH u8"\uf5e1" +#define ICON_FA_ARROW_ALT_CIRCLE_DOWN u8"\uf358" +#define ICON_FA_MONEY_BILL_ALT u8"\uf3d1" +#define ICON_FA_JOURNAL_WHILLS u8"\uf66a" +#define ICON_FA_CHALKBOARD_TEACHER u8"\uf51c" +#define ICON_FA_PORTRAIT u8"\uf3e0" +#define ICON_FA_HAMMER u8"\uf6e3" +#define ICON_FA_RETWEET u8"\uf079" +#define ICON_FA_HOURGLASS u8"\uf254" +#define ICON_FA_HAND_PAPER u8"\uf256" +#define ICON_FA_SUBSCRIPT u8"\uf12c" +#define ICON_FA_DONATE u8"\uf4b9" +#define ICON_FA_GLASS_MARTINI_ALT u8"\uf57b" +#define ICON_FA_CODE_BRANCH u8"\uf126" +#define ICON_FA_NOT_EQUAL u8"\uf53e" +#define ICON_FA_MEH u8"\uf11a" +#define ICON_FA_LIST_ALT u8"\uf022" +#define ICON_FA_CUBES u8"\uf1b3" +#define ICON_FA_PRESCRIPTION u8"\uf5b1" +#define ICON_FA_TABLET u8"\uf10a" +#define ICON_FA_PENCIL_RULER u8"\uf5ae" +#define ICON_FA_CREDIT_CARD u8"\uf09d" +#define ICON_FA_ARCHWAY u8"\uf557" +#define ICON_FA_MAP_MARKER_ALT u8"\uf3c5" +#define ICON_FA_COG u8"\uf013" +#define ICON_FA_HANUKIAH u8"\uf6e6" +#define ICON_FA_SHUTTLE_VAN u8"\uf5b6" +#define ICON_FA_MONEY_CHECK u8"\uf53c" +#define ICON_FA_BELL u8"\uf0f3" +#define ICON_FA_TINT_SLASH u8"\uf5c7" +#define ICON_FA_PLANE_DEPARTURE u8"\uf5b0" +#define ICON_FA_USER_CHECK u8"\uf4fc" +#define ICON_FA_CHURCH u8"\uf51d" +#define ICON_FA_PALLET u8"\uf482" +#define ICON_FA_TINT u8"\uf043" +#define ICON_FA_STAMP u8"\uf5bf" +#define ICON_FA_KAABA u8"\uf66b" +#define ICON_FA_ALIGN_RIGHT u8"\uf038" +#define ICON_FA_QUOTE_RIGHT u8"\uf10e" +#define ICON_FA_BEER u8"\uf0fc" +#define ICON_FA_GRIN_ALT u8"\uf581" +#define ICON_FA_SORT_NUMERIC_DOWN u8"\uf162" +#define ICON_FA_FIRE u8"\uf06d" +#define ICON_FA_FAST_FORWARD u8"\uf050" +#define ICON_FA_MAP_MARKED_ALT u8"\uf5a0" +#define ICON_FA_PENCIL_ALT u8"\uf303" +#define ICON_FA_TRUCK_LOADING u8"\uf4de" +#define ICON_FA_EXPAND_ARROWS_ALT u8"\uf31e" +#define ICON_FA_CARET_SQUARE_DOWN u8"\uf150" +#define ICON_FA_OBJECT_GROUP u8"\uf247" +#define ICON_FA_ANCHOR u8"\uf13d" +#define ICON_FA_HAND_POINT_LEFT u8"\uf0a5" +#define ICON_FA_USER_TIMES u8"\uf235" +#define ICON_FA_CALCULATOR u8"\uf1ec" +#define ICON_FA_DIZZY u8"\uf567" +#define ICON_FA_KISS_WINK_HEART u8"\uf598" +#define ICON_FA_FILE_MEDICAL u8"\uf477" +#define ICON_FA_SWIMMING_POOL u8"\uf5c5" +#define ICON_FA_SEARCH_LOCATION u8"\uf689" +#define ICON_FA_WEIGHT_HANGING u8"\uf5cd" +#define ICON_FA_FAST_BACKWARD u8"\uf049" +#define ICON_FA_USER u8"\uf007" +#define ICON_FA_MINUS_CIRCLE u8"\uf056" +#define ICON_FA_CHESS_PAWN u8"\uf443" +#define ICON_FA_CALENDAR_MINUS u8"\uf272" +#define ICON_FA_CHESS_BOARD u8"\uf43c" +#define ICON_FA_LANDMARK u8"\uf66f" +#define ICON_FA_SWATCHBOOK u8"\uf5c3" +#define ICON_FA_LAPTOP u8"\uf109" +#define ICON_FA_TORAH u8"\uf6a0" +#define ICON_FA_FROWN_OPEN u8"\uf57a" +#define ICON_FA_USER_LOCK u8"\uf502" +#define ICON_FA_AD u8"\uf641" +#define ICON_FA_USER_CIRCLE u8"\uf2bd" +#define ICON_FA_HANDSHAKE u8"\uf2b5" +#define ICON_FA_CUT u8"\uf0c4" +#define ICON_FA_HIKING u8"\uf6ec" +#define ICON_FA_STREET_VIEW u8"\uf21d" +#define ICON_FA_GREATER_THAN u8"\uf531" +#define ICON_FA_PASTAFARIANISM u8"\uf67b" +#define ICON_FA_MINUS_SQUARE u8"\uf146" +#define ICON_FA_SAVE u8"\uf0c7" +#define ICON_FA_COMMENT_DOLLAR u8"\uf651" +#define ICON_FA_TRASH_ALT u8"\uf2ed" +#define ICON_FA_PUZZLE_PIECE u8"\uf12e" +#define ICON_FA_MENORAH u8"\uf676" +#define ICON_FA_CLOUD_SUN u8"\uf6c4" +#define ICON_FA_USER_FRIENDS u8"\uf500" +#define ICON_FA_USER_EDIT u8"\uf4ff" +#define ICON_FA_FILE_MEDICAL_ALT u8"\uf478" +#define ICON_FA_ARROW_LEFT u8"\uf060" +#define ICON_FA_BOXES u8"\uf468" +#define ICON_FA_THERMOMETER_EMPTY u8"\uf2cb" +#define ICON_FA_EXCLAMATION_TRIANGLE u8"\uf071" +#define ICON_FA_GIFT u8"\uf06b" +#define ICON_FA_COGS u8"\uf085" +#define ICON_FA_SIGNAL u8"\uf012" +#define ICON_FA_SHAPES u8"\uf61f" +#define ICON_FA_ELLIPSIS_H u8"\uf141" +#define ICON_FA_LESS_THAN_EQUAL u8"\uf537" +#define ICON_FA_CHEVRON_CIRCLE_LEFT u8"\uf137" +#define ICON_FA_MORTAR_PESTLE u8"\uf5a7" +#define ICON_FA_SITEMAP u8"\uf0e8" +#define ICON_FA_BUS_ALT u8"\uf55e" +#define ICON_FA_ID_BADGE u8"\uf2c1" +#define ICON_FA_FIST_RAISED u8"\uf6de" +#define ICON_FA_BATTERY_FULL u8"\uf240" +#define ICON_FA_CROWN u8"\uf521" +#define ICON_FA_EXCHANGE_ALT u8"\uf362" +#define ICON_FA_STAR_OF_DAVID u8"\uf69a" +#define ICON_FA_REDO u8"\uf01e" +#define ICON_FA_EXCLAMATION_CIRCLE u8"\uf06a" +#define ICON_FA_COMMENTS u8"\uf086" +#define ICON_FA_BRIEFCASE_MEDICAL u8"\uf469" +#define ICON_FA_CARET_SQUARE_RIGHT u8"\uf152" +#define ICON_FA_PEN u8"\uf304" +#define ICON_FA_BACKSPACE u8"\uf55a" +#define ICON_FA_SLASH u8"\uf715" +#define ICON_FA_HOT_TUB u8"\uf593" +#define ICON_FA_SUITCASE_ROLLING u8"\uf5c1" +#define ICON_FA_BOLD u8"\uf032" +#define ICON_FA_GLOBE_AFRICA u8"\uf57c" +#define ICON_FA_BARCODE u8"\uf02a" +#define ICON_FA_BOLT u8"\uf0e7" +#define ICON_FA_THERMOMETER_QUARTER u8"\uf2ca" +#define ICON_FA_EYE u8"\uf06e" +#define ICON_FA_TROPHY u8"\uf091" +#define ICON_FA_USER_ALT u8"\uf406" +#define ICON_FA_BRAILLE u8"\uf2a1" +#define ICON_FA_PLUS u8"\uf067" +#define ICON_FA_LIST_UL u8"\uf0ca" +#define ICON_FA_SMOKING_BAN u8"\uf54d" +#define ICON_FA_VOLUME_DOWN u8"\uf027" +#define ICON_FA_QUESTION_CIRCLE u8"\uf059" +#define ICON_FA_FILE_CODE u8"\uf1c9" +#define ICON_FA_GAVEL u8"\uf0e3" +#define ICON_FA_NETWORK_WIRED u8"\uf6ff" +#define ICON_FA_CARET_SQUARE_LEFT u8"\uf191" +#define ICON_FA_PLANE_ARRIVAL u8"\uf5af" +#define ICON_FA_SHARE_SQUARE u8"\uf14d" +#define ICON_FA_THERMOMETER_HALF u8"\uf2c9" +#define ICON_FA_QUESTION u8"\uf128" +#define ICON_FA_CAR_BATTERY u8"\uf5df" +#define ICON_FA_DOOR_CLOSED u8"\uf52a" +#define ICON_FA_LEAF u8"\uf06c" +#define ICON_FA_USER_MINUS u8"\uf503" +#define ICON_FA_MUSIC u8"\uf001" +#define ICON_FA_HOUSE_DAMAGE u8"\uf6f1" +#define ICON_FA_CHEVRON_RIGHT u8"\uf054" +#define ICON_FA_GRIP_HORIZONTAL u8"\uf58d" +#define ICON_FA_DICE_FOUR u8"\uf524" +#define ICON_FA_DEAF u8"\uf2a4" +#define ICON_FA_REGISTERED u8"\uf25d" +#define ICON_FA_WINDOW_CLOSE u8"\uf410" +#define ICON_FA_LINK u8"\uf0c1" +#define ICON_FA_ATOM u8"\uf5d2" +#define ICON_FA_LESS_THAN u8"\uf536" +#define ICON_FA_OTTER u8"\uf700" +#define ICON_FA_INFO u8"\uf129" +#define ICON_FA_MARS_DOUBLE u8"\uf227" +#define ICON_FA_CLIPBOARD_CHECK u8"\uf46c" +#define ICON_FA_SKULL u8"\uf54c" +#define ICON_FA_PAINT_BRUSH u8"\uf1fc" +#define ICON_FA_HOSPITAL_SYMBOL u8"\uf47e" +#define ICON_FA_X_RAY u8"\uf497" +#define ICON_FA_ARROW_UP u8"\uf062" +#define ICON_FA_MONEY_BILL_WAVE u8"\uf53a" +#define ICON_FA_DOT_CIRCLE u8"\uf192" +#define ICON_FA_PAUSE_CIRCLE u8"\uf28b" +#define ICON_FA_IMAGES u8"\uf302" +#define ICON_FA_STAR_HALF u8"\uf089" +#define ICON_FA_SPLOTCH u8"\uf5bc" +#define ICON_FA_STAR_HALF_ALT u8"\uf5c0" +#define ICON_FA_SHIP u8"\uf21a" +#define ICON_FA_BOOK_DEAD u8"\uf6b7" +#define ICON_FA_CHECK u8"\uf00c" +#define ICON_FA_POWER_OFF u8"\uf011" +#define ICON_FA_LEMON u8"\uf094" +#define ICON_FA_GLOBE_AMERICAS u8"\uf57d" +#define ICON_FA_PEACE u8"\uf67c" +#define ICON_FA_THERMOMETER_THREE_QUARTERS u8"\uf2c8" +#define ICON_FA_WAREHOUSE u8"\uf494" +#define ICON_FA_TRANSGENDER u8"\uf224" +#define ICON_FA_PLUS_SQUARE u8"\uf0fe" +#define ICON_FA_BULLSEYE u8"\uf140" +#define ICON_FA_COOKIE_BITE u8"\uf564" +#define ICON_FA_USERS u8"\uf0c0" +#define ICON_FA_TRANSGENDER_ALT u8"\uf225" +#define ICON_FA_ASTERISK u8"\uf069" +#define ICON_FA_PLUS_CIRCLE u8"\uf055" +#define ICON_FA_CART_ARROW_DOWN u8"\uf218" +#define ICON_FA_FLUSHED u8"\uf579" +#define ICON_FA_STORE_ALT u8"\uf54f" +#define ICON_FA_PEOPLE_CARRY u8"\uf4ce" +#define ICON_FA_LONG_ARROW_ALT_DOWN u8"\uf309" +#define ICON_FA_SAD_CRY u8"\uf5b3" +#define ICON_FA_DIGITAL_TACHOGRAPH u8"\uf566" +#define ICON_FA_FILE_EXCEL u8"\uf1c3" +#define ICON_FA_TEETH u8"\uf62e" +#define ICON_FA_HAND_SCISSORS u8"\uf257" +#define ICON_FA_FILE_INVOICE_DOLLAR u8"\uf571" +#define ICON_FA_BACKWARD u8"\uf04a" +#define ICON_FA_SCROLL u8"\uf70e" +#define ICON_FA_CODE u8"\uf121" +#define ICON_FA_TORII_GATE u8"\uf6a1" +#define ICON_FA_CHAIR u8"\uf6c0" +#define ICON_FA_DUMBBELL u8"\uf44b" +#define ICON_FA_ANGLE_DOUBLE_UP u8"\uf102" +#define ICON_FA_ANGLE_DOUBLE_LEFT u8"\uf100" +#define ICON_FA_MOSQUE u8"\uf678" +#define ICON_FA_COMMENTS_DOLLAR u8"\uf653" +#define ICON_FA_FILE_PRESCRIPTION u8"\uf572" +#define ICON_FA_ANGLE_LEFT u8"\uf104" +#define ICON_FA_ATLAS u8"\uf558" +#define ICON_FA_PIGGY_BANK u8"\uf4d3" +#define ICON_FA_DOLLY_FLATBED u8"\uf474" +#define ICON_FA_RANDOM u8"\uf074" +#define ICON_FA_PEN_ALT u8"\uf305" +#define ICON_FA_PRAYING_HANDS u8"\uf684" +#define ICON_FA_VOLUME_UP u8"\uf028" +#define ICON_FA_CLIPBOARD_LIST u8"\uf46d" +#define ICON_FA_GRIN_STARS u8"\uf587" +#define ICON_FA_FOLDER_MINUS u8"\uf65d" +#define ICON_FA_MAGNET u8"\uf076" +#define ICON_FA_VIHARA u8"\uf6a7" +#define ICON_FA_GRIMACE u8"\uf57f" +#define ICON_FA_CHECK_CIRCLE u8"\uf058" +#define ICON_FA_SEARCH_DOLLAR u8"\uf688" +#define ICON_FA_LONG_ARROW_ALT_LEFT u8"\uf30a" +#define ICON_FA_CROW u8"\uf520" +#define ICON_FA_CROP u8"\uf125" +#define ICON_FA_SIGN u8"\uf4d9" +#define ICON_FA_ARROW_CIRCLE_DOWN u8"\uf0ab" +#define ICON_FA_VIDEO u8"\uf03d" +#define ICON_FA_DOWNLOAD u8"\uf019" +#define ICON_FA_CARET_DOWN u8"\uf0d7" +#define ICON_FA_CHEVRON_LEFT u8"\uf053" +#define ICON_FA_HAMSA u8"\uf665" +#define ICON_FA_CART_PLUS u8"\uf217" +#define ICON_FA_CLIPBOARD u8"\uf328" +#define ICON_FA_SHOE_PRINTS u8"\uf54b" +#define ICON_FA_PHONE_SLASH u8"\uf3dd" +#define ICON_FA_REPLY u8"\uf3e5" +#define ICON_FA_HOURGLASS_HALF u8"\uf252" +#define ICON_FA_LONG_ARROW_ALT_UP u8"\uf30c" +#define ICON_FA_CHESS_KNIGHT u8"\uf441" +#define ICON_FA_BURN u8"\uf46a" +#define ICON_FA_DRAW_POLYGON u8"\uf5ee" +#define ICON_FA_PAUSE u8"\uf04c" +#define ICON_FA_WINE_GLASS_ALT u8"\uf5ce" +#define ICON_FA_BOX u8"\uf466" +#define ICON_FA_DIAGNOSES u8"\uf470" +#define ICON_FA_FILE_IMAGE u8"\uf1c5" +#define ICON_FA_ARROW_CIRCLE_RIGHT u8"\uf0a9" +#define ICON_FA_TASKS u8"\uf0ae" +#define ICON_FA_VECTOR_SQUARE u8"\uf5cb" +#define ICON_FA_QUOTE_LEFT u8"\uf10d" +#define ICON_FA_MOBILE_ALT u8"\uf3cd" +#define ICON_FA_USER_SHIELD u8"\uf505" +#define ICON_FA_MARKER u8"\uf5a1" +#define ICON_FA_UTENSIL_SPOON u8"\uf2e5" +#define ICON_FA_CLOUD u8"\uf0c2" +#define ICON_FA_HAND_HOLDING_USD u8"\uf4c0" +#define ICON_FA_CERTIFICATE u8"\uf0a3" +#define ICON_FA_CLOUD_DOWNLOAD_ALT u8"\uf381" +#define ICON_FA_ANGRY u8"\uf556" +#define ICON_FA_FROG u8"\uf52e" +#define ICON_FA_CAMERA u8"\uf030" +#define ICON_FA_DICE_THREE u8"\uf527" +#define ICON_FA_MEMORY u8"\uf538" +#define ICON_FA_PEN_SQUARE u8"\uf14b" +#define ICON_FA_SORT u8"\uf0dc" +#define ICON_FA_PLUG u8"\uf1e6" +#define ICON_FA_MOUSE_POINTER u8"\uf245" +#define ICON_FA_ENVELOPE u8"\uf0e0" +#define ICON_FA_LAYER_GROUP u8"\uf5fd" +#define ICON_FA_TRAIN u8"\uf238" +#define ICON_FA_BULLHORN u8"\uf0a1" +#define ICON_FA_CONCIERGE_BELL u8"\uf562" +#define ICON_FA_CIRCLE u8"\uf111" +#define ICON_FA_I_CURSOR u8"\uf246" +#define ICON_FA_CAR u8"\uf1b9" +#define ICON_FA_CAT u8"\uf6be" +#define ICON_FA_WALLET u8"\uf555" +#define ICON_FA_H_SQUARE u8"\uf0fd" +#define ICON_FA_HEART u8"\uf004" +#define ICON_FA_LOCK_OPEN u8"\uf3c1" +#define ICON_FA_STREAM u8"\uf550" +#define ICON_FA_LOCK u8"\uf023" +#define ICON_FA_TAG u8"\uf02b" +#define ICON_FA_SMILE_BEAM u8"\uf5b8" +#define ICON_FA_MICROPHONE_ALT u8"\uf3c9" +#define ICON_FA_SPA u8"\uf5bb" +#define ICON_FA_CHEVRON_CIRCLE_DOWN u8"\uf13a" +#define ICON_FA_FOLDER_PLUS u8"\uf65e" +#define ICON_FA_TICKET_ALT u8"\uf3ff" +#define ICON_FA_BOOK_OPEN u8"\uf518" +#define ICON_FA_MAP u8"\uf279" +#define ICON_FA_COCKTAIL u8"\uf561" +#define ICON_FA_CLONE u8"\uf24d" +#define ICON_FA_ID_CARD_ALT u8"\uf47f" +#define ICON_FA_CHECK_SQUARE u8"\uf14a" +#define ICON_FA_CHART_LINE u8"\uf201" +#define ICON_FA_DOVE u8"\uf4ba" +#define ICON_FA_MARS_STROKE u8"\uf229" +#define ICON_FA_ENVELOPE_OPEN u8"\uf2b6" +#define ICON_FA_WHEELCHAIR u8"\uf193" +#define ICON_FA_ROBOT u8"\uf544" +#define ICON_FA_UNDO_ALT u8"\uf2ea" +#define ICON_FA_TRUCK u8"\uf0d1" +#define ICON_FA_WON_SIGN u8"\uf159" +#define ICON_FA_SUPERSCRIPT u8"\uf12b" +#define ICON_FA_TTY u8"\uf1e4" +#define ICON_FA_USER_MD u8"\uf0f0" +#define ICON_FA_ALIGN_LEFT u8"\uf036" +#define ICON_FA_TABLETS u8"\uf490" +#define ICON_FA_MOTORCYCLE u8"\uf21c" +#define ICON_FA_ANGLE_UP u8"\uf106" +#define ICON_FA_BROOM u8"\uf51a" +#define ICON_FA_DICE_D20 u8"\uf6cf" +#define ICON_FA_LEVEL_DOWN_ALT u8"\uf3be" +#define ICON_FA_PAPERCLIP u8"\uf0c6" +#define ICON_FA_USER_CLOCK u8"\uf4fd" +#define ICON_FA_SORT_ALPHA_UP u8"\uf15e" +#define ICON_FA_AUDIO_DESCRIPTION u8"\uf29e" +#define ICON_FA_FILE_CSV u8"\uf6dd" +#define ICON_FA_FILE_DOWNLOAD u8"\uf56d" +#define ICON_FA_SYNC_ALT u8"\uf2f1" +#define ICON_FA_KISS u8"\uf596" +#define ICON_FA_HANDS u8"\uf4c2" +#define ICON_FA_BATH u8"\uf2cd" +#define ICON_FA_EDIT u8"\uf044" +#define ICON_FA_UNIVERSITY u8"\uf19c" +#define ICON_FA_KHANDA u8"\uf66d" +#define ICON_FA_GLASSES u8"\uf530" +#define ICON_FA_SQUARE u8"\uf0c8" +#define ICON_FA_GRIN_SQUINT u8"\uf585" +#define ICON_FA_GLOBE u8"\uf0ac" +#define ICON_FA_RECEIPT u8"\uf543" +#define ICON_FA_STRIKETHROUGH u8"\uf0cc" +#define ICON_FA_UNLOCK u8"\uf09c" +#define ICON_FA_DICE_SIX u8"\uf526" +#define ICON_FA_GRIP_VERTICAL u8"\uf58e" +#define ICON_FA_PILLS u8"\uf484" +#define ICON_FA_EXCLAMATION u8"\uf12a" +#define ICON_FA_CALENDAR_PLUS u8"\uf271" +#define ICON_FA_LOCATION_ARROW u8"\uf124" +#define ICON_FA_UMBRELLA u8"\uf0e9" +#define ICON_FA_QURAN u8"\uf687" +#define ICON_FA_UNDO u8"\uf0e2" +#define ICON_FA_FUNNEL_DOLLAR u8"\uf662" +#define ICON_FA_INDENT u8"\uf03c" +#define ICON_FA_LANGUAGE u8"\uf1ab" +#define ICON_FA_ARROW_ALT_CIRCLE_UP u8"\uf35b" +#define ICON_FA_ROUTE u8"\uf4d7" +#define ICON_FA_HEADPHONES u8"\uf025" +#define ICON_FA_TIMES u8"\uf00d" +#define ICON_FA_LEVEL_UP_ALT u8"\uf3bf" +#define ICON_FA_BLIND u8"\uf29d" +#define ICON_FA_PHONE_SQUARE u8"\uf098" +#define ICON_FA_SHOPPING_BASKET u8"\uf291" +#define ICON_FA_RING u8"\uf70b" +#define ICON_FA_CITY u8"\uf64f" +#define ICON_FA_TEXT_WIDTH u8"\uf035" +#define ICON_FA_RSS_SQUARE u8"\uf143" +#define ICON_FA_PARACHUTE_BOX u8"\uf4cd" +#define ICON_FA_CLOUD_UPLOAD_ALT u8"\uf382" +#define ICON_FA_SORT_UP u8"\uf0de" +#define ICON_FA_SIGN_OUT_ALT u8"\uf2f5" +#define ICON_FA_USER_NINJA u8"\uf504" +#define ICON_FA_SIGN_IN_ALT u8"\uf2f6" +#define ICON_FA_FORWARD u8"\uf04e" +#define ICON_FA_SHARE_ALT u8"\uf1e0" +#define ICON_FA_CALENDAR_CHECK u8"\uf274" +#define ICON_FA_PEN_FANCY u8"\uf5ac" +#define ICON_FA_BED u8"\uf236" +#define ICON_FA_FILE_SIGNATURE u8"\uf573" +#define ICON_FA_TOGGLE_OFF u8"\uf204" +#define ICON_FA_TRAFFIC_LIGHT u8"\uf637" +#define ICON_FA_TRACTOR u8"\uf722" +#define ICON_FA_MEH_ROLLING_EYES u8"\uf5a5" +#define ICON_FA_COMMENT_ALT u8"\uf27a" +#define ICON_FA_RULER_HORIZONTAL u8"\uf547" +#define ICON_FA_PAINT_ROLLER u8"\uf5aa" +#define ICON_FA_HAT_WIZARD u8"\uf6e8" +#define ICON_FA_CALENDAR u8"\uf133" +#define ICON_FA_MICROPHONE u8"\uf130" +#define ICON_FA_FOOTBALL_BALL u8"\uf44e" +#define ICON_FA_ALLERGIES u8"\uf461" +#define ICON_FA_ID_CARD u8"\uf2c2" +#define ICON_FA_REDO_ALT u8"\uf2f9" +#define ICON_FA_PLAY_CIRCLE u8"\uf144" +#define ICON_FA_THERMOMETER u8"\uf491" +#define ICON_FA_DOLLAR_SIGN u8"\uf155" +#define ICON_FA_DUNGEON u8"\uf6d9" +#define ICON_FA_COMPRESS u8"\uf066" +#define ICON_FA_YEN_SIGN u8"\uf157" +#define ICON_FA_BLENDER_PHONE u8"\uf6b6" +#define ICON_FA_ANGLE_RIGHT u8"\uf105" +#define ICON_FA_CHESS_QUEEN u8"\uf445" +#define ICON_FA_MEDAL u8"\uf5a2" +#define ICON_FA_MEH_BLANK u8"\uf5a4" +#define ICON_FA_EJECT u8"\uf052" +#define ICON_FA_HOURGLASS_END u8"\uf253" +#define ICON_FA_TOOTH u8"\uf5c9" +#define ICON_FA_BUSINESS_TIME u8"\uf64a" +#define ICON_FA_PLACE_OF_WORSHIP u8"\uf67f" +#define ICON_FA_GRIN_TONGUE_SQUINT u8"\uf58a" +#define ICON_FA_WALKING u8"\uf554" +#define ICON_FA_SHIPPING_FAST u8"\uf48b" +#define ICON_FA_CARET_LEFT u8"\uf0d9" +#define ICON_FA_DICE u8"\uf522" +#define ICON_FA_RUBLE_SIGN u8"\uf158" +#define ICON_FA_RULER_VERTICAL u8"\uf548" +#define ICON_FA_HAND_POINTER u8"\uf25a" +#define ICON_FA_TAPE u8"\uf4db" +#define ICON_FA_SHOPPING_BAG u8"\uf290" +#define ICON_FA_HIPPO u8"\uf6ed" +#define ICON_FA_CUBE u8"\uf1b2" +#define ICON_FA_CAPSULES u8"\uf46b" +#define ICON_FA_KIWI_BIRD u8"\uf535" +#define ICON_FA_CHEVRON_CIRCLE_UP u8"\uf139" +#define ICON_FA_MARS_STROKE_V u8"\uf22a" +#define ICON_FA_FILE_ARCHIVE u8"\uf1c6" +#define ICON_FA_JOINT u8"\uf595" +#define ICON_FA_MARS_STROKE_H u8"\uf22b" +#define ICON_FA_ADDRESS_BOOK u8"\uf2b9" +#define ICON_FA_PROCEDURES u8"\uf487" +#define ICON_FA_GEM u8"\uf3a5" +#define ICON_FA_RULER_COMBINED u8"\uf546" +#define ICON_FA_BRAIN u8"\uf5dc" +#define ICON_FA_STAR_AND_CRESCENT u8"\uf699" +#define ICON_FA_FIGHTER_JET u8"\uf0fb" +#define ICON_FA_SPACE_SHUTTLE u8"\uf197" +#define ICON_FA_MAP_PIN u8"\uf276" +#define ICON_FA_ALIGN_CENTER u8"\uf037" +#define ICON_FA_SORT_ALPHA_DOWN u8"\uf15d" +#define ICON_FA_PARKING u8"\uf540" +#define ICON_FA_MAP_SIGNS u8"\uf277" +#define ICON_FA_PALETTE u8"\uf53f" +#define ICON_FA_GLASS_MARTINI u8"\uf000" +#define ICON_FA_TIMES_CIRCLE u8"\uf057" +#define ICON_FA_MONUMENT u8"\uf5a6" +#define ICON_FA_GRIN_BEAM u8"\uf582" +#define ICON_FA_KEY u8"\uf084" +#define ICON_FA_TH_LIST u8"\uf00b" +#define ICON_FA_SHARE_ALT_SQUARE u8"\uf1e1" +#define ICON_FA_DRUM u8"\uf569" +#define ICON_FA_FILE_CONTRACT u8"\uf56c" +#define ICON_FA_UNLOCK_ALT u8"\uf13e" +#define ICON_FA_MICROPHONE_ALT_SLASH u8"\uf539" +#define ICON_FA_USER_SECRET u8"\uf21b" +#define ICON_FA_ARROW_RIGHT u8"\uf061" +#define ICON_FA_FILE_VIDEO u8"\uf1c8" +#define ICON_FA_ARROW_ALT_CIRCLE_RIGHT u8"\uf35a" +#define ICON_FA_COMMENT u8"\uf075" +#define ICON_FA_USER_GRADUATE u8"\uf501" +#define ICON_FA_POO u8"\uf2fe" +#define ICON_FA_LAUGH u8"\uf599" +#define ICON_FA_TABLE u8"\uf0ce" +#define ICON_FA_POLL u8"\uf681" +#define ICON_FA_CAR_ALT u8"\uf5de" +#define ICON_FA_THUMBS_UP u8"\uf164" +#define ICON_FA_TRADEMARK u8"\uf25c" +#define ICON_FA_CLOUD_MOON u8"\uf6c3" +#define ICON_FA_VIALS u8"\uf493" +#define ICON_FA_FIRST_AID u8"\uf479" +#define ICON_FA_ERASER u8"\uf12d" +#define ICON_FA_MARS u8"\uf222" +#define ICON_FA_STAR_OF_LIFE u8"\uf621" +#define ICON_FA_FEATHER u8"\uf52d" +#define ICON_FA_SQUARE_FULL u8"\uf45c" +#define ICON_FA_HOURGLASS_START u8"\uf251" +#define ICON_FA_GRIN_HEARTS u8"\uf584" +#define ICON_FA_USER_COG u8"\uf4fe" +#define ICON_FA_HASHTAG u8"\uf292" +#define ICON_FA_SMOKING u8"\uf48d" +#define ICON_FA_SEEDLING u8"\uf4d8" +#define ICON_FA_HAYKAL u8"\uf666" +#define ICON_FA_TSHIRT u8"\uf553" +#define ICON_FA_LAUGH_SQUINT u8"\uf59b" +#define ICON_FA_HDD u8"\uf0a0" +#define ICON_FA_NEWSPAPER u8"\uf1ea" +#define ICON_FA_HOSPITAL_ALT u8"\uf47d" +#define ICON_FA_USER_SLASH u8"\uf506" +#define ICON_FA_FILE_WORD u8"\uf1c2" +#define ICON_FA_ENVELOPE_SQUARE u8"\uf199" +#define ICON_FA_GENDERLESS u8"\uf22d" +#define ICON_FA_DICE_FIVE u8"\uf523" +#define ICON_FA_SYNAGOGUE u8"\uf69b" +#define ICON_FA_PAW u8"\uf1b0" +#define ICON_FA_HAND_HOLDING_HEART u8"\uf4be" +#define ICON_FA_CROSS u8"\uf654" +#define ICON_FA_ARCHIVE u8"\uf187" +#define ICON_FA_PHONE_VOLUME u8"\uf2a0" +#define ICON_FA_SOLAR_PANEL u8"\uf5ba" +#define ICON_FA_INFINITY u8"\uf534" +#define ICON_FA_HAND_POINT_DOWN u8"\uf0a7" +#define ICON_FA_MAP_MARKER u8"\uf041" +#define ICON_FA_CALENDAR_ALT u8"\uf073" +#define ICON_FA_AMERICAN_SIGN_LANGUAGE_INTERPRETING u8"\uf2a3" +#define ICON_FA_BINOCULARS u8"\uf1e5" +#define ICON_FA_STICKY_NOTE u8"\uf249" +#define ICON_FA_RUNNING u8"\uf70c" +#define ICON_FA_PEN_NIB u8"\uf5ad" +#define ICON_FA_MAP_MARKED u8"\uf59f" +#define ICON_FA_EXPAND u8"\uf065" +#define ICON_FA_TRUCK_PICKUP u8"\uf63c" +#define ICON_FA_PRESCRIPTION_BOTTLE u8"\uf485" +#define ICON_FA_LAPTOP_CODE u8"\uf5fc" +#define ICON_FA_GOLF_BALL u8"\uf450" +#define ICON_FA_SKULL_CROSSBONES u8"\uf714" +#define ICON_FA_TAXI u8"\uf1ba" +#define ICON_FA_ROCKET u8"\uf135" +#define ICON_FA_YIN_YANG u8"\uf6ad" +#define ICON_FA_FINGERPRINT u8"\uf577" +#define ICON_FA_ARROWS_ALT u8"\uf0b2" +#define ICON_FA_UNDERLINE u8"\uf0cd" +#define ICON_FA_ARROW_CIRCLE_UP u8"\uf0aa" +#define ICON_FA_BASKETBALL_BALL u8"\uf434" +#define ICON_FA_DESKTOP u8"\uf108" +#define ICON_FA_SPINNER u8"\uf110" +#define ICON_FA_TOGGLE_ON u8"\uf205" +#define ICON_FA_STOPWATCH u8"\uf2f2" +#define ICON_FA_ARROW_ALT_CIRCLE_LEFT u8"\uf359" +#define ICON_FA_GAS_PUMP u8"\uf52f" +#define ICON_FA_EXTERNAL_LINK_ALT u8"\uf35d" +#define ICON_FA_FROWN u8"\uf119" +#define ICON_FA_RULER u8"\uf545" +#define ICON_FA_GRIN u8"\uf580" +#define ICON_FA_THEATER_MASKS u8"\uf630" +#define ICON_FA_ARROW_CIRCLE_LEFT u8"\uf0a8" +#define ICON_FA_HIGHLIGHTER u8"\uf591" +#define ICON_FA_POLL_H u8"\uf682" +#define ICON_FA_SERVER u8"\uf233" +#define ICON_FA_BATTERY_EMPTY u8"\uf244" +#define ICON_FA_SPRAY_CAN u8"\uf5bd" +#define ICON_FA_BOWLING_BALL u8"\uf436" +#define ICON_FA_TERMINAL u8"\uf120" +#define ICON_FA_WINDOW_MINIMIZE u8"\uf2d1" +#define ICON_FA_HOME u8"\uf015" +#define ICON_FA_SEARCH_MINUS u8"\uf010" +#define ICON_FA_QUIDDITCH u8"\uf458" +#define ICON_FA_APPLE_ALT u8"\uf5d1" +#define ICON_FA_UMBRELLA_BEACH u8"\uf5ca" +#define ICON_FA_MOON u8"\uf186" +#define ICON_FA_CANNABIS u8"\uf55f" +#define ICON_FA_LAUGH_BEAM u8"\uf59a" +#define ICON_FA_TEETH_OPEN u8"\uf62f" +#define ICON_FA_DRUMSTICK_BITE u8"\uf6d7" +#define ICON_FA_CHART_PIE u8"\uf200" +#define ICON_FA_SOCKS u8"\uf696" +#define ICON_FA_HANDS_HELPING u8"\uf4c4" +#define ICON_FA_PASTE u8"\uf0ea" +#define ICON_FA_OM u8"\uf679" +#define ICON_FA_LUGGAGE_CART u8"\uf59d" +#define ICON_FA_INDUSTRY u8"\uf275" +#define ICON_FA_SWIMMER u8"\uf5c4" +#define ICON_FA_ROAD u8"\uf018" +#define ICON_FA_IMAGE u8"\uf03e" +#define ICON_FA_CHILD u8"\uf1ae" +#define ICON_FA_ANGLE_DOUBLE_RIGHT u8"\uf101" +#define ICON_FA_DOOR_OPEN u8"\uf52b" +#define ICON_FA_GRIN_TONGUE_WINK u8"\uf58b" +#define ICON_FA_REPLY_ALL u8"\uf122" +#define ICON_FA_INBOX u8"\uf01c" +#define ICON_FA_FEMALE u8"\uf182" +#define ICON_FA_SYRINGE u8"\uf48e" +#define ICON_FA_CIRCLE_NOTCH u8"\uf1ce" +#define ICON_FA_WEIGHT u8"\uf496" +#define ICON_FA_TABLE_TENNIS u8"\uf45d" +#define ICON_FA_LOW_VISION u8"\uf2a8" +#define ICON_FA_FILE_IMPORT u8"\uf56f" +#define ICON_FA_ITALIC u8"\uf033" +#define ICON_FA_CLOSED_CAPTIONING u8"\uf20a" +#define ICON_FA_CHALKBOARD u8"\uf51b" +#define ICON_FA_BUILDING u8"\uf1ad" +#define ICON_FA_TACHOMETER_ALT u8"\uf3fd" +#define ICON_FA_BUS u8"\uf207" +#define ICON_FA_ANGLE_DOWN u8"\uf107" +#define ICON_FA_HAND_ROCK u8"\uf255" +#define ICON_FA_HELICOPTER u8"\uf533" +#define ICON_FA_PODCAST u8"\uf2ce" +#define ICON_FA_TRUCK_MOVING u8"\uf4df" +#define ICON_FA_BUG u8"\uf188" +#define ICON_FA_SHIELD_ALT u8"\uf3ed" +#define ICON_FA_FILL_DRIP u8"\uf576" +#define ICON_FA_COMMENT_SLASH u8"\uf4b3" +#define ICON_FA_SUITCASE u8"\uf0f2" +#define ICON_FA_ENVELOPE_OPEN_TEXT u8"\uf658" +#define ICON_FA_HAND_HOLDING u8"\uf4bd" +#define ICON_FA_VENUS_MARS u8"\uf228" +#define ICON_FA_UTENSILS u8"\uf2e7" +#define ICON_FA_TH_LARGE u8"\uf009" +#define ICON_FA_AT u8"\uf1fa" +#define ICON_FA_FILE u8"\uf15b" +#define ICON_FA_FLAG_CHECKERED u8"\uf11e" +#define ICON_FA_FILM u8"\uf008" +#define ICON_FA_FILL u8"\uf575" +#define ICON_FA_GRIN_SQUINT_TEARS u8"\uf586" +#define ICON_FA_PERCENT u8"\uf295" +#define ICON_FA_BOOK u8"\uf02d" +#define ICON_FA_TRASH u8"\uf1f8" +#define ICON_FA_FILE_AUDIO u8"\uf1c7" +#define ICON_FA_POOP u8"\uf619" +#define ICON_FA_STAR u8"\uf005" +#define ICON_FA_STEP_FORWARD u8"\uf051" +#define ICON_FA_GHOST u8"\uf6e2" +#define ICON_FA_PRESCRIPTION_BOTTLE_ALT u8"\uf486" +#define ICON_FA_MONEY_BILL_WAVE_ALT u8"\uf53b" +#define ICON_FA_NEUTER u8"\uf22c" +#define ICON_FA_BAND_AID u8"\uf462" +#define ICON_FA_WIFI u8"\uf1eb" +#define ICON_FA_MASK u8"\uf6fa" +#define ICON_FA_VENUS_DOUBLE u8"\uf226" +#define ICON_FA_CHEVRON_UP u8"\uf077" +#define ICON_FA_HAND_SPOCK u8"\uf259" +#define ICON_FA_HAND_POINT_UP u8"\uf0a6" diff --git a/resources/configured_resources/lang/en.toml b/resources/configured_resources/lang/en.toml index 437d617..95137f9 100644 --- a/resources/configured_resources/lang/en.toml +++ b/resources/configured_resources/lang/en.toml @@ -308,6 +308,13 @@ [[log.entry]] id = "view.view.bad_state" fmt = "unknown view state: {state}" + [[log.entry]] + id = "view.view.FA_load_failed" + fmt = "failed to load font awesome from folder \"{folder}\"" + [[log.entry]] + id = "view.view.FA_load_success" + fmt = "successfully loaded font awesome" + [[log.entry]] id = "view.configurator.config_save_failed" fmt = "Could not save the new configuration" @@ -376,6 +383,19 @@ [[gui.entry]] id = "view.in_game_menu.campaign_editor" fmt = "Campaign editor" + [[gui.entry]] + id = "view.in_game_menu.return_to_main_menu" + fmt = "Return to main menu" + + [[gui.entry]] + id = "view.game_viewer.play" + fmt = "" + [[gui.entry]] + id = "view.game_viewer.pause" + fmt = "" + [[gui.entry]] + id = "view.game_viewer.step" + fmt = "" [[gui.entry]] id = "file_explorer.ok_button" diff --git a/resources/configured_resources/lang/fr.toml b/resources/configured_resources/lang/fr.toml index 5fa6592..74322c6 100644 --- a/resources/configured_resources/lang/fr.toml +++ b/resources/configured_resources/lang/fr.toml @@ -308,6 +308,13 @@ [[log.entry]] id = "view.view.bad_state" fmt = "État de la vue inconnu : {state}" + [[log.entry]] + id = "view.view.FA_load_failed" + fmt = "Échec de chargement de Font Awesome depuis \"{folder}\"" + [[log.entry]] + id = "view.view.FA_load_success" + fmt = "Font Awesome chargée avec succès" + [[log.entry]] id = "view.configurator.config_save_failed" fmt = "Échec de sauvegarde de la configuration" @@ -375,6 +382,9 @@ [[gui.entry]] id = "view.in_game_menu.campaign_editor" fmt = "Éditeur de campagne" + [[gui.entry]] + id = "view.in_game_menu.return_to_main_menu" + fmt = "Menu principal" [[gui.entry]] id = "file_explorer.ok_button" diff --git a/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/LICENSE.txt b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/LICENSE.txt new file mode 100644 index 0000000..0abfaa6 --- /dev/null +++ b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/LICENSE.txt @@ -0,0 +1,34 @@ +Font Awesome Free License +------------------------- + +Font Awesome Free is free, open source, and GPL friendly. You can use it for +commercial projects, open source projects, or really almost whatever you want. +Full Font Awesome Free license: https://fontawesome.com/license/free. + +# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) +In the Font Awesome Free download, the CC BY 4.0 license applies to all icons +packaged as SVG and JS file types. + +# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL) +In the Font Awesome Free download, the SIL OLF license applies to all icons +packaged as web and desktop font files. + +# Code: MIT License (https://opensource.org/licenses/MIT) +In the Font Awesome Free download, the MIT license applies to all non-font and +non-icon files. + +# Attribution +Attribution is required by MIT, SIL OLF, and CC BY licenses. Downloaded Font +Awesome Free files already contain embedded comments with sufficient +attribution, so you shouldn't need to do anything additional when using these +files normally. + +We've kept attribution comments terse, so we ask that you do not actively work +to remove them from files, especially code. They're a great way for folks to +learn about Font Awesome. + +# Brand Icons +All brand icons are trademarks of their respective owners. The use of these +trademarks does not indicate endorsement of the trademark holder by Font +Awesome, nor vice versa. **Please do not use brand logos for any purpose except +to represent the company, product, or service to which they refer.** diff --git a/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-brands-400.ttf b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-brands-400.ttf new file mode 100644 index 0000000..b977a24 Binary files /dev/null and b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-brands-400.ttf differ diff --git a/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-regular-400.ttf b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-regular-400.ttf new file mode 100644 index 0000000..3c51643 Binary files /dev/null and b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-regular-400.ttf differ diff --git a/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-solid-900.ttf b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-solid-900.ttf new file mode 100644 index 0000000..70c4367 Binary files /dev/null and b/resources/raw_resources/fonts/fontawesome-free-5.4.0-desktop/fa-solid-900.ttf differ diff --git a/src/state_holder.hpp b/src/state_holder.hpp index de87e6a..b99b4ea 100644 --- a/src/state_holder.hpp +++ b/src/state_holder.hpp @@ -203,6 +203,10 @@ class access { return holder.adapter(); } + static ImTerm::terminal &terminal(holder &holder) noexcept { + return holder.terminal(); + } + friend view::game_menu; }; diff --git a/src/view/game/game_menu.cpp b/src/view/game/game_menu.cpp index 0814b83..9a0e71b 100644 --- a/src/view/game/game_menu.cpp +++ b/src/view/game/game_menu.cpp @@ -37,16 +37,17 @@ view::game_menu::user_request view::game_menu::show() { const auto &res = utils::resource_manager::instance(); const auto &style = ImGui::GetStyle(); - const std::string_view resume = res.gui_text_for("view.in_game_menu.resume"); - const std::string_view load_dll = res.gui_text_for("view.in_game_menu.dll"); - const std::string_view restart = res.gui_text_for("view.in_game_menu.restart"); - const std::string_view settings = res.gui_text_for("view.in_game_menu.settings"); - const std::string_view load_map = res.gui_text_for("view.in_game_menu.load_map"); - const std::string_view import = res.gui_text_for("view.in_game_menu.import_maps"); - const std::string_view credits = res.gui_text_for("view.in_game_menu.credits"); - const std::string_view map_editor = res.gui_text_for("view.in_game_menu.map_editor"); - const std::string_view campaign_editor = res.gui_text_for("view.in_game_menu.campaign_editor"); - const std::string_view quit = res.gui_text_for("view.in_game_menu.quit"); + const std::string_view resume = res.gui_text_for("view.in_game_menu.resume"); + const std::string_view load_dll = res.gui_text_for("view.in_game_menu.dll"); + const std::string_view restart = res.gui_text_for("view.in_game_menu.restart"); + const std::string_view settings = res.gui_text_for("view.in_game_menu.settings"); + const std::string_view load_map = res.gui_text_for("view.in_game_menu.load_map"); + const std::string_view import = res.gui_text_for("view.in_game_menu.import_maps"); + const std::string_view credits = res.gui_text_for("view.in_game_menu.credits"); + const std::string_view map_editor = res.gui_text_for("view.in_game_menu.map_editor"); + const std::string_view campaign_editor = res.gui_text_for("view.in_game_menu.campaign_editor"); + const std::string_view back_to_main_menu = res.gui_text_for("view.in_game_menu.return_to_main_menu"); + const std::string_view quit = res.gui_text_for("view.in_game_menu.quit"); ImVec2 max_text_size{0.f, 0.f}; auto update_sz = [&max_text_size](std::string_view str) { @@ -63,12 +64,14 @@ view::game_menu::user_request view::game_menu::show() { update_sz(credits); update_sz(map_editor); update_sz(campaign_editor); + update_sz(back_to_main_menu); update_sz(quit); float text_width = max_text_size.x + style.ItemInnerSpacing.x * 2; ImGui::SetNextWindowSize(ImVec2{text_width + style.WindowPadding.x * 2, 0.f}); if (ImGui::BeginPopupModal(menu_window_name, nullptr, - ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize)) { // NOLINT(hicpp-signed-bitwise) + ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove + | ImGuiWindowFlags_NoResize)) { // NOLINT(hicpp-signed-bitwise) if (!::state::access::adapter(m_state).map_is_loaded()) { using_style(disabled_button) { @@ -115,7 +118,13 @@ view::game_menu::user_request view::game_menu::show() { ImGui::Button(credits.data(), ImVec2{text_width, 0.f}); // TODO ImGui::Button(map_editor.data(), ImVec2{text_width, 0.f}); // TODO ImGui::Button(campaign_editor.data(), ImVec2{text_width, 0.f}); // TODO - }; + }; // todo : move to main menu + + if (ImGui::Button(back_to_main_menu.data(), ImVec2{text_width, 0.f})) { + ImGui::CloseCurrentPopup(); + ImGui::EndPopup(); + return user_request::back_to_main_menu; + } if (ImGui::Button(quit.data(), ImVec2{text_width, 0.f})) { ImGui::CloseCurrentPopup(); diff --git a/src/view/game/game_menu.hpp b/src/view/game/game_menu.hpp index ef05da6..4157af8 100644 --- a/src/view/game/game_menu.hpp +++ b/src/view/game/game_menu.hpp @@ -29,7 +29,8 @@ class game_menu { close_window, restart, load_dll, - load_map + load_map, + back_to_main_menu }; diff --git a/src/view/game/game_viewer.cpp b/src/view/game/game_viewer.cpp index ae8540a..dbef9ff 100644 --- a/src/view/game/game_viewer.cpp +++ b/src/view/game/game_viewer.cpp @@ -2,8 +2,12 @@ #include #include +#include + #include "game_viewer.hpp" #include "state_holder.hpp" +#include "utils/logging.hpp" +#include "view/standalones/imgui_styles.hpp" namespace { const sf::Event::KeyEvent &key(const sf::Event &event) { @@ -36,6 +40,7 @@ view::game_viewer::game_viewer(sf::RenderWindow &window, state::holder &state) n : m_window{window} , m_state{state} , m_map{state} + , m_menu{state} , m_fake_arg{state, state::access::terminal(state), {}} { m_map.set_render_window(window); } @@ -56,9 +61,15 @@ void view::game_viewer::restart() noexcept { m_autostep_bot = false; } -void view::game_viewer::show(bool show_debug_data) { +bool view::game_viewer::show(bool show_debug_data) { m_window_size = m_window.getSize(); m_map.print(show_debug_data); + show_rightmost_bar(); + if (m_showing_menu) { + display_menu(); + } + + return std::exchange(m_stay_in_game, true); } // todo split @@ -72,7 +83,7 @@ void view::game_viewer::event(const sf::Event &event) { terminal_commands::update_world(m_fake_arg); } break; - case sf::Keyboard::F4: + case sf::Keyboard::F3: if (std::exchange(m_autostep_bot, !m_autostep_bot)) { terminal_commands::stop_model(m_fake_arg); } @@ -80,6 +91,11 @@ void view::game_viewer::event(const sf::Event &event) { terminal_commands::run_model(m_fake_arg); } break; + case sf::Keyboard::Escape: + if (std::exchange(m_showing_menu, !m_showing_menu)) { + m_menu.close(); + } + break; default: break; } @@ -92,9 +108,6 @@ void view::game_viewer::event(const sf::Event &event) { break; } - auto &terminal = state::access::terminal(m_state); - terminal.set_width(m_window.getSize().x); - const sf::Event::SizeEvent sz = size(event); const float x_ratio = static_cast(sz.width) / static_cast(m_window_size.x); const float y_ratio = static_cast(sz.height) / static_cast(m_window_size.y); @@ -185,3 +198,109 @@ void view::game_viewer::event(const sf::Event &event) { break; } } + +void view::game_viewer::display_menu() noexcept { + using fmt::operator""_a; + + ImTerm::terminal &terminal = state::access::terminal(m_state); + + auto request = m_menu.show(); + switch (request) { + case game_menu::user_request::none: + break; + case game_menu::user_request::close_menu: + m_showing_menu = false; + resume(); + m_menu.close(); + break; + case game_menu::user_request::close_window: + m_window.close(); + break; + case game_menu::user_request::restart: + state::access::adapter(m_state).load_map(m_state.current_map_path()); + m_showing_menu = false; + restart(); + m_menu.close(); + break; + case game_menu::user_request::load_dll: { + terminal_commands::argument_type arg{m_state, terminal, {}}; + arg.command_line.emplace_back(); + arg.command_line.push_back(m_menu.path().generic_string()); + terminal_commands::load_shared_library(arg); + break; + } + case game_menu::user_request::load_map: { + terminal_commands::argument_type arg{m_state, terminal, {}}; + arg.command_line.emplace_back(); + arg.command_line.push_back(m_menu.path().generic_string()); + terminal_commands::load_map(arg); + break; + } + case game_menu::user_request::back_to_main_menu: + m_stay_in_game = false; + m_menu.close(); + m_showing_menu = false; + break; + default: + utils::log::error("view.view.menu.unknown_request", "id"_a = static_cast(request)); + break; + } +} + +void view::game_viewer::show_rightmost_bar() noexcept { + using fmt::operator""_a; + + ImVec2 max_text_size{0.f, 0.f}; + auto update_sz = [&max_text_size](std::string_view str) { + auto size = ImGui::CalcTextSize(str.data(), str.data() + str.size()); + max_text_size.x = std::max(max_text_size.x, size.x); + max_text_size.y = std::max(max_text_size.y, size.y); + }; + + const std::string_view play = ICON_FA_PLAY; + const std::string_view pause = ICON_FA_PAUSE; + const std::string_view step = ICON_FA_PLAY_CIRCLE; + update_sz(play); + update_sz(pause); + update_sz(step); + + const auto &style = ImGui::GetStyle(); + const auto total_width = max_text_size.x + style.ItemInnerSpacing.x * 2 + style.ItemSpacing.x * 2; + const auto total_height = max_text_size.y * 3 + style.ItemInnerSpacing.y * 2 + style.ItemSpacing.y * 2; + + ImGui::SetNextWindowSize(ImVec2{total_width + style.WindowPadding.x * 2, 0.f}, ImGuiCond_Always); + ImGui::SetNextWindowPos( + ImVec2{static_cast(m_window_size.x) - total_width, (static_cast(m_window_size.y) - total_height) / 2.f}, + ImGuiCond_Always); + + if (ImGui::Begin("view.game.game_viewer.show_rightmost_bar", nullptr, + ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove // NOLINT(*-signed-bitwise) + | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBackground)) { + + if (m_autostep_bot) { + using_style(disabled_button) { + ImGui::Button(play.data()); + }; + if (ImGui::Button(pause.data())) { + terminal_commands::stop_model(m_fake_arg); + m_autostep_bot = false; + } + using_style(disabled_button) { + ImGui::Button(step.data()); + }; + } + else { + if (ImGui::Button(play.data())) { + terminal_commands::run_model(m_fake_arg); + m_autostep_bot = true; + } + using_style(disabled_button) { + ImGui::Button(pause.data()); + }; + if (ImGui::Button(step.data())) { + terminal_commands::update_world(m_fake_arg); + } + } + } + ImGui::End(); +} diff --git a/src/view/game/game_viewer.hpp b/src/view/game/game_viewer.hpp index 3ed4f73..a573a0a 100644 --- a/src/view/game/game_viewer.hpp +++ b/src/view/game/game_viewer.hpp @@ -2,6 +2,7 @@ #define NINJACLOWN_VIEW_GAME_VIEWER_HPP #include "map_viewer.hpp" +#include "game_menu.hpp" #include "terminal_commands.hpp" @@ -36,7 +37,10 @@ class game_viewer { void restart() noexcept; - void show(bool show_debug_data); + /** + * Returns false if return to main menu was requested. + */ + bool show(bool show_debug_data); void reload_sprites() { m_map.reload_sprites(); @@ -62,10 +66,24 @@ class game_viewer { m_map.acquire_overmap()->hide(handle); } + /** + * Displays the rightmost bar (play, pause, step, ... buttons). + */ + void show_rightmost_bar() noexcept; + + /** + * Shows the escape menu. + */ + void display_menu() noexcept; + private: sf::RenderWindow &m_window; state::holder& m_state; map_viewer m_map; + game_menu m_menu; + bool m_showing_menu{false}; + bool m_stay_in_game{true}; + terminal_commands::argument_type m_fake_arg; //! Mostly valid argument passed to the terminal by the view, instead of by ImTerm // events related diff --git a/src/view/view.cpp b/src/view/view.cpp index a67c59b..ef91c71 100644 --- a/src/view/view.cpp +++ b/src/view/view.cpp @@ -5,7 +5,7 @@ #include "terminal_commands.hpp" #include "utils/logging.hpp" #include "utils/resource_manager.hpp" -#include "view/game/game_menu.hpp" +#include "utils/system.hpp" #include "view/game/game_viewer.hpp" #include @@ -16,12 +16,15 @@ #include #include +#include #include #include using fmt::operator""_a; namespace { +constexpr const auto fontawesome_path = "fonts/fontawesome-free-5.4.0-desktop/" FONT_ICON_FILE_NAME_FAS; + void setup_terminal(ImTerm::terminal &terminal, unsigned int x_size, unsigned int y_size) { terminal.set_width(x_size); terminal.set_height(y_size); @@ -65,8 +68,6 @@ void view::view::exec(state::holder &state) { } void view::view::do_run(state::holder &state) { - const auto &resources = utils::resource_manager::instance(); - constexpr unsigned int x_window_size = 1600; constexpr unsigned int y_window_size = 900; @@ -76,12 +77,9 @@ void view::view::do_run(state::holder &state) { ImTerm::terminal &terminal = state::access::terminal(state); setup_terminal(terminal, x_window_size, y_window_size / 3); - - game_menu menu{state}; game_viewer game{window, state}; m_game = &game; - m_menu = &menu; ImGui::SFML::Init(window); ImGui::GetIO().IniFilename = nullptr; @@ -91,21 +89,45 @@ void view::view::do_run(state::holder &state) { state::access<::view::view>::adapter(state).load_map("resources/maps/map_test/map_test.map"); // TODO remove at some point + constexpr std::array fontawesome_icons_ranges = {ICON_MIN_FA, ICON_MAX_FA, 0}; + ImFontConfig fontawesome_icons_config{}; + fontawesome_icons_config.MergeMode = true; + fontawesome_icons_config.PixelSnapH = true; + fontawesome_icons_config.GlyphMinAdvanceX = 13.5f; + + ImGuiIO &io = ImGui::GetIO(); + io.Fonts->AddFontDefault(&fontawesome_icons_config); + + auto *fontawesome = io.Fonts->AddFontFromFileTTF( + (utils::resources_directory() / fontawesome_path).generic_string().c_str(), 13.5f, + &fontawesome_icons_config, fontawesome_icons_ranges.data()); + + if (fontawesome == nullptr) { + utils::log::warn("view.view.FA_load_failed"); + } + else { + utils::log::debug("view.view.FA_load_success"); + ImGui::SFML::UpdateFontTexture(); + } + while (m_running.test_and_set() && window.isOpen()) { ImGui::SFML::Update(window, clock.restart()); - manage_events(window, static_cast(terminal.get_size().y)); + manage_events(window, state); auto restore_view = window.getView(); - switch (m_showing) { + switch (m_show_state) { case window::game: - game.show(show_debug_data); + if (!game.show(show_debug_data)) { + m_show_state = window::menu; + } break; - case window::menu: // FIXME : this menu should be part of game.show() - game.show(show_debug_data); - display_menu(state); + case window::menu: + // TODO : show main menu break; + case window::map_editor: + // TODO : show map editor default: - utils::log::warn("view.view.bad_state", "state"_a=static_cast(m_showing)); + utils::log::warn("view.view.bad_state", "state"_a = static_cast(m_show_state)); } if (m_showing_term) { @@ -129,78 +151,35 @@ void view::view::do_run(state::holder &state) { } m_game = nullptr; - m_menu = nullptr; } -void view::view::display_menu(state::holder &state) noexcept { - - ImTerm::terminal &terminal = state::access::terminal(state); - auto request = m_menu->show(); - switch (request) { - case game_menu::user_request::none: - break; - case game_menu::user_request::close_menu: - m_showing = window::game; - m_game->resume(); - m_menu->close(); - break; - case game_menu::user_request::close_window: - m_running.clear(); - break; - case game_menu::user_request::restart: - state::access::adapter(state).load_map(state.current_map_path()); - m_showing = window::game; - m_game->restart(); - m_menu->close(); - break; - case game_menu::user_request::load_dll: { - terminal_commands::argument_type arg{state, terminal, {}}; - arg.command_line.emplace_back(); - arg.command_line.push_back(m_menu->path().generic_string()); - terminal_commands::load_shared_library(arg); - break; - } - case game_menu::user_request::load_map: { - terminal_commands::argument_type arg{state, terminal, {}}; - arg.command_line.emplace_back(); - arg.command_line.push_back(m_menu->path().generic_string()); - terminal_commands::load_map(arg); - break; - } - default: - spdlog::error(utils::resource_manager::instance().log_for("view.view.menu.unknown_request"), - "id"_a = static_cast(request)); - break; - } -} - -void view::view::manage_events(sf::RenderWindow &window, unsigned int terminal_height) noexcept { +void view::view::manage_events(sf::RenderWindow &window, state::holder &state) noexcept { sf::Event event{}; while (window.pollEvent(event)) { if (event.type == sf::Event::KeyPressed) { if (event.key.code == sf::Keyboard::F11) { m_showing_term = !m_showing_term; } - else if (event.key.code == sf::Keyboard::Escape) { - if (m_showing == window::menu) { - m_showing = window::game; - m_menu->close(); - m_game->resume(); - } - else { - m_showing = window::menu; - m_game->pause(); - } - } } if (event.type == sf::Event::Closed) { window.close(); } - if (m_showing != window::menu - && (!mouse_type_event(event.type) || sf::Mouse::getPosition(window).y > terminal_height + 2 || !m_showing_term)) { - m_game->event(event); + if (event.type == sf::Event::Resized) { + state::access::terminal(state).set_width(window.getSize().x); + } + + switch (m_show_state) { + case window::game: + m_game->event(event); + break; + case window::menu: + // TODO : pass events to main menu once it’s developped + break; + case window::map_editor: + // TODO : pass events to map editor once it’s developped + break; } ImGui::SFML::ProcessEvent(event); diff --git a/src/view/view.hpp b/src/view/view.hpp index f7ed81b..b8eb702 100644 --- a/src/view/view.hpp +++ b/src/view/view.hpp @@ -20,12 +20,12 @@ class holder; namespace view { class game_viewer; -class game_menu; class view { enum class window { game, menu, + map_editor, }; public: @@ -70,14 +70,13 @@ class view { /** * Polls through SFML events and manages them. Called while running */ - void manage_events(sf::RenderWindow& window, unsigned int terminal_height) noexcept; + void manage_events(sf::RenderWindow& window, state::holder&) noexcept; /** * Defers display to menu and treats its requests */ void display_menu(state::holder&) noexcept; - ::view::game_menu * m_menu{nullptr}; // allowing external access (data within *do_run*) game_viewer* m_game{nullptr}; // allowing external access (data within *do_run*) std::unique_ptr m_thread{}; @@ -85,7 +84,7 @@ class view { std::atomic_flag m_running{}; utils::loop_per_sec_limit m_fps_limiter{}; - window m_showing{window::game}; // FIXME : devrait être window::menu + window m_show_state{window::game}; // FIXME : devrait être window::menu bool m_showing_term{false}; }; } // namespace view