diff options
Diffstat (limited to 'src/frontend/mame/ui/selmenu.cpp')
-rw-r--r-- | src/frontend/mame/ui/selmenu.cpp | 439 |
1 files changed, 166 insertions, 273 deletions
diff --git a/src/frontend/mame/ui/selmenu.cpp b/src/frontend/mame/ui/selmenu.cpp index 306c2cad1f0..90dd7af789f 100644 --- a/src/frontend/mame/ui/selmenu.cpp +++ b/src/frontend/mame/ui/selmenu.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Vas Crabb +// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods /*************************************************************************** ui/selmenu.cpp @@ -12,6 +12,7 @@ #include "ui/selmenu.h" #include "ui/datmenu.h" +#include "ui/icorender.h" #include "ui/info.h" #include "ui/inifile.h" @@ -44,28 +45,6 @@ namespace ui { namespace { -enum -{ - FIRST_VIEW = 0, - SNAPSHOT_VIEW = FIRST_VIEW, - CABINETS_VIEW, - CPANELS_VIEW, - PCBS_VIEW, - FLYERS_VIEW, - TITLES_VIEW, - ENDS_VIEW, - ARTPREV_VIEW, - BOSSES_VIEW, - LOGOS_VIEW, - VERSUS_VIEW, - GAMEOVER_VIEW, - HOWTO_VIEW, - SCORES_VIEW, - SELECT_VIEW, - MARQUEES_VIEW, - LAST_VIEW = MARQUEES_VIEW -}; - std::pair<char const *, char const *> const arts_info[] = { { __("Snapshots"), OPTION_SNAPSHOT_DIRECTORY }, @@ -95,8 +74,6 @@ char const *const hover_msg[] = { } // anonymous namespace -constexpr std::size_t menu_select_launch::MAX_VISIBLE_SEARCH; // stupid non-inline semantics - class menu_select_launch::software_parts : public menu { @@ -182,7 +159,7 @@ void menu_select_launch::reselect_last::set_software(game_driver const &driver, s_driver = driver.name; if (swinfo.startempty) { - // FIXME: magic strings are bad... + // magic strings are bad... s_software = "[Start empty]"; s_swlist.clear(); } @@ -375,26 +352,27 @@ void menu_select_launch::bios_selection::custom_render(void *selectedref, float menu_select_launch::cache::cache(running_machine &machine) : m_snapx_bitmap(std::make_unique<bitmap_argb32>(0, 0)) - , m_snapx_texture(nullptr, machine.render()) + , m_snapx_texture() , m_snapx_driver(nullptr) , m_snapx_software(nullptr) , m_no_avail_bitmap(256, 256) , m_star_bitmap(32, 32) - , m_star_texture(nullptr, machine.render()) + , m_star_texture() , m_toolbar_bitmap() , m_sw_toolbar_bitmap() , m_toolbar_texture() , m_sw_toolbar_texture() { render_manager &render(machine.render()); + auto const texture_free([&render](render_texture *texture) { render.texture_free(texture); }); // create a texture for snapshot - m_snapx_texture.reset(render.texture_alloc(render_texture::hq_scale)); + m_snapx_texture = texture_ptr(render.texture_alloc(render_texture::hq_scale), texture_free); std::memcpy(&m_no_avail_bitmap.pix32(0), no_avail_bmp, 256 * 256 * sizeof(uint32_t)); std::memcpy(&m_star_bitmap.pix32(0), favorite_star_bmp, 32 * 32 * sizeof(uint32_t)); - m_star_texture.reset(render.texture_alloc()); + 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); @@ -406,8 +384,8 @@ menu_select_launch::cache::cache(running_machine &machine) { m_toolbar_bitmap.emplace_back(32, 32); m_sw_toolbar_bitmap.emplace_back(32, 32); - m_toolbar_texture.emplace_back(render.texture_alloc(), render); - m_sw_toolbar_texture.emplace_back(render.texture_alloc(), render); + m_toolbar_texture.emplace_back(texture_ptr(render.texture_alloc(), texture_free)); + m_sw_toolbar_texture.emplace_back(texture_ptr(render.texture_alloc(), texture_free)); std::memcpy(&m_toolbar_bitmap.back().pix32(0), toolbar_bitmap_bmp[i], 32 * 32 * sizeof(uint32_t)); if (m_toolbar_bitmap.back().valid()) @@ -459,11 +437,8 @@ menu_select_launch::menu_select_launch(mame_ui_manager &mui, render_container &c , m_pressed(false) , m_repeat(0) , m_right_visible_lines(0) - , m_has_icons(false) - , m_switch_image(false) - , m_default_image(true) - , m_image_view(FIRST_VIEW) , m_flags(256) + , m_icons(MAX_ICONS_RENDER) { // set up persistent cache for machine run { @@ -484,28 +459,6 @@ menu_select_launch::menu_select_launch(mame_ui_manager &mui, render_container &c } -void menu_select_launch::next_image_view() -{ - if (LAST_VIEW > m_image_view) - { - ++m_image_view; - set_switch_image(); - m_default_image = false; - } -} - - -void menu_select_launch::previous_image_view() -{ - if (FIRST_VIEW < m_image_view) - { - --m_image_view; - set_switch_image(); - m_default_image = false; - } -} - - bool menu_select_launch::dismiss_error() { bool const result = m_ui_error; @@ -609,7 +562,7 @@ void menu_select_launch::custom_render(void *selectedref, float top, float botto rgb_t color = UI_BACKGROUND_COLOR; if (swinfo && ((swinfo->startempty != 1) || !driver)) { - isstar = mame_machine_manager::instance()->favorite().is_favorite_system_software(*swinfo); + isstar = mame_machine_manager::instance()->favorite().isgame_favorite(*swinfo); // first line is long name or system tempbuf[0] = make_software_description(*swinfo); @@ -645,7 +598,7 @@ void menu_select_launch::custom_render(void *selectedref, float top, float botto } else if (driver) { - isstar = mame_machine_manager::instance()->favorite().is_favorite_system(*driver); + isstar = mame_machine_manager::instance()->favorite().isgame_favorite(driver); // first line is game description/game name tempbuf[0] = make_driver_description(*driver); @@ -991,150 +944,6 @@ float menu_select_launch::draw_left_panel( } -//------------------------------------------------- -// icon helpers -//------------------------------------------------- - -void menu_select_launch::check_for_icons(char const *listname) -{ - // only ever set the flag, never clear it - if (m_has_icons) - return; - - // iterate over configured icon paths - path_iterator paths(ui().options().icons_directory()); - std::string current; - while (paths.next(current)) - { - // if we're doing a software list, append it to the configured path - if (listname) - { - if (!current.empty() && !util::is_directory_separator(current.back())) - current.append(PATH_SEPARATOR); - current.append(listname); - } - osd_printf_verbose("Checking for icons in directory %s\n", current.c_str()); - - // open and walk the directory - osd::directory::ptr const dir(osd::directory::open(current)); - if (dir) - { - // this could be improved in many ways - it's just a rough go/no-go - osd::directory::entry const *entry; - while ((entry = dir->read()) != nullptr) - { - current = entry->name; - std::string::size_type const found(current.rfind(".ico")); - if ((std::string::npos != found) && ((current.length() - 4) == found)) - { - osd_printf_verbose("Entry %s is a candidate icon file\n", entry->name); - m_has_icons = true; - return; - } - else if (("icons" == current) || (current.find("icons.") == 0U)) - { - osd_printf_verbose("Entry %s is a candidate icon collection\n", entry->name); - m_has_icons = true; - return; - } - } - } - } - - // nothing promising - osd_printf_verbose( - "No candidate icons found for %s%s\n", - listname ? "software list " : "", - listname ? listname : "machines"); -} - -std::string menu_select_launch::make_icon_paths(char const *listname) const -{ - // iterate over configured icon paths - path_iterator paths(ui().options().icons_directory()); - std::string current, result; - while (paths.next(current)) - { - // if we're doing a software list, append it to the configured path - if (listname) - { - if (!current.empty() && !util::is_directory_separator(current.back())) - current.append(PATH_SEPARATOR); - current.append(listname); - } - - // append the configured path - if (!result.empty()) - result.append(1, ';'); // FIXME: should be a macro - result.append(current); - - // append with "icons" appended so it'll search icons.zip or icons.7z in the directory - if (!current.empty()) - { - result.append(1, ';'); // FIXME: should be a macro - result.append(current); - if (!util::is_directory_separator(result.back())) - result.append(PATH_SEPARATOR); - } - result.append("icons"); - } - - // log the result for debugging - osd_printf_verbose( - "Icon path for %s%s set to %s\n", - listname ? "software list " : "", - listname ? listname : "machines", - result.c_str()); - return result; -} - -bool menu_select_launch::scale_icon(bitmap_argb32 &&src, texture_and_bitmap &dst) const -{ - assert(dst.texture); - if (src.valid()) - { - // calculate available space for the icon in pixels - float const height(ui().get_line_height()); - float const width(height * container().manager().ui_aspect()); - render_target const &target(machine().render().ui_target()); - uint32_t const dst_height(target.height()); - uint32_t const dst_width(target.width()); - bool const rotated((target.orientation() & ORIENTATION_SWAP_XY) != 0); - int const max_height(int((rotated ? dst_width : dst_height) * height)); - int const max_width(int((rotated ? dst_height : dst_width) * width)); - - // reduce the source bitmap if it's too big - bitmap_argb32 tmp; - float const ratio((std::min)({ float(max_height) / src.height(), float(max_width) / src.width(), 1.0F })); - if (1.0F > ratio) - { - float const pix_height(src.height() * ratio); - float const pix_width(src.width() * ratio); - tmp.allocate(int32_t(pix_width), int32_t(pix_height)); - render_resample_argb_bitmap_hq(tmp, src, render_color{ 1.0F, 1.0F, 1.0F, 1.0F }, true); - } - else - { - tmp = std::move(src); - } - - // copy into the destination - dst.bitmap.allocate(max_width, max_height); - for (int y = 0; tmp.height() > y; ++y) - for (int x = 0; tmp.width() > x; ++x) - dst.bitmap.pix32(y, x) = tmp.pix32(y, x); - dst.texture->set_bitmap(dst.bitmap, dst.bitmap.cliprect(), TEXFORMAT_ARGB32); - return true; - } - else - { - // couldn't load icon - dst.bitmap.reset(); - return false; - } -} - - template <typename T> bool menu_select_launch::select_bios(T const &driver, bool inlist) { s_bios biosname; @@ -1240,16 +1049,124 @@ void menu_select_launch::set_pressed() // draw icons //------------------------------------------------- -void menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, float y0) +float menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, float y0) { - render_texture *const icon(get_icon_texture(linenum, selectedref)); - if (icon) - { - float const ud_arrow_width = ui().get_line_height() * container().manager().ui_aspect(&container()); - float const x1 = x0 + ud_arrow_width; - float const y1 = y0 + ui().get_line_height(); - container().add_quad(x0, y0, x1, y1, rgb_t::white(), icon, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - }; + if (!ui_globals::has_icons || m_is_swlist) + return 0.0f; + + 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) + { + ui_software_info *soft = (ui_software_info *)selectedref; + if (soft->startempty == 1) + driver = soft->driver; + } + else + driver = (const game_driver *)selectedref; + + auto x1 = x0 + ud_arrow_width; + auto y1 = y0 + ui().get_line_height(); + + icon_cache::iterator icon(m_icons.find(driver)); + if ((m_icons.end() == icon) || ui_globals::redraw_icon) + { + if (m_icons.end() == icon) + { + texture_ptr texture(machine().render().texture_alloc(), [&render = machine().render()] (render_texture *texture) { render.texture_free(texture); }); + icon = m_icons.emplace( + std::piecewise_construct, + std::forward_as_tuple(driver), + std::forward_as_tuple(std::piecewise_construct, std::forward_as_tuple(std::move(texture)), std::tuple<>())).first; + } + + // set clone status + bool cloneof = strcmp(driver->parent, "0"); + if (cloneof) + { + auto cx = driver_list::find(driver->parent); + if ((cx >= 0) && (driver_list::driver(cx).flags & machine_flags::IS_BIOS_ROOT)) + cloneof = false; + } + + // get search path + path_iterator path(ui().options().icons_directory()); + std::string curpath; + std::string searchstr(ui().options().icons_directory()); + + // iterate over path and add path for zipped formats + while (path.next(curpath)) + searchstr.append(";").append(curpath.c_str()).append(PATH_SEPARATOR).append("icons"); + + bitmap_argb32 tmp; + emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ); + std::string fullname = std::string(driver->name).append(".ico"); + render_load_ico(tmp, snapfile, nullptr, fullname.c_str()); + + if (!tmp.valid() && cloneof) + { + fullname.assign(driver->parent).append(".ico"); + render_load_ico(tmp, snapfile, nullptr, fullname.c_str()); + } + + bitmap_argb32 &bitmap(icon->second.second); + if (tmp.valid()) + { + float panel_width = x1 - x0; + float panel_height = y1 - y0; + auto screen_width = machine().render().ui_target().width(); + auto screen_height = machine().render().ui_target().height(); + + if (machine().render().ui_target().orientation() & ORIENTATION_SWAP_XY) + std::swap(screen_height, screen_width); + + int panel_width_pixel = panel_width * screen_width; + int panel_height_pixel = panel_height * screen_height; + + // Calculate resize ratios for resizing + auto ratioW = (float)panel_width_pixel / tmp.width(); + auto ratioH = (float)panel_height_pixel / tmp.height(); + auto dest_xPixel = tmp.width(); + auto dest_yPixel = tmp.height(); + + if (ratioW < 1 || ratioH < 1) + { + // smaller ratio will ensure that the image fits in the view + float ratio = std::min(ratioW, ratioH); + dest_xPixel = tmp.width() * ratio; + dest_yPixel = tmp.height() * ratio; + } + + bitmap_argb32 dest_bitmap; + + // resample if necessary + if (dest_xPixel != tmp.width() || dest_yPixel != tmp.height()) + { + dest_bitmap.allocate(dest_xPixel, dest_yPixel); + render_color color = { 1.0f, 1.0f, 1.0f, 1.0f }; + render_resample_argb_bitmap_hq(dest_bitmap, tmp, color, true); + } + else + dest_bitmap = std::move(tmp); + + bitmap.allocate(panel_width_pixel, panel_height_pixel); + for (int x = 0; x < dest_xPixel; x++) + for (int y = 0; y < dest_yPixel; y++) + bitmap.pix32(y, x) = dest_bitmap.pix32(y, x); + + icon->second.first->set_bitmap(bitmap, bitmap.cliprect(), TEXFORMAT_ARGB32); + } + else + { + bitmap.reset(); + } + } + + if (icon->second.second.valid()) + container().add_quad(x0, y0, x1, y1, rgb_t::white(), icon->second.first.get(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + + return ud_arrow_width * 1.5f; } @@ -1260,21 +1177,21 @@ void menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, flo void menu_select_launch::get_title_search(std::string &snaptext, std::string &searchstr) { // get arts title text - snaptext.assign(_(arts_info[m_image_view].first)); + snaptext.assign(_(arts_info[ui_globals::curimage_view].first)); // get search path std::string addpath; - if (m_image_view == SNAPSHOT_VIEW) + if (ui_globals::curimage_view == SNAPSHOT_VIEW) { emu_options moptions; - searchstr = machine().options().value(arts_info[m_image_view].second); - addpath = moptions.value(arts_info[m_image_view].second); + searchstr = machine().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } else { ui_options moptions; - searchstr = ui().options().value(arts_info[m_image_view].second); - addpath = moptions.value(arts_info[m_image_view].second); + searchstr = ui().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } std::string tmp(searchstr); @@ -1763,9 +1680,8 @@ void menu_select_launch::draw(uint32_t flags) { bool noinput = (flags & PROCESS_NOINPUT); float line_height = ui().get_line_height(); - float const ud_arrow_width = line_height * machine().render().ui_aspect(); - float const gutter_width = 0.52f * ud_arrow_width; - float const icon_offset = m_has_icons ? (1.5f * ud_arrow_width) : 0.0f; + float ud_arrow_width = line_height * machine().render().ui_aspect(); + float gutter_width = 0.52f * ud_arrow_width; float right_panel_size = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_RIGHT_PANEL) ? 2.0f * UI_BOX_LR_BORDER : 0.3f; float visible_width = 1.0f - 4.0f * UI_BOX_LR_BORDER; float primary_left = (1.0f - visible_width) * 0.5f; @@ -1850,21 +1766,18 @@ void menu_select_launch::draw(uint32_t flags) if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1) && is_selectable(pitem)) hover = itemnum; + // if we're selected, draw with a different background if (is_selected(itemnum) && m_focus == focused_menu::MAIN) { - // if we're selected, draw with a different background 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), + 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(1)); } + // else if the mouse is over this item, draw with a different background else if (itemnum == hover) { - // else if the mouse is over this item, draw with a different background fgcolor = fgcolor3 = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; highlight(line_x0, line_y0, line_x1, line_y1, bgcolor); @@ -1904,52 +1817,29 @@ void menu_select_launch::draw(uint32_t flags) else if (pitem.subtext.empty()) { // draw the item centered - int const item_invert = pitem.flags & FLAG_INVERT; - if (m_has_icons) - draw_icon(linenum, item[itemnum].ref, effective_left, line_y); - ui().draw_text_full( - container(), - itemtext, - effective_left + icon_offset, line_y, effective_width - icon_offset, - ui::text_layout::LEFT, ui::text_layout::TRUNCATE, - mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, - nullptr, nullptr); + 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); } else { - int const item_invert = pitem.flags & FLAG_INVERT; + auto item_invert = pitem.flags & FLAG_INVERT; const char *subitem_text = pitem.subtext.c_str(); float item_width, subitem_width; // compute right space for subitem - ui().draw_text_full( - container(), - subitem_text, - effective_left + icon_offset, 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 - if (m_has_icons) - draw_icon(linenum, item[itemnum].ref, effective_left, line_y); - ui().draw_text_full( - container(), - itemtext, - effective_left + icon_offset, line_y, effective_width - icon_offset - 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 + icon_offset + item_width, line_y, effective_width - icon_offset - 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); } } @@ -2010,6 +1900,9 @@ void menu_select_launch::draw(uint32_t flags) // return the number of visible lines, minus 1 for top arrow and 1 for bottom arrow m_visible_items = m_visible_lines - (top_line != 0) - (top_line + m_visible_lines != visible_items); + // reset redraw icon stage + if (!m_is_swlist) ui_globals::redraw_icon = false; + // noinput if (noinput) { @@ -2151,14 +2044,14 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f { m_cache->set_snapx_driver(nullptr); - if (m_default_image) - m_image_view = (software->startempty == 0) ? SNAPSHOT_VIEW : CABINETS_VIEW; + if (ui_globals::default_image) + ui_globals::curimage_view = (software->startempty == 0) ? SNAPSHOT_VIEW : CABINETS_VIEW; // arts title and searchpath std::string const searchstr = arts_render_common(origx1, origy1, origx2, origy2); // loads the image if necessary - if (!m_cache->snapx_software_is(software) || !snapx_valid() || m_switch_image) + if (!m_cache->snapx_software_is(software) || !snapx_valid() || ui_globals::switch_image) { emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ); bitmap_argb32 tmp_bitmap; @@ -2204,7 +2097,7 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f } m_cache->set_snapx_software(software); - m_switch_image = false; + ui_globals::switch_image = false; arts_render_images(std::move(tmp_bitmap), origx1, origy1, origx2, origy2); } @@ -2215,13 +2108,13 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f { m_cache->set_snapx_software(nullptr); - if (m_default_image) - m_image_view = ((driver->flags & machine_flags::MASK_TYPE) != machine_flags::TYPE_ARCADE) ? CABINETS_VIEW : SNAPSHOT_VIEW; + if (ui_globals::default_image) + ui_globals::curimage_view = ((driver->flags & machine_flags::MASK_TYPE) != machine_flags::TYPE_ARCADE) ? CABINETS_VIEW : SNAPSHOT_VIEW; std::string const searchstr = arts_render_common(origx1, origy1, origx2, origy2); // loads the image if necessary - if (!m_cache->snapx_driver_is(driver) || !snapx_valid() || m_switch_image) + if (!m_cache->snapx_driver_is(driver) || !snapx_valid() || ui_globals::switch_image) { emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ); snapfile.set_restrict_to_mediapath(true); @@ -2273,7 +2166,7 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f } m_cache->set_snapx_driver(driver); - m_switch_image = false; + ui_globals::switch_image = false; arts_render_images(std::move(tmp_bitmap), origx1, origy1, origx2, origy2); } @@ -2331,7 +2224,7 @@ std::string menu_select_launch::arts_render_common(float origx1, float origy1, f ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); - draw_common_arrow(origx1, origy1 + UI_BOX_TB_BORDER, origx2, origy2, m_image_view, FIRST_VIEW, LAST_VIEW, title_size); + draw_common_arrow(origx1, origy1 + UI_BOX_TB_BORDER, origx2, origy2, ui_globals::curimage_view, FIRST_VIEW, LAST_VIEW, title_size); return searchstr; } @@ -2381,7 +2274,7 @@ void menu_select_launch::arts_render_images(bitmap_argb32 &&tmp_bitmap, float or auto dest_yPixel = tmp_bitmap.height(); // force 4:3 ratio min - if (ui().options().forced_4x3_snapshot() && ratioI < 0.75f && m_image_view == SNAPSHOT_VIEW) + if (ui().options().forced_4x3_snapshot() && ratioI < 0.75f && ui_globals::curimage_view == SNAPSHOT_VIEW) { // smaller ratio will ensure that the image fits in the view dest_yPixel = tmp_bitmap.width() * 0.75f; @@ -2474,7 +2367,7 @@ bool menu_select_launch::has_multiple_bios(game_driver const &driver, s_bios &bi for (romload::system_bios const &bios : romload::entries(driver.rom).get_system_bioses()) { std::string name(bios.get_description()); - uint32_t const bios_flags(bios.get_value()); + u32 const bios_flags(bios.get_value()); if (default_name && !std::strcmp(bios.get_name(), default_name)) { |