diff options
Diffstat (limited to 'src/emu/ui')
-rw-r--r-- | src/emu/ui/custui.cpp | 65 | ||||
-rw-r--r-- | src/emu/ui/custui.h | 29 | ||||
-rw-r--r-- | src/emu/ui/selector.cpp | 25 | ||||
-rw-r--r-- | src/emu/ui/selector.h | 3 |
4 files changed, 56 insertions, 66 deletions
diff --git a/src/emu/ui/custui.cpp b/src/emu/ui/custui.cpp index a6279ac5b54..14f5cefc4b6 100644 --- a/src/emu/ui/custui.cpp +++ b/src/emu/ui/custui.cpp @@ -9,14 +9,16 @@ *********************************************************************/ #include "emu.h" +#include "ui/custui.h" + #include "ui/ui.h" -#include "ui/menu.h" #include "ui/selector.h" -#include "ui/custui.h" #include "ui/utils.h" + #include <algorithm> -const char *ui_menu_custom_ui::hide_status[] = { + +const char *const ui_menu_custom_ui::hide_status[] = { __("Show All"), __("Hide Filters"), __("Hide Info/Image"), @@ -192,24 +194,23 @@ void ui_menu_custom_ui::custom_render(void *selectedref, float top, float bottom ui_menu_font_ui::ui_menu_font_ui(running_machine &machine, render_container *container) : ui_menu(machine, container) { ui_options &moptions = machine.ui().options(); -#ifdef UI_WINDOWS - std::string name(machine.options().ui_font()); list(); +#ifdef UI_WINDOWS m_bold = (strreplace(name, "[B]", "") + strreplace(name, "[b]", "") > 0); m_italic = (strreplace(name, "[I]", "") + strreplace(name, "[i]", "") > 0); +#endif m_actual = 0; for (size_t index = 0; index < m_fonts.size(); index++) { - if (m_fonts[index] == name) + if (m_fonts[index].first == name) { m_actual = index; break; } } -#endif m_info_size = moptions.infos_size(); m_font_size = moptions.font_rows(); @@ -231,43 +232,17 @@ ui_menu_font_ui::ui_menu_font_ui(running_machine &machine, render_container *con } -#ifdef UI_WINDOWS -//------------------------------------------------- -// fonts enumerator CALLBACK -//------------------------------------------------- - -int CALLBACK ui_menu_font_ui::EnumFontFamiliesExProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam) -{ - std::vector<std::string> *lpc = (std::vector<std::string>*)lParam; - std::string utf((char *)lpelfe->lfFaceName); - if (utf[0] != '@') - lpc->push_back(utf); - - return 1; -} - //------------------------------------------------- // create fonts list //------------------------------------------------- void ui_menu_font_ui::list() { - // create LOGFONT structure - LOGFONT lf; - lf.lfCharSet = ANSI_CHARSET; - lf.lfFaceName[0] = '\0'; - - HDC hDC = GetDC( nullptr ); - EnumFontFamiliesEx( hDC, &lf, (FONTENUMPROC)EnumFontFamiliesExProc, (LPARAM)&m_fonts, 0 ); - ReleaseDC( nullptr, hDC ); - - // sort - std::stable_sort(m_fonts.begin(), m_fonts.end()); + machine().osd().get_font_families(machine().options().font_path(), m_fonts); // add default string to the top of array - m_fonts.insert(m_fonts.begin(), std::string(_("default"))); + m_fonts.emplace(m_fonts.begin(), std::string("default"), std::string(_("default"))); } -#endif //------------------------------------------------- // dtor @@ -278,18 +253,18 @@ ui_menu_font_ui::~ui_menu_font_ui() std::string error_string; ui_options &moptions = machine().ui().options(); + std::string name(m_fonts[m_actual].first); #ifdef UI_WINDOWS - std::string name(m_fonts[m_actual]); - if (m_fonts[m_actual] != "default") + if (name != "default") { if (m_italic) name.insert(0, "[I]"); if (m_bold) name.insert(0, "[B]"); } +#endif machine().options().set_value(OPTION_UI_FONT, name.c_str(), OPTION_PRIORITY_CMDLINE, error_string); machine().options().mark_changed(OPTION_UI_FONT); -#endif moptions.set_value(OPTION_INFOS_SIZE, m_info_size, OPTION_PRIORITY_CMDLINE, error_string); moptions.set_value(OPTION_FONT_ROWS, m_font_size, OPTION_PRIORITY_CMDLINE, error_string); @@ -325,7 +300,6 @@ void ui_menu_font_ui::handle() } break; -#ifdef UI_WINDOWS case MUI_FNT: if (m_event->iptkey == IPT_UI_LEFT || m_event->iptkey == IPT_UI_RIGHT) @@ -335,11 +309,15 @@ void ui_menu_font_ui::handle() } else if (m_event->iptkey == IPT_UI_SELECT) { - ui_menu::stack_push(global_alloc_clear<ui_menu_selector>(machine(), container, m_fonts, m_actual)); + std::vector<std::string> display_names; + display_names.reserve(m_fonts.size()); + for (auto const &font : m_fonts) display_names.emplace_back(font.second); + ui_menu::stack_push(global_alloc_clear<ui_menu_selector>(machine(), container, std::move(display_names), m_actual)); changed = true; } break; +#ifdef UI_WINDOWS case MUI_BOLD: case MUI_ITALIC: if (m_event->iptkey == IPT_UI_LEFT || m_event->iptkey == IPT_UI_RIGHT || m_event->iptkey == IPT_UI_SELECT) @@ -364,13 +342,12 @@ void ui_menu_font_ui::populate() // set filter arrow UINT32 arrow_flags; -#ifdef UI_WINDOWS // add fonts option arrow_flags = get_arrow_flags(0, m_fonts.size() - 1, m_actual); - std::string name(m_fonts[m_actual]); - item_append(_("UI Font"), name.c_str(), arrow_flags, (void *)(FPTR)MUI_FNT); + item_append(_("UI Font"), m_fonts[m_actual].second.c_str(), arrow_flags, (void *)(FPTR)MUI_FNT); - if (name != "default") +#ifdef UI_WINDOWS + if (m_fonts[m_actual].first != "default") { item_append(_("Bold"), m_bold ? "On" : "Off", m_bold ? MENU_FLAG_RIGHT_ARROW : MENU_FLAG_LEFT_ARROW, (void *)(FPTR)MUI_BOLD); item_append(_("Italic"), m_italic ? "On" : "Off", m_italic ? MENU_FLAG_RIGHT_ARROW : MENU_FLAG_LEFT_ARROW, (void *)(FPTR)MUI_ITALIC); diff --git a/src/emu/ui/custui.h b/src/emu/ui/custui.h index 2ff13994cb6..46f42967b6a 100644 --- a/src/emu/ui/custui.h +++ b/src/emu/ui/custui.h @@ -10,13 +10,14 @@ #pragma once -#ifndef __UI_CUSTUI_H__ -#define __UI_CUSTUI_H__ +#ifndef MAME_EMU_UI_UI_CUSTUI_H +#define MAME_EMU_UI_UI_CUSTUI_H + +#include "ui/menu.h" + +#include <vector> +#include <string> -#ifdef UI_WINDOWS -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#endif //------------------------------------------------- // Custom UI menu @@ -39,9 +40,9 @@ private: COLORS_MENU, HIDE_MENU }; - static const char *hide_status[]; + static const char *const hide_status[]; std::vector<std::string> m_lang; - UINT16 m_currlang; + std::uint16_t m_currlang; }; //------------------------------------------------- @@ -67,14 +68,12 @@ private: MUI_ITALIC }; -#ifdef UI_WINDOWS - UINT16 m_actual; - std::vector<std::string> m_fonts; - bool m_bold, m_italic; - void list(); - static int CALLBACK EnumFontFamiliesExProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam); + std::uint16_t m_actual; + std::vector<std::pair<std::string, std::string> > m_fonts; +#ifdef UI_WINDOWS + bool m_bold, m_italic; #endif float m_info_min, m_info_max, m_info_size; @@ -182,4 +181,4 @@ private: rgb_t &m_original; }; -#endif /* __UI_CUSTUI_H__ */ +#endif // MAME_EMU_UI_UI_CUSTUI_H diff --git a/src/emu/ui/selector.cpp b/src/emu/ui/selector.cpp index 330694fd497..5f1704b79fe 100644 --- a/src/emu/ui/selector.cpp +++ b/src/emu/ui/selector.cpp @@ -18,13 +18,26 @@ // ctor / dtor //------------------------------------------------- -ui_menu_selector::ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> s_sel, UINT16 &s_actual, int category, int _hover) - : ui_menu(machine, container), m_selector(s_actual) +ui_menu_selector::ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> const &s_sel, UINT16 &s_actual, int category, int _hover) + : ui_menu(machine, container) + , m_selector(s_actual) + , m_category(category) + , m_hover(_hover) + , m_first_pass(true) + , m_str_items(s_sel) +{ + m_search[0] = '\0'; + m_searchlist[0] = nullptr; +} + +ui_menu_selector::ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> &&s_sel, UINT16 &s_actual, int category, int _hover) + : ui_menu(machine, container) + , m_selector(s_actual) + , m_category(category) + , m_hover(_hover) + , m_first_pass(true) + , m_str_items(std::move(s_sel)) { - m_category = category; - m_first_pass = true; - m_hover = _hover; - m_str_items = s_sel; m_search[0] = '\0'; m_searchlist[0] = nullptr; } diff --git a/src/emu/ui/selector.h b/src/emu/ui/selector.h index 595ca1f578d..b2ccba2a8b6 100644 --- a/src/emu/ui/selector.h +++ b/src/emu/ui/selector.h @@ -28,7 +28,8 @@ enum class ui_menu_selector : public ui_menu { public: - ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> _sel, UINT16 &_actual, int _category = 0, int _hover = 0); + ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> const &_sel, UINT16 &_actual, int _category = 0, int _hover = 0); + ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> &&_sel, UINT16 &_actual, int _category = 0, int _hover = 0); virtual ~ui_menu_selector(); virtual void populate() override; virtual void handle() override; |