From 3258d3feef7ecba3067bde2ed527849811297020 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sun, 10 Jul 2016 22:10:44 +1000 Subject: UI refactoring: [Vas Crabb] * std::bind - accept no substitutes * pointer -> reference conversion * make more menu members private or protected * don't play so fast and loose with integer types * reduce some vector copying * make more static constants const --- src/frontend/mame/ui/auditmenu.cpp | 4 +- src/frontend/mame/ui/auditmenu.h | 8 +- src/frontend/mame/ui/barcode.cpp | 2 +- src/frontend/mame/ui/barcode.h | 5 +- src/frontend/mame/ui/cheatopt.cpp | 6 +- src/frontend/mame/ui/cheatopt.h | 9 +- src/frontend/mame/ui/custmenu.cpp | 56 +++++----- src/frontend/mame/ui/custmenu.h | 28 +++-- src/frontend/mame/ui/custui.cpp | 149 +++++++++++++------------- src/frontend/mame/ui/custui.h | 65 +++++++----- src/frontend/mame/ui/datmenu.cpp | 50 ++++----- src/frontend/mame/ui/datmenu.h | 11 +- src/frontend/mame/ui/devctrl.h | 4 +- src/frontend/mame/ui/devopt.cpp | 2 +- src/frontend/mame/ui/devopt.h | 5 +- src/frontend/mame/ui/dirmenu.cpp | 50 ++++----- src/frontend/mame/ui/dirmenu.h | 43 +++++--- src/frontend/mame/ui/filecreate.cpp | 16 +-- src/frontend/mame/ui/filecreate.h | 30 +++--- src/frontend/mame/ui/filemngr.cpp | 8 +- src/frontend/mame/ui/filemngr.h | 13 ++- src/frontend/mame/ui/filesel.cpp | 14 +-- src/frontend/mame/ui/filesel.h | 15 +-- src/frontend/mame/ui/floppycntrl.cpp | 8 +- src/frontend/mame/ui/floppycntrl.h | 8 +- src/frontend/mame/ui/imgcntrl.cpp | 16 +-- src/frontend/mame/ui/imgcntrl.h | 7 +- src/frontend/mame/ui/info.cpp | 4 +- src/frontend/mame/ui/info.h | 10 +- src/frontend/mame/ui/info_pty.cpp | 2 +- src/frontend/mame/ui/info_pty.h | 4 +- src/frontend/mame/ui/inputmap.cpp | 32 +++--- src/frontend/mame/ui/inputmap.h | 46 ++++---- src/frontend/mame/ui/mainmenu.cpp | 52 ++++----- src/frontend/mame/ui/mainmenu.h | 7 +- src/frontend/mame/ui/menu.cpp | 83 ++++++++------- src/frontend/mame/ui/menu.h | 70 ++++++------- src/frontend/mame/ui/miscmenu.cpp | 42 ++++---- src/frontend/mame/ui/miscmenu.h | 67 +++++++----- src/frontend/mame/ui/optsmenu.cpp | 46 ++++---- src/frontend/mame/ui/optsmenu.h | 13 ++- src/frontend/mame/ui/pluginopt.cpp | 6 +- src/frontend/mame/ui/pluginopt.h | 12 ++- src/frontend/mame/ui/selector.cpp | 16 +-- src/frontend/mame/ui/selector.h | 17 +-- src/frontend/mame/ui/selgame.cpp | 186 +++++++++++++++++---------------- src/frontend/mame/ui/selgame.h | 24 +++-- src/frontend/mame/ui/selmenu.cpp | 140 +++++++++++++------------ src/frontend/mame/ui/selmenu.h | 12 ++- src/frontend/mame/ui/selsoft.cpp | 128 ++++++++++++----------- src/frontend/mame/ui/selsoft.h | 39 ++++--- src/frontend/mame/ui/simpleselgame.cpp | 20 ++-- src/frontend/mame/ui/simpleselgame.h | 28 ++--- src/frontend/mame/ui/sliders.cpp | 20 ++-- src/frontend/mame/ui/sliders.h | 13 ++- src/frontend/mame/ui/slotopt.cpp | 4 +- src/frontend/mame/ui/slotopt.h | 5 +- src/frontend/mame/ui/sndmenu.cpp | 12 +-- src/frontend/mame/ui/sndmenu.h | 9 +- src/frontend/mame/ui/submenu.cpp | 140 +++++++++++++------------ src/frontend/mame/ui/submenu.h | 26 +++-- src/frontend/mame/ui/swlist.cpp | 15 +-- src/frontend/mame/ui/swlist.h | 13 +-- src/frontend/mame/ui/tapectrl.cpp | 2 +- src/frontend/mame/ui/tapectrl.h | 5 +- src/frontend/mame/ui/text.cpp | 6 +- src/frontend/mame/ui/text.h | 2 +- src/frontend/mame/ui/ui.cpp | 137 +++++++++++++----------- src/frontend/mame/ui/ui.h | 93 ++++++----------- src/frontend/mame/ui/utils.h | 4 +- src/frontend/mame/ui/videoopt.cpp | 10 +- src/frontend/mame/ui/videoopt.h | 11 +- src/frontend/mame/ui/viewgfx.cpp | 42 ++++---- src/frontend/mame/ui/viewgfx.h | 2 +- 74 files changed, 1224 insertions(+), 1085 deletions(-) (limited to 'src/frontend/mame/ui') diff --git a/src/frontend/mame/ui/auditmenu.cpp b/src/frontend/mame/ui/auditmenu.cpp index ea3058914ab..2c243215f49 100644 --- a/src/frontend/mame/ui/auditmenu.cpp +++ b/src/frontend/mame/ui/auditmenu.cpp @@ -85,7 +85,7 @@ bool sorted_game_list(const game_driver *x, const game_driver *y) // ctor / dtor //------------------------------------------------- -menu_audit::menu_audit(mame_ui_manager &mui, render_container *container, vptr_game &availablesorted, vptr_game &unavailablesorted, int _audit_mode) +menu_audit::menu_audit(mame_ui_manager &mui, render_container &container, vptr_game &availablesorted, vptr_game &unavailablesorted, int _audit_mode) : menu(mui, container) , m_availablesorted(availablesorted) , m_unavailablesorted(unavailablesorted) @@ -113,7 +113,7 @@ void menu_audit::handle() if (m_first) { - ui().draw_text_box(container, _("Audit in progress..."), ui::text_layout::CENTER, 0.5f, 0.5f, UI_GREEN_COLOR); + ui().draw_text_box(container(), _("Audit in progress..."), ui::text_layout::CENTER, 0.5f, 0.5f, UI_GREEN_COLOR); m_first = false; return; } diff --git a/src/frontend/mame/ui/auditmenu.h b/src/frontend/mame/ui/auditmenu.h index a7427c2861e..4f630792023 100644 --- a/src/frontend/mame/ui/auditmenu.h +++ b/src/frontend/mame/ui/auditmenu.h @@ -24,17 +24,19 @@ using vptr_game = std::vector; class menu_audit : public menu { public: - menu_audit(mame_ui_manager &mui, render_container *container, vptr_game &availablesorted, vptr_game &unavailablesorted, int audit_mode); + menu_audit(mame_ui_manager &mui, render_container &container, vptr_game &availablesorted, vptr_game &unavailablesorted, int audit_mode); virtual ~menu_audit() override; + +private: virtual void populate() override; virtual void handle() override; -private: + void save_available_machines(); + vptr_game &m_availablesorted; vptr_game &m_unavailablesorted; int m_audit_mode; - void save_available_machines(); bool m_first; }; diff --git a/src/frontend/mame/ui/barcode.cpp b/src/frontend/mame/ui/barcode.cpp index 6fb322b0ed7..6d11de0036f 100644 --- a/src/frontend/mame/ui/barcode.cpp +++ b/src/frontend/mame/ui/barcode.cpp @@ -31,7 +31,7 @@ namespace ui { // ctor //------------------------------------------------- -menu_barcode_reader::menu_barcode_reader(mame_ui_manager &mui, render_container *container, barcode_reader_device *device) +menu_barcode_reader::menu_barcode_reader(mame_ui_manager &mui, render_container &container, barcode_reader_device *device) : menu_device_control(mui, container, device) { } diff --git a/src/frontend/mame/ui/barcode.h b/src/frontend/mame/ui/barcode.h index 114e797a5f8..88dee12296c 100644 --- a/src/frontend/mame/ui/barcode.h +++ b/src/frontend/mame/ui/barcode.h @@ -19,12 +19,13 @@ namespace ui { class menu_barcode_reader : public menu_device_control { public: - menu_barcode_reader(mame_ui_manager &mui, render_container *container, barcode_reader_device *device); + menu_barcode_reader(mame_ui_manager &mui, render_container &container, barcode_reader_device *device); virtual ~menu_barcode_reader() override; + +private: virtual void populate() override; virtual void handle() override; -private: char m_barcode_buffer[20]; }; diff --git a/src/frontend/mame/ui/cheatopt.cpp b/src/frontend/mame/ui/cheatopt.cpp index b7d6852c3b9..b3838a296e7 100644 --- a/src/frontend/mame/ui/cheatopt.cpp +++ b/src/frontend/mame/ui/cheatopt.cpp @@ -108,7 +108,7 @@ void menu_cheat::handle() /* handle autofire menu */ if (menu_event->itemref == ITEMREF_CHEATS_AUTOFIRE_SETTINGS && menu_event->iptkey == IPT_UI_SELECT) { - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); } /* if things changed, update */ @@ -122,7 +122,7 @@ void menu_cheat::handle() menu_cheat_populate - populate the cheat menu -------------------------------------------------*/ -menu_cheat::menu_cheat(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_cheat::menu_cheat(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -174,7 +174,7 @@ menu_cheat::~menu_cheat() menu -------------------------------------------------*/ -menu_autofire::menu_autofire(mame_ui_manager &mui, render_container *container) : menu(mui, container), last_toggle(false) +menu_autofire::menu_autofire(mame_ui_manager &mui, render_container &container) : menu(mui, container), last_toggle(false) { const screen_device *screen = mui.machine().first_screen(); diff --git a/src/frontend/mame/ui/cheatopt.h b/src/frontend/mame/ui/cheatopt.h index 349ed4bf29c..7c0b8973587 100644 --- a/src/frontend/mame/ui/cheatopt.h +++ b/src/frontend/mame/ui/cheatopt.h @@ -19,8 +19,10 @@ namespace ui { class menu_cheat : public menu { public: - menu_cheat(mame_ui_manager &mui, render_container *container); + menu_cheat(mame_ui_manager &mui, render_container &container); virtual ~menu_cheat() override; + +private: virtual void populate() override; virtual void handle() override; }; @@ -29,12 +31,13 @@ public: class menu_autofire : public menu { public: - menu_autofire(mame_ui_manager &mui, render_container *container); + menu_autofire(mame_ui_manager &mui, render_container &container); virtual ~menu_autofire() override; + +private: virtual void populate() override; virtual void handle() override; -private: float refresh; bool last_toggle; }; diff --git a/src/frontend/mame/ui/custmenu.cpp b/src/frontend/mame/ui/custmenu.cpp index ed2db5fcd96..774cce13fe9 100644 --- a/src/frontend/mame/ui/custmenu.cpp +++ b/src/frontend/mame/ui/custmenu.cpp @@ -24,7 +24,7 @@ namespace ui { //------------------------------------------------- // ctor / dtor //------------------------------------------------- -menu_custom_filter::menu_custom_filter(mame_ui_manager &mui, render_container *container, bool _single_menu) +menu_custom_filter::menu_custom_filter(mame_ui_manager &mui, render_container &container, bool _single_menu) : menu(mui, container) , m_single_menu(_single_menu) , m_added(false) @@ -106,7 +106,7 @@ void menu_custom_filter::handle() else s_sel[index] = main_filters::text[index]; - menu::stack_push(ui(), container, s_sel, custfltr::other[pos]); + menu::stack_push(ui(), container(), s_sel, custfltr::other[pos]); } } else if ((FPTR)menu_event->itemref >= YEAR_FILTER && (FPTR)menu_event->itemref < YEAR_FILTER + MAX_CUST_FILTER) @@ -123,7 +123,7 @@ void menu_custom_filter::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, c_year::ui, custfltr::year[pos]); + menu::stack_push(ui(), container(), c_year::ui, custfltr::year[pos]); } else if ((FPTR)menu_event->itemref >= MNFCT_FILTER && (FPTR)menu_event->itemref < MNFCT_FILTER + MAX_CUST_FILTER) { @@ -139,7 +139,7 @@ void menu_custom_filter::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, c_mnfct::ui, custfltr::mnfct[pos]); + menu::stack_push(ui(), container(), c_mnfct::ui, custfltr::mnfct[pos]); } } @@ -155,7 +155,7 @@ void menu_custom_filter::handle() void menu_custom_filter::populate() { // add main filter - UINT32 arrow_flags = get_arrow_flags((int)FILTER_ALL, (int)FILTER_UNAVAILABLE, custfltr::main); + UINT32 arrow_flags = get_arrow_flags(FILTER_ALL, FILTER_UNAVAILABLE, custfltr::main); item_append(_("Main filter"), main_filters::text[custfltr::main], arrow_flags, (void *)(FPTR)MAIN_FILTER); // add other filters @@ -164,7 +164,7 @@ void menu_custom_filter::populate() item_append(menu_item_type::SEPARATOR); // add filter items - arrow_flags = get_arrow_flags((int)FILTER_UNAVAILABLE + 1, (int)FILTER_LAST - 1, custfltr::other[x]); + arrow_flags = get_arrow_flags(FILTER_UNAVAILABLE + 1, FILTER_LAST - 1, custfltr::other[x]); item_append(_("Other filter"), main_filters::text[custfltr::other[x]], arrow_flags, (void *)(FPTR)(OTHER_FILTER + x)); if (m_added) @@ -173,7 +173,7 @@ void menu_custom_filter::populate() // add manufacturer subitem if (custfltr::other[x] == FILTER_MANUFACTURER && c_mnfct::ui.size() > 0) { - arrow_flags = get_arrow_flags(0, c_mnfct::ui.size() - 1, custfltr::mnfct[x]); + arrow_flags = get_arrow_flags(0, c_mnfct::ui.size() - 1, custfltr::mnfct[x]); std::string fbuff(_("^!Manufacturer")); convert_command_glyph(fbuff); item_append(fbuff, c_mnfct::ui[custfltr::mnfct[x]], arrow_flags, (void *)(FPTR)(MNFCT_FILTER + x)); @@ -182,7 +182,7 @@ void menu_custom_filter::populate() // add year subitem else if (custfltr::other[x] == FILTER_YEAR && c_year::ui.size() > 0) { - arrow_flags = get_arrow_flags(0, c_year::ui.size() - 1, custfltr::year[x]); + arrow_flags = get_arrow_flags(0, c_year::ui.size() - 1, custfltr::year[x]); std::string fbuff(_("^!Year")); convert_command_glyph(fbuff); item_append(fbuff, c_year::ui[custfltr::year[x]], arrow_flags, (void *)(FPTR)(YEAR_FILTER + x)); @@ -209,7 +209,7 @@ void menu_custom_filter::custom_render(void *selectedref, float top, float botto float width; // get the size of the text - ui().draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), _("Select custom filters:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -221,7 +221,7 @@ void menu_custom_filter::custom_render(void *selectedref, float top, float botto float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -229,7 +229,7 @@ void menu_custom_filter::custom_render(void *selectedref, float top, float botto y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), _("Select custom filters:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } @@ -267,7 +267,7 @@ void menu_custom_filter::save_custom_filters() //------------------------------------------------- // ctor / dtor //------------------------------------------------- -menu_swcustom_filter::menu_swcustom_filter(mame_ui_manager &mui, render_container *container, const game_driver *_driver, s_filter &_filter) +menu_swcustom_filter::menu_swcustom_filter(mame_ui_manager &mui, render_container &container, const game_driver *_driver, s_filter &_filter) : menu(mui, container) , m_added(false) , m_filter(_filter) @@ -345,7 +345,7 @@ void menu_swcustom_filter::handle() else s_sel[index] = sw_filters::text[index]; - menu::stack_push(ui(), container, s_sel, sw_custfltr::other[pos]); + menu::stack_push(ui(), container(), s_sel, sw_custfltr::other[pos]); } } else if ((FPTR)menu_event->itemref >= YEAR_FILTER && (FPTR)menu_event->itemref < YEAR_FILTER + MAX_CUST_FILTER) @@ -362,7 +362,7 @@ void menu_swcustom_filter::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, m_filter.year.ui, sw_custfltr::year[pos]); + menu::stack_push(ui(), container(), m_filter.year.ui, sw_custfltr::year[pos]); } else if ((FPTR)menu_event->itemref >= TYPE_FILTER && (FPTR)menu_event->itemref < TYPE_FILTER + MAX_CUST_FILTER) { @@ -378,7 +378,7 @@ void menu_swcustom_filter::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, m_filter.type.ui, sw_custfltr::type[pos]); + menu::stack_push(ui(), container(), m_filter.type.ui, sw_custfltr::type[pos]); } else if ((FPTR)menu_event->itemref >= MNFCT_FILTER && (FPTR)menu_event->itemref < MNFCT_FILTER + MAX_CUST_FILTER) { @@ -394,7 +394,7 @@ void menu_swcustom_filter::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, m_filter.publisher.ui, sw_custfltr::mnfct[pos]); + menu::stack_push(ui(), container(), m_filter.publisher.ui, sw_custfltr::mnfct[pos]); } else if ((FPTR)menu_event->itemref >= REGION_FILTER && (FPTR)menu_event->itemref < REGION_FILTER + MAX_CUST_FILTER) { @@ -410,7 +410,7 @@ void menu_swcustom_filter::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, m_filter.region.ui, sw_custfltr::region[pos]); + menu::stack_push(ui(), container(), m_filter.region.ui, sw_custfltr::region[pos]); } else if ((FPTR)menu_event->itemref >= LIST_FILTER && (FPTR)menu_event->itemref < LIST_FILTER + MAX_CUST_FILTER) { @@ -426,7 +426,7 @@ void menu_swcustom_filter::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, m_filter.swlist.description, sw_custfltr::list[pos]); + menu::stack_push(ui(), container(), m_filter.swlist.description, sw_custfltr::list[pos]); } } @@ -442,7 +442,7 @@ void menu_swcustom_filter::handle() void menu_swcustom_filter::populate() { // add main filter - UINT32 arrow_flags = get_arrow_flags((int)UI_SW_ALL, (int)UI_SW_UNAVAILABLE, sw_custfltr::main); + UINT32 arrow_flags = get_arrow_flags(UI_SW_ALL, UI_SW_UNAVAILABLE, sw_custfltr::main); item_append(_("Main filter"), sw_filters::text[sw_custfltr::main], arrow_flags, (void *)(FPTR)MAIN_FILTER); // add other filters @@ -451,7 +451,7 @@ void menu_swcustom_filter::populate() item_append(menu_item_type::SEPARATOR); // add filter items - arrow_flags = get_arrow_flags((int)UI_SW_UNAVAILABLE + 1, (int)UI_SW_LAST - 1, sw_custfltr::other[x]); + arrow_flags = get_arrow_flags(UI_SW_UNAVAILABLE + 1, UI_SW_LAST - 1, sw_custfltr::other[x]); item_append(_("Other filter"), sw_filters::text[sw_custfltr::other[x]], arrow_flags, (void *)(FPTR)(OTHER_FILTER + x)); if (m_added) @@ -460,7 +460,7 @@ void menu_swcustom_filter::populate() // add publisher subitem if (sw_custfltr::other[x] == UI_SW_PUBLISHERS && m_filter.publisher.ui.size() > 0) { - arrow_flags = get_arrow_flags(0, m_filter.publisher.ui.size() - 1, sw_custfltr::mnfct[x]); + arrow_flags = get_arrow_flags(0, m_filter.publisher.ui.size() - 1, sw_custfltr::mnfct[x]); std::string fbuff(_("^!Publisher")); convert_command_glyph(fbuff); item_append(fbuff, m_filter.publisher.ui[sw_custfltr::mnfct[x]], arrow_flags, (void *)(FPTR)(MNFCT_FILTER + x)); @@ -469,7 +469,7 @@ void menu_swcustom_filter::populate() // add year subitem else if (sw_custfltr::other[x] == UI_SW_YEARS && m_filter.year.ui.size() > 0) { - arrow_flags = get_arrow_flags(0, m_filter.year.ui.size() - 1, sw_custfltr::year[x]); + arrow_flags = get_arrow_flags(0, m_filter.year.ui.size() - 1, sw_custfltr::year[x]); std::string fbuff(_("^!Year")); convert_command_glyph(fbuff); item_append(fbuff, m_filter.year.ui[sw_custfltr::year[x]], arrow_flags, (void *)(FPTR)(YEAR_FILTER + x)); @@ -478,7 +478,7 @@ void menu_swcustom_filter::populate() // add year subitem else if (sw_custfltr::other[x] == UI_SW_LIST && m_filter.swlist.name.size() > 0) { - arrow_flags = get_arrow_flags(0, m_filter.swlist.name.size() - 1, sw_custfltr::list[x]); + arrow_flags = get_arrow_flags(0, m_filter.swlist.name.size() - 1, sw_custfltr::list[x]); std::string fbuff(_("^!Software List")); convert_command_glyph(fbuff); item_append(fbuff, m_filter.swlist.description[sw_custfltr::list[x]], arrow_flags, (void *)(FPTR)(LIST_FILTER + x)); @@ -487,7 +487,7 @@ void menu_swcustom_filter::populate() // add device type subitem else if (sw_custfltr::other[x] == UI_SW_TYPE && m_filter.type.ui.size() > 0) { - arrow_flags = get_arrow_flags(0, m_filter.type.ui.size() - 1, sw_custfltr::type[x]); + arrow_flags = get_arrow_flags(0, m_filter.type.ui.size() - 1, sw_custfltr::type[x]); std::string fbuff(_("^!Device type")); convert_command_glyph(fbuff); item_append(fbuff, m_filter.type.ui[sw_custfltr::type[x]], arrow_flags, (void *)(FPTR)(TYPE_FILTER + x)); @@ -496,7 +496,7 @@ void menu_swcustom_filter::populate() // add region subitem else if (sw_custfltr::other[x] == UI_SW_REGION && m_filter.region.ui.size() > 0) { - arrow_flags = get_arrow_flags(0, m_filter.region.ui.size() - 1, sw_custfltr::region[x]); + arrow_flags = get_arrow_flags(0, m_filter.region.ui.size() - 1, sw_custfltr::region[x]); std::string fbuff(_("^!Region")); convert_command_glyph(fbuff); item_append(fbuff, m_filter.region.ui[sw_custfltr::region[x]], arrow_flags, (void *)(FPTR)(REGION_FILTER + x)); @@ -524,7 +524,7 @@ void menu_swcustom_filter::custom_render(void *selectedref, float top, float bot float width; // get the size of the text - ui().draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), _("Select custom filters:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -536,7 +536,7 @@ void menu_swcustom_filter::custom_render(void *selectedref, float top, float bot float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -544,7 +544,7 @@ void menu_swcustom_filter::custom_render(void *selectedref, float top, float bot y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), _("Select custom filters:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/custmenu.h b/src/frontend/mame/ui/custmenu.h index 9bd4ba9b4ef..5d3084f9121 100644 --- a/src/frontend/mame/ui/custmenu.h +++ b/src/frontend/mame/ui/custmenu.h @@ -9,11 +9,11 @@ ***************************************************************************/ -#pragma once - #ifndef MAME_FRONTEND_UI_CUSTMENU_H #define MAME_FRONTEND_UI_CUSTMENU_H +#pragma once + #include "ui/menu.h" #include "ui/utils.h" @@ -75,10 +75,10 @@ struct s_filter class menu_swcustom_filter : public menu { public: - menu_swcustom_filter(mame_ui_manager &mui, render_container *container, const game_driver *_driver, s_filter &_filter); + menu_swcustom_filter(mame_ui_manager &mui, render_container &container, const game_driver *_driver, s_filter &_filter); virtual ~menu_swcustom_filter() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: @@ -95,11 +95,14 @@ private: OTHER_FILTER = LIST_FILTER + MAX_CUST_FILTER + 1 }; + virtual void populate() override; + virtual void handle() override; + + void save_sw_custom_filters(); + bool m_added; s_filter &m_filter; const game_driver *m_driver; - - void save_sw_custom_filters(); }; //------------------------------------------------- @@ -108,10 +111,10 @@ private: class menu_custom_filter : public menu { public: - menu_custom_filter(mame_ui_manager &mui, render_container *container, bool _single_menu = false); + menu_custom_filter(mame_ui_manager &mui, render_container &container, bool _single_menu = false); virtual ~menu_custom_filter() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: @@ -125,9 +128,12 @@ private: SCREEN_FILTER = YEAR_FILTER + MAX_CUST_FILTER + 1, OTHER_FILTER = SCREEN_FILTER + MAX_CUST_FILTER + 1 }; + virtual void populate() override; + virtual void handle() override; - bool m_single_menu, m_added; void save_custom_filters(); + + bool m_single_menu, m_added; }; } // namespace ui diff --git a/src/frontend/mame/ui/custui.cpp b/src/frontend/mame/ui/custui.cpp index 0b2032631e7..060f50a2239 100644 --- a/src/frontend/mame/ui/custui.cpp +++ b/src/frontend/mame/ui/custui.cpp @@ -21,9 +21,12 @@ #include "osdepend.h" #include "uiinput.h" +#include +#include + namespace ui { -const char *const menu_custom_ui::hide_status[] = { +const char *const menu_custom_ui::HIDE_STATUS[] = { __("Show All"), __("Hide Filters"), __("Hide Info/Image"), @@ -33,14 +36,15 @@ const char *const menu_custom_ui::hide_status[] = { // ctor //------------------------------------------------- -menu_custom_ui::menu_custom_ui(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_custom_ui::menu_custom_ui(mame_ui_manager &mui, render_container &container) : menu(mui, container) { // load languages file_enumerator path(mui.machine().options().language_path()); auto lang = mui.machine().options().language(); const osd::directory::entry *dirent; - int cnt = 0; + std::size_t cnt = 0; while ((dirent = path.next()) != nullptr) + { if (dirent->type == osd::directory::entry::entry_type::DIR && strcmp(dirent->name, ".") != 0 && strcmp(dirent->name, "..") != 0) { auto name = std::string(dirent->name); @@ -51,6 +55,7 @@ menu_custom_ui::menu_custom_ui(mame_ui_manager &mui, render_container *container m_currlang = cnt; ++cnt; } + } } //------------------------------------------------- @@ -87,11 +92,11 @@ void menu_custom_ui::handle() { case FONT_MENU: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case COLORS_MENU: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case HIDE_MENU: { @@ -102,12 +107,9 @@ void menu_custom_ui::handle() } else if (menu_event->iptkey == IPT_UI_SELECT) { - int total = ARRAY_LENGTH(hide_status); - std::vector s_sel(total); - for (int index = 0; index < total; ++index) - s_sel[index] = _(hide_status[index]); - - menu::stack_push(ui(), container, s_sel, ui_globals::panels_status); + std::vector s_sel(ARRAY_LENGTH(HIDE_STATUS)); + std::transform(std::begin(HIDE_STATUS), std::end(HIDE_STATUS), s_sel.begin(), [](auto &s) { return _(s); }); + menu::stack_push(ui(), container(), std::move(s_sel), ui_globals::panels_status); } break; } @@ -120,12 +122,7 @@ void menu_custom_ui::handle() } else if (menu_event->iptkey == IPT_UI_SELECT) { - int total = m_lang.size(); - std::vector s_sel(total); - for (int index = 0; index < total; ++index) - s_sel[index] = m_lang[index]; - - menu::stack_push(ui(), container, s_sel, m_currlang); + menu::stack_push(ui(), container(), m_lang, m_currlang); } break; } @@ -148,12 +145,12 @@ void menu_custom_ui::populate() if (!m_lang.empty()) { - arrow_flags = get_arrow_flags(0, m_lang.size() - 1, m_currlang); + arrow_flags = get_arrow_flags(0, m_lang.size() - 1, m_currlang); item_append(_("Language"), m_lang[m_currlang].c_str(), arrow_flags, (void *)(FPTR)LANGUAGE_MENU); } - arrow_flags = get_arrow_flags(0, (int)HIDE_BOTH, ui_globals::panels_status); - item_append(_("Show side panels"), _(hide_status[ui_globals::panels_status]), arrow_flags, (void *)(FPTR)HIDE_MENU); + arrow_flags = get_arrow_flags(0, HIDE_BOTH, ui_globals::panels_status); + item_append(_("Show side panels"), _(HIDE_STATUS[ui_globals::panels_status]), arrow_flags, (void *)(FPTR)HIDE_MENU); item_append(menu_item_type::SEPARATOR); customtop = ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER; @@ -167,7 +164,7 @@ void menu_custom_ui::custom_render(void *selectedref, float top, float bottom, f { float width; - ui().draw_text_full(container, _("Custom UI Settings"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Custom UI Settings"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -179,7 +176,7 @@ void menu_custom_ui::custom_render(void *selectedref, float top, float bottom, f float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -187,7 +184,7 @@ void menu_custom_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Custom UI Settings"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Custom UI Settings"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } @@ -195,7 +192,7 @@ void menu_custom_ui::custom_render(void *selectedref, float top, float bottom, f // ctor //------------------------------------------------- -menu_font_ui::menu_font_ui(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_font_ui::menu_font_ui(mame_ui_manager &mui, render_container &container) : menu(mui, container) { ui_options &moptions = mui.options(); std::string name(mui.machine().options().ui_font()); @@ -207,7 +204,7 @@ menu_font_ui::menu_font_ui(mame_ui_manager &mui, render_container *container) : #endif m_actual = 0; - for (size_t index = 0; index < m_fonts.size(); index++) + for (std::size_t index = 0; index < m_fonts.size(); index++) { if (m_fonts[index].first == name) { @@ -316,7 +313,7 @@ void menu_font_ui::handle() std::vector display_names; display_names.reserve(m_fonts.size()); for (auto const &font : m_fonts) display_names.emplace_back(font.second); - menu::stack_push(ui(), container, std::move(display_names), m_actual); + menu::stack_push(ui(), container(), std::move(display_names), m_actual); changed = true; } break; @@ -347,7 +344,7 @@ void menu_font_ui::populate() UINT32 arrow_flags; // add fonts option - arrow_flags = get_arrow_flags(0, m_fonts.size() - 1, m_actual); + arrow_flags = get_arrow_flags(0, m_fonts.size() - 1, m_actual); item_append(_("UI Font"), m_fonts[m_actual].second, arrow_flags, (void *)(FPTR)MUI_FNT); #ifdef UI_WINDOWS @@ -383,7 +380,7 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo // top text std::string topbuf(_("UI Fonts Settings")); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -395,7 +392,7 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -403,14 +400,14 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); if ((FPTR)selectedref == INFOS_SIZE) { topbuf = _("Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr, m_info_size); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(origx2 - origx1, width); @@ -422,7 +419,7 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -430,7 +427,7 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, m_info_size); } } @@ -440,7 +437,7 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo //------------------------------------------------- #define SET_COLOR_UI(var, opt) var[M##opt].color = opt; var[M##opt].option = OPTION_##opt -menu_colors_ui::menu_colors_ui(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_colors_ui::menu_colors_ui(mame_ui_manager &mui, render_container &container) : menu(mui, container) { SET_COLOR_UI(m_color_table, UI_BACKGROUND_COLOR); SET_COLOR_UI(m_color_table, UI_BORDER_COLOR); @@ -488,7 +485,7 @@ void menu_colors_ui::handle() if (menu_event != nullptr && menu_event->itemref != nullptr && menu_event->iptkey == IPT_UI_SELECT) { if ((FPTR)menu_event->itemref != MUI_RESTORE) - menu::stack_push(ui(), container, &m_color_table[(FPTR)menu_event->itemref].color, item[selected].text); + menu::stack_push(ui(), container(), &m_color_table[(FPTR)menu_event->itemref].color, item[selected].text); else { changed = true; @@ -541,7 +538,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f // top text std::string topbuf(_("UI Colors Settings")); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -553,7 +550,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -561,7 +558,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // bottom text @@ -569,7 +566,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD)); topbuf = string_format(_("Double click or press %1$s to change the color value"), ui_select_text); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -581,7 +578,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_RED_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_RED_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -589,13 +586,13 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // compute maxwidth topbuf = _("Menu Preview"); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); maxwidth = width + 2.0f * UI_BOX_LR_BORDER; @@ -609,7 +606,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f for (auto & elem: sampletxt) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -622,7 +619,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y2 = y1 + bottom - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -631,7 +628,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y2 -= UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // compute our bounds for menu preview @@ -641,7 +638,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y2 = y1 + 5.0f * line_height + 2.0f * UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, m_color_table[MUI_BACKGROUND_COLOR].color); + ui().draw_outlined_box(container(), x1, y1, x2, y2, m_color_table[MUI_BACKGROUND_COLOR].color); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -649,29 +646,29 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw normal text - ui().draw_text_full(container, sampletxt[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), sampletxt[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, m_color_table[MUI_TEXT_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw subitem text - ui().draw_text_full(container, sampletxt[1].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), sampletxt[1].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, m_color_table[MUI_SUBITEM_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw selected text - highlight(container, x1, y1, x2, y1 + line_height, m_color_table[MUI_SELECTED_BG_COLOR].color); - ui().draw_text_full(container, sampletxt[2].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + highlight(x1, y1, x2, y1 + line_height, m_color_table[MUI_SELECTED_BG_COLOR].color); + ui().draw_text_full(container(), sampletxt[2].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, m_color_table[MUI_SELECTED_COLOR].color, m_color_table[MUI_SELECTED_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw mouse over text - highlight(container, x1, y1, x2, y1 + line_height, m_color_table[MUI_MOUSEOVER_BG_COLOR].color); - ui().draw_text_full(container, sampletxt[3].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + highlight(x1, y1, x2, y1 + line_height, m_color_table[MUI_MOUSEOVER_BG_COLOR].color); + ui().draw_text_full(container(), sampletxt[3].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, m_color_table[MUI_MOUSEOVER_COLOR].color, m_color_table[MUI_MOUSEOVER_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw clone text - ui().draw_text_full(container, sampletxt[4].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), sampletxt[4].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, m_color_table[MUI_CLONE_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); } @@ -691,7 +688,7 @@ void menu_colors_ui::restore_colors() // ctor //------------------------------------------------- -menu_rgb_ui::menu_rgb_ui(mame_ui_manager &mui, render_container *container, rgb_t *_color, std::string _title) : menu(mui, container) +menu_rgb_ui::menu_rgb_ui(mame_ui_manager &mui, render_container &container, rgb_t *_color, std::string _title) : menu(mui, container) { m_color = _color; m_key_active = false; @@ -814,7 +811,7 @@ void menu_rgb_ui::handle() case PALETTE_CHOOSE: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, *m_color); + menu::stack_push(ui(), container(), *m_color); break; } } @@ -835,7 +832,7 @@ void menu_rgb_ui::populate() if (m_lock_ref != RGB_ALPHA) { - arrow_flags = get_arrow_flags(0, 255, m_color->a()); + arrow_flags = get_arrow_flags(0, 255, m_color->a()); item_append(_("Alpha"), string_format("%3u", m_color->a()), arrow_flags, (void *)(FPTR)RGB_ALPHA); } else @@ -843,7 +840,7 @@ void menu_rgb_ui::populate() if (m_lock_ref != RGB_RED) { - arrow_flags = get_arrow_flags(0, 255, m_color->r()); + arrow_flags = get_arrow_flags(0, 255, m_color->r()); item_append(_("Red"), string_format("%3u", m_color->r()), arrow_flags, (void *)(FPTR)RGB_RED); } else @@ -851,7 +848,7 @@ void menu_rgb_ui::populate() if (m_lock_ref != RGB_GREEN) { - arrow_flags = get_arrow_flags(0, 255, m_color->g()); + arrow_flags = get_arrow_flags(0, 255, m_color->g()); item_append(_("Green"), string_format("%3u", m_color->g()), arrow_flags, (void *)(FPTR)RGB_GREEN); } else @@ -859,7 +856,7 @@ void menu_rgb_ui::populate() if (m_lock_ref != RGB_BLUE) { - arrow_flags = get_arrow_flags(0, 255, m_color->b()); + arrow_flags = get_arrow_flags(0, 255, m_color->b()); item_append(_("Blue"), string_format("%3u", m_color->b()), arrow_flags, (void *)(FPTR)RGB_BLUE); } else @@ -882,7 +879,7 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa // top text std::string topbuf = std::string(m_title).append(_(" - ARGB Settings")); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -894,7 +891,7 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -902,12 +899,12 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); std::string sampletxt(_("Color preview =")); maxwidth = origx2 - origx1; - ui().draw_text_full(container, sampletxt.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), sampletxt.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -919,7 +916,7 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_RED_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_RED_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -927,7 +924,7 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa y1 += UI_BOX_TB_BORDER; // draw the normal text - ui().draw_text_full(container, sampletxt.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), sampletxt.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); float t_x2 = x1 - UI_BOX_LR_BORDER + maxwidth; @@ -935,7 +932,7 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa x2 = t_x2; y1 -= UI_BOX_TB_BORDER; - ui().draw_outlined_box(container, x1, y1, x2, y2, *m_color); + ui().draw_outlined_box(container(), x1, y1, x2, y2, *m_color); } @@ -1021,7 +1018,7 @@ std::pair const menu_palette_sel::s_palette[] = { // ctor //------------------------------------------------- -menu_palette_sel::menu_palette_sel(mame_ui_manager &mui, render_container *container, rgb_t &_color) +menu_palette_sel::menu_palette_sel(mame_ui_manager &mui, render_container &container, rgb_t &_color) : menu(mui, container), m_original(_color) { } @@ -1138,7 +1135,7 @@ void menu_palette_sel::draw(UINT32 flags) float y1 = visible_top - UI_BOX_TB_BORDER; float x2 = visible_left + visible_width + UI_BOX_LR_BORDER; float y2 = visible_top + visible_main_menu_height + UI_BOX_TB_BORDER; - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // determine the first visible line based on the current selection int top_line = selected - visible_lines / 2; @@ -1156,7 +1153,7 @@ void menu_palette_sel::draw(UINT32 flags) mouse_button = false; mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); if (mouse_target != nullptr) - if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) + if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y)) mouse_hit = true; // loop over visible lines @@ -1195,12 +1192,12 @@ void menu_palette_sel::draw(UINT32 flags) // if we have some background hilighting to do, add a quad behind everything else if (bgcolor != UI_TEXT_BG_COLOR) - highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); + highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); // if we're on the top line, display the up arrow if (linenum == 0 && top_line != 0) { - draw_arrow(container, + draw_arrow( 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, @@ -1214,7 +1211,7 @@ void menu_palette_sel::draw(UINT32 flags) // if we're on the bottom line, display the down arrow else if (linenum == visible_lines - 1 && itemnum != item.size() - 1) { - draw_arrow(container, + draw_arrow( 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, @@ -1227,11 +1224,11 @@ void menu_palette_sel::draw(UINT32 flags) // if we're just a divider, draw a line else if (pitem.type == menu_item_type::SEPARATOR) - container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // if we don't have a subitem, just draw the string centered else if (pitem.subtext.empty()) - ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, + ui().draw_text_full(container(), itemtext, effective_left, line_y, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); // otherwise, draw the item on the left and the subitem text on the right @@ -1241,13 +1238,13 @@ void menu_palette_sel::draw(UINT32 flags) rgb_t color = rgb_t((UINT32)strtoul(subitem_text, nullptr, 16)); // draw the left-side text - ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, + ui().draw_text_full(container(), itemtext, effective_left, line_y, effective_width, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); // give 2 spaces worth of padding float subitem_width = ui().get_string_width("FF00FF00"); - ui().draw_outlined_box(container, effective_left + effective_width - subitem_width, line_y0, + ui().draw_outlined_box(container(), effective_left + effective_width - subitem_width, line_y0, effective_left + effective_width, line_y1, color); } } diff --git a/src/frontend/mame/ui/custui.h b/src/frontend/mame/ui/custui.h index 59fba714c5e..904ca3283c3 100644 --- a/src/frontend/mame/ui/custui.h +++ b/src/frontend/mame/ui/custui.h @@ -23,10 +23,10 @@ namespace ui { class menu_custom_ui : public menu { public: - menu_custom_ui(mame_ui_manager &mui, render_container *container); + menu_custom_ui(mame_ui_manager &mui, render_container &container); virtual ~menu_custom_ui() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: @@ -37,9 +37,14 @@ private: COLORS_MENU, HIDE_MENU }; - static const char *const hide_status[]; - std::vector m_lang; - std::uint16_t m_currlang; + + virtual void populate() override; + virtual void handle() override; + + static const char *const HIDE_STATUS[]; + + std::vector m_lang; + std::uint16_t m_currlang; }; //------------------------------------------------- @@ -49,10 +54,10 @@ private: class menu_font_ui : public menu { public: - menu_font_ui(mame_ui_manager &mui, render_container *container); + menu_font_ui(mame_ui_manager &mui, render_container &container); virtual ~menu_font_ui() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: @@ -65,6 +70,9 @@ private: MUI_ITALIC }; + virtual void populate() override; + virtual void handle() override; + void list(); std::uint16_t m_actual; @@ -84,10 +92,10 @@ private: class menu_colors_ui : public menu { public: - menu_colors_ui(mame_ui_manager &mui, render_container *container); + menu_colors_ui(mame_ui_manager &mui, render_container &container); virtual ~menu_colors_ui() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: @@ -118,6 +126,9 @@ private: const char *option; }; + virtual void populate() override; + virtual void handle() override; + s_color_table m_color_table[MUI_RESTORE]; void restore_colors(); }; @@ -129,19 +140,13 @@ private: class menu_rgb_ui : public menu { public: - menu_rgb_ui(mame_ui_manager &mui, render_container *container, rgb_t *_color, std::string _title); + menu_rgb_ui(mame_ui_manager &mui, render_container &container, rgb_t *_color, std::string _title); virtual ~menu_rgb_ui() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: - rgb_t *m_color; - char m_search[4]; - bool m_key_active; - int m_lock_ref; - std::string m_title; - enum { RGB_ALPHA = 1, @@ -151,7 +156,16 @@ private: PALETTE_CHOOSE }; + virtual void populate() override; + virtual void handle() override; + void inkey_special(const event *menu_event); + + rgb_t *m_color; + char m_search[4]; + bool m_key_active; + int m_lock_ref; + std::string m_title; }; //------------------------------------------------- @@ -161,16 +175,19 @@ private: class menu_palette_sel : public menu { public: - menu_palette_sel(mame_ui_manager &mui, render_container *container, rgb_t &_color); + menu_palette_sel(mame_ui_manager &mui, render_container &container, rgb_t &_color); virtual ~menu_palette_sel() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: // draw palette menu virtual void draw(UINT32 flags) override; + virtual void populate() override; + virtual void handle() override; + static std::pair const s_palette[]; rgb_t &m_original; }; diff --git a/src/frontend/mame/ui/datmenu.cpp b/src/frontend/mame/ui/datmenu.cpp index 346d3572bf8..c4d7b809266 100644 --- a/src/frontend/mame/ui/datmenu.cpp +++ b/src/frontend/mame/ui/datmenu.cpp @@ -28,7 +28,7 @@ namespace ui { // ctor / dtor //------------------------------------------------- -menu_dats_view::menu_dats_view(mame_ui_manager &mui, render_container *container, const game_driver *driver) +menu_dats_view::menu_dats_view(mame_ui_manager &mui, render_container &container, const game_driver *driver) : menu(mui, container) , m_actual(0) , m_driver((driver == nullptr) ? &mui.machine().system() : driver) @@ -53,7 +53,7 @@ menu_dats_view::menu_dats_view(mame_ui_manager &mui, render_container *container // ctor //------------------------------------------------- -menu_dats_view::menu_dats_view(mame_ui_manager &mui, render_container *container, ui_software_info *swinfo, const game_driver *driver) +menu_dats_view::menu_dats_view(mame_ui_manager &mui, render_container &container, ui_software_info *swinfo, const game_driver *driver) : menu(mui, container) , m_actual(0) , m_driver((driver == nullptr) ? &mui.machine().system() : driver) @@ -147,7 +147,7 @@ void menu_dats_view::draw(UINT32 flags) mouse_button = false; mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); if (mouse_target != nullptr) - if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) + if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y)) mouse_hit = true; // account for extra space at the top and bottom @@ -168,7 +168,7 @@ void menu_dats_view::draw(UINT32 flags) float y2 = visible_top + visible_main_menu_height + UI_BOX_TB_BORDER + extra_height; float line = visible_top + float(m_visible_lines) * line_height; - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); m_visible_lines = (std::min)(visible_items, m_visible_lines); top_line = (std::max)(0, top_line); @@ -196,28 +196,28 @@ void menu_dats_view::draw(UINT32 flags) // if we're on the top line, display the up arrow if (linenum == 0 && top_line != 0) { - draw_arrow(container, 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, + draw_arrow(0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, line_y + 0.75f * line_height, fgcolor, ROT0); if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y) { fgcolor = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); + highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); hover = HOVER_ARROW_UP; } } // if we're on the bottom line, display the down arrow else if (linenum == m_visible_lines - 1 && itemnum != visible_items - 1) { - draw_arrow(container, 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, + draw_arrow(0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, line_y + 0.75f * line_height, fgcolor, ROT0 ^ ORIENTATION_FLIP_Y); if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y) { fgcolor = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); + highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); hover = HOVER_ARROW_DOWN; } } @@ -225,7 +225,7 @@ void menu_dats_view::draw(UINT32 flags) // draw dats text else if (pitem.subtext.empty()) { - ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, ui::text_layout::LEFT, ui::text_layout::NEVER, + ui().draw_text_full(container(), itemtext, effective_left, line_y, effective_width, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); } } @@ -245,12 +245,12 @@ void menu_dats_view::draw(UINT32 flags) hover = count; if (pitem.type == menu_item_type::SEPARATOR) - container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, + container().add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); else { - highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); - ui().draw_text_full(container, itemtext, effective_left, line, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); + ui().draw_text_full(container(), itemtext, effective_left, line, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); } line += line_height; @@ -273,7 +273,7 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f float width; std::string driver = (m_issoft == true) ? m_swinfo->longname : m_driver->description; - ui().draw_text_full(container, driver.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), driver.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -285,20 +285,20 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f float y2 = origy1 - 2.0f * UI_BOX_TB_BORDER - ui().get_line_height(); // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; x2 -= UI_BOX_LR_BORDER; y1 += UI_BOX_TB_BORDER; - ui().draw_text_full(container, driver.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), driver.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); maxwidth = 0; for (auto & elem : m_items_list) { - ui().draw_text_full(container, elem.label.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), elem.label.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); maxwidth += width; } @@ -312,7 +312,7 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f y2 += ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders y1 += UI_BOX_TB_BORDER; @@ -324,13 +324,13 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f x1 += space; rgb_t fcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0x00) : UI_TEXT_COLOR; rgb_t bcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0xff) : UI_TEXT_BG_COLOR; - ui().draw_text_full(container, elem.label.c_str(), x1, y1, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NONE, fcolor, bcolor, &width, nullptr); + ui().draw_text_full(container(), elem.label.c_str(), x1, y1, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NONE, fcolor, bcolor, &width, nullptr); if (bcolor != UI_TEXT_BG_COLOR) - ui().draw_textured_box(container, x1 - (space / 2), y1, x1 + width + (space / 2), y2, bcolor, rgb_t(255, 43, 43, 43), + ui().draw_textured_box(container(), x1 - (space / 2), y1, x1 + width + (space / 2), y2, bcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); - ui().draw_text_full(container, elem.label.c_str(), x1, y1, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fcolor, bcolor, &width, nullptr); + ui().draw_text_full(container(), elem.label.c_str(), x1, y1, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fcolor, bcolor, &width, nullptr); x1 += width + space; ++x; } @@ -338,7 +338,7 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f // bottom std::string revision; revision.assign(_("Revision: ")).append(m_items_list[m_actual].revision); - ui().draw_text_full(container, revision.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container(), revision.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(origx2 - origx1, width); @@ -349,7 +349,7 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -357,7 +357,7 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, revision.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), revision.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } @@ -388,7 +388,7 @@ void menu_dats_view::get_data() else mame_machine_manager::instance()->datfile().load_data_info(m_driver, buffer, m_items_list[m_actual].option); - auto lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); + auto lines = ui().wrap_text(container(), buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); for (int x = 0; x < lines; ++x) { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); @@ -411,7 +411,7 @@ void menu_dats_view::get_data_sw() mame_machine_manager::instance()->datfile().load_software_info(m_swinfo->listname, buffer, m_swinfo->shortname, m_swinfo->parentname); } - auto lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); + auto lines = ui().wrap_text(container(), buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); for (int x = 0; x < lines; ++x) { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); diff --git a/src/frontend/mame/ui/datmenu.h b/src/frontend/mame/ui/datmenu.h index 300a0f60eeb..03299187c97 100644 --- a/src/frontend/mame/ui/datmenu.h +++ b/src/frontend/mame/ui/datmenu.h @@ -30,17 +30,20 @@ namespace ui { class menu_dats_view : public menu { public: - menu_dats_view(mame_ui_manager &mui, render_container *container, ui_software_info *swinfo, const game_driver *driver = nullptr); - menu_dats_view(mame_ui_manager &mui, render_container *container, const game_driver *driver = nullptr); + menu_dats_view(mame_ui_manager &mui, render_container &container, ui_software_info *swinfo, const game_driver *driver = nullptr); + menu_dats_view(mame_ui_manager &mui, render_container &container, const game_driver *driver = nullptr); virtual ~menu_dats_view() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: // draw dats menu virtual void draw(UINT32 flags) override; + virtual void populate() override; + virtual void handle() override; + int visible_items; int m_actual; const game_driver *m_driver; diff --git a/src/frontend/mame/ui/devctrl.h b/src/frontend/mame/ui/devctrl.h index 21505e0a0e7..332d020144e 100644 --- a/src/frontend/mame/ui/devctrl.h +++ b/src/frontend/mame/ui/devctrl.h @@ -30,7 +30,7 @@ template class menu_device_control : public menu { public: - menu_device_control(mame_ui_manager &mui, render_container *container, DeviceType *device); + menu_device_control(mame_ui_manager &mui, render_container &container, DeviceType *device); protected: DeviceType *current_device() { return m_device; } @@ -56,7 +56,7 @@ private: //------------------------------------------------- template -menu_device_control::menu_device_control(mame_ui_manager &mui, render_container *container, DeviceType *device) +menu_device_control::menu_device_control(mame_ui_manager &mui, render_container &container, DeviceType *device) : menu(mui, container) { iterator iter(mui.machine().root_device()); diff --git a/src/frontend/mame/ui/devopt.cpp b/src/frontend/mame/ui/devopt.cpp index eecb790b81f..099c62428f0 100644 --- a/src/frontend/mame/ui/devopt.cpp +++ b/src/frontend/mame/ui/devopt.cpp @@ -19,7 +19,7 @@ namespace ui { menu -------------------------------------------------*/ -menu_device_config::menu_device_config(mame_ui_manager &mui, render_container *container, device_slot_interface *slot, device_slot_option *option) : menu(mui, container) +menu_device_config::menu_device_config(mame_ui_manager &mui, render_container &container, device_slot_interface *slot, device_slot_option *option) : menu(mui, container) { m_option = option; m_owner = slot; diff --git a/src/frontend/mame/ui/devopt.h b/src/frontend/mame/ui/devopt.h index 0079291323a..bf6835f9df0 100644 --- a/src/frontend/mame/ui/devopt.h +++ b/src/frontend/mame/ui/devopt.h @@ -19,12 +19,13 @@ namespace ui { class menu_device_config : public menu { public: - menu_device_config(mame_ui_manager &mui, render_container *container, device_slot_interface *slot, device_slot_option *option); + menu_device_config(mame_ui_manager &mui, render_container &container, device_slot_interface *slot, device_slot_option *option); virtual ~menu_device_config() override; + +private: virtual void populate() override; virtual void handle() override; -private: device_slot_interface *m_owner; device_slot_option *m_option; bool m_mounted; diff --git a/src/frontend/mame/ui/dirmenu.cpp b/src/frontend/mame/ui/dirmenu.cpp index 5e377d4e474..040ecf9a826 100644 --- a/src/frontend/mame/ui/dirmenu.cpp +++ b/src/frontend/mame/ui/dirmenu.cpp @@ -71,7 +71,7 @@ static const folders_entry s_folders[] = // ctor / dtor //------------------------------------------------- -menu_directory::menu_directory(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_directory::menu_directory(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -92,7 +92,7 @@ void menu_directory::handle() const event *menu_event = process(0); if (menu_event != nullptr && menu_event->itemref != nullptr && menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, selected); + menu::stack_push(ui(), container(), selected); } //------------------------------------------------- @@ -117,7 +117,7 @@ void menu_directory::custom_render(void *selectedref, float top, float bottom, f float width; // get the size of the text - ui().draw_text_full(container, _("Folders Setup"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Folders Setup"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -129,7 +129,7 @@ void menu_directory::custom_render(void *selectedref, float top, float bottom, f float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -137,7 +137,7 @@ void menu_directory::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Folders Setup"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Folders Setup"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } @@ -148,7 +148,7 @@ void menu_directory::custom_render(void *selectedref, float top, float bottom, f // ctor / dtor //------------------------------------------------- -menu_display_actual::menu_display_actual(mame_ui_manager &mui, render_container *container, int ref) +menu_display_actual::menu_display_actual(mame_ui_manager &mui, render_container &container, int ref) : menu(mui, container), m_ref(ref) { } @@ -169,11 +169,11 @@ void menu_display_actual::handle() switch ((FPTR)menu_event->itemref) { case REMOVE: - menu::stack_push(ui(), container, m_ref); + menu::stack_push(ui(), container(), m_ref); break; case ADD_CHANGE: - menu::stack_push(ui(), container, m_ref); + menu::stack_push(ui(), container(), m_ref); break; } } @@ -216,13 +216,13 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott for (auto & elem : m_folders) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container(), elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; maxwidth = MAX(maxwidth, width); } // get the size of the text - ui().draw_text_full(container, m_tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container(), m_tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; maxwidth = MAX(width, maxwidth); @@ -233,7 +233,7 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott float y2 = y1 + lineh + 2.0f * UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -241,7 +241,7 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, m_tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), m_tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // compute our bounds @@ -251,7 +251,7 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -261,7 +261,7 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott // draw the text within it for (auto & elem : m_folders) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), elem.c_str(), x1, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 += lineh; } @@ -275,7 +275,7 @@ MENU ADD FOLDER // ctor / dtor //------------------------------------------------- -menu_add_change_folder::menu_add_change_folder(mame_ui_manager &mui, render_container *container, int ref) : menu(mui, container) +menu_add_change_folder::menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref) : menu(mui, container) { m_ref = ref; m_change = (s_folders[ref].action == CHANGE); @@ -505,7 +505,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b // get the size of the text for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; maxwidth = MAX(width, maxwidth); @@ -518,7 +518,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -528,7 +528,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b // draw the text within it for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 = y1 + ui().get_line_height(); } @@ -536,7 +536,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b // bottom text tempbuf[0] = _("Press TAB to set"); - ui().draw_text_full(container, tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -548,7 +548,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_RED_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_RED_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -556,7 +556,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } @@ -568,7 +568,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b // ctor / dtor //------------------------------------------------- -menu_remove_folder::menu_remove_folder(mame_ui_manager &mui, render_container *container, int ref) : menu(mui, container) +menu_remove_folder::menu_remove_folder(mame_ui_manager &mui, render_container &container, int ref) : menu(mui, container) { m_ref = ref; if (mui.options().exists(s_folders[m_ref].option)) @@ -642,7 +642,7 @@ void menu_remove_folder::custom_render(void *selectedref, float top, float botto std::string tempbuf = string_format(_("Remove %1$s Folder"), _(s_folders[m_ref].name)); // get the size of the text - ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container(), tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -653,7 +653,7 @@ void menu_remove_folder::custom_render(void *selectedref, float top, float botto float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -661,7 +661,7 @@ void menu_remove_folder::custom_render(void *selectedref, float top, float botto y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, + ui().draw_text_full(container(), tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/dirmenu.h b/src/frontend/mame/ui/dirmenu.h index b9f07a33b3e..fbd83a3ecb8 100644 --- a/src/frontend/mame/ui/dirmenu.h +++ b/src/frontend/mame/ui/dirmenu.h @@ -26,11 +26,15 @@ namespace ui { class menu_directory : public menu { public: - menu_directory(mame_ui_manager &mui, render_container *container); + menu_directory(mame_ui_manager &mui, render_container &container); virtual ~menu_directory() override; + +protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; + +private: virtual void populate() override; virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; }; //------------------------------------------------- @@ -40,22 +44,25 @@ public: class menu_display_actual : public menu { public: - menu_display_actual(mame_ui_manager &mui, render_container *container, int selectedref); + menu_display_actual(mame_ui_manager &mui, render_container &container, int selectedref); virtual ~menu_display_actual() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: - std::string m_tempbuf, m_searchpath; - std::vector m_folders; - int m_ref; - enum { ADD_CHANGE = 1, REMOVE, }; + + virtual void populate() override; + virtual void handle() override; + + std::string m_tempbuf, m_searchpath; + std::vector m_folders; + int m_ref; }; //------------------------------------------------- @@ -65,13 +72,16 @@ private: class menu_remove_folder : public menu { public: - menu_remove_folder(mame_ui_manager &mui, render_container *container, int ref); + menu_remove_folder(mame_ui_manager &mui, render_container &container, int ref); virtual ~menu_remove_folder() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: + virtual void populate() override; + virtual void handle() override; + std::string m_searchpath; int m_ref; std::vector m_folders; @@ -84,15 +94,18 @@ private: class menu_add_change_folder : public menu { public: - menu_add_change_folder(mame_ui_manager &mui, render_container *container, int ref); + menu_add_change_folder(mame_ui_manager &mui, render_container &container, int ref); virtual ~menu_add_change_folder() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; virtual bool menu_has_search_active() override { return (m_search[0] != 0); } private: + virtual void populate() override; + virtual void handle() override; + int m_ref; std::string m_current_path; char m_search[40]; diff --git a/src/frontend/mame/ui/filecreate.cpp b/src/frontend/mame/ui/filecreate.cpp index 9cd260684a3..e54692e600f 100644 --- a/src/frontend/mame/ui/filecreate.cpp +++ b/src/frontend/mame/ui/filecreate.cpp @@ -2,12 +2,12 @@ // copyright-holders:Nathan Woods /*************************************************************************** - ui/filecreate.cpp + ui/filecreate.cpp - MAME's clunky built-in file manager + MAME's clunky built-in file manager - TODO - - Support image creation arguments + TODO + - Support image creation arguments ***************************************************************************/ @@ -80,7 +80,7 @@ CONFIRM SAVE AS MENU // ctor //------------------------------------------------- -menu_confirm_save_as::menu_confirm_save_as(mame_ui_manager &mui, render_container *container, bool *yes) +menu_confirm_save_as::menu_confirm_save_as(mame_ui_manager &mui, render_container &container, bool *yes) : menu(mui, container) { m_yes = yes; @@ -139,12 +139,12 @@ FILE CREATE MENU // ctor //------------------------------------------------- -menu_file_create::menu_file_create(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool &ok) +menu_file_create::menu_file_create(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool &ok) : menu(mui, container) + , m_ok(ok) , m_current_directory(current_directory) , m_current_file(current_file) , m_current_format(nullptr) - , m_ok(ok) { m_image = image; m_ok = true; @@ -268,7 +268,7 @@ SELECT FORMAT MENU // ctor //------------------------------------------------- -menu_select_format::menu_select_format(mame_ui_manager &mui, render_container *container, floppy_image_format_t **formats, int ext_match, int total_usable, int *result) +menu_select_format::menu_select_format(mame_ui_manager &mui, render_container &container, floppy_image_format_t **formats, int ext_match, int total_usable, int *result) : menu(mui, container) { m_formats = formats; diff --git a/src/frontend/mame/ui/filecreate.h b/src/frontend/mame/ui/filecreate.h index 8935fcb1e47..47905564d68 100644 --- a/src/frontend/mame/ui/filecreate.h +++ b/src/frontend/mame/ui/filecreate.h @@ -2,9 +2,9 @@ // copyright-holders:Nathan Woods /*************************************************************************** - ui/filecreate.h + ui/filecreate.h - MESS's clunky built-in file manager + MESS's clunky built-in file manager ***************************************************************************/ @@ -23,12 +23,13 @@ namespace ui { class menu_confirm_save_as : public menu { public: - menu_confirm_save_as(mame_ui_manager &mui, render_container *container, bool *yes); + menu_confirm_save_as(mame_ui_manager &mui, render_container &container, bool *yes); virtual ~menu_confirm_save_as() override; + +private: virtual void populate() override; virtual void handle() override; -private: bool *m_yes; }; @@ -38,21 +39,23 @@ private: class menu_file_create : public menu { public: - menu_file_create(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool &ok); + menu_file_create(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool &ok); virtual ~menu_file_create() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; + bool & m_ok; + private: + virtual void populate() override; + virtual void handle() override; + device_image_interface * m_image; std::string & m_current_directory; std::string & m_current_file; const image_device_format * m_current_format; - std::string m_filename; - -protected: - bool & m_ok; + std::string m_filename; }; // ======================> menu_select_format @@ -60,13 +63,14 @@ protected: class menu_select_format : public menu { public: - menu_select_format(mame_ui_manager &mui, render_container *container, + menu_select_format(mame_ui_manager &mui, render_container &container, floppy_image_format_t **formats, int ext_match, int total_usable, int *result); virtual ~menu_select_format() override; + +private: virtual void populate() override; virtual void handle() override; -private: // internal state floppy_image_format_t ** m_formats; int m_ext_match; diff --git a/src/frontend/mame/ui/filemngr.cpp b/src/frontend/mame/ui/filemngr.cpp index fe5cd6a2197..8883e4beb9f 100644 --- a/src/frontend/mame/ui/filemngr.cpp +++ b/src/frontend/mame/ui/filemngr.cpp @@ -31,7 +31,7 @@ namespace ui { // ctor //------------------------------------------------- -menu_file_manager::menu_file_manager(mame_ui_manager &mui, render_container *container, const char *warnings) : menu(mui, container), selected_device(nullptr) +menu_file_manager::menu_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings) : menu(mui, container), selected_device(nullptr) { // This warning string is used when accessing from the force_file_manager call, i.e. // when the file manager is loaded top front in the case of mandatory image devices @@ -184,11 +184,11 @@ void menu_file_manager::handle() floppy_image_device *floppy_device = dynamic_cast(selected_device); if (floppy_device != nullptr) { - menu::stack_push(ui(), container, floppy_device); + menu::stack_push(ui(), container(), floppy_device); } else { - menu::stack_push(ui(), container, selected_device); + menu::stack_push(ui(), container(), selected_device); } // reset the existing menu reset(reset_options::REMEMBER_POSITION); @@ -198,7 +198,7 @@ void menu_file_manager::handle() } // force file manager menu -void menu_file_manager::force_file_manager(mame_ui_manager &mui, render_container *container, const char *warnings) +void menu_file_manager::force_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings) { // reset the menu stack menu::stack_reset(mui.machine()); diff --git a/src/frontend/mame/ui/filemngr.h b/src/frontend/mame/ui/filemngr.h index 25f364ea487..34cdb0a98ce 100644 --- a/src/frontend/mame/ui/filemngr.h +++ b/src/frontend/mame/ui/filemngr.h @@ -21,19 +21,22 @@ public: std::string current_file; device_image_interface *selected_device; - static void force_file_manager(mame_ui_manager &mui, render_container *container, const char *warnings); + static void force_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings); - menu_file_manager(mame_ui_manager &mui, render_container *container, const char *warnings); + menu_file_manager(mame_ui_manager &mui, render_container &container, const char *warnings); virtual ~menu_file_manager(); + +protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; + +private: virtual void populate() override; virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; void fill_image_line(device_image_interface *img, std::string &instance, std::string &filename); -private: std::string m_warnings; - bool m_curr_selected; + bool m_curr_selected; }; } // namespace ui diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index 673f6a96161..21a0d35c28f 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -44,7 +44,7 @@ namespace ui { // ctor //------------------------------------------------- -menu_file_selector::menu_file_selector(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, menu_file_selector::result &result) +menu_file_selector::menu_file_selector(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, menu_file_selector::result &result) : menu(mui, container) , m_current_directory(current_directory) , m_current_file(current_file) @@ -73,7 +73,7 @@ menu_file_selector::~menu_file_selector() void menu_file_selector::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { // lay out extra text - auto layout = ui().create_layout(container); + auto layout = ui().create_layout(container()); layout.add_text(m_current_directory.c_str()); // position this extra text @@ -81,7 +81,7 @@ void menu_file_selector::custom_render(void *selectedref, float top, float botto extra_text_position(origx1, origx2, origy1, top, layout, -1, x1, y1, x2, y2); // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -109,7 +109,7 @@ void menu_file_selector::custom_render(void *selectedref, float top, float botto } // draw the text within it - layout.emit(container, x1, y1); + layout.emit(container(), x1, y1); } @@ -507,11 +507,11 @@ void menu_file_selector::handle() // ctor //------------------------------------------------- -menu_select_rw::menu_select_rw(mame_ui_manager &mui, render_container *container, +menu_select_rw::menu_select_rw(mame_ui_manager &mui, render_container &container, bool can_in_place, result &result) : menu(mui, container), - m_can_in_place(can_in_place), - m_result(result) + m_can_in_place(can_in_place), + m_result(result) { } diff --git a/src/frontend/mame/ui/filesel.h b/src/frontend/mame/ui/filesel.h index 9daa539ae28..7692a996124 100644 --- a/src/frontend/mame/ui/filesel.h +++ b/src/frontend/mame/ui/filesel.h @@ -30,13 +30,11 @@ public: FILE }; - menu_file_selector(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, result &result); + menu_file_selector(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, result &result); virtual ~menu_file_selector() override; - virtual void populate() override; - virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; virtual bool custom_mouse_down() override; private: @@ -65,9 +63,12 @@ private: bool m_has_softlist; bool m_has_create; result & m_result; - std::vector m_entrylist; + std::vector m_entrylist; std::string m_hover_directory; - std::string m_filename; + std::string m_filename; + + virtual void populate() override; + virtual void handle() override; // methods int compare_entries(const file_selector_entry *e1, const file_selector_entry *e2); @@ -91,7 +92,7 @@ public: WRITE_OTHER, WRITE_DIFF }; - menu_select_rw(mame_ui_manager &mui, render_container *container, + menu_select_rw(mame_ui_manager &mui, render_container &container, bool can_in_place, result &result); virtual ~menu_select_rw() override; virtual void populate() override; diff --git a/src/frontend/mame/ui/floppycntrl.cpp b/src/frontend/mame/ui/floppycntrl.cpp index f47b4d580bf..33d2abf937d 100644 --- a/src/frontend/mame/ui/floppycntrl.cpp +++ b/src/frontend/mame/ui/floppycntrl.cpp @@ -20,7 +20,7 @@ namespace ui { IMPLEMENTATION ***************************************************************************/ -menu_control_floppy_image::menu_control_floppy_image(mame_ui_manager &mui, render_container *container, device_image_interface *_image) : menu_control_device_image(mui, container, _image) +menu_control_floppy_image::menu_control_floppy_image(mame_ui_manager &mui, render_container &container, device_image_interface *_image) : menu_control_device_image(mui, container, _image) { floppy_image_device *fd = static_cast(image); const floppy_image_format_t *fif_list = fd->get_formats(); @@ -94,7 +94,7 @@ void menu_control_floppy_image::hook_load(std::string filename, bool softlist) can_in_place = false; } submenu_result.rw = menu_select_rw::result::INVALID; - menu::stack_push(ui(), container, can_in_place, submenu_result.rw); + menu::stack_push(ui(), container(), can_in_place, submenu_result.rw); state = SELECT_RW; } @@ -120,7 +120,7 @@ void menu_control_floppy_image::handle() format_array[total_usable++] = i; } submenu_result.i = -1; - menu::stack_push(ui(), container, format_array, ext_match, total_usable, &submenu_result.i); + menu::stack_push(ui(), container(), format_array, ext_match, total_usable, &submenu_result.i); state = SELECT_FORMAT; break; @@ -157,7 +157,7 @@ void menu_control_floppy_image::handle() break; case menu_select_rw::result::WRITE_OTHER: - menu::stack_push(ui(), container, image, m_current_directory, m_current_file, create_ok); + menu::stack_push(ui(), container(), image, m_current_directory, m_current_file, create_ok); state = CHECK_CREATE; break; diff --git a/src/frontend/mame/ui/floppycntrl.h b/src/frontend/mame/ui/floppycntrl.h index 2902b8bf13c..96790d6eebb 100644 --- a/src/frontend/mame/ui/floppycntrl.h +++ b/src/frontend/mame/ui/floppycntrl.h @@ -20,18 +20,18 @@ namespace ui { class menu_control_floppy_image : public menu_control_device_image { public: - menu_control_floppy_image(mame_ui_manager &ui, render_container *container, device_image_interface *image); + menu_control_floppy_image(mame_ui_manager &ui, render_container &container, device_image_interface *image); virtual ~menu_control_floppy_image() override; - virtual void handle() override; - -protected: +private: enum { SELECT_FORMAT = LAST_ID, SELECT_MEDIA, SELECT_RW }; floppy_image_format_t **format_array; floppy_image_format_t *input_format, *output_format; std::string input_filename, output_filename; + virtual void handle() override; + void do_load_create(); virtual void hook_load(std::string filename, bool softlist) override; }; diff --git a/src/frontend/mame/ui/imgcntrl.cpp b/src/frontend/mame/ui/imgcntrl.cpp index 62082930f3b..39735b2c8fc 100644 --- a/src/frontend/mame/ui/imgcntrl.cpp +++ b/src/frontend/mame/ui/imgcntrl.cpp @@ -33,7 +33,7 @@ namespace ui { // ctor //------------------------------------------------- -menu_control_device_image::menu_control_device_image(mame_ui_manager &mui, render_container *container, device_image_interface *_image) +menu_control_device_image::menu_control_device_image(mame_ui_manager &mui, render_container &container, device_image_interface *_image) : menu(mui, container), create_ok(false), create_confirmed(false) @@ -178,20 +178,20 @@ void menu_control_device_image::handle() switch(state) { case START_FILE: { submenu_result.filesel = menu_file_selector::result::INVALID; - menu::stack_push(ui(), container, image, m_current_directory, m_current_file, true, image->image_interface()!=nullptr, image->is_creatable(), submenu_result.filesel); + menu::stack_push(ui(), container(), image, m_current_directory, m_current_file, true, image->image_interface()!=nullptr, image->is_creatable(), submenu_result.filesel); state = SELECT_FILE; break; } case START_SOFTLIST: sld = nullptr; - menu::stack_push(ui(), container, image->image_interface(), &sld); + menu::stack_push(ui(), container(), image->image_interface(), &sld); state = SELECT_SOFTLIST; break; case START_OTHER_PART: { submenu_result.swparts = menu_software_parts::result::INVALID; - menu::stack_push(ui(), container, swi, swp->interface(), &swp, true, submenu_result.swparts); + menu::stack_push(ui(), container(), swi, swp->interface(), &swp, true, submenu_result.swparts); state = SELECT_OTHER_PART; break; } @@ -202,7 +202,7 @@ void menu_control_device_image::handle() break; } software_info_name = ""; - menu::stack_push(ui(), container, sld, image->image_interface(), software_info_name); + menu::stack_push(ui(), container(), sld, image->image_interface(), software_info_name); state = SELECT_PARTLIST; break; @@ -214,7 +214,7 @@ void menu_control_device_image::handle() { submenu_result.swparts = menu_software_parts::result::INVALID; swp = nullptr; - menu::stack_push(ui(), container, swi, image->image_interface(), &swp, false, submenu_result.swparts); + menu::stack_push(ui(), container(), swi, image->image_interface(), &swp, false, submenu_result.swparts); state = SELECT_ONE_PART; } else @@ -278,7 +278,7 @@ void menu_control_device_image::handle() break; case menu_file_selector::result::CREATE: - menu::stack_push(ui(), container, image, m_current_directory, m_current_file, create_ok); + menu::stack_push(ui(), container(), image, m_current_directory, m_current_file, create_ok); state = CHECK_CREATE; break; @@ -298,7 +298,7 @@ void menu_control_device_image::handle() test_create(can_create, need_confirm); if(can_create) { if(need_confirm) { - menu::stack_push(ui(), container, &create_confirmed); + menu::stack_push(ui(), container(), &create_confirmed); state = CREATE_CONFIRM; } else { state = DO_CREATE; diff --git a/src/frontend/mame/ui/imgcntrl.h b/src/frontend/mame/ui/imgcntrl.h index 501a095d6f9..61d44908a43 100644 --- a/src/frontend/mame/ui/imgcntrl.h +++ b/src/frontend/mame/ui/imgcntrl.h @@ -23,10 +23,8 @@ namespace ui { class menu_control_device_image : public menu { public: - menu_control_device_image(mame_ui_manager &mui, render_container *container, device_image_interface *image); + menu_control_device_image(mame_ui_manager &mui, render_container &container, device_image_interface *image); virtual ~menu_control_device_image() override; - virtual void populate() override; - virtual void handle() override; protected: enum { @@ -55,10 +53,13 @@ protected: // methods virtual void hook_load(std::string filename, bool softlist); + virtual void handle() override; bool create_ok; private: + virtual void populate() override; + // instance variables bool create_confirmed; //bool softlist_done; diff --git a/src/frontend/mame/ui/info.cpp b/src/frontend/mame/ui/info.cpp index 125f5c6fae3..9461f566d71 100644 --- a/src/frontend/mame/ui/info.cpp +++ b/src/frontend/mame/ui/info.cpp @@ -21,7 +21,7 @@ namespace ui { menu -------------------------------------------------*/ -menu_game_info::menu_game_info(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_game_info::menu_game_info(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -47,7 +47,7 @@ void menu_game_info::handle() menu -------------------------------------------------*/ -menu_image_info::menu_image_info(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_image_info::menu_image_info(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } diff --git a/src/frontend/mame/ui/info.h b/src/frontend/mame/ui/info.h index e76c33cd669..2fbd9de3683 100644 --- a/src/frontend/mame/ui/info.h +++ b/src/frontend/mame/ui/info.h @@ -19,8 +19,10 @@ namespace ui { class menu_game_info : public menu { public: - menu_game_info(mame_ui_manager &mui, render_container *container); + menu_game_info(mame_ui_manager &mui, render_container &container); virtual ~menu_game_info() override; + +private: virtual void populate() override; virtual void handle() override; }; @@ -29,12 +31,12 @@ public: class menu_image_info : public menu { public: - menu_image_info(mame_ui_manager &mui, render_container *container); + menu_image_info(mame_ui_manager &mui, render_container &container); virtual ~menu_image_info() override; - virtual void populate() override; - virtual void handle() override; private: + virtual void populate() override; + virtual void handle() override; void image_info(device_image_interface *image); }; diff --git a/src/frontend/mame/ui/info_pty.cpp b/src/frontend/mame/ui/info_pty.cpp index be4251f0f4a..cf7b6fb4f6f 100644 --- a/src/frontend/mame/ui/info_pty.cpp +++ b/src/frontend/mame/ui/info_pty.cpp @@ -14,7 +14,7 @@ namespace ui { -menu_pty_info::menu_pty_info(mame_ui_manager &mui, render_container *container) : +menu_pty_info::menu_pty_info(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } diff --git a/src/frontend/mame/ui/info_pty.h b/src/frontend/mame/ui/info_pty.h index 46829bd3f0c..be112c003e4 100644 --- a/src/frontend/mame/ui/info_pty.h +++ b/src/frontend/mame/ui/info_pty.h @@ -19,8 +19,10 @@ namespace ui { class menu_pty_info : public menu { public: - menu_pty_info(mame_ui_manager &mui, render_container *container); + menu_pty_info(mame_ui_manager &mui, render_container &container); virtual ~menu_pty_info() override; + +private: virtual void populate() override; virtual void handle() override; }; diff --git a/src/frontend/mame/ui/inputmap.cpp b/src/frontend/mame/ui/inputmap.cpp index 224b37c7944..bf13eb22e84 100644 --- a/src/frontend/mame/ui/inputmap.cpp +++ b/src/frontend/mame/ui/inputmap.cpp @@ -41,7 +41,7 @@ namespace ui { input groups menu -------------------------------------------------*/ -menu_input_groups::menu_input_groups(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_input_groups::menu_input_groups(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -73,7 +73,7 @@ void menu_input_groups::handle() /* process the menu */ const event *menu_event = process(0); if (menu_event != nullptr && menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, int((long long)(menu_event->itemref)-1)); + menu::stack_push(ui(), container(), int((long long)(menu_event->itemref)-1)); } @@ -83,7 +83,7 @@ void menu_input_groups::handle() input menu -------------------------------------------------*/ -menu_input_general::menu_input_general(mame_ui_manager &mui, render_container *container, int _group) : menu_input(mui, container) +menu_input_general::menu_input_general(mame_ui_manager &mui, render_container &container, int _group) : menu_input(mui, container) { group = _group; } @@ -146,7 +146,7 @@ menu_input_general::~menu_input_general() input menu -------------------------------------------------*/ -menu_input_specific::menu_input_specific(mame_ui_manager &mui, render_container *container) : menu_input(mui, container) +menu_input_specific::menu_input_specific(mame_ui_manager &mui, render_container &container) : menu_input(mui, container) { } @@ -223,7 +223,7 @@ menu_input_specific::~menu_input_specific() /*------------------------------------------------- menu_input - display a menu for inputs -------------------------------------------------*/ -menu_input::menu_input(mame_ui_manager &mui, render_container *container) : menu(mui, container), last_sortorder(0), record_next(false) +menu_input::menu_input(mame_ui_manager &mui, render_container &container) : menu(mui, container), last_sortorder(0), record_next(false) { pollingitem = nullptr; pollingref = nullptr; @@ -446,7 +446,7 @@ void menu_input::populate_and_sort(input_item_data *itemlist) switches menu -------------------------------------------------*/ -menu_settings_dip_switches::menu_settings_dip_switches(mame_ui_manager &mui, render_container *container) : menu_settings(mui, container, IPT_DIPSWITCH) +menu_settings_dip_switches::menu_settings_dip_switches(mame_ui_manager &mui, render_container &container) : menu_settings(mui, container, IPT_DIPSWITCH) { } @@ -459,7 +459,7 @@ menu_settings_dip_switches::~menu_settings_dip_switches() driver config menu -------------------------------------------------*/ -menu_settings_driver_config::menu_settings_driver_config(mame_ui_manager &mui, render_container *container) : menu_settings(mui, container, IPT_CONFIG) +menu_settings_driver_config::menu_settings_driver_config(mame_ui_manager &mui, render_container &container) : menu_settings(mui, container, IPT_CONFIG) { } @@ -529,7 +529,7 @@ void menu_settings::handle() switches menus -------------------------------------------------*/ -menu_settings::menu_settings(mame_ui_manager &mui, render_container *container, UINT32 _type) : menu(mui, container), diplist(nullptr), dipcount(0) +menu_settings::menu_settings(mame_ui_manager &mui, render_container &container, UINT32 _type) : menu(mui, container), diplist(nullptr), dipcount(0) { type = _type; } @@ -641,7 +641,7 @@ void menu_settings_dip_switches::custom_render(void *selectedref, float top, flo y2 = y1 + bottom; // draw extra menu area - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); y1 += (float)DIP_SWITCH_SPACING; // iterate over DIP switches @@ -674,8 +674,8 @@ void menu_settings_dip_switches::custom_render(void *selectedref, float top, flo void menu_settings_dip_switches::custom_render_one(float x1, float y1, float x2, float y2, const dip_descriptor *dip, UINT32 selectedmask) { - float switch_field_width = SINGLE_TOGGLE_SWITCH_FIELD_WIDTH * container->manager().ui_aspect(); - float switch_width = SINGLE_TOGGLE_SWITCH_WIDTH * container->manager().ui_aspect(); + float switch_field_width = SINGLE_TOGGLE_SWITCH_FIELD_WIDTH * container().manager().ui_aspect(); + float switch_width = SINGLE_TOGGLE_SWITCH_WIDTH * container().manager().ui_aspect(); int numtoggles, toggle; float switch_toggle_gap; float y1_off, y1_on; @@ -687,7 +687,7 @@ void menu_settings_dip_switches::custom_render_one(float x1, float y1, float x2, x1 += (x2 - x1 - numtoggles * switch_field_width) / 2; /* draw the dip switch name */ - ui().draw_text_full( container, + ui().draw_text_full(container(), dip->name, 0, y1 + (DIP_SWITCH_HEIGHT - UI_TARGET_FONT_HEIGHT) / 2, @@ -711,7 +711,7 @@ void menu_settings_dip_switches::custom_render_one(float x1, float y1, float x2, float innerx1; /* first outline the switch */ - ui().draw_outlined_box(container, x1, y1, x1 + switch_field_width, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x1 + switch_field_width, y2, UI_BACKGROUND_COLOR); /* compute x1/x2 for the inner filled in switch */ innerx1 = x1 + (switch_field_width - switch_width) / 2; @@ -720,13 +720,13 @@ void menu_settings_dip_switches::custom_render_one(float x1, float y1, float x2, if (dip->mask & (1 << toggle)) { float innery1 = (dip->state & (1 << toggle)) ? y1_on : y1_off; - container->add_rect(innerx1, innery1, innerx1 + switch_width, innery1 + SINGLE_TOGGLE_SWITCH_HEIGHT, + container().add_rect(innerx1, innery1, innerx1 + switch_width, innery1 + SINGLE_TOGGLE_SWITCH_HEIGHT, (selectedmask & (1 << toggle)) ? UI_DIPSW_COLOR : UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } else { - container->add_rect(innerx1, y1_off, innerx1 + switch_width, y1_on + SINGLE_TOGGLE_SWITCH_HEIGHT, + container().add_rect(innerx1, y1_off, innerx1 + switch_width, y1_on + SINGLE_TOGGLE_SWITCH_HEIGHT, UI_UNAVAILABLE_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } @@ -804,7 +804,7 @@ void menu_analog::handle() settings menu -------------------------------------------------*/ -menu_analog::menu_analog(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_analog::menu_analog(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } diff --git a/src/frontend/mame/ui/inputmap.h b/src/frontend/mame/ui/inputmap.h index 290125c734f..522ea8bd7e9 100644 --- a/src/frontend/mame/ui/inputmap.h +++ b/src/frontend/mame/ui/inputmap.h @@ -20,8 +20,10 @@ namespace ui { class menu_input_groups : public menu { public: - menu_input_groups(mame_ui_manager &mui, render_container *container); + menu_input_groups(mame_ui_manager &mui, render_container &container); virtual ~menu_input_groups() override; + +private: virtual void populate() override; virtual void handle() override; }; @@ -29,9 +31,8 @@ public: class menu_input : public menu { public: - menu_input(mame_ui_manager &mui, render_container *container); + menu_input(mame_ui_manager &mui, render_container &container); virtual ~menu_input() override; - virtual void handle() override; protected: enum { @@ -57,10 +58,8 @@ protected: }; void populate_and_sort(struct input_item_data *itemlist); - virtual void update_input(struct input_item_data *seqchangeditem) = 0; void toggle_none_default(input_seq &selected_seq, input_seq &original_seq, const input_seq &selected_defseq); -protected: const void * pollingref; input_seq_type pollingseq; input_item_data * pollingitem; @@ -70,39 +69,41 @@ private: bool record_next; input_seq starting_seq; + virtual void handle() override; + virtual void update_input(struct input_item_data *seqchangeditem) = 0; + static int compare_items(const void *i1, const void *i2); }; class menu_input_general : public menu_input { public: - menu_input_general(mame_ui_manager &mui, render_container *container, int group); + menu_input_general(mame_ui_manager &mui, render_container &container, int group); virtual ~menu_input_general() override; + +private: virtual void populate() override; + virtual void update_input(struct input_item_data *seqchangeditem) override; -protected: int group; - virtual void update_input(struct input_item_data *seqchangeditem) override; }; class menu_input_specific : public menu_input { public: - menu_input_specific(mame_ui_manager &mui, render_container *container); + menu_input_specific(mame_ui_manager &mui, render_container &container); virtual ~menu_input_specific() override; - virtual void populate() override; -protected: +private: + virtual void populate() override; virtual void update_input(struct input_item_data *seqchangeditem) override; }; class menu_settings : public menu { public: - menu_settings(mame_ui_manager &mui, render_container *container, UINT32 type); + menu_settings(mame_ui_manager &mui, render_container &container, UINT32 type); virtual ~menu_settings() override; - virtual void populate() override; - virtual void handle() override; protected: /* DIP switch descriptor */ @@ -117,15 +118,21 @@ protected: dip_descriptor * diplist; int dipcount; int type; + +private: + virtual void populate() override; + virtual void handle() override; }; class menu_settings_dip_switches : public menu_settings { public: - menu_settings_dip_switches(mame_ui_manager &mui, render_container *container); + menu_settings_dip_switches(mame_ui_manager &mui, render_container &container); virtual ~menu_settings_dip_switches() override; +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; + private: void custom_render_one(float x1, float y1, float x2, float y2, const dip_descriptor *dip, UINT32 selectedmask); }; @@ -133,17 +140,15 @@ private: class menu_settings_driver_config : public menu_settings { public: - menu_settings_driver_config(mame_ui_manager &mui, render_container *container); + menu_settings_driver_config(mame_ui_manager &mui, render_container &container); virtual ~menu_settings_driver_config(); }; class menu_analog : public menu { public: - menu_analog(mame_ui_manager &mui, render_container *container); + menu_analog(mame_ui_manager &mui, render_container &container); virtual ~menu_analog() override; - virtual void populate() override; - virtual void handle() override; private: enum { @@ -162,6 +167,9 @@ private: int cur; int defvalue; }; + + virtual void populate() override; + virtual void handle() override; }; } // namesapce ui diff --git a/src/frontend/mame/ui/mainmenu.cpp b/src/frontend/mame/ui/mainmenu.cpp index 0342559d47e..3bf5e5cb7b6 100644 --- a/src/frontend/mame/ui/mainmenu.cpp +++ b/src/frontend/mame/ui/mainmenu.cpp @@ -44,7 +44,7 @@ namespace ui { menu_main constructor - populate the main menu -------------------------------------------------*/ -menu_main::menu_main(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_main::menu_main(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -163,102 +163,102 @@ void menu_main::handle() if (menu_event != nullptr && menu_event->iptkey == IPT_UI_SELECT) { switch((long long)(menu_event->itemref)) { case INPUT_GROUPS: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case INPUT_SPECIFIC: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case SETTINGS_DIP_SWITCHES: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case SETTINGS_DRIVER_CONFIG: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case ANALOG: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case BOOKKEEPING: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case GAME_INFO: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case IMAGE_MENU_IMAGE_INFO: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case IMAGE_MENU_FILE_MANAGER: - menu::stack_push(ui(), container, nullptr); + menu::stack_push(ui(), container(), nullptr); break; case TAPE_CONTROL: - menu::stack_push(ui(), container, nullptr); + menu::stack_push(ui(), container(), nullptr); break; case PTY_INFO: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case SLOT_DEVICES: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case NETWORK_DEVICES: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case KEYBOARD_MODE: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case SLIDERS: - menu::stack_push(ui(), container, false); + menu::stack_push(ui(), container(), false); break; case VIDEO_TARGETS: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case VIDEO_OPTIONS: - menu::stack_push(ui(), container, machine().render().first_target()); + menu::stack_push(ui(), container(), machine().render().first_target()); break; case CROSSHAIR: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case CHEAT: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case PLUGINS: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case SELECT_GAME: if (machine().options().ui() == emu_options::UI_SIMPLE) - menu::stack_push(ui(), container, nullptr); + menu::stack_push(ui(), container(), nullptr); else - menu::stack_push(ui(), container, nullptr); + menu::stack_push(ui(), container(), nullptr); break; case BIOS_SELECTION: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case BARCODE_READ: - menu::stack_push(ui(), container, nullptr); + menu::stack_push(ui(), container(), nullptr); break; case EXTERNAL_DATS: - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case ADD_FAVORITE: diff --git a/src/frontend/mame/ui/mainmenu.h b/src/frontend/mame/ui/mainmenu.h index 0a60d594f92..aab547e9d56 100644 --- a/src/frontend/mame/ui/mainmenu.h +++ b/src/frontend/mame/ui/mainmenu.h @@ -17,10 +17,8 @@ namespace ui { class menu_main : public menu { public: - menu_main(mame_ui_manager &mui, render_container *container); + menu_main(mame_ui_manager &mui, render_container &container); virtual ~menu_main(); - virtual void populate() override; - virtual void handle() override; private: enum { @@ -52,6 +50,9 @@ private: REMOVE_FAVORITE, QUIT_GAME }; + + virtual void populate() override; + virtual void handle() override; }; } // namespace ui diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp index 4ff056a63f9..4001c208b12 100644 --- a/src/frontend/mame/ui/menu.cpp +++ b/src/frontend/mame/ui/menu.cpp @@ -142,6 +142,10 @@ menu::global_state::global_state(running_machine &machine, ui_options const &opt menu::global_state::~global_state() { + // it shouldn't really be possible to get here with active menus because of reference loops + assert(!m_stack); + assert(!m_free); + stack_reset(); clear_free_list(); @@ -231,10 +235,12 @@ void menu::init(running_machine &machine, ui_options &mopt) void menu::exit(running_machine &machine) { // free menus - { - std::lock_guard guard(s_global_state_guard); - s_global_states.erase(&machine); - } + global_state_ptr const state(get_global_state(machine)); + state->stack_reset(); + state->clear_free_list(); + + std::lock_guard guard(s_global_state_guard); + s_global_states.erase(&machine); } @@ -247,12 +253,13 @@ void menu::exit(running_machine &machine) // menu - menu constructor //------------------------------------------------- -menu::menu(mame_ui_manager &mui, render_container *_container) +menu::menu(mame_ui_manager &mui, render_container &container) : m_visible_lines(0) , m_visible_items(0) , m_global_state(get_global_state(mui.machine())) , m_special_main_menu(false) , m_ui(mui) + , m_container(container) , m_parent() , m_event() , m_pool(nullptr) @@ -261,8 +268,6 @@ menu::menu(mame_ui_manager &mui, render_container *_container) { assert(m_global_state); // not calling init is bad - container = _container; - reset(reset_options::SELECT_FIRST); top_line = 0; @@ -530,7 +535,7 @@ void menu::draw(UINT32 flags) // first draw the FPS counter if (ui().show_fps_counter()) { - ui().draw_text_full(container, machine().video().speed_text().c_str(), 0.0f, 0.0f, 1.0f, + ui().draw_text_full(container(), machine().video().speed_text().c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::RIGHT, ui::text_layout::WORD, mame_ui_manager::OPAQUE_, rgb_t::white, rgb_t::black, nullptr, nullptr); } @@ -593,7 +598,7 @@ void menu::draw(UINT32 flags) float const x2 = visible_left + visible_width + UI_BOX_LR_BORDER; float const y2 = visible_top + visible_main_menu_height + UI_BOX_TB_BORDER; if (!customonly) - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); if (top_line < 0 || is_first_selected()) top_line = 0; @@ -621,7 +626,7 @@ void menu::draw(UINT32 flags) INT32 mouse_target_x, mouse_target_y; render_target *mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); if (mouse_target != nullptr) - if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) + if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y)) mouse_hit = true; } @@ -664,12 +669,12 @@ void menu::draw(UINT32 flags) // if we have some background hilighting to do, add a quad behind everything else if (bgcolor != UI_TEXT_BG_COLOR) - highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); + highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); if (linenum == 0 && show_top_arrow) { // if we're on the top line, display the up arrow - draw_arrow(container, + draw_arrow( 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y0 + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, @@ -682,7 +687,7 @@ void menu::draw(UINT32 flags) else if (linenum == m_visible_lines - 1 && show_bottom_arrow) { // if we're on the bottom line, display the down arrow - draw_arrow(container, + draw_arrow( 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y0 + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, @@ -695,7 +700,7 @@ void menu::draw(UINT32 flags) else if (pitem.type == menu_item_type::SEPARATOR) { // if we're just a divider, draw a line - container->add_line(visible_left, line_y0 + 0.5f * line_height, visible_left + visible_width, line_y0 + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(visible_left, line_y0 + 0.5f * line_height, visible_left + visible_width, line_y0 + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } else if (pitem.subtext.empty()) { @@ -703,10 +708,10 @@ void menu::draw(UINT32 flags) if (pitem.flags & FLAG_UI_HEADING) { float heading_width = ui().get_string_width(itemtext); - container->add_line(visible_left, line_y0 + 0.5f * line_height, visible_left + ((visible_width - heading_width) / 2) - UI_BOX_LR_BORDER, line_y0 + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - container->add_line(visible_left + visible_width - ((visible_width - heading_width) / 2) + UI_BOX_LR_BORDER, line_y0 + 0.5f * line_height, visible_left + visible_width, line_y0 + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(visible_left, line_y0 + 0.5f * line_height, visible_left + ((visible_width - heading_width) / 2) - UI_BOX_LR_BORDER, line_y0 + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(visible_left + visible_width - ((visible_width - heading_width) / 2) + UI_BOX_LR_BORDER, line_y0 + 0.5f * line_height, visible_left + visible_width, line_y0 + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } - ui().draw_text_full(container, itemtext, effective_left, line_y0, effective_width, + ui().draw_text_full(container(), itemtext, effective_left, line_y0, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); } else @@ -717,7 +722,7 @@ void menu::draw(UINT32 flags) float item_width, subitem_width; // draw the left-side text - ui().draw_text_full(container, itemtext, effective_left, line_y0, effective_width, + ui().draw_text_full(container(), itemtext, effective_left, line_y0, effective_width, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, &item_width, nullptr); // give 2 spaces worth of padding @@ -742,13 +747,13 @@ void menu::draw(UINT32 flags) fgcolor2 = rgb_t(0xff,0xff,0x00); // draw the subitem right-justified - ui().draw_text_full(container, subitem_text, effective_left + item_width, line_y0, effective_width - item_width, + ui().draw_text_full(container(), subitem_text, effective_left + item_width, line_y0, effective_width - item_width, ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, subitem_invert ? fgcolor3 : fgcolor2, bgcolor, &subitem_width, nullptr); // apply arrows if (itemnum == selected && (pitem.flags & FLAG_LEFT_ARROW)) { - draw_arrow(container, + draw_arrow( effective_left + effective_width - subitem_width - gutter_width, line_y0 + 0.1f * line_height, effective_left + effective_width - subitem_width - gutter_width + lr_arrow_width, @@ -758,7 +763,7 @@ void menu::draw(UINT32 flags) } if (itemnum == selected && (pitem.flags & FLAG_RIGHT_ARROW)) { - draw_arrow(container, + draw_arrow( effective_left + effective_width + gutter_width - lr_arrow_width, line_y0 + 0.1f * line_height, effective_left + effective_width + gutter_width, @@ -780,7 +785,7 @@ void menu::draw(UINT32 flags) float target_width, target_height; // compute the multi-line target width/height - ui().draw_text_full(container, pitem.subtext.c_str(), 0, 0, visible_width * 0.75f, + ui().draw_text_full(container(), pitem.subtext.c_str(), 0, 0, visible_width * 0.75f, ui::text_layout::RIGHT, ui::text_layout::WORD, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); // determine the target location @@ -790,13 +795,13 @@ void menu::draw(UINT32 flags) target_y = line_y - target_height - UI_BOX_TB_BORDER; // add a box around that - ui().draw_outlined_box(container, target_x - UI_BOX_LR_BORDER, + ui().draw_outlined_box(container(), target_x - UI_BOX_LR_BORDER, target_y - UI_BOX_TB_BORDER, target_x + target_width + UI_BOX_LR_BORDER, target_y + target_height + UI_BOX_TB_BORDER, subitem_invert ? UI_SELECTED_BG_COLOR : UI_BACKGROUND_COLOR); - ui().draw_text_full(container, pitem.subtext.c_str(), target_x, target_y, target_width, + ui().draw_text_full(container(), pitem.subtext.c_str(), target_x, target_y, target_width, ui::text_layout::RIGHT, ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); } @@ -825,7 +830,7 @@ void menu::draw_text_box() float target_x, target_y; // compute the multi-line target width/height - ui().draw_text_full(container, text, 0, 0, 1.0f - 2.0f * UI_BOX_LR_BORDER - 2.0f * gutter_width, + ui().draw_text_full(container(), text, 0, 0, 1.0f - 2.0f * UI_BOX_LR_BORDER - 2.0f * gutter_width, ui::text_layout::LEFT, ui::text_layout::WORD, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); target_height += 2.0f * line_height; if (target_height > 1.0f - 2.0f * UI_BOX_TB_BORDER) @@ -850,22 +855,22 @@ void menu::draw_text_box() target_y = 1.0f - UI_BOX_TB_BORDER - target_height; // add a box around that - ui().draw_outlined_box(container, target_x - UI_BOX_LR_BORDER - gutter_width, + ui().draw_outlined_box(container(), target_x - UI_BOX_LR_BORDER - gutter_width, target_y - UI_BOX_TB_BORDER, target_x + target_width + gutter_width + UI_BOX_LR_BORDER, target_y + target_height + UI_BOX_TB_BORDER, (item[0].flags & FLAG_REDTEXT) ? UI_RED_COLOR : UI_BACKGROUND_COLOR); - ui().draw_text_full(container, text, target_x, target_y, target_width, - ui::text_layout::LEFT, ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container(), text, target_x, target_y, target_width, + ui::text_layout::LEFT, ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // draw the "return to prior menu" text with a hilight behind it - highlight(container, + highlight( target_x + 0.5f * UI_LINE_WIDTH, target_y + target_height - line_height, target_x + target_width - 0.5f * UI_LINE_WIDTH, target_y + target_height, UI_SELECTED_BG_COLOR); - ui().draw_text_full(container, backtext, target_x, target_y + target_height - line_height, target_width, + ui().draw_text_full(container(), backtext, target_x, target_y + target_height - line_height, target_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); // artificially set the hover to the last item so a double-click exits @@ -1174,7 +1179,7 @@ void menu::do_handle() // and calls the menu handler //------------------------------------------------- -UINT32 menu::ui_handler(render_container *container, mame_ui_manager &mui) +UINT32 menu::ui_handler(render_container &container, mame_ui_manager &mui) { global_state_ptr const state(get_global_state(mui.machine())); @@ -1259,9 +1264,9 @@ void menu::render_triangle(bitmap_argb32 &dest, bitmap_argb32 &source, const rec // highlight //------------------------------------------------- -void menu::highlight(render_container *container, float x0, float y0, float x1, float y1, rgb_t bgcolor) +void menu::highlight(float x0, float y0, float x1, float y1, rgb_t bgcolor) { - container->add_quad(x0, y0, x1, y1, bgcolor, m_global_state->hilight_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE) | PRIMFLAG_PACKABLE); + container().add_quad(x0, y0, x1, y1, bgcolor, m_global_state->hilight_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE) | PRIMFLAG_PACKABLE); } @@ -1269,9 +1274,9 @@ void menu::highlight(render_container *container, float x0, float y0, float x1, // draw_arrow //------------------------------------------------- -void menu::draw_arrow(render_container *container, float x0, float y0, float x1, float y1, rgb_t fgcolor, UINT32 orientation) +void menu::draw_arrow(float x0, float y0, float x1, float y1, rgb_t fgcolor, UINT32 orientation) { - container->add_quad(x0, y0, x1, y1, fgcolor, m_global_state->arrow_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXORIENT(orientation) | PRIMFLAG_PACKABLE); + container().add_quad(x0, y0, x1, y1, fgcolor, m_global_state->arrow_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXORIENT(orientation) | PRIMFLAG_PACKABLE); } @@ -1283,7 +1288,7 @@ void menu::draw_arrow(render_container *container, float x0, float y0, float x1, void menu::extra_text_draw_box(float origx1, float origx2, float origy, float yspan, const char *text, int direction) { // get the size of the text - auto layout = ui().create_layout(container); + auto layout = ui().create_layout(container()); layout.add_text(text); // position this extra text @@ -1291,14 +1296,14 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys extra_text_position(origx1, origx2, origy, yspan, layout, direction, x1, y1, x2, y2); // draw a box - ui().draw_outlined_box(container,x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; y1 += UI_BOX_TB_BORDER; // draw the text within it - layout.emit(container, x1, y1); + layout.emit(container(), x1, y1); } @@ -1306,7 +1311,7 @@ void menu::draw_background() { // draw background image if available if (ui().options().use_background_image() && m_global_state->bgrnd_bitmap() && m_global_state->bgrnd_bitmap()->valid()) - container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t::white, m_global_state->bgrnd_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t::white, m_global_state->bgrnd_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } diff --git a/src/frontend/mame/ui/menu.h b/src/frontend/mame/ui/menu.h index 5c83408e118..f351ba35fee 100644 --- a/src/frontend/mame/ui/menu.h +++ b/src/frontend/mame/ui/menu.h @@ -49,10 +49,6 @@ public: virtual ~menu(); - mame_ui_manager &ui() const { return m_ui; } - running_machine &machine() const { return m_ui.machine(); } - - render_container *container; // render_container we render to int hover; // which item is being hovered over float customtop; // amount of extra height to add at the top float custombottom; // amount of extra height to add at the bottom @@ -64,12 +60,6 @@ public: void item_append(menu_item item); void item_append(menu_item_type type, UINT32 flags = 0); - // configure the menu for custom rendering - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2); - - // allocate temporary memory from the menu's memory pool - void *m_pool_alloc(size_t size); - // Global initialization static void init(running_machine &machine, ui_options &mopt); @@ -97,22 +87,13 @@ public: static bool stack_has_special_main_menu(running_machine &machine) { return get_global_state(machine)->stack_has_special_main_menu(); } // master handler - static UINT32 ui_handler(render_container *container, mame_ui_manager &mui); + static UINT32 ui_handler(render_container &container, mame_ui_manager &mui); // Used by sliders void validate_selection(int scandir); void do_handle(); - // To be reimplemented in the menu subclass - virtual void populate() = 0; - - // To be reimplemented in the menu subclass - virtual void handle() = 0; - - // test if search is active - virtual bool menu_has_search_active() { return false; } - private: virtual void draw(UINT32 flags); void draw_text_box(); @@ -128,22 +109,6 @@ public: INT32 mouse_target_x, mouse_target_y; float mouse_x, mouse_y; - // draw left panel - virtual float draw_left_panel(float x1, float y1, float x2, float y2) { return 0; } - - // draw right panel - virtual void draw_right_panel(void *selectedref, float origx1, float origy1, float origx2, float origy2) { }; - - // get arrows status - template - UINT32 get_arrow_flags(_T1 min, _T2 max, _T3 actual) - { - if (max == 0) - return 0; - else - return ((actual <= min) ? FLAG_RIGHT_ARROW : (actual >= max ? FLAG_LEFT_ARROW : (FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW))); - } - protected: using cleanup_callback = std::function; using bitmap_ptr = std::unique_ptr; @@ -212,7 +177,14 @@ protected: int m_visible_lines; // main box visible lines int m_visible_items; // number of visible items - menu(mame_ui_manager &mui, render_container *container); + menu(mame_ui_manager &mui, render_container &container); + + mame_ui_manager &ui() const { return m_ui; } + running_machine &machine() const { return m_ui.machine(); } + render_container &container() const { return m_container; } + + // allocate temporary memory from the menu's memory pool + void *m_pool_alloc(size_t size); void reset(reset_options options); void reset_parent(reset_options options) { m_parent->reset(options); } @@ -246,11 +218,11 @@ protected: bool exclusive_input_pressed(int &iptkey, int key, int repeat); // highlight - void highlight(render_container *container, float x0, float y0, float x1, float y1, rgb_t bgcolor); + void highlight(float x0, float y0, float x1, float y1, rgb_t bgcolor); render_texture *hilight_main_texture() { return m_global_state->hilight_main_texture(); } // draw arrow - void draw_arrow(render_container *container, float x0, float y0, float x1, float y1, rgb_t fgcolor, UINT32 orientation); + void draw_arrow(float x0, float y0, float x1, float y1, rgb_t fgcolor, UINT32 orientation); // draw header and footer text void extra_text_render(float top, float bottom, float origx1, float origy1, float origx2, float origy2, const char *header, const char *footer); @@ -259,16 +231,29 @@ protected: void draw_background(); + // configure the menu for custom rendering + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2); + // overridable event handling virtual void handle_events(UINT32 flags, event &ev); virtual void handle_keys(UINT32 flags, int &iptkey); virtual bool custom_mouse_down() { return false; } + // test if search is active + virtual bool menu_has_search_active() { return false; } + static bool is_selectable(menu_item const &item) { return ((item.flags & (menu::FLAG_MULTILINE | menu::FLAG_DISABLE)) == 0 && item.type != menu_item_type::SEPARATOR); } + // get arrows status + template + UINT32 get_arrow_flags(T min, T max, T actual) + { + return ((actual > min) ? FLAG_LEFT_ARROW : 0) | ((actual < max) ? FLAG_RIGHT_ARROW : 0); + } + int right_visible_lines; // right box lines private: @@ -330,6 +315,12 @@ private: bool is_special_main_menu() const; void set_special_main_menu(bool disable); + // To be reimplemented in the menu subclass + virtual void populate() = 0; + + // To be reimplemented in the menu subclass + virtual void handle() = 0; + // push a new menu onto the stack static void stack_push(std::unique_ptr &&menu) { get_global_state(menu->machine())->stack_push(std::move(menu)); } @@ -344,6 +335,7 @@ private: global_state_ptr const m_global_state; bool m_special_main_menu; mame_ui_manager &m_ui; // UI we are attached to + render_container &m_container; // render_container we render to std::unique_ptr m_parent; // pointer to parent menu event m_event; // the UI event that occurred pool *m_pool; // list of memory pools diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index 62c04b98cff..f6190e5e7e1 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -32,7 +32,7 @@ namespace ui { menu_keyboard_mode - menu that -------------------------------------------------*/ -menu_keyboard_mode::menu_keyboard_mode(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_keyboard_mode::menu_keyboard_mode(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -69,7 +69,7 @@ void menu_keyboard_mode::handle() bios selection menu -------------------------------------------------*/ -menu_bios_selection::menu_bios_selection(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_bios_selection::menu_bios_selection(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -142,7 +142,7 @@ void menu_bios_selection::handle() -menu_network_devices::menu_network_devices(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_network_devices::menu_network_devices(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -163,7 +163,7 @@ void menu_network_devices::populate() int curr = network.get_interface(); const char *title = nullptr; for(auto &entry : get_netdev_list()) - { + { if(entry->id==curr) { title = entry->description; break; @@ -224,7 +224,7 @@ void menu_bookkeeping::handle() menu_bookkeeping - handle the bookkeeping information menu -------------------------------------------------*/ -menu_bookkeeping::menu_bookkeeping(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_bookkeeping::menu_bookkeeping(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -373,7 +373,7 @@ void menu_crosshair::handle() crosshair settings menu -------------------------------------------------*/ -menu_crosshair::menu_crosshair(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_crosshair::menu_crosshair(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -530,7 +530,7 @@ menu_crosshair::~menu_crosshair() quitting the game -------------------------------------------------*/ -menu_quit_game::menu_quit_game(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_quit_game::menu_quit_game(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -555,7 +555,7 @@ void menu_quit_game::handle() // ctor / dtor //------------------------------------------------- -menu_export::menu_export(mame_ui_manager &mui, render_container *container, std::vector drvlist) +menu_export::menu_export(mame_ui_manager &mui, render_container &container, std::vector drvlist) : menu(mui, container), m_list(drvlist) { } @@ -681,7 +681,7 @@ void menu_export::populate() // ctor / dtor //------------------------------------------------- -menu_machine_configure::menu_machine_configure(mame_ui_manager &mui, render_container *container, const game_driver *prev, float _x0, float _y0) +menu_machine_configure::menu_machine_configure(mame_ui_manager &mui, render_container &container, const game_driver *prev, float _x0, float _y0) : menu(mui, container) , m_drv(prev) , m_opts(mui.machine().options()) @@ -738,15 +738,15 @@ void menu_machine_configure::handle() break; case CONTROLLER: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, submenu::control_options, m_drv, &m_opts); + menu::stack_push(ui(), container(), submenu::control_options, m_drv, &m_opts); break; case VIDEO: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, submenu::video_options, m_drv, &m_opts); + menu::stack_push(ui(), container(), submenu::video_options, m_drv, &m_opts); break; case ADVANCED: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, submenu::advanced_options, m_drv, &m_opts); + menu::stack_push(ui(), container(), submenu::advanced_options, m_drv, &m_opts); break; default: break; @@ -773,7 +773,7 @@ void menu_machine_configure::populate() item_append(_("Bios"), "", FLAG_DISABLE | FLAG_UI_HEADING, nullptr); if (!m_bios.empty()) { - UINT32 arrows = get_arrow_flags(0, m_bios.size() - 1, m_curbios); + UINT32 arrows = get_arrow_flags(std::size_t(0), m_bios.size() - 1, m_curbios); item_append(_("Driver"), m_bios[m_curbios].first, arrows, (void *)(FPTR)BIOS); } else @@ -811,7 +811,7 @@ void menu_machine_configure::custom_render(void *selectedref, float top, float b for (auto & elem : text) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -824,7 +824,7 @@ void menu_machine_configure::custom_render(void *selectedref, float top, float b float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -834,7 +834,7 @@ void menu_machine_configure::custom_render(void *selectedref, float top, float b // draw the text within it for (auto & elem : text) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 += ui().get_line_height(); } @@ -851,7 +851,7 @@ void menu_machine_configure::setup_bios() if (ROMENTRY_ISDEFAULT_BIOS(rom)) default_name = ROM_GETNAME(rom); - int bios_count = 0; + std::size_t bios_count = 0; for (const rom_entry *rom = m_drv->rom; !ROMENTRY_ISEND(rom); ++rom) { if (ROMENTRY_ISSYSTEM_BIOS(rom)) @@ -883,7 +883,7 @@ void menu_machine_configure::setup_bios() // ctor / dtor //------------------------------------------------- -menu_plugins_configure::menu_plugins_configure(mame_ui_manager &mui, render_container *container) +menu_plugins_configure::menu_plugins_configure(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -955,7 +955,7 @@ void menu_plugins_configure::custom_render(void *selectedref, float top, float b { float width; - ui().draw_text_full(container, _("Plugins"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Plugins"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -967,7 +967,7 @@ void menu_plugins_configure::custom_render(void *selectedref, float top, float b float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -975,7 +975,7 @@ void menu_plugins_configure::custom_render(void *selectedref, float top, float b y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Plugins"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Plugins"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/miscmenu.h b/src/frontend/mame/ui/miscmenu.h index 86d7477c1db..4544d75bc99 100644 --- a/src/frontend/mame/ui/miscmenu.h +++ b/src/frontend/mame/ui/miscmenu.h @@ -24,8 +24,10 @@ namespace ui { class menu_keyboard_mode : public menu { public: - menu_keyboard_mode(mame_ui_manager &mui, render_container *container); + menu_keyboard_mode(mame_ui_manager &mui, render_container &container); virtual ~menu_keyboard_mode(); + +private: virtual void populate() override; virtual void handle() override; }; @@ -33,8 +35,10 @@ public: class menu_network_devices : public menu { public: - menu_network_devices(mame_ui_manager &mui, render_container *container); + menu_network_devices(mame_ui_manager &mui, render_container &container); virtual ~menu_network_devices(); + +private: virtual void populate() override; virtual void handle() override; }; @@ -42,22 +46,21 @@ public: class menu_bookkeeping : public menu { public: - menu_bookkeeping(mame_ui_manager &mui, render_container *container); + menu_bookkeeping(mame_ui_manager &mui, render_container &container); virtual ~menu_bookkeeping(); + +private: virtual void populate() override; virtual void handle() override; -private: attotime prevtime; }; class menu_crosshair : public menu { public: - menu_crosshair(mame_ui_manager &mui, render_container *container); + menu_crosshair(mame_ui_manager &mui, render_container &container); virtual ~menu_crosshair(); - virtual void populate() override; - virtual void handle() override; private: enum { @@ -67,22 +70,28 @@ private: }; /* internal crosshair menu item data */ - struct crosshair_item_data { - UINT8 type; - UINT8 player; - UINT8 min, max; - UINT8 cur; - UINT8 defvalue; - char last_name[CROSSHAIR_PIC_NAME_LENGTH + 1]; - char next_name[CROSSHAIR_PIC_NAME_LENGTH + 1]; + struct crosshair_item_data + { + UINT8 type; + UINT8 player; + UINT8 min, max; + UINT8 cur; + UINT8 defvalue; + char last_name[CROSSHAIR_PIC_NAME_LENGTH + 1]; + char next_name[CROSSHAIR_PIC_NAME_LENGTH + 1]; }; + + virtual void populate() override; + virtual void handle() override; }; class menu_quit_game : public menu { public: - menu_quit_game(mame_ui_manager &mui, render_container *container); + menu_quit_game(mame_ui_manager &mui, render_container &container); virtual ~menu_quit_game(); + +private: virtual void populate() override; virtual void handle() override; }; @@ -90,8 +99,10 @@ public: class menu_bios_selection : public menu { public: - menu_bios_selection(mame_ui_manager &mui, render_container *container); + menu_bios_selection(mame_ui_manager &mui, render_container &container); virtual ~menu_bios_selection(); + +private: virtual void populate() override; virtual void handle() override; }; @@ -104,12 +115,13 @@ public: class menu_export : public menu { public: - menu_export(mame_ui_manager &mui, render_container *container, std::vector list); + menu_export(mame_ui_manager &mui, render_container &container, std::vector list); virtual ~menu_export(); + +private: virtual void populate() override; virtual void handle() override; -private: std::vector m_list; }; @@ -120,10 +132,10 @@ private: class menu_machine_configure : public menu { public: - menu_machine_configure(mame_ui_manager &mui, render_container *container, const game_driver *prev, float x0 = 0.0f, float y0 = 0.0f); + menu_machine_configure(mame_ui_manager &mui, render_container &container, const game_driver *prev, float x0 = 0.0f, float y0 = 0.0f); virtual ~menu_machine_configure(); - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: @@ -140,11 +152,15 @@ private: ADVANCED, LAST = ADVANCED }; + + virtual void populate() override; + virtual void handle() override; + const game_driver *m_drv; emu_options m_opts; float x0, y0; s_bios m_bios; - int m_curbios; + std::size_t m_curbios; void setup_bios(); }; @@ -155,10 +171,13 @@ private: class menu_plugins_configure : public menu { public: - menu_plugins_configure(mame_ui_manager &mui, render_container *container); + menu_plugins_configure(mame_ui_manager &mui, render_container &container); virtual ~menu_plugins_configure(); + +protected: virtual void populate() override; virtual void handle() override; + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; }; diff --git a/src/frontend/mame/ui/optsmenu.cpp b/src/frontend/mame/ui/optsmenu.cpp index 5762ec9af9f..3073388887f 100644 --- a/src/frontend/mame/ui/optsmenu.cpp +++ b/src/frontend/mame/ui/optsmenu.cpp @@ -31,7 +31,7 @@ namespace ui { // ctor //------------------------------------------------- -menu_game_options::menu_game_options(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_game_options::menu_game_options(mame_ui_manager &mui, render_container &container) : menu(mui, container) { m_main = main_filters::actual; } @@ -85,7 +85,7 @@ void menu_game_options::handle() for (int index = 0; index < total; ++index) s_sel[index] = main_filters::text[index]; - menu::stack_push(ui(), container, s_sel, m_main); + menu::stack_push(ui(), container(), s_sel, m_main); } break; } @@ -110,7 +110,7 @@ void menu_game_options::handle() for (size_t index = 0; index < total; ++index) s_sel[index] = ifile.get_file(index); - menu::stack_push(ui(), container, s_sel, ifile.cur_file(), menu_selector::INIFILE); + menu::stack_push(ui(), container(), s_sel, ifile.cur_file(), menu_selector::INIFILE); } break; } @@ -134,7 +134,7 @@ void menu_game_options::handle() for (int index = 0; index < total; ++index) s_sel[index] = ifile.get_category(index); - menu::stack_push(ui(), container, s_sel, ifile.cur_cat(), menu_selector::CATEGORY); + menu::stack_push(ui(), container(), s_sel, ifile.cur_cat(), menu_selector::CATEGORY); } break; } @@ -145,7 +145,7 @@ void menu_game_options::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, c_mnfct::ui, c_mnfct::actual); + menu::stack_push(ui(), container(), c_mnfct::ui, c_mnfct::actual); break; case YEAR_CAT_FILTER: @@ -155,54 +155,54 @@ void menu_game_options::handle() changed = true; } else if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, c_year::ui, c_year::actual); + menu::stack_push(ui(), container(), c_year::ui, c_year::actual); break; case CONF_DIR: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case MISC_MENU: if (menu_event->iptkey == IPT_UI_SELECT) { - menu::stack_push(ui(), container, submenu::misc_options); + menu::stack_push(ui(), container(), submenu::misc_options); ui_globals::reset = true; } break; case SOUND_MENU: if (menu_event->iptkey == IPT_UI_SELECT) { - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); ui_globals::reset = true; } break; case DISPLAY_MENU: if (menu_event->iptkey == IPT_UI_SELECT) { - menu::stack_push(ui(), container, submenu::video_options); + menu::stack_push(ui(), container(), submenu::video_options); ui_globals::reset = true; } break; case CUSTOM_MENU: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case CONTROLLER_MENU: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, submenu::control_options); + menu::stack_push(ui(), container(), submenu::control_options); break; case CGI_MENU: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case CUSTOM_FILTER: if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); break; case ADVANCED_MENU: if (menu_event->iptkey == IPT_UI_SELECT) { - menu::stack_push(ui(), container, submenu::advanced_options); + menu::stack_push(ui(), container(), submenu::advanced_options); ui_globals::reset = true; } break; @@ -228,7 +228,7 @@ void menu_game_options::populate() std::string fbuff; // add filter item - UINT32 arrow_flags = get_arrow_flags((int)FILTER_FIRST, (int)FILTER_LAST, m_main); + UINT32 arrow_flags = get_arrow_flags(FILTER_FIRST, FILTER_LAST, m_main); item_append(_("Filter"), main_filters::text[m_main], arrow_flags, (void *)(FPTR)FILTER_MENU); // add category subitem @@ -236,12 +236,12 @@ void menu_game_options::populate() { inifile_manager &inif = mame_machine_manager::instance()->inifile(); - arrow_flags = get_arrow_flags(0, inif.total() - 1, inif.cur_file()); + arrow_flags = get_arrow_flags(UINT16(0), UINT16(inif.total() - 1), inif.cur_file()); fbuff = _(" ^!File"); convert_command_glyph(fbuff); item_append(fbuff, inif.get_file(), arrow_flags, (void *)(FPTR)FILE_CATEGORY_FILTER); - arrow_flags = get_arrow_flags(0, inif.cat_total() - 1, inif.cur_cat()); + arrow_flags = get_arrow_flags(UINT16(0), UINT16(inif.cat_total() - 1), inif.cur_cat()); fbuff = _(" ^!Category"); convert_command_glyph(fbuff); item_append(fbuff, inif.get_category(), arrow_flags, (void *)(FPTR)CATEGORY_FILTER); @@ -249,7 +249,7 @@ void menu_game_options::populate() // add manufacturer subitem else if (m_main == FILTER_MANUFACTURER && c_mnfct::ui.size() > 0) { - arrow_flags = get_arrow_flags(0, c_mnfct::ui.size() - 1, c_mnfct::actual); + arrow_flags = get_arrow_flags(UINT16(0), UINT16(c_mnfct::ui.size() - 1), c_mnfct::actual); fbuff = _("^!Manufacturer"); convert_command_glyph(fbuff); item_append(fbuff, c_mnfct::ui[c_mnfct::actual], arrow_flags, (void *)(FPTR)MANUFACT_CAT_FILTER); @@ -257,7 +257,7 @@ void menu_game_options::populate() // add year subitem else if (m_main == FILTER_YEAR && c_year::ui.size() > 0) { - arrow_flags = get_arrow_flags(0, c_year::ui.size() - 1, c_year::actual); + arrow_flags = get_arrow_flags(UINT16(0), UINT16(c_year::ui.size() - 1), c_year::actual); fbuff.assign(_("^!Year")); convert_command_glyph(fbuff); item_append(fbuff, c_year::ui[c_year::actual], arrow_flags, (void *)(FPTR)YEAR_CAT_FILTER); @@ -296,7 +296,7 @@ void menu_game_options::populate() void menu_game_options::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Settings"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Settings"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -308,7 +308,7 @@ void menu_game_options::custom_render(void *selectedref, float top, float bottom float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -316,7 +316,7 @@ void menu_game_options::custom_render(void *selectedref, float top, float bottom y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Settings"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Settings"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/optsmenu.h b/src/frontend/mame/ui/optsmenu.h index 6c388163d51..c131aa76639 100644 --- a/src/frontend/mame/ui/optsmenu.h +++ b/src/frontend/mame/ui/optsmenu.h @@ -19,15 +19,13 @@ namespace ui { class menu_game_options : public menu { public: - menu_game_options(mame_ui_manager &mui, render_container *container); + menu_game_options(mame_ui_manager &mui, render_container &container); virtual ~menu_game_options() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: - UINT16 m_main; - enum { FILTER_MENU = 1, @@ -47,6 +45,11 @@ private: CUSTOM_FILTER, SAVE_CONFIG }; + + virtual void populate() override; + virtual void handle() override; + + UINT16 m_main; }; } // namespace ui diff --git a/src/frontend/mame/ui/pluginopt.cpp b/src/frontend/mame/ui/pluginopt.cpp index 8ea60e91011..d6037af438b 100644 --- a/src/frontend/mame/ui/pluginopt.cpp +++ b/src/frontend/mame/ui/pluginopt.cpp @@ -24,11 +24,11 @@ void menu_plugin::handle() if (menu_event != nullptr && menu_event->itemref != nullptr) { if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container, (char *)menu_event->itemref); + menu::stack_push(ui(), container(), (char *)menu_event->itemref); } } -menu_plugin::menu_plugin(mame_ui_manager &mui, render_container *container) : +menu_plugin::menu_plugin(mame_ui_manager &mui, render_container &container) : menu(mui, container), m_plugins(mame_machine_manager::instance()->lua()->get_menu()) { @@ -45,7 +45,7 @@ menu_plugin::~menu_plugin() { } -menu_plugin_opt::menu_plugin_opt(mame_ui_manager &mui, render_container *container, char *menu) : +menu_plugin_opt::menu_plugin_opt(mame_ui_manager &mui, render_container &container, char *menu) : ui::menu(mui, container), m_menu(menu) { diff --git a/src/frontend/mame/ui/pluginopt.h b/src/frontend/mame/ui/pluginopt.h index 83f40b44fd8..21348f23750 100644 --- a/src/frontend/mame/ui/pluginopt.h +++ b/src/frontend/mame/ui/pluginopt.h @@ -24,22 +24,26 @@ namespace ui { class menu_plugin : public menu { public: - menu_plugin(mame_ui_manager &mui, render_container *container); + menu_plugin(mame_ui_manager &mui, render_container &container); virtual ~menu_plugin(); + +private: virtual void populate() override; virtual void handle() override; -private: + std::vector &m_plugins; }; class menu_plugin_opt : public menu { public: - menu_plugin_opt(mame_ui_manager &mui, render_container *container, char *menu); + menu_plugin_opt(mame_ui_manager &mui, render_container &container, char *menu); virtual ~menu_plugin_opt(); + +private: virtual void populate() override; virtual void handle() override; -private: + std::string m_menu; }; diff --git a/src/frontend/mame/ui/selector.cpp b/src/frontend/mame/ui/selector.cpp index 236ce06f672..0aa6798d849 100644 --- a/src/frontend/mame/ui/selector.cpp +++ b/src/frontend/mame/ui/selector.cpp @@ -21,7 +21,7 @@ namespace ui { // ctor / dtor //------------------------------------------------- -menu_selector::menu_selector(mame_ui_manager &mui, render_container *container, std::vector const &s_sel, UINT16 &s_actual, int category, int _hover) +menu_selector::menu_selector(mame_ui_manager &mui, render_container &container, std::vector const &s_sel, UINT16 &s_actual, int category, int _hover) : menu(mui, container) , m_selector(s_actual) , m_category(category) @@ -33,7 +33,7 @@ menu_selector::menu_selector(mame_ui_manager &mui, render_container *container, m_searchlist[0] = nullptr; } -menu_selector::menu_selector(mame_ui_manager &mui, render_container *container, std::vector &&s_sel, UINT16 &s_actual, int category, int _hover) +menu_selector::menu_selector(mame_ui_manager &mui, render_container &container, std::vector &&s_sel, UINT16 &s_actual, int category, int _hover) : menu(mui, container) , m_selector(s_actual) , m_category(category) @@ -167,7 +167,7 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl std::string tempbuf = std::string(_("Selection List - Search: ")).append(m_search).append("_"); // get the size of the text - ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -179,7 +179,7 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -187,7 +187,7 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // bottom text @@ -195,7 +195,7 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD)); tempbuf = string_format(_("Double click or press %1$s to select"), ui_select_text); - ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -207,7 +207,7 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_RED_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_RED_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -215,7 +215,7 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/selector.h b/src/frontend/mame/ui/selector.h index 2b6747e2c80..5c50ec43b3b 100644 --- a/src/frontend/mame/ui/selector.h +++ b/src/frontend/mame/ui/selector.h @@ -31,25 +31,28 @@ public: SOFTWARE }; - menu_selector(mame_ui_manager &mui, render_container *container, std::vector const &_sel, UINT16 &_actual, int _category = 0, int _hover = 0); - menu_selector(mame_ui_manager &mui, render_container *container, std::vector &&_sel, UINT16 &_actual, int _category = 0, int _hover = 0); + menu_selector(mame_ui_manager &mui, render_container &container, std::vector const &_sel, UINT16 &_actual, int _category = 0, int _hover = 0); + menu_selector(mame_ui_manager &mui, render_container &container, std::vector &&_sel, UINT16 &_actual, int _category = 0, int _hover = 0); virtual ~menu_selector() override; - virtual void populate() override; - virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; +protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; virtual bool menu_has_search_active() override { return (m_search[0] != 0); } private: enum { VISIBLE_GAMES_IN_SEARCH = 200 }; + + virtual void populate() override; + virtual void handle() override; + + void find_matches(const char *str); + char m_search[40]; UINT16 &m_selector; int m_category, m_hover; bool m_first_pass; std::vector m_str_items; std::string *m_searchlist[VISIBLE_GAMES_IN_SEARCH + 1]; - - void find_matches(const char *str); }; } // namespace ui diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp index 7ed67a15ed1..b94c12daf54 100644 --- a/src/frontend/mame/ui/selgame.cpp +++ b/src/frontend/mame/ui/selgame.cpp @@ -55,7 +55,7 @@ int menu_select_game::m_isabios = 0; // ctor //------------------------------------------------- -menu_select_game::menu_select_game(mame_ui_manager &mui, render_container *container, const char *gamename) +menu_select_game::menu_select_game(mame_ui_manager &mui, render_container &container, const char *gamename) : menu_select_launch(mui, container, false) { set_focus(focused_menu::main); @@ -193,7 +193,7 @@ void menu_select_game::handle() if (reselect_last::get()) { const game_driver *driver = (const game_driver *)item[selected].ref; - menu::stack_push(ui(), container, driver); + menu::stack_push(ui(), container(), driver); return; } @@ -231,11 +231,11 @@ void menu_select_game::handle() { // handle IPT_CUSTOM (mouse right click) if (!isfavorite()) - menu::stack_push(ui(), container, (const game_driver *)m_prev_selected, menu_event->mouse.x0, menu_event->mouse.y0); + menu::stack_push(ui(), container(), (const game_driver *)m_prev_selected, menu_event->mouse.x0, menu_event->mouse.y0); else { ui_software_info *sw = (ui_software_info *)m_prev_selected; - menu::stack_push(ui(), container, (const game_driver *)sw->driver, menu_event->mouse.x0, menu_event->mouse.y0); + menu::stack_push(ui(), container(), (const game_driver *)sw->driver, menu_event->mouse.x0, menu_event->mouse.y0); } } else if (menu_event->iptkey == IPT_UI_LEFT) @@ -348,7 +348,7 @@ void menu_select_game::handle() { const game_driver *driver = (const game_driver *)menu_event->itemref; if ((FPTR)driver > skip_main_items && mame_machine_manager::instance()->datfile().has_data(driver)) - menu::stack_push(ui(), container, driver); + menu::stack_push(ui(), container(), driver); } else { @@ -358,9 +358,9 @@ void menu_select_game::handle() if ((FPTR)ui_swinfo > skip_main_items) { if (ui_swinfo->startempty == 1 && mdat.has_history(ui_swinfo->driver)) - menu::stack_push(ui(), container, ui_swinfo->driver); + menu::stack_push(ui(), container(), ui_swinfo->driver); else if (mdat.has_software(ui_swinfo->listname, ui_swinfo->shortname, ui_swinfo->parentname) || !ui_swinfo->usage.empty()) - menu::stack_push(ui(), container, ui_swinfo); + menu::stack_push(ui(), container(), ui_swinfo); } } } @@ -405,12 +405,12 @@ void menu_select_game::handle() else if (menu_event->iptkey == IPT_UI_AUDIT_FAST && !m_unavailsortedlist.empty()) { // handle UI_AUDIT_FAST - menu::stack_push(ui(), container, m_availsortedlist, m_unavailsortedlist, 1); + menu::stack_push(ui(), container(), m_availsortedlist, m_unavailsortedlist, 1); } else if (menu_event->iptkey == IPT_UI_AUDIT_ALL) { // handle UI_AUDIT_ALL - menu::stack_push(ui(), container, m_availsortedlist, m_unavailsortedlist, 2); + menu::stack_push(ui(), container(), m_availsortedlist, m_unavailsortedlist, 2); } else if (menu_event->iptkey == IPT_SPECIAL) { @@ -459,8 +459,8 @@ void menu_select_game::handle() // if we're in an error state, overlay an error message if (m_ui_error) - ui().draw_text_box(container, _("The selected machine is missing one or more required ROM or CHD images. " - "Please select a different machine.\n\nPress any key to continue."), ui::text_layout::CENTER, 0.5f, 0.5f, UI_RED_COLOR); + ui().draw_text_box(container(), _("The selected machine is missing one or more required ROM or CHD images. " + "Please select a different machine.\n\nPress any key to continue."), ui::text_layout::CENTER, 0.5f, 0.5f, UI_RED_COLOR); // handle filters selection from key shortcuts if (check_filter) @@ -469,17 +469,17 @@ void menu_select_game::handle() if (l_hover == FILTER_CATEGORY) { main_filters::actual = l_hover; - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); } else if (l_hover == FILTER_CUSTOM) { main_filters::actual = l_hover; - menu::stack_push(ui(), container, true); + menu::stack_push(ui(), container(), true); } else if (l_hover == FILTER_MANUFACTURER) - menu::stack_push(ui(), container, c_mnfct::ui, c_mnfct::actual, menu_selector::GAME, l_hover); + menu::stack_push(ui(), container(), c_mnfct::ui, c_mnfct::actual, menu_selector::GAME, l_hover); else if (l_hover == FILTER_YEAR) - menu::stack_push(ui(), container, c_year::ui, c_year::actual, menu_selector::GAME, l_hover); + menu::stack_push(ui(), container(), c_year::ui, c_year::actual, menu_selector::GAME, l_hover); else { if (l_hover >= FILTER_ALL) @@ -793,8 +793,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, // get the size of the text for (int line = 0; line < 2; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container(), tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(width, maxwidth); } @@ -812,7 +812,7 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, float y2 = origy1 - 3.0f * UI_BOX_TB_BORDER - tbarspace; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -822,8 +822,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, // draw the text within it for (int line = 0; line < 2; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container(), tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } @@ -948,8 +948,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container(), elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); } @@ -967,7 +967,7 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, color); + ui().draw_outlined_box(container(), x1, y1, x2, y2, color); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -981,8 +981,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, // draw all lines for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container(), elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } } @@ -992,7 +992,7 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, // and inescapable //------------------------------------------------- -void menu_select_game::force_game_select(mame_ui_manager &mui, render_container *container) +void menu_select_game::force_game_select(mame_ui_manager &mui, render_container &container) { // reset the menu stack menu::stack_reset(mui.machine()); @@ -1018,20 +1018,20 @@ void menu_select_game::inkey_select(const event *menu_event) // special case for configure options if ((FPTR)driver == CONF_OPTS) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); // special case for configure machine else if ((FPTR)driver == CONF_MACHINE) { if (m_prev_selected != nullptr) - menu::stack_push(ui(), container, (const game_driver *)m_prev_selected); + menu::stack_push(ui(), container(), (const game_driver *)m_prev_selected); return; } // special case for configure plugins else if ((FPTR)driver == CONF_PLUGINS) { - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); } // anything else is a driver else @@ -1050,14 +1050,14 @@ void menu_select_game::inkey_select(const event *menu_event) for (software_list_device &swlistdev : software_list_device_iterator(enumerator.config().root_device())) if (!swlistdev.get_info().empty()) { - menu::stack_push(ui(), container, driver); + menu::stack_push(ui(), container(), driver); return; } } s_bios biosname; if (!ui().options().skip_bios_menu() && has_multiple_bios(driver, biosname)) - menu::stack_push(ui(), container, biosname, (void *)driver, false, false); + menu::stack_push(ui(), container(), biosname, (void *)driver, false, false); else { reselect_last::driver = driver->name; @@ -1088,21 +1088,21 @@ void menu_select_game::inkey_select_favorite(const event *menu_event) // special case for configure options if ((FPTR)ui_swinfo == CONF_OPTS) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); // special case for configure machine else if ((FPTR)ui_swinfo == CONF_MACHINE) { if (m_prev_selected != nullptr) { ui_software_info *swinfo = (ui_software_info *)m_prev_selected; - menu::stack_push(ui(), container, (const game_driver *)swinfo->driver); + menu::stack_push(ui(), container(), (const game_driver *)swinfo->driver); } return; } // special case for configure plugins else if ((FPTR)ui_swinfo == CONF_PLUGINS) { - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); } else if (ui_swinfo->startempty == 1) { @@ -1117,7 +1117,7 @@ void menu_select_game::inkey_select_favorite(const event *menu_event) { s_bios biosname; if (!mopt.skip_bios_menu() && has_multiple_bios(ui_swinfo->driver, biosname)) - menu::stack_push(ui(), container, biosname, (void *)ui_swinfo->driver, false, false); + menu::stack_push(ui(), container(), biosname, (void *)ui_swinfo->driver, false, false); else { reselect_last::driver = ui_swinfo->driver->name; @@ -1153,7 +1153,7 @@ void menu_select_game::inkey_select_favorite(const event *menu_event) s_bios biosname; if (!mopt.skip_bios_menu() && has_multiple_bios(ui_swinfo->driver, biosname)) { - menu::stack_push(ui(), container, biosname, (void *)ui_swinfo, true, false); + menu::stack_push(ui(), container(), biosname, (void *)ui_swinfo, true, false); return; } else if (!mopt.skip_parts_menu() && swinfo->has_multiple_parts(ui_swinfo->interface.c_str())) @@ -1169,7 +1169,7 @@ void menu_select_game::inkey_select_favorite(const event *menu_event) parts.emplace(swpart.name(), menu_part_name); } } - menu::stack_push(ui(), container, parts, ui_swinfo); + menu::stack_push(ui(), container(), parts, ui_swinfo); return; } @@ -1647,7 +1647,7 @@ void menu_select_game::inkey_export() { list = m_displaylist; } - menu::stack_push(ui(), container, list); + menu::stack_push(ui(), container(), list); } //------------------------------------------------- @@ -1837,7 +1837,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) } x2 = x1 + left_width + 2.0f * UI_BOX_LR_BORDER; - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -1856,15 +1856,15 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) bgcolor = UI_MOUSEOVER_BG_COLOR; fgcolor = UI_MOUSEOVER_COLOR; hover = phover + filter; - menu::highlight(container, x1, y1, x2, y1+ line_height_max, bgcolor); + menu::highlight(x1, y1, x2, y1+ line_height_max, bgcolor); } if (highlight == filter && get_focus() == focused_menu::left) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); - ui().draw_textured_box(container, x1, y1, x2, y1 + line_height_max, bgcolor, rgb_t(255, 43, 43, 43), - hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), x1, y1, x2, y1 + line_height_max, bgcolor, rgb_t(255, 43, 43, 43), + hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } float x1t = x1 + text_sign; @@ -1897,8 +1897,8 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) convert_command_glyph(str); } - ui().draw_text_full(container, str.c_str(), x1t, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); + ui().draw_text_full(container(), str.c_str(), x1t, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); y1 += line_height_max; } @@ -1916,7 +1916,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) float ar_x1 = ar_x0 + lr_arrow_width; float ar_y1 = 0.5f * (y2 + y1) + 0.9f * space; - ui().draw_outlined_box(container, x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); + ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y) { @@ -1924,7 +1924,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) hover = HOVER_LPANEL_ARROW; } - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); return x2 + UI_BOX_LR_BORDER; } else @@ -1939,7 +1939,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) float ar_x1 = ar_x0 + lr_arrow_width; float ar_y1 = 0.5f * (y2 + y1) + 0.9f * space; - ui().draw_outlined_box(container, x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); + ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y) { @@ -1947,7 +1947,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) hover = HOVER_LPANEL_ARROW; } - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); return x2 + UI_BOX_LR_BORDER; } } @@ -2006,8 +2006,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy for (int x = UI_FIRST_LOAD; x < UI_LAST_LOAD; ++x) { - ui().draw_text_full(container, _(dats_info[x]), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, - ui::text_layout::NEVER, mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); + ui().draw_text_full(container(), _(dats_info[x]), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::NEVER, mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); txt_length += 0.01f; title_size = (std::max)(txt_length, title_size); } @@ -2028,11 +2028,13 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy title_size *= tmp_size; if (bgcolor != UI_TEXT_BG_COLOR) - ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), - origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + { + ui().draw_textured_box(container(), origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), + origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + } - ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, - ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); + ui().draw_text_full(container(), snaptext.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::curdats_view, UI_FIRST_LOAD, UI_LAST_LOAD, title_size); @@ -2068,14 +2070,14 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy if (buffer.empty()) { - ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, - ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container(), _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); return; } else if (ui_globals::curdats_view != UI_STORY_LOAD && ui_globals::curdats_view != UI_COMMAND_LOAD) - m_total_lines = ui().wrap_text(container, buffer.c_str(), origx1, origy1, origx2 - origx1 - (2.0f * gutter_width), xstart, xend, text_size); + m_total_lines = ui().wrap_text(container(), buffer.c_str(), origx1, origy1, origx2 - origx1 - (2.0f * gutter_width), xstart, xend, text_size); else - m_total_lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (2.0f * gutter_width), xstart, xend, text_size); + m_total_lines = ui().wrap_text(container(), buffer.c_str(), 0.0f, 0.0f, 1.0f - (2.0f * gutter_width), xstart, xend, text_size); int r_visible_lines = floor((origy2 - oy1) / (line_height * text_size)); if (m_total_lines < r_visible_lines) @@ -2107,8 +2109,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy size_t last_underscore = tempbuf.find_last_of("_"); if (last_underscore == std::string::npos) { - ui().draw_text_full(container, tempbuf.c_str(), origx1, oy1, origx2 - origx1, ui::text_layout::CENTER, - ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); + ui().draw_text_full(container(), tempbuf.c_str(), origx1, oy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); } else { @@ -2118,12 +2120,12 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy std::string first_part(tempbuf.substr(0, tempbuf.find("___"))); float item_width; - ui().draw_text_full(container, first_part.c_str(), effective_left, oy1, effective_width, - ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &item_width, nullptr, tmp_size2); + ui().draw_text_full(container(), first_part.c_str(), effective_left, oy1, effective_width, + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &item_width, nullptr, tmp_size2); - ui().draw_text_full(container, last_part.c_str(), effective_left + item_width, oy1, - origx2 - origx1 - 2.0f * gutter_width - item_width, ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, - mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); + ui().draw_text_full(container(), last_part.c_str(), effective_left + item_width, oy1, + origx2 - origx1 - 2.0f * gutter_width - item_width, ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); } } @@ -2142,19 +2144,21 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy std::string first_part(tempbuf.substr(0, first_dspace)); std::string last_part(tempbuf.substr(first_dspace + 1)); strtrimspace(last_part); - ui().draw_text_full(container, first_part.c_str(), effective_left, oy1, effective_width, ui::text_layout::LEFT, - ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); + ui().draw_text_full(container(), first_part.c_str(), effective_left, oy1, effective_width, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); - ui().draw_text_full(container, last_part.c_str(), effective_left, oy1, origx2 - origx1 - 2.0f * gutter_width, - ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); + ui().draw_text_full(container(), last_part.c_str(), effective_left, oy1, origx2 - origx1 - 2.0f * gutter_width, + ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); } else - ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, - ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); + ui().draw_text_full(container(), tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); } else - ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, - ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + { + ui().draw_text_full(container(), tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + } oy1 += (line_height * text_size); } @@ -2171,8 +2175,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy // apply title to right panel if (soft->usage.empty()) { - ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, - mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container(), _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); ui_globals::cur_sw_dats_view = 0; } else @@ -2185,8 +2189,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy for (auto & elem: t_text) { - ui().draw_text_full(container, elem.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, - mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); + ui().draw_text_full(container(), elem.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); txt_length += 0.01f; title_size = (std::max)(txt_length, title_size); } @@ -2202,11 +2206,13 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy float middle = origx2 - origx1; if (bgcolor != UI_TEXT_BG_COLOR) - ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), - origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + { + ui().draw_textured_box(container(), origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), + origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + } - ui().draw_text_full(container, t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1, - ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container(), t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1, + ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::cur_sw_dats_view, 0, 1, title_size); } @@ -2229,12 +2235,14 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy if (buffer.empty()) { - ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, - ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container(), _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); return; } else - m_total_lines = ui().wrap_text(container, buffer.c_str(), origx1, origy1, origx2 - origx1 - (2.0f * gutter_width), xstart, xend, text_size); + { + m_total_lines = ui().wrap_text(container(), buffer.c_str(), origx1, origy1, origx2 - origx1 - (2.0f * gutter_width), xstart, xend, text_size); + } int r_visible_lines = floor((origy2 - oy1) / (line_height * text_size)); if (m_total_lines < r_visible_lines) @@ -2256,8 +2264,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy else if (r == r_visible_lines - 1 && itemline != m_total_lines - 1) draw_info_arrow(1, origx1, origx2, oy1, line_height, text_size, ud_arrow_width); else - ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, - ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container(), tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); oy1 += (line_height * text_size); } @@ -2284,7 +2292,7 @@ void menu_select_game::draw_right_panel(void *selectedref, float origx1, float o float ar_x1 = ar_x0 + lr_arrow_width; float ar_y1 = 0.5f * (origy2 + origy1) + 0.9f * space; - ui().draw_outlined_box(container, origx1, origy1, origx2, origy2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); + ui().draw_outlined_box(container(), origx1, origy1, origx2, origy2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); if (mouse_hit && origx1 <= mouse_x && x2 > mouse_x && origy1 <= mouse_y && origy2 > mouse_y) { @@ -2294,11 +2302,11 @@ void menu_select_game::draw_right_panel(void *selectedref, float origx1, float o if (hide) { - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); return; } - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); origx1 = x2; origy1 = draw_right_box_title(origx1, origy1, origx2, origy2); diff --git a/src/frontend/mame/ui/selgame.h b/src/frontend/mame/ui/selgame.h index 153e353c93b..c1c934bee62 100644 --- a/src/frontend/mame/ui/selgame.h +++ b/src/frontend/mame/ui/selgame.h @@ -20,23 +20,16 @@ namespace ui { class menu_select_game : public menu_select_launch { public: - menu_select_game(mame_ui_manager &mui, render_container *container, const char *gamename); + menu_select_game(mame_ui_manager &mui, render_container &container, const char *gamename); virtual ~menu_select_game(); - virtual void populate() override; - virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; // force game select menu - static void force_game_select(mame_ui_manager &mui, render_container *container); + static void force_game_select(mame_ui_manager &mui, render_container &container); +protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; virtual bool menu_has_search_active() override { return (m_search[0] != 0); } - // draw left panel - virtual float draw_left_panel(float x1, float y1, float x2, float y2) override; - - // draw right panel - virtual void draw_right_panel(void *selectedref, float origx1, float origy1, float origx2, float origy2) override; - private: enum { @@ -57,6 +50,15 @@ private: const game_driver *m_searchlist[VISIBLE_GAMES_IN_SEARCH + 1]; + virtual void populate() override; + virtual void handle() override; + + // draw left panel + virtual float draw_left_panel(float x1, float y1, float x2, float y2) override; + + // draw right panel + virtual void draw_right_panel(void *selectedref, float origx1, float origy1, float origx2, float origy2) override; + // internal methods void build_custom(); void build_category(); diff --git a/src/frontend/mame/ui/selmenu.cpp b/src/frontend/mame/ui/selmenu.cpp index f9db29a1a87..24eea3378ed 100644 --- a/src/frontend/mame/ui/selmenu.cpp +++ b/src/frontend/mame/ui/selmenu.cpp @@ -93,7 +93,7 @@ menu_select_launch::cache::cache(running_machine &machine) m_star_texture = texture_ptr(render.texture_alloc(), texture_free); m_star_texture->set_bitmap(*m_star_bitmap, m_star_bitmap->cliprect(), TEXFORMAT_ARGB32); - m_toolbar_bitmap.reserve(UI_TOOLBAR_BUTTONS); + m_toolbar_bitmap.reserve(UI_TOOLBAR_BUTTONS); m_sw_toolbar_bitmap.reserve(UI_TOOLBAR_BUTTONS); m_toolbar_texture.reserve(UI_TOOLBAR_BUTTONS); m_sw_toolbar_texture.reserve(UI_TOOLBAR_BUTTONS); @@ -143,7 +143,7 @@ menu_select_launch::~menu_select_launch() } -menu_select_launch::menu_select_launch(mame_ui_manager &mui, render_container *container, bool is_swlist) +menu_select_launch::menu_select_launch(mame_ui_manager &mui, render_container &container, bool is_swlist) : menu(mui, container) , m_total_lines(0) , m_topline_datsview(0) @@ -195,10 +195,10 @@ float menu_select_launch::draw_right_box_title(float x1, float y1, float x2, flo float midl = (x2 - x1) * 0.5f; // add outlined box for options - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // add separator line - container->add_line(x1 + midl, y1, x1 + midl, y1 + line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(x1 + midl, y1, x1 + midl, y1 + line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); std::string buffer[RP_LAST + 1]; buffer[RP_IMAGES] = _("Images"); @@ -230,8 +230,8 @@ float menu_select_launch::draw_right_box_title(float x1, float y1, float x2, flo if (ui_globals::rpanel != cells) { - container->add_line(x1, y1 + line_height, x1 + midl, y1 + line_height, UI_LINE_WIDTH, - UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(x1, y1 + line_height, x1 + midl, y1 + line_height, UI_LINE_WIDTH, + UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); if (fgcolor != UI_MOUSEOVER_COLOR) fgcolor = UI_CLONE_COLOR; } @@ -240,15 +240,17 @@ float menu_select_launch::draw_right_box_title(float x1, float y1, float x2, flo { fgcolor = rgb_t(0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff); - ui().draw_textured_box(container, x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, - bgcolor, rgb_t(43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, + bgcolor, rgb_t(43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } else if (bgcolor == UI_MOUSEOVER_BG_COLOR) - container->add_rect(x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, - bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + { + container().add_rect(x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, + bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + } - ui().draw_text_full(container, buffer[cells].c_str(), x1 + UI_LINE_WIDTH, y1, midl - UI_LINE_WIDTH, - ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); + ui().draw_text_full(container(), buffer[cells].c_str(), x1 + UI_LINE_WIDTH, y1, midl - UI_LINE_WIDTH, + ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); x1 += midl; } @@ -273,8 +275,8 @@ std::string menu_select_launch::arts_render_common(float origx1, float origy1, f // apply title to right panel for (int x = FIRST_VIEW; x < LAST_VIEW; x++) { - ui().draw_text_full(container, _(arts_info[x].first), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, - ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &txt_lenght, nullptr); + ui().draw_text_full(container(), _(arts_info[x].first), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &txt_lenght, nullptr); txt_lenght += 0.01f; title_size = MAX(txt_lenght, title_size); } @@ -289,11 +291,13 @@ std::string menu_select_launch::arts_render_common(float origx1, float origy1, f title_size *= tmp_size; if (bgcolor != UI_TEXT_BG_COLOR) - ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), - origy1 + line_height, bgcolor, rgb_t(43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + { + ui().draw_textured_box(container(), origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), + origy1 + line_height, bgcolor, rgb_t(43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + } - ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, - mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); + ui().draw_text_full(container(), snaptext.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::curimage_view, FIRST_VIEW, LAST_VIEW, title_size); @@ -423,28 +427,28 @@ void menu_select_launch::draw_common_arrow(float origx1, float origy1, float ori // set hover if (mouse_hit && ar_x0 <= mouse_x && ar_x1 > mouse_x && ar_y0 <= mouse_y && ar_y1 > mouse_y && current != dmax) { - ui().draw_textured_box(container, ar_x0 + 0.01f, ar_y0, ar_x1 - 0.01f, ar_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), - hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), ar_x0 + 0.01f, ar_y0, ar_x1 - 0.01f, ar_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), + hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = HOVER_UI_RIGHT; fgcolor_right = UI_MOUSEOVER_COLOR; } else if (mouse_hit && al_x0 <= mouse_x && al_x1 > mouse_x && al_y0 <= mouse_y && al_y1 > mouse_y && current != dmin) { - ui().draw_textured_box(container, al_x0 + 0.01f, al_y0, al_x1 - 0.01f, al_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), - hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), al_x0 + 0.01f, al_y0, al_x1 - 0.01f, al_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), + hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = HOVER_UI_LEFT; fgcolor_left = UI_MOUSEOVER_COLOR; } // apply arrow if (current == dmin) - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor_right, ROT90); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor_right, ROT90); else if (current == dmax) - draw_arrow(container, al_x0, al_y0, al_x1, al_y1, fgcolor_left, ROT90 ^ ORIENTATION_FLIP_X); + draw_arrow(al_x0, al_y0, al_x1, al_y1, fgcolor_left, ROT90 ^ ORIENTATION_FLIP_X); else { - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor_right, ROT90); - draw_arrow(container, al_x0, al_y0, al_x1, al_y1, fgcolor_left, ROT90 ^ ORIENTATION_FLIP_X); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor_right, ROT90); + draw_arrow(al_x0, al_y0, al_x1, al_y1, fgcolor_left, ROT90 ^ ORIENTATION_FLIP_X); } } @@ -460,13 +464,13 @@ void menu_select_launch::draw_info_arrow(int ub, float origx1, float origx2, flo if (mouse_hit && origx1 <= mouse_x && origx2 > mouse_x && oy1 <= mouse_y && oy1 + (line_height * text_size) > mouse_y) { - ui().draw_textured_box(container, origx1 + 0.01f, oy1, origx2 - 0.01f, oy1 + (line_height * text_size), UI_MOUSEOVER_BG_COLOR, - rgb_t(43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), origx1 + 0.01f, oy1, origx2 - 0.01f, oy1 + (line_height * text_size), UI_MOUSEOVER_BG_COLOR, + rgb_t(43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = (!ub) ? HOVER_DAT_UP : HOVER_DAT_DOWN; fgcolor = UI_MOUSEOVER_COLOR; } - draw_arrow(container, 0.5f * (origx1 + origx2) - 0.5f * (ud_arrow_width * text_size), oy1 + 0.25f * (line_height * text_size), + draw_arrow(0.5f * (origx1 + origx2) - 0.5f * (ud_arrow_width * text_size), oy1 + 0.25f * (line_height * text_size), 0.5f * (origx1 + origx2) + 0.5f * (ud_arrow_width * text_size), oy1 + 0.75f * (line_height * text_size), fgcolor, orientation); } @@ -478,7 +482,7 @@ void menu_select_launch::draw_info_arrow(int ub, float origx1, float origx2, flo void menu_select_launch::draw_toolbar(float x1, float y1, float x2, float y2, bool software) { // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); + ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -491,7 +495,7 @@ void menu_select_launch::draw_toolbar(float x1, float y1, float x2, float y2, bo auto const num_valid(std::count_if(std::begin(t_bitmap), std::end(t_bitmap), [](bitmap_ptr const &e) { return e && e->valid(); })); - float const space_x = (y2 - y1) * container->manager().ui_aspect(container); + float const space_x = (y2 - y1) * container().manager().ui_aspect(&container()); float const total = (float(num_valid) * space_x) + (float(num_valid - 1) * 0.001f); x1 += (x2 - x1) * 0.5f - total * 0.5f; x2 = x1 + space_x; @@ -506,10 +510,10 @@ void menu_select_launch::draw_toolbar(float x1, float y1, float x2, float y2, bo hover = HOVER_B_FAV + z; color = rgb_t::white; float ypos = y2 + ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; - ui().draw_text_box(container, _(hover_msg[z]), ui::text_layout::CENTER, 0.5f, ypos, UI_BACKGROUND_COLOR); + ui().draw_text_box(container(), _(hover_msg[z]), ui::text_layout::CENTER, 0.5f, ypos, UI_BACKGROUND_COLOR); } - container->add_quad(x1, y1, x2, y2, color, t_texture[z].get(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_quad(x1, y1, x2, y2, color, t_texture[z].get(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); x1 += space_x + ((z < UI_TOOLBAR_BUTTONS - 1) ? 0.001f : 0.0f); x2 = x1 + space_x; } @@ -524,8 +528,8 @@ void menu_select_launch::draw_toolbar(float x1, float y1, float x2, float y2, bo void menu_select_launch::draw_star(float x0, float y0) { float y1 = y0 + ui().get_line_height(); - float x1 = x0 + ui().get_line_height() * container->manager().ui_aspect(); - container->add_quad(x0, y0, x1, y1, rgb_t::white, m_cache->star_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_PACKABLE); + float x1 = x0 + ui().get_line_height() * container().manager().ui_aspect(); + container().add_quad(x0, y0, x1, y1, rgb_t::white, m_cache->star_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_PACKABLE); } @@ -545,7 +549,7 @@ void menu_select_launch::draw_snapx(float origx1, float origy1, float origx2, fl float const y2 = origy2 - UI_BOX_TB_BORDER - line_height; // apply texture - container->add_quad(x1, y1, x2, y2, rgb_t::white, m_cache->snapx_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_quad(x1, y1, x2, y2, rgb_t::white, m_cache->snapx_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } } @@ -566,7 +570,7 @@ float menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, fl if (!ui_globals::has_icons || m_is_swlist) return 0.0f; - float ud_arrow_width = ui().get_line_height() * container->manager().ui_aspect(container); + float ud_arrow_width = ui().get_line_height() * container().manager().ui_aspect(&container()); const game_driver *driver = nullptr; if (item[0].flags & FLAG_UI_FAVORITE) @@ -671,7 +675,7 @@ float menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, fl } if (m_icons_bitmap[linenum] != nullptr && m_icons_bitmap[linenum]->valid()) - container->add_quad(x0, y0, x1, y1, rgb_t::white, m_icons_texture[linenum], PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_quad(x0, y0, x1, y1, rgb_t::white, m_icons_texture[linenum], PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); return ud_arrow_width * 1.5f; } @@ -1167,7 +1171,7 @@ void menu_select_launch::draw(UINT32 flags) { mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); if (mouse_target) - if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) + if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y)) mouse_hit = true; } @@ -1202,7 +1206,7 @@ void menu_select_launch::draw(UINT32 flags) x1 = visible_left - UI_BOX_LR_BORDER; x2 = visible_left + visible_width + UI_BOX_LR_BORDER; float line = visible_top + (float(m_visible_lines) * line_height); - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); if (visible_items < m_visible_lines) m_visible_lines = visible_items; @@ -1243,28 +1247,28 @@ void menu_select_launch::draw(UINT32 flags) fgcolor = rgb_t(0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff); fgcolor3 = rgb_t(0xcc, 0xcc, 0x00); - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), - hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), + hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } // else if the mouse is over this item, draw with a different background else if (itemnum == hover) { fgcolor = fgcolor3 = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); + highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); } else if (pitem.ref == m_prev_selected) { fgcolor = fgcolor3 = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), - hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), + hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } if (linenum == 0 && top_line != 0) { // if we're on the top line, display the up arrow - draw_arrow(container, 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, + draw_arrow(0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, line_y + 0.75f * line_height, fgcolor, ROT0); if (hover == itemnum) @@ -1273,7 +1277,7 @@ void menu_select_launch::draw(UINT32 flags) else if (linenum == m_visible_lines - 1 && itemnum != visible_items - 1) { // if we're on the bottom line, display the down arrow - draw_arrow(container, 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, + draw_arrow(0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height, 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, line_y + 0.75f * line_height, fgcolor, ROT0 ^ ORIENTATION_FLIP_Y); if (hover == itemnum) @@ -1282,16 +1286,16 @@ void menu_select_launch::draw(UINT32 flags) else if (pitem.type == menu_item_type::SEPARATOR) { // if we're just a divider, draw a line - container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, - UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, + UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } else if (pitem.subtext.empty()) { // draw the item centered int item_invert = pitem.flags & FLAG_INVERT; auto icon = draw_icon(linenum, item[itemnum].ref, effective_left, line_y); - ui().draw_text_full(container, itemtext, effective_left + icon, line_y, effective_width - icon, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, - mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container(), itemtext, effective_left + icon, line_y, effective_width - icon, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); } else { @@ -1300,17 +1304,17 @@ void menu_select_launch::draw(UINT32 flags) float item_width, subitem_width; // compute right space for subitem - ui().draw_text_full(container, subitem_text, effective_left, line_y, ui().get_string_width(pitem.subtext.c_str()), - ui::text_layout::RIGHT, ui::text_layout::NEVER, mame_ui_manager::NONE, item_invert ? fgcolor3 : fgcolor, bgcolor, &subitem_width, nullptr); + ui().draw_text_full(container(), subitem_text, effective_left, line_y, ui().get_string_width(pitem.subtext.c_str()), + ui::text_layout::RIGHT, ui::text_layout::NEVER, mame_ui_manager::NONE, item_invert ? fgcolor3 : fgcolor, bgcolor, &subitem_width, nullptr); subitem_width += gutter_width; // draw the item left-justified - ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width - subitem_width, - ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, &item_width, nullptr); + ui().draw_text_full(container(), itemtext, effective_left, line_y, effective_width - subitem_width, + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, &item_width, nullptr); // draw the subitem right-justified - ui().draw_text_full(container, subitem_text, effective_left + item_width, line_y, effective_width - item_width, - ui::text_layout::RIGHT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container(), subitem_text, effective_left + item_width, line_y, effective_width - item_width, + ui::text_layout::RIGHT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); } } @@ -1333,23 +1337,27 @@ void menu_select_launch::draw(UINT32 flags) { fgcolor = rgb_t(0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff); - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), - hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), + hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } // else if the mouse is over this item, draw with a different background else if (count == hover) { fgcolor = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); + highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); } if (pitem.type == menu_item_type::SEPARATOR) - container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, - UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + { + container().add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, + UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + } else - ui().draw_text_full(container, itemtext, effective_left, line, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, - mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); + { + ui().draw_text_full(container(), itemtext, effective_left, line, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); + } line += line_height; } @@ -1377,7 +1385,7 @@ void menu_select_launch::draw(UINT32 flags) if (alpha > 255) alpha = 255; if (alpha >= 0) - container->add_rect(0.0f, 0.0f, 1.0f, 1.0f, rgb_t(alpha, 0x00, 0x00, 0x00), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_rect(0.0f, 0.0f, 1.0f, 1.0f, rgb_t(alpha, 0x00, 0x00, 0x00), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } } @@ -1388,4 +1396,4 @@ void menu_select_launch::exit(running_machine &machine) s_caches.erase(&machine); } -} // namespace ui \ No newline at end of file +} // namespace ui diff --git a/src/frontend/mame/ui/selmenu.h b/src/frontend/mame/ui/selmenu.h index 3a9e313c0c3..006c0f54b4e 100644 --- a/src/frontend/mame/ui/selmenu.h +++ b/src/frontend/mame/ui/selmenu.h @@ -39,7 +39,7 @@ protected: rightbottom }; - menu_select_launch(mame_ui_manager &mui, render_container *container, bool is_swlist); + menu_select_launch(mame_ui_manager &mui, render_container &container, bool is_swlist); focused_menu get_focus() const { return m_focus; } void set_focus(focused_menu focus) { m_focus = focus; } @@ -111,6 +111,12 @@ private: bool mouse_pressed() const { return (osd_ticks() >= m_repeat); } void set_pressed(); + // draw left panel + virtual float draw_left_panel(float x1, float y1, float x2, float y2) = 0; + + // draw right panel + virtual void draw_right_panel(void *selectedref, float origx1, float origy1, float origx2, float origy2) = 0; + float draw_icon(int linenum, void *selectedref, float x1, float y1); void get_title_search(std::string &title, std::string &search); @@ -127,7 +133,7 @@ private: // cleanup function static void exit(running_machine &machine); - cache_ptr m_cache; + cache_ptr m_cache; bool m_is_swlist; focused_menu m_focus; bool m_pressed; // mouse button held down @@ -143,4 +149,4 @@ private: } // namespace ui -#endif // MAME_FRONTEND_UI_SELMENU_H \ No newline at end of file +#endif // MAME_FRONTEND_UI_SELMENU_H diff --git a/src/frontend/mame/ui/selsoft.cpp b/src/frontend/mame/ui/selsoft.cpp index a28aa465dea..a884fd6070c 100644 --- a/src/frontend/mame/ui/selsoft.cpp +++ b/src/frontend/mame/ui/selsoft.cpp @@ -125,7 +125,7 @@ bool has_multiple_bios(const game_driver *driver, s_bios &biosname) // ctor //------------------------------------------------- -menu_select_software::menu_select_software(mame_ui_manager &mui, render_container *container, const game_driver *driver) +menu_select_software::menu_select_software(mame_ui_manager &mui, render_container &container, const game_driver *driver) : menu_select_launch(mui, container, true) { if (reselect_last::get()) @@ -246,9 +246,9 @@ void menu_select_software::handle() datfile_manager &mdat = mame_machine_manager::instance()->datfile(); if (ui_swinfo->startempty == 1 && mdat.has_history(ui_swinfo->driver)) - menu::stack_push(ui(), container, ui_swinfo->driver); + menu::stack_push(ui(), container(), ui_swinfo->driver); else if (mdat.has_software(ui_swinfo->listname, ui_swinfo->shortname, ui_swinfo->parentname) || !ui_swinfo->usage.empty()) - menu::stack_push(ui(), container, ui_swinfo); + menu::stack_push(ui(), container(), ui_swinfo); } else if (menu_event->iptkey == IPT_UI_LEFT_PANEL) { @@ -373,7 +373,7 @@ void menu_select_software::handle() // if we're in an error state, overlay an error message if (m_ui_error) - ui().draw_text_box(container, _("The selected software is missing one or more required files. " + ui().draw_text_box(container(), _("The selected software is missing one or more required files. " "Please select a different software.\n\nPress any key to continue."), ui::text_layout::CENTER, 0.5f, 0.5f, UI_RED_COLOR); @@ -384,23 +384,23 @@ void menu_select_software::handle() switch (l_sw_hover) { case UI_SW_REGION: - menu::stack_push(ui(), container, m_filter.region.ui, m_filter.region.actual, menu_selector::SOFTWARE, l_sw_hover); + menu::stack_push(ui(), container(), m_filter.region.ui, m_filter.region.actual, menu_selector::SOFTWARE, l_sw_hover); break; case UI_SW_YEARS: - menu::stack_push(ui(), container, m_filter.year.ui, m_filter.year.actual, menu_selector::SOFTWARE, l_sw_hover); + menu::stack_push(ui(), container(), m_filter.year.ui, m_filter.year.actual, menu_selector::SOFTWARE, l_sw_hover); break; case UI_SW_LIST: - menu::stack_push(ui(), container, m_filter.swlist.description, m_filter.swlist.actual, menu_selector::SOFTWARE, l_sw_hover); + menu::stack_push(ui(), container(), m_filter.swlist.description, m_filter.swlist.actual, menu_selector::SOFTWARE, l_sw_hover); break; case UI_SW_TYPE: - menu::stack_push(ui(), container, m_filter.type.ui, m_filter.type.actual, menu_selector::SOFTWARE, l_sw_hover); + menu::stack_push(ui(), container(), m_filter.type.ui, m_filter.type.actual, menu_selector::SOFTWARE, l_sw_hover); break; case UI_SW_PUBLISHERS: - menu::stack_push(ui(), container, m_filter.publisher.ui, m_filter.publisher.actual, menu_selector::SOFTWARE, l_sw_hover); + menu::stack_push(ui(), container(), m_filter.publisher.ui, m_filter.publisher.actual, menu_selector::SOFTWARE, l_sw_hover); break; case UI_SW_CUSTOM: sw_filters::actual = l_sw_hover; - menu::stack_push(ui(), container, m_driver, m_filter); + menu::stack_push(ui(), container(), m_driver, m_filter); break; default: sw_filters::actual = l_sw_hover; @@ -688,7 +688,7 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot for (int line = 0; line < 3; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + ui().draw_text_full(container(), tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(width, maxwidth); @@ -707,7 +707,7 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot float y2 = origy1 - 3.0f * UI_BOX_TB_BORDER - tbarspace; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -717,8 +717,8 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot // draw the text within it for (int line = 0; line < 3; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container(), tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } @@ -835,10 +835,10 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot // get the size of the text maxwidth = origx2 - origx1; - for (auto & elem : tempbuf) + for (auto &elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container(), elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); } @@ -856,7 +856,7 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot y2 = origy2 + bottom; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, color); + ui().draw_outlined_box(container(), x1, y1, x2, y2, color); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -870,8 +870,8 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot // draw all lines for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container(), elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } } @@ -889,7 +889,9 @@ void menu_select_software::inkey_select(const event *menu_event) { s_bios biosname; if (!mopt.skip_bios_menu() && has_multiple_bios(ui_swinfo->driver, biosname)) - menu::stack_push(ui(), container, biosname, (void *)ui_swinfo->driver, false, true); + { + menu::stack_push(ui(), container(), biosname, (void *)ui_swinfo->driver, false, true); + } else { reselect_last::driver = ui_swinfo->driver->name; @@ -918,7 +920,7 @@ void menu_select_software::inkey_select(const event *menu_event) s_bios biosname; if (!mopt.skip_bios_menu() && has_multiple_bios(ui_swinfo->driver, biosname)) { - menu::stack_push(ui(), container, biosname, (void *)ui_swinfo, true, false); + menu::stack_push(ui(), container(), biosname, (void *)ui_swinfo, true, false); return; } else if (!mopt.skip_parts_menu() && swinfo->has_multiple_parts(ui_swinfo->interface.c_str())) @@ -934,7 +936,7 @@ void menu_select_software::inkey_select(const event *menu_event) parts.emplace(swpart.name(), menu_part_name); } } - menu::stack_push(ui(), container, parts, ui_swinfo); + menu::stack_push(ui(), container(), parts, ui_swinfo); return; } @@ -1427,7 +1429,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float } x2 = x1 + left_width + 2.0f * UI_BOX_LR_BORDER; - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -1455,8 +1457,10 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float } if (bgcolor != UI_TEXT_BG_COLOR) - ui().draw_textured_box(container, x1, y1, x2, y1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), - hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + { + ui().draw_textured_box(container(), x1, y1, x2, y1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), + hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + } float x1t = x1 + text_sign; if (afilter == UI_SW_CUSTOM) @@ -1488,8 +1492,8 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float convert_command_glyph(str); } - ui().draw_text_full(container, str.c_str(), x1t, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); + ui().draw_text_full(container(), str.c_str(), x1t, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); y1 += line_height; } @@ -1507,7 +1511,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float float ar_x1 = ar_x0 + lr_arrow_width; float ar_y1 = 0.5f * (y2 + y1) + 0.9f * space; - ui().draw_outlined_box(container, x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); + ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y) { @@ -1515,7 +1519,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float hover = HOVER_LPANEL_ARROW; } - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); return x2 + UI_BOX_LR_BORDER; } else @@ -1530,7 +1534,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float float ar_x1 = ar_x0 + lr_arrow_width; float ar_y1 = 0.5f * (y2 + y1) + 0.9f * space; - ui().draw_outlined_box(container, x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); + ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y) { @@ -1538,7 +1542,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float hover = HOVER_LPANEL_ARROW; } - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); return x2 + UI_BOX_LR_BORDER; } } @@ -1567,8 +1571,8 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o { float title_size = 0.0f; - ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, - mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &title_size, nullptr); + ui().draw_text_full(container(), _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &title_size, nullptr); title_size += 0.01f; rgb_t fgcolor = UI_TEXT_COLOR; @@ -1582,11 +1586,11 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o float middle = origx2 - origx1; if (bgcolor != UI_TEXT_BG_COLOR) - ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), - origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), + origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); - ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container(), _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); ui_globals::cur_sw_dats_view = 0; } else @@ -1599,8 +1603,8 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o for (auto & elem : t_text) { - ui().draw_text_full(container, elem.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr); + ui().draw_text_full(container(), elem.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr); txt_lenght += 0.01f; title_size = MAX(txt_lenght, title_size); } @@ -1621,11 +1625,11 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o title_size *= tmp_size; if (bgcolor != UI_TEXT_BG_COLOR) - ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), - origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + ui().draw_textured_box(container(), origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), + origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); - ui().draw_text_full(container, t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1, - ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); + ui().draw_text_full(container(), t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1, + ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::cur_sw_dats_view, 0, 1, title_size); } @@ -1648,12 +1652,12 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o if (buffer.empty()) { - ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, - ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container(), _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); return; } else - m_total_lines = ui().wrap_text(container, buffer.c_str(), origx1, origy1, origx2 - origx1 - (2.0f * gutter_width), xstart, xend, text_size); + m_total_lines = ui().wrap_text(container(), buffer.c_str(), origx1, origy1, origx2 - origx1 - (2.0f * gutter_width), xstart, xend, text_size); int r_visible_lines = floor((origy2 - oy1) / (line_height * text_size)); if (m_total_lines < r_visible_lines) @@ -1676,9 +1680,9 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o else if (r == r_visible_lines - 1 && itemline != m_total_lines - 1) draw_info_arrow(1, origx1, origx2, oy1, line_height, text_size, ud_arrow_width); else - ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, - ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, - nullptr, nullptr, text_size); + ui().draw_text_full(container(), tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, + nullptr, nullptr, text_size); oy1 += (line_height * text_size); } @@ -1871,7 +1875,7 @@ void menu_select_software::draw_right_panel(void *selectedref, float origx1, flo float ar_x1 = ar_x0 + lr_arrow_width; float ar_y1 = 0.5f * (origy2 + origy1) + 0.9f * space; - ui().draw_outlined_box(container, origx1, origy1, origx2, origy2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); + ui().draw_outlined_box(container(), origx1, origy1, origx2, origy2, rgb_t(0xEF, 0x12, 0x47, 0x7B)); if (mouse_hit && origx1 <= mouse_x && x2 > mouse_x && origy1 <= mouse_y && origy2 > mouse_y) { @@ -1881,11 +1885,11 @@ void menu_select_software::draw_right_panel(void *selectedref, float origx1, flo if (hide) { - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90 ^ ORIENTATION_FLIP_X); return; } - draw_arrow(container, ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); + draw_arrow(ar_x0, ar_y0, ar_x1, ar_y1, fgcolor, ROT90); origx1 = x2; origy1 = draw_right_box_title(origx1, origy1, origx2, origy2); @@ -1899,7 +1903,7 @@ void menu_select_software::draw_right_panel(void *selectedref, float origx1, flo // ctor //------------------------------------------------- -software_parts::software_parts(mame_ui_manager &mui, render_container *container, s_parts parts, ui_software_info *ui_info) : menu(mui, container) +software_parts::software_parts(mame_ui_manager &mui, render_container &container, s_parts parts, ui_software_info *ui_info) : menu(mui, container) { m_parts = parts; m_uiinfo = ui_info; @@ -1967,7 +1971,7 @@ void software_parts::handle() void software_parts::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Software part selection:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Software part selection:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -1979,7 +1983,7 @@ void software_parts::custom_render(void *selectedref, float top, float bottom, f float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -1987,7 +1991,7 @@ void software_parts::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Software part selection:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Software part selection:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } @@ -1995,7 +1999,7 @@ void software_parts::custom_render(void *selectedref, float top, float bottom, f // ctor //------------------------------------------------- -bios_selection::bios_selection(mame_ui_manager &mui, render_container *container, s_bios biosname, void *_driver, bool _software, bool _inlist) : menu(mui, container) +bios_selection::bios_selection(mame_ui_manager &mui, render_container &container, s_bios biosname, void *_driver, bool _software, bool _inlist) : menu(mui, container) { m_bios = biosname; m_driver = _driver; @@ -2080,7 +2084,7 @@ void bios_selection::handle() parts.emplace(swpart.name(), menu_part_name); } } - menu::stack_push(ui(), container, parts, ui_swinfo); + menu::stack_push(ui(), container(), parts, ui_swinfo); return; } std::string error_string; @@ -2108,7 +2112,7 @@ void bios_selection::handle() void bios_selection::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Bios selection:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Bios selection:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -2120,7 +2124,7 @@ void bios_selection::custom_render(void *selectedref, float top, float bottom, f float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -2128,7 +2132,7 @@ void bios_selection::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Bios selection:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Bios selection:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/selsoft.h b/src/frontend/mame/ui/selsoft.h index 9681a8c2068..5661be86c1c 100644 --- a/src/frontend/mame/ui/selsoft.h +++ b/src/frontend/mame/ui/selsoft.h @@ -23,20 +23,13 @@ using s_parts = std::unordered_map; class menu_select_software : public menu_select_launch { public: - menu_select_software(mame_ui_manager &mui, render_container *container, const game_driver *driver); + menu_select_software(mame_ui_manager &mui, render_container &container, const game_driver *driver); virtual ~menu_select_software() override; - virtual void populate() override; - virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; +protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; virtual bool menu_has_search_active() override { return (m_search[0] != 0); } - // draw left panel - virtual float draw_left_panel(float x1, float y1, float x2, float y2) override; - - // draw right panel - virtual void draw_right_panel(void *selectedref, float origx1, float origy1, float origx2, float origy2) override; - private: enum { VISIBLE_GAMES_IN_SEARCH = 200 }; char m_search[40]; @@ -45,6 +38,15 @@ private: s_filter m_filter; int highlight; + virtual void populate() override; + virtual void handle() override; + + // draw left panel + virtual float draw_left_panel(float x1, float y1, float x2, float y2) override; + + // draw right panel + virtual void draw_right_panel(void *selectedref, float origx1, float origy1, float origx2, float origy2) override; + ui_software_info *m_searchlist[VISIBLE_GAMES_IN_SEARCH + 1]; std::vector m_displaylist, m_tmp, m_sortedlist; std::vector m_swinfo; @@ -67,13 +69,16 @@ private: class software_parts : public menu { public: - software_parts(mame_ui_manager &mui, render_container *container, s_parts parts, ui_software_info *ui_info); + software_parts(mame_ui_manager &mui, render_container &container, s_parts parts, ui_software_info *ui_info); virtual ~software_parts() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: + virtual void populate() override; + virtual void handle() override; + ui_software_info *m_uiinfo; s_parts m_parts; }; @@ -81,13 +86,15 @@ private: class bios_selection : public menu { public: - bios_selection(mame_ui_manager &mui, render_container *container, s_bios biosname, void *driver, bool software, bool inlist); + bios_selection(mame_ui_manager &mui, render_container &container, s_bios biosname, void *driver, bool software, bool inlist); virtual ~bios_selection() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: + virtual void populate() override; + virtual void handle() override; void *m_driver; bool m_software, m_inlist; diff --git a/src/frontend/mame/ui/simpleselgame.cpp b/src/frontend/mame/ui/simpleselgame.cpp index 4526676a960..9fe101b4d82 100644 --- a/src/frontend/mame/ui/simpleselgame.cpp +++ b/src/frontend/mame/ui/simpleselgame.cpp @@ -30,7 +30,7 @@ namespace ui { // ctor //------------------------------------------------- -simple_menu_select_game::simple_menu_select_game(mame_ui_manager &mui, render_container *container, const char *gamename) : menu(mui, container), m_driverlist(driver_list::total() + 1) +simple_menu_select_game::simple_menu_select_game(mame_ui_manager &mui, render_container &container, const char *gamename) : menu(mui, container), m_driverlist(driver_list::total() + 1) { build_driver_list(); if(gamename) @@ -132,7 +132,7 @@ void simple_menu_select_game::handle() // if we're in an error state, overlay an error message if (m_error) - ui().draw_text_box(container, + ui().draw_text_box(container(), "The selected game is missing one or more required ROM or CHD images. " "Please select a different game.\n\nPress any key to continue.", ui::text_layout::CENTER, 0.5f, 0.5f, UI_RED_COLOR); @@ -149,7 +149,7 @@ void simple_menu_select_game::inkey_select(const event *menu_event) // special case for configure inputs if ((FPTR)driver == 1) - menu::stack_push(ui(), container); + menu::stack_push(ui(), container()); // anything else is a driver else { @@ -297,7 +297,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float tempbuf[0] = _("Type name or select: (random)"); // get the size of the text - ui().draw_text_full(container, tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(width, origx2 - origx1); @@ -309,7 +309,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -317,7 +317,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // determine the text to render below @@ -387,7 +387,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float maxwidth = origx2 - origx1; for (line = 0; line < 4; line++) { - ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -407,7 +407,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float color = UI_YELLOW_COLOR; if (driver != nullptr && (driver->flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION)) != 0) color = UI_RED_COLOR; - ui().draw_outlined_box(container, x1, y1, x2, y2, color); + ui().draw_outlined_box(container(), x1, y1, x2, y2, color); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -417,7 +417,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float // draw all lines for (line = 0; line < 4; line++) { - ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 += ui().get_line_height(); } @@ -429,7 +429,7 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float // select menu to be visible and inescapable //------------------------------------------------- -void simple_menu_select_game::force_game_select(mame_ui_manager &mui, render_container *container) +void simple_menu_select_game::force_game_select(mame_ui_manager &mui, render_container &container) { char *gamename = (char *)mui.machine().options().system_name(); diff --git a/src/frontend/mame/ui/simpleselgame.h b/src/frontend/mame/ui/simpleselgame.h index 8df2a047f9a..bdd3b92872c 100644 --- a/src/frontend/mame/ui/simpleselgame.h +++ b/src/frontend/mame/ui/simpleselgame.h @@ -20,31 +20,35 @@ class driver_enumerator; namespace ui { class simple_menu_select_game : public menu { public: - simple_menu_select_game(mame_ui_manager &mui, render_container *container, const char *gamename); + simple_menu_select_game(mame_ui_manager &mui, render_container &container, const char *gamename); virtual ~simple_menu_select_game(); - virtual void populate() override; - virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; // force game select menu - static void force_game_select(mame_ui_manager &mui, render_container *container); + static void force_game_select(mame_ui_manager &mui, render_container &container); +protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; virtual bool menu_has_search_active() override { return (m_search[0] != 0); } + private: - // internal state enum { VISIBLE_GAMES_IN_LIST = 15 }; - UINT8 m_error; - bool m_rerandomize; - char m_search[40]; - int m_matchlist[VISIBLE_GAMES_IN_LIST]; - std::vector m_driverlist; - std::unique_ptr m_drivlist; + + virtual void populate() override; + virtual void handle() override; // internal methods void build_driver_list(); void inkey_select(const event *menu_event); void inkey_cancel(); void inkey_special(const event *menu_event); + + // internal state + UINT8 m_error; + bool m_rerandomize; + char m_search[40]; + int m_matchlist[VISIBLE_GAMES_IN_LIST]; + std::vector m_driverlist; + std::unique_ptr m_drivlist; }; } // namespace ui diff --git a/src/frontend/mame/ui/sliders.cpp b/src/frontend/mame/ui/sliders.cpp index 2cf36b9c85d..a4e66b74802 100644 --- a/src/frontend/mame/ui/sliders.cpp +++ b/src/frontend/mame/ui/sliders.cpp @@ -17,7 +17,7 @@ #include "ui/slider.h" namespace ui { -menu_sliders::menu_sliders(mame_ui_manager &mui, render_container *container, bool menuless_mode) : menu(mui, container) +menu_sliders::menu_sliders(mame_ui_manager &mui, render_container &container, bool menuless_mode) : menu(mui, container) { m_menuless_mode = m_hidden = menuless_mode; } @@ -220,11 +220,11 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo x2 = 1.0f - UI_BOX_LR_BORDER; // draw extra menu area - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR); y1 += UI_BOX_TB_BORDER; // determine the text height - ui().draw_text_full(container, tempstring.c_str(), 0, 0, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, + ui().draw_text_full(container(), tempstring.c_str(), 0, 0, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, nullptr, &text_height); // draw the thermometer @@ -240,18 +240,18 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo current_x = bar_left + bar_width * percentage; // fill in the percentage - container->add_rect(bar_left, bar_top, current_x, bar_bottom, UI_SLIDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_rect(bar_left, bar_top, current_x, bar_bottom, UI_SLIDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // draw the top and bottom lines - container->add_line(bar_left, bar_top, bar_left + bar_width, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - container->add_line(bar_left, bar_bottom, bar_left + bar_width, bar_bottom, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(bar_left, bar_top, bar_left + bar_width, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(bar_left, bar_bottom, bar_left + bar_width, bar_bottom, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // draw default marker - container->add_line(default_x, bar_area_top, default_x, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - container->add_line(default_x, bar_bottom, default_x, bar_area_top + bar_area_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(default_x, bar_area_top, default_x, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_line(default_x, bar_bottom, default_x, bar_area_top + bar_area_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // draw the actual text - ui().draw_text_full(container, tempstring.c_str(), x1 + UI_BOX_LR_BORDER, y1 + line_height, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, + ui().draw_text_full(container(), tempstring.c_str(), x1 + UI_BOX_LR_BORDER, y1 + line_height, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, ui::text_layout::CENTER, ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, &text_height); } } @@ -263,7 +263,7 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo // standard menu handler //------------------------------------------------- -UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui) +UINT32 menu_sliders::ui_handler(render_container &container, mame_ui_manager &mui) { UINT32 result; diff --git a/src/frontend/mame/ui/sliders.h b/src/frontend/mame/ui/sliders.h index 147674b7375..6e3affb53b8 100644 --- a/src/frontend/mame/ui/sliders.h +++ b/src/frontend/mame/ui/sliders.h @@ -19,20 +19,23 @@ namespace ui { class menu_sliders : public menu { public: - menu_sliders(mame_ui_manager &mui, render_container *container, bool menuless_mode = false); + menu_sliders(mame_ui_manager &mui, render_container &container, bool menuless_mode = false); virtual ~menu_sliders() override; - virtual void populate() override; - virtual void handle() override; - virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; + static UINT32 ui_handler(render_container &container, mame_ui_manager &mui); - static UINT32 ui_handler(render_container *container, mame_ui_manager &mui); +protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: enum { INPUT_GROUPS, INPUT_SPECIFIC, }; + + virtual void populate() override; + virtual void handle() override; + bool m_menuless_mode; bool m_hidden; }; diff --git a/src/frontend/mame/ui/slotopt.cpp b/src/frontend/mame/ui/slotopt.cpp index d6b1a438c30..ae7e2b8633e 100644 --- a/src/frontend/mame/ui/slotopt.cpp +++ b/src/frontend/mame/ui/slotopt.cpp @@ -147,7 +147,7 @@ void menu_slot_devices::set_slot_device(device_slot_interface &slot, const char slot device menu -------------------------------------------------*/ -menu_slot_devices::menu_slot_devices(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_slot_devices::menu_slot_devices(mame_ui_manager &mui, render_container &container) : menu(mui, container) { } @@ -206,7 +206,7 @@ void menu_slot_devices::handle() device_slot_interface *slot = (device_slot_interface *)menu_event->itemref; device_slot_option *option = slot_get_current_option(*slot); if (option) - menu::stack_push(ui(), container, slot, option); + menu::stack_push(ui(), container(), slot, option); } } } diff --git a/src/frontend/mame/ui/slotopt.h b/src/frontend/mame/ui/slotopt.h index e1883fe33d7..faca9fc236f 100644 --- a/src/frontend/mame/ui/slotopt.h +++ b/src/frontend/mame/ui/slotopt.h @@ -20,12 +20,13 @@ namespace ui { class menu_slot_devices : public menu { public: - menu_slot_devices(mame_ui_manager &mui, render_container *container); + menu_slot_devices(mame_ui_manager &mui, render_container &container); virtual ~menu_slot_devices() override; + +private: virtual void populate() override; virtual void handle() override; -private: device_slot_option *slot_get_current_option(device_slot_interface &slot); int slot_get_current_index(device_slot_interface &slot); int slot_get_length(device_slot_interface &slot); diff --git a/src/frontend/mame/ui/sndmenu.cpp b/src/frontend/mame/ui/sndmenu.cpp index 55e62062512..869ec533050 100644 --- a/src/frontend/mame/ui/sndmenu.cpp +++ b/src/frontend/mame/ui/sndmenu.cpp @@ -21,7 +21,7 @@ const int menu_sound_options::m_sound_rate[] = { 11025, 22050, 44100, 48000 }; // ctor //------------------------------------------------- -menu_sound_options::menu_sound_options(mame_ui_manager &mui, render_container *container) : menu(mui, container) +menu_sound_options::menu_sound_options(mame_ui_manager &mui, render_container &container) : menu(mui, container) { osd_options &options = downcast(mui.machine().options()); @@ -101,7 +101,7 @@ void menu_sound_options::handle() for (int index = 0; index < total; index++) s_sel[index] = std::to_string(m_sound_rate[index]); - menu::stack_push(ui(), container, s_sel, m_cur_rates); + menu::stack_push(ui(), container(), s_sel, m_cur_rates); } break; @@ -126,7 +126,7 @@ void menu_sound_options::handle() void menu_sound_options::populate() { - UINT32 arrow_flags = get_arrow_flags(0, ARRAY_LENGTH(m_sound_rate) - 1, m_cur_rates); + UINT32 arrow_flags = get_arrow_flags(UINT16(0), UINT16(ARRAY_LENGTH(m_sound_rate) - 1), m_cur_rates); m_sample_rate = m_sound_rate[m_cur_rates]; // add options items @@ -145,7 +145,7 @@ void menu_sound_options::populate() void menu_sound_options::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Sound Options"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Sound Options"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -157,7 +157,7 @@ void menu_sound_options::custom_render(void *selectedref, float top, float botto float y2 = origy1 - UI_BOX_TB_BORDER; // draw a box - ui().draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR); + ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_GREEN_COLOR); // take off the borders x1 += UI_BOX_LR_BORDER; @@ -165,7 +165,7 @@ void menu_sound_options::custom_render(void *selectedref, float top, float botto y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Sound Options"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + ui().draw_text_full(container(), _("Sound Options"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/sndmenu.h b/src/frontend/mame/ui/sndmenu.h index 171e4016759..19e110bbc7e 100644 --- a/src/frontend/mame/ui/sndmenu.h +++ b/src/frontend/mame/ui/sndmenu.h @@ -22,10 +22,10 @@ namespace ui { class menu_sound_options : public menu { public: - menu_sound_options(mame_ui_manager &mui, render_container *container); + menu_sound_options(mame_ui_manager &mui, render_container &container); virtual ~menu_sound_options() override; - virtual void populate() override; - virtual void handle() override; + +protected: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: @@ -36,6 +36,9 @@ private: ENABLE_SAMPLES }; + virtual void populate() override; + virtual void handle() override; + UINT16 m_cur_rates; static const int m_sound_rate[]; int m_sample_rate; diff --git a/src/frontend/mame/ui/submenu.cpp b/src/frontend/mame/ui/submenu.cpp index cdecec0ca80..9f13c6cafec 100644 --- a/src/frontend/mame/ui/submenu.cpp +++ b/src/frontend/mame/ui/submenu.cpp @@ -16,8 +16,9 @@ #include + namespace ui { -std::vector submenu::misc_options = { +std::vector const submenu::misc_options = { { submenu::option_type::HEAD, __("Miscellaneous Options") }, { submenu::option_type::UI, __("Re-select last machine played"), OPTION_REMEMBER_LAST }, { submenu::option_type::UI, __("Enlarge images in the right panel"), OPTION_ENLARGE_SNAPS }, @@ -34,7 +35,7 @@ std::vector submenu::misc_options = { { submenu::option_type::UI, __("Hide romless machine from available list"),OPTION_HIDE_ROMLESS }, }; -std::vector submenu::advanced_options = { +std::vector const submenu::advanced_options = { { submenu::option_type::HEAD, __("Advanced Options") }, { submenu::option_type::HEAD, __("Performance Options") }, { submenu::option_type::EMU, __("Auto frame skip"), OPTION_AUTOFRAMESKIP }, @@ -83,7 +84,7 @@ std::vector submenu::advanced_options = { { submenu::option_type::EMU, __("Coin impulse"), OPTION_COIN_IMPULSE }, }; -std::vector submenu::control_options = { +std::vector const submenu::control_options = { { submenu::option_type::HEAD, __("Device Mapping") }, { submenu::option_type::EMU, __("Lightgun Device Assignment"), OPTION_LIGHTGUN_DEVICE }, { submenu::option_type::EMU, __("Trackball Device Assignment"), OPTION_TRACKBALL_DEVICE }, @@ -95,7 +96,7 @@ std::vector submenu::control_options = { { submenu::option_type::EMU, __("Mouse Device Assignment"), OPTION_MOUSE_DEVICE } }; -std::vector submenu::video_options = { +std::vector const submenu::video_options = { { submenu::option_type::HEAD, __("Video Options") }, { submenu::option_type::OSD, __("Video Mode"), OSDOPTION_VIDEO }, { submenu::option_type::OSD, __("Number Of Screens"), OSDOPTION_NUMSCREENS }, @@ -113,7 +114,7 @@ std::vector submenu::video_options = { { submenu::option_type::OSD, __("Wait Vertical Sync"), OSDOPTION_WAITVSYNC } }; -//std::vector submenu::export_options = { +//std::vector const submenu::export_options = { // { ui_submenu::option_type::COMMAND, __("Export XML format (like -listxml)"), "exportxml" }, // { ui_submenu::option_type::COMMAND, __("Export TXT format (like -listfull)"), "exporttxt" }, //}; @@ -123,9 +124,14 @@ std::vector submenu::video_options = { // ctor / dtor //------------------------------------------------- -submenu::submenu(mame_ui_manager &mui, render_container *container, std::vector