summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/render.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2023-03-21 16:54:48 +1100
committer Vas Crabb <vas@vastheman.com>2023-03-21 16:54:48 +1100
commitf4b165a631305500884fb0dfb6df68a0d63f878b (patch)
tree133b0d4344a73cf5da8a76bde1020ae3c4388fee /src/emu/render.cpp
parenta55f0b15d576f2bb00d300f1ff74a915453a92c9 (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.cpp42
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);