summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/ui')
-rw-r--r--src/emu/ui/custui.cpp65
-rw-r--r--src/emu/ui/custui.h29
-rw-r--r--src/emu/ui/selector.cpp25
-rw-r--r--src/emu/ui/selector.h3
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;