diff --git a/include/mgba-util/gui/font.h b/include/mgba-util/gui/font.h index 403940954..1751898c3 100644 --- a/include/mgba-util/gui/font.h +++ b/include/mgba-util/gui/font.h @@ -55,6 +55,10 @@ enum GUIIcon { GUI_ICON_BUTTON_HOME, GUI_ICON_STATUS_FAST_FORWARD, GUI_ICON_STATUS_MUTE, + GUI_ICON_LEFT, + GUI_ICON_UP, + GUI_ICON_RIGHT, + GUI_ICON_DOWN, GUI_ICON_MAX, }; diff --git a/res/font-new.png b/res/font-new.png index 66389c44b..ea86ae72b 100644 Binary files a/res/font-new.png and b/res/font-new.png differ diff --git a/res/icons.png b/res/icons.png index 1a2b57407..b52df6688 100644 Binary files a/res/icons.png and b/res/icons.png differ diff --git a/res/icons2x.png b/res/icons2x.png index 31f4945e8..036d59257 100644 Binary files a/res/icons2x.png and b/res/icons2x.png differ diff --git a/src/util/gui/font-metrics.c b/src/util/gui/font-metrics.c index 1a7b3f539..c3f359b25 100644 --- a/src/util/gui/font-metrics.c +++ b/src/util/gui/font-metrics.c @@ -152,6 +152,10 @@ const struct GUIIconMetric defaultIconMetrics[] = { [GUI_ICON_BUTTON_TRIANGLE] = { 34, 34, 12, 11 }, [GUI_ICON_BUTTON_SQUARE] = { 50, 34, 12, 11 }, [GUI_ICON_BUTTON_HOME] = { 66, 34, 12, 11 }, + [GUI_ICON_LEFT] = { 82, 34, 12, 12 }, + [GUI_ICON_UP] = { 98, 34, 12, 12 }, + [GUI_ICON_RIGHT] = { 114, 34, 12, 12 }, + [GUI_ICON_DOWN] = { 130, 34, 12, 12 }, [GUI_ICON_STATUS_FAST_FORWARD] = { 2, 50, 12, 12 }, [GUI_ICON_STATUS_MUTE] = { 17, 50, 14, 12 }, }; diff --git a/src/util/gui/font.c b/src/util/gui/font.c index ab25419d3..7babc3b5b 100644 --- a/src/util/gui/font.c +++ b/src/util/gui/font.c @@ -40,17 +40,40 @@ void GUIFontPrint(struct GUIFont* font, int x, int y, enum GUIAlignment align, u size_t len = strlen(text); while (len) { uint32_t c = utf8Char(&text, &len); - if (c == '\1') { + bool icon = false; + switch (c) { + case 1: c = utf8Char(&text, &len); if (c < GUI_ICON_MAX) { - GUIFontDrawIcon(font, x, y, (align & GUI_ALIGN_HCENTER) | GUI_ALIGN_BOTTOM, GUI_ORIENT_0, color, c); - unsigned w; - GUIFontIconMetrics(font, c, &w, 0); - x += w; + icon = true; } - } else { + break; + case 0x2190: + case 0x2191: + case 0x2192: + case 0x2193: + c = GUI_ICON_LEFT + c - 0x2190; + icon = true; + break; + case 0x23E9: + c = GUI_ICON_STATUS_FAST_FORWARD; + icon = true; + break; + case 0x1F507: + c = GUI_ICON_STATUS_MUTE; + icon = true; + break; + default: GUIFontDrawGlyph(font, x, y, color, c); x += GUIFontGlyphWidth(font, c); + break; + } + + if (icon) { + GUIFontDrawIcon(font, x, y, GUI_ALIGN_BOTTOM, GUI_ORIENT_0, color, c); + unsigned w; + GUIFontIconMetrics(font, c, &w, 0); + x += w; } } }