summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-09-07 01:40:41 +1000
committer Vas Crabb <vas@vastheman.com>2020-09-07 01:40:41 +1000
commit67ec5e5b43738128a696aea19b299ee0ed8a17a0 (patch)
tree13ace47db8c58d5cd8931e23fce9c01763bbd9fd /src/emu
parent7fe5f1858d8ec9b687ac3874ecf232ca29365694 (diff)
Finished adding new mechanism for allowing parts of views to be hidden.
Changed name of element to "collection" and initial visibility attribute to "visible", and added them to documentation. Also added them to complay.py. Fixed issue with collection inside group, and improved initial view selection behaviour. Updated some internal layouts to demonstrate new features, including et3400, irrmaze, ltcasino, mekd3/mekd4, seawolf and vgmplay. Removed all uses of cpanel, marquee and overlay from internal layouts and removed them from complay.py to actively discourage use. Also cleaned up view names in layouts that were using them in place of spaces, and removed some superfluous name attributes on elements that won't do anything useful with an output value anyway. Made vgmplay cycle visualiser modes when visualiser screen is clicked. Fixed a copy/paste error in bus/rs232/hlemouse.cpp while I'm at it.
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/render.cpp49
-rw-r--r--src/emu/render.h1
-rw-r--r--src/emu/rendlay.cpp19
3 files changed, 32 insertions, 37 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index 4d621508a20..3bc0e8ef5db 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -1067,7 +1067,7 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i
if (strcmp(viewname, "auto") != 0)
{
// scan for a matching view name
- size_t viewlen = strlen(viewname);
+ size_t const viewlen = strlen(viewname);
for (unsigned i = 0; !view && (m_views.size() > i); ++i)
if (!core_strnicmp(m_views[i].first.get().name().c_str(), viewname, viewlen))
view = &m_views[i].first.get();
@@ -1082,21 +1082,22 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i
// if we have enough targets to be one per screen, assign in order
if (numtargets >= screens.size())
{
- int const ourindex = index() % screens.size();
- screen_device &screen = screens[ourindex];
-
// find the first view with this screen and this screen only
- unsigned viewindex;
- for (view = view_by_index(viewindex = 0); view != nullptr; view = view_by_index(++viewindex))
+ screen_device const &screen = screens[index() % screens.size()];
+ for (unsigned i = 0; !view && (m_views.size() > i); ++i)
{
- auto const &viewscreens = view->screens();
- if (viewscreens.empty())
+ for (screen_device const &viewscreen : m_views[i].first.get().screens())
{
- view = nullptr;
- break;
+ if (&viewscreen == &screen)
+ {
+ view = &m_views[i].first.get();
+ }
+ else
+ {
+ view = nullptr;
+ break;
+ }
}
- else if (std::find_if(viewscreens.begin(), viewscreens.end(), [&screen] (auto const &scr) { return &scr.get() != &screen; }) == viewscreens.end())
- break;
}
}
@@ -1105,18 +1106,10 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i
{
for (unsigned i = 0; !view && (m_views.size() > i); ++i)
{
- view = &m_views[i].first.get();
- if (view->screen_count() >= screens.size())
- {
- for (screen_device &screen : screens)
- {
- if (!view->has_screen(screen))
- {
- view = nullptr;
- break;
- }
- }
- }
+ layout_view &curview = m_views[i].first;
+ if (curview.screen_count() >= screens.size())
+ if (std::find_if(screens.begin(), screens.end(), [&curview] (screen_device &screen) { return !curview.has_screen(screen); }) == screens.end())
+ view = &curview;
}
}
}
@@ -2631,7 +2624,7 @@ void render_target::config_load(util::xml::data_node const &targetnode)
if (m_views.end() == view)
continue;
- for (util::xml::data_node const *vistogglenode = viewnode->get_child("vistoggle"); vistogglenode; vistogglenode = vistogglenode->get_next_sibling("vistoggle"))
+ for (util::xml::data_node const *vistogglenode = viewnode->get_child("collection"); vistogglenode; vistogglenode = vistogglenode->get_next_sibling("collection"))
{
char const *const vistogglename = vistogglenode->get_attribute_string("name", nullptr);
if (!vistogglename)
@@ -2642,7 +2635,7 @@ void render_target::config_load(util::xml::data_node const &targetnode)
if (vistoggles.end() == vistoggle)
continue;
- int const enable = vistogglenode->get_attribute_int("enabled", -1);
+ int const enable = vistogglenode->get_attribute_int("visible", -1);
if (0 <= enable)
{
if (enable)
@@ -2716,9 +2709,9 @@ bool render_target::config_save(util::xml::data_node &targetnode)
viewnode = targetnode.add_child("view", nullptr);
viewnode->set_attribute("name", view.first.get().name().c_str());
}
- util::xml::data_node *const vistogglenode = viewnode->add_child("vistoggle", nullptr);
+ util::xml::data_node *const vistogglenode = viewnode->add_child("collection", nullptr);
vistogglenode->set_attribute("name", toggle.name().c_str());
- vistogglenode->set_attribute_int("enabled", BIT(view.second, i));
+ vistogglenode->set_attribute_int("visible", BIT(view.second, i));
changed = true;
}
++i;
diff --git a/src/emu/render.h b/src/emu/render.h
index d846dce58c1..ab7daa753e3 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -716,6 +716,7 @@ private:
group_map &groupmap,
std::vector<layout_group const *> &seen,
bool empty,
+ bool collection,
bool repeat,
bool init);
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 1d4a8f23265..3eedf6c728f 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -1116,7 +1116,7 @@ void layout_group::resolve_bounds(environment &env, group_map &groupmap, std::ve
{
set_render_bounds_xy(m_bounds, 0.0F, 0.0F, 1.0F, 1.0F);
environment local(env);
- resolve_bounds(local, m_groupnode, groupmap, seen, true, false, true);
+ resolve_bounds(local, m_groupnode, groupmap, seen, true, false, false, true);
}
seen.pop_back();
}
@@ -1127,6 +1127,7 @@ void layout_group::resolve_bounds(
group_map &groupmap,
std::vector<layout_group const *> &seen,
bool empty,
+ bool collection,
bool repeat,
bool init)
{
@@ -1216,16 +1217,16 @@ void layout_group::resolve_bounds(
environment local(env);
for (int i = 0; !m_bounds_resolved && (count > i); ++i)
{
- resolve_bounds(local, *itemnode, groupmap, seen, empty, true, !i);
+ resolve_bounds(local, *itemnode, groupmap, seen, empty, false, true, !i);
local.increment_parameters();
}
}
- else if (!strcmp(itemnode->get_name(), "vistoggle"))
+ else if (!strcmp(itemnode->get_name(), "collection"))
{
if (!env.get_attribute_string(*itemnode, "name", nullptr))
- throw layout_syntax_error("vistoggle must have name attribute");
+ throw layout_syntax_error("collection must have name attribute");
environment local(env);
- resolve_bounds(local, *itemnode, groupmap, seen, empty, false, true);
+ resolve_bounds(local, *itemnode, groupmap, seen, empty, true, false, true);
}
else
{
@@ -1241,7 +1242,7 @@ void layout_group::resolve_bounds(
m_bounds_resolved = resolved;
}
- if (!repeat)
+ if (!collection && !repeat)
m_bounds_resolved = true;
}
@@ -3364,12 +3365,12 @@ void layout_view::add_items(
local.increment_parameters();
}
}
- else if (!strcmp(itemnode->get_name(), "vistoggle"))
+ else if (!strcmp(itemnode->get_name(), "collection"))
{
char const *name(env.get_attribute_string(*itemnode, "name", nullptr));
if (!name)
- throw layout_syntax_error("vistoggle must have name attribute");
- m_defvismask |= u32(env.get_attribute_bool(*itemnode, "enabled", true) ? 1 : 0) << m_vistoggles.size(); // TODO: make this less hacky
+ throw layout_syntax_error("collection must have name attribute");
+ m_defvismask |= u32(env.get_attribute_bool(*itemnode, "visible", true) ? 1 : 0) << m_vistoggles.size(); // TODO: make this less hacky
view_environment local(env, true);
m_vistoggles.emplace_back(name, local.visibility_mask());
add_items(layers, local, *itemnode, elemmap, groupmap, orientation, trans, color, false, false, true);