diff options
author | 2023-03-21 16:54:48 +1100 | |
---|---|---|
committer | 2023-03-21 16:54:48 +1100 | |
commit | f4b165a631305500884fb0dfb6df68a0d63f878b (patch) | |
tree | 133b0d4344a73cf5da8a76bde1020ae3c4388fee /src/emu/render.cpp | |
parent | a55f0b15d576f2bb00d300f1ff74a915453a92c9 (diff) |
Miscellaneous cleanup:
render/bgfx/chainmanager.cpp: Only treat source file or more sepecific
INI as higher priority than CFG file for setting screen chains.
sega/model2.cpp, taito/taitocchip.cpp: Got rid of bankdev.
Adjusted some doucmentation files.
Diffstat (limited to 'src/emu/render.cpp')
-rw-r--r-- | src/emu/render.cpp | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp index a02f39f841e..5fd430d16d4 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -1072,28 +1072,29 @@ void render_target::set_visibility_toggle(unsigned index, bool enable) unsigned render_target::configured_view(const char *viewname, int targetindex, int numtargets) { - layout_view *view = nullptr; - // if it isn't "auto" or an empty string, try to match it as a view name prefix if (viewname && *viewname && strcmp(viewname, "auto")) { // scan for a matching view name size_t const viewlen = strlen(viewname); - for (unsigned i = 0; !view && (m_views.size() > i); ++i) + for (unsigned i = 0; m_views.size() > i; ++i) + { if (!core_strnicmp(m_views[i].first.name().c_str(), viewname, viewlen)) - view = &m_views[i].first; + return i; + } } // if we don't have a match, default to the nth view std::vector<std::reference_wrapper<screen_device> > screens; for (screen_device &screen : screen_device_enumerator(m_manager.machine().root_device())) screens.push_back(screen); - if (!view && !screens.empty()) + if (!screens.empty()) { // if we have enough targets to be one per screen, assign in order if (numtargets >= screens.size()) { // find the first view with this screen and this screen only + layout_view *view = nullptr; screen_device const &screen = screens[index() % screens.size()]; for (unsigned i = 0; !view && (m_views.size() > i); ++i) { @@ -1111,22 +1112,21 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i } } } + if (view) + return view_index(*view); } // otherwise, find the first view that has all the screens - if (!view) + for (unsigned i = 0; m_views.size() > i; ++i) { - for (unsigned i = 0; !view && (m_views.size() > i); ++i) - { - layout_view &curview = m_views[i].first; - if (std::find_if(screens.begin(), screens.end(), [&curview] (screen_device &screen) { return !curview.has_screen(screen); }) == screens.end()) - view = &curview; - } + layout_view &curview = m_views[i].first; + if (std::find_if(screens.begin(), screens.end(), [&curview] (screen_device &screen) { return !curview.has_screen(screen); }) == screens.end()) + return i; } } - // make sure it's a valid view - return view ? view_index(*view) : 0; + // default to the first view + return 0; } @@ -2661,20 +2661,22 @@ void render_target::config_load(util::xml::data_node const *targetnode) if (!targetnode) return; + // TODO: consider option priority - command line should take precedence over CFG + // not practical at the moment because view selection options are in the OSD layer + // find the view const char *viewname = targetnode->get_attribute_string("view", nullptr); - if (viewname != nullptr) - for (int viewnum = 0; viewnum < 1000; viewnum++) + if (viewname) + { + for (unsigned viewnum = 0; m_views.size() > viewnum; viewnum++) { - const char *testname = view_name(viewnum); - if (testname == nullptr) - break; - if (!strcmp(viewname, testname)) + if (!strcmp(viewname, view_name(viewnum))) { set_view(viewnum); break; } } + } // modify the artwork config int const zoom = targetnode->get_attribute_int("zoom", -1); |