From f494a0002471e5c5f905059c38b47995a7342c9f Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Tue, 12 Oct 2021 03:56:42 +1100 Subject: More UI enhancements/cleanup: Made the headings in the info viewer clickable, so you can switch between DATs with a mouse or trackball (or maybe a lightgun if that's your thing). Made the UI red/yellow/green traffic light status colours less dirty-looking. The "yellow" is more of an amber-brown than a cat puke brown now, and red is brighter. The contrast with white text is definitely fine for red and green, but it's reduced a bit for yellow. However there's a limit to how dark you can make a yellow or orange colour before it looks muddy. Reduced the number of places the UI uses red for things that aren't errors. The error colour should be used sparingly, for actual errors. Improved the colour swatch display in the RGBA colour editor. It now has black/white underlay so alpha effects are move obvious. Also fixed a bug preventing the channels being run down to zero. Fixed double-clicking configure machine causing MAME to exit from the system selection menu. Also slightly adjusted the colours of the toolbar buttons again. --- src/frontend/mame/ui/custui.cpp | 189 ++++++++++++++++---------------------- src/frontend/mame/ui/datmenu.cpp | 82 ++++++++++++++--- src/frontend/mame/ui/datmenu.h | 1 + src/frontend/mame/ui/dirmenu.cpp | 2 +- src/frontend/mame/ui/selector.cpp | 2 +- src/frontend/mame/ui/selmenu.cpp | 6 -- src/frontend/mame/ui/submenu.cpp | 2 +- src/frontend/mame/ui/toolbar.ipp | 6 +- src/frontend/mame/ui/ui.h | 6 +- 9 files changed, 159 insertions(+), 137 deletions(-) diff --git a/src/frontend/mame/ui/custui.cpp b/src/frontend/mame/ui/custui.cpp index 9b06465f9f8..d926394878c 100644 --- a/src/frontend/mame/ui/custui.cpp +++ b/src/frontend/mame/ui/custui.cpp @@ -623,7 +623,7 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f std::begin(bottomtext), std::end(bottomtext), origx1, origx2, origy2 + ui().box_tb_border(), origy2 + bottom, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, false, - ui().colors().text_color(), UI_RED_COLOR, 1.0f); + ui().colors().text_color(), ui().colors().background_color(), 1.0f); // compute maxwidth char const *const topbuf = _("Menu Preview"); @@ -751,8 +751,6 @@ menu_rgb_ui::~menu_rgb_ui() void menu_rgb_ui::handle() { - bool changed = false; - // process the menu const event *menu_event; @@ -761,103 +759,63 @@ void menu_rgb_ui::handle() else menu_event = process(PROCESS_ONLYCHAR); - if (menu_event != nullptr && menu_event->itemref != nullptr) + if (menu_event && menu_event->itemref != nullptr) { - switch ((uintptr_t)menu_event->itemref) + bool changed = false; + switch (menu_event->iptkey) { - case RGB_ALPHA: - if (menu_event->iptkey == IPT_UI_LEFT && m_color->a() > 1) - { - m_color->set_a(m_color->a() - 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_RIGHT && m_color->a() < 255) - { - m_color->set_a(m_color->a() + 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_SELECT || menu_event->iptkey == IPT_SPECIAL) - { - inkey_special(menu_event); - changed = true; - } - - break; - - case RGB_RED: - if (menu_event->iptkey == IPT_UI_LEFT && m_color->r() > 1) - { - m_color->set_r(m_color->r() - 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_RIGHT && m_color->r() < 255) - { - m_color->set_r(m_color->r() + 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_SELECT || menu_event->iptkey == IPT_SPECIAL) - { - inkey_special(menu_event); - changed = true; - } - - break; - - case RGB_GREEN: - if (menu_event->iptkey == IPT_UI_LEFT && m_color->g() > 1) - { - m_color->set_g(m_color->g() - 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_RIGHT && m_color->g() < 255) - { - m_color->set_g(m_color->g() + 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_SELECT || menu_event->iptkey == IPT_SPECIAL) - { - inkey_special(menu_event); - changed = true; - } - - break; - - case RGB_BLUE: - if (menu_event->iptkey == IPT_UI_LEFT && m_color->b() > 1) - { - m_color->set_b(m_color->b() - 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_RIGHT && m_color->b() < 255) - { - m_color->set_b(m_color->b() + 1); - changed = true; - } - - else if (menu_event->iptkey == IPT_UI_SELECT || menu_event->iptkey == IPT_SPECIAL) + case IPT_UI_LEFT: + case IPT_UI_RIGHT: + { + int updated = (IPT_UI_LEFT == menu_event->iptkey) ? -1 : 1; + switch (uintptr_t(menu_event->itemref)) { - inkey_special(menu_event); - changed = true; + case RGB_ALPHA: + updated += m_color->a(); + if ((0 <= updated) && (255 >= updated)) + { + m_color->set_a(updated); + changed = true; + } + break; + case RGB_RED: + updated += m_color->r(); + if ((0 <= updated) && (255 >= updated)) + { + m_color->set_r(updated); + changed = true; + } + break; + case RGB_GREEN: + updated += m_color->g(); + if ((0 <= updated) && (255 >= updated)) + { + m_color->set_g(updated); + changed = true; + } + break; + case RGB_BLUE: + updated += m_color->b(); + if ((0 <= updated) && (255 >= updated)) + { + m_color->set_b(updated); + changed = true; + } + break; } + } + break; - break; - - case PALETTE_CHOOSE: - if (menu_event->iptkey == IPT_UI_SELECT) - menu::stack_push(ui(), container(), *m_color); - break; + case IPT_UI_SELECT: + case IPT_SPECIAL: + inkey_special(menu_event); + changed = true; + break; } - } - if (changed) - reset(reset_options::REMEMBER_REF); + if (changed) + reset(reset_options::REMEMBER_REF); + } } //------------------------------------------------- @@ -940,12 +898,21 @@ 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(), m_title, x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color()); - - std::string sampletxt(_("Color preview =")); - ui().draw_text_full(container(), sampletxt, 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); + ui().draw_text_full( + container(), + m_title, + x1, y1, x2 - x1, + ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color()); + + std::string sampletxt(_("Color preview:")); + ui().draw_text_full( + container(), + sampletxt, + 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); width += 2 * lr_border; maxwidth = std::max(origx2 - origx1, width); @@ -955,22 +922,28 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa y1 = origy2 + ui().box_tb_border(); y2 = origy2 + bottom; - // draw a box - ui().draw_outlined_box(container(), x1, y1, x1 + width, y2, UI_RED_COLOR); + // draw a box - force black to ensure the text is legible + ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t::black()); // take off the borders x1 += lr_border; y1 += ui().box_tb_border(); - // draw the normal text - ui().draw_text_full(container(), sampletxt, x1, y1, width - lr_border, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, rgb_t::white(), rgb_t::black()); + // draw the text label - force white to ensure it's legible + ui().draw_text_full( + container(), + sampletxt, + x1, y1, width - lr_border, + ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, rgb_t::white(), rgb_t::black()); - x1 += width + lr_border; - y1 -= ui().box_tb_border(); + x1 += width + (lr_border * 2.0f); + x2 -= lr_border; + y2 -= ui().box_tb_border(); - // draw color box - ui().draw_outlined_box(container(), x1, y1, x2, y2, *m_color); + // add white under half the sample swatch to make alpha effects visible + container().add_rect((x1 + x2) * 0.5f, y1, x2, y2, rgb_t::white(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container().add_rect(x1, y1, x2, y2, *m_color, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } //------------------------------------------------- diff --git a/src/frontend/mame/ui/datmenu.cpp b/src/frontend/mame/ui/datmenu.cpp index 6dabbc09223..f28651afdb5 100644 --- a/src/frontend/mame/ui/datmenu.cpp +++ b/src/frontend/mame/ui/datmenu.cpp @@ -317,14 +317,23 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f x2 -= lr_border; y1 += ui().box_tb_border(); - ui().draw_text_full(container(), driver, x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, - mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color(), nullptr, nullptr); + ui().draw_text_full( + container(), + driver, + x1, y1, x2 - x1, + ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color()); maxwidth = 0; - for (auto & elem : m_items_list) + for (auto const &elem : m_items_list) { - ui().draw_text_full(container(), elem.label, 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.label, + 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; } @@ -344,18 +353,38 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f // draw the text within it int x = 0; - for (auto & elem : m_items_list) + for (auto const &elem : m_items_list) { x1 += space; - rgb_t fcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0x00) : ui().colors().text_color(); - rgb_t bcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0xff) : ui().colors().text_bg_color(); - ui().draw_text_full(container(), elem.label, x1, y1, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NONE, fcolor, bcolor, &width, nullptr); + if (mouse_in_rect(x1 - (space / 2), y1, x1 + width + (space / 2), y2)) + set_hover(HOVER_INFO_TEXT + 1 + x); + + rgb_t const fcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0x00) : ui().colors().text_color(); + rgb_t const bcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0xff) : ui().colors().text_bg_color(); + ui().draw_text_full( + container(), + elem.label, + x1, y1, 1.0f, + ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NONE, fcolor, bcolor, + &width, nullptr); if (bcolor != ui().colors().text_bg_color()) - 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(1)); + { + 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(1)); + } - ui().draw_text_full(container(), elem.label, 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, + x1, y1, 1.0f, + ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fcolor, bcolor, + &width, nullptr); x1 += width + space; ++x; } @@ -382,8 +411,33 @@ 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, x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, - mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color(), nullptr, nullptr); + ui().draw_text_full( + container(), + revision, + x1, y1, x2 - x1, + ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, ui().colors().text_color(), ui().colors().text_bg_color()); +} + +//------------------------------------------------- +// load data from DATs +//------------------------------------------------- + +bool menu_dats_view::custom_mouse_down() +{ + if ((hover() > HOVER_INFO_TEXT) && ((hover() - HOVER_INFO_TEXT) <= m_items_list.size())) + { + if ((hover() - HOVER_INFO_TEXT - 1) != m_actual) + { + m_actual = hover() - HOVER_INFO_TEXT - 1; + reset(reset_options::SELECT_FIRST); + } + return true; + } + else + { + return false; + } } //------------------------------------------------- diff --git a/src/frontend/mame/ui/datmenu.h b/src/frontend/mame/ui/datmenu.h index 3dc60b16c93..0c7fd9c22e7 100644 --- a/src/frontend/mame/ui/datmenu.h +++ b/src/frontend/mame/ui/datmenu.h @@ -37,6 +37,7 @@ public: 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: // draw dats menu diff --git a/src/frontend/mame/ui/dirmenu.cpp b/src/frontend/mame/ui/dirmenu.cpp index 85ca2fc085b..1fe6682b123 100644 --- a/src/frontend/mame/ui/dirmenu.cpp +++ b/src/frontend/mame/ui/dirmenu.cpp @@ -434,7 +434,7 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b std::begin(bottomtext), std::end(bottomtext), origx1, origx2, origy2 + ui().box_tb_border(), origy2 + bottom, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, false, - ui().colors().text_color(), UI_RED_COLOR, 1.0f); + ui().colors().text_color(), ui().colors().background_color(), 1.0f); } /************************************************** diff --git a/src/frontend/mame/ui/selector.cpp b/src/frontend/mame/ui/selector.cpp index 24de93987c8..96657541e44 100644 --- a/src/frontend/mame/ui/selector.cpp +++ b/src/frontend/mame/ui/selector.cpp @@ -128,7 +128,7 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl std::begin(tempbuf), std::end(tempbuf), origx1, origx2, origy2 + ui().box_tb_border(), origy2 + bottom, ui::text_layout::CENTER, ui::text_layout::NEVER, false, - ui().colors().text_color(), UI_RED_COLOR, 1.0f); + ui().colors().text_color(), ui().colors().background_color(), 1.0f); } //------------------------------------------------- diff --git a/src/frontend/mame/ui/selmenu.cpp b/src/frontend/mame/ui/selmenu.cpp index 4aa29bca89f..f755fd1d4e2 100644 --- a/src/frontend/mame/ui/selmenu.cpp +++ b/src/frontend/mame/ui/selmenu.cpp @@ -1799,12 +1799,6 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev) set_selected_index(hover()); ev.iptkey = IPT_UI_SELECT; } - - if (is_last_selected()) - { - ev.iptkey = IPT_UI_CANCEL; - stack_pop(); - } stop = true; break; diff --git a/src/frontend/mame/ui/submenu.cpp b/src/frontend/mame/ui/submenu.cpp index 5e6e0cc4152..d6d237cabd3 100644 --- a/src/frontend/mame/ui/submenu.cpp +++ b/src/frontend/mame/ui/submenu.cpp @@ -456,7 +456,7 @@ void submenu::custom_render(void *selectedref, float top, float bottom, float or std::begin(bottomtext), std::end(bottomtext), origx1, origx2, origy2 + ui().box_tb_border(), origy2 + bottom, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, false, - ui().colors().text_color(), UI_RED_COLOR, 1.0f); + ui().colors().text_color(), ui().colors().background_color(), 1.0f); } } } diff --git a/src/frontend/mame/ui/toolbar.ipp b/src/frontend/mame/ui/toolbar.ipp index 40400ea3feb..daecebddd12 100644 --- a/src/frontend/mame/ui/toolbar.ipp +++ b/src/frontend/mame/ui/toolbar.ipp @@ -37,21 +37,21 @@ char const *const toolbar_icons_svg[] = { // info u8"" "" - "" + "" "" "" "", // previous menu u8"" "" - "" + "" "" "" "", // exit u8"" "" - "" + "" "" "" "" }; diff --git a/src/frontend/mame/ui/ui.h b/src/frontend/mame/ui/ui.h index 633d3c476f4..9607ca24a91 100644 --- a/src/frontend/mame/ui/ui.h +++ b/src/frontend/mame/ui/ui.h @@ -54,9 +54,9 @@ class laserdisc_device; #define UI_LINE_WIDTH (1.0f / 500.0f) /* handy colors */ -#define UI_GREEN_COLOR rgb_t(0xef,0x10,0x60,0x10) -#define UI_YELLOW_COLOR rgb_t(0xef,0x60,0x60,0x10) -#define UI_RED_COLOR rgb_t(0xf0,0x60,0x10,0x10) +#define UI_GREEN_COLOR rgb_t(0xef,0x0a,0x66,0x0a) +#define UI_YELLOW_COLOR rgb_t(0xef,0xcc,0x7a,0x28) +#define UI_RED_COLOR rgb_t(0xef,0xcc,0x14,0x14) /* cancel return value for a UI handler */ #define UI_HANDLER_CANCEL ((uint32_t)~0) -- cgit v1.2.3