diff options
author | 2019-08-20 01:45:52 +1000 | |
---|---|---|
committer | 2019-08-20 01:45:52 +1000 | |
commit | 60c035ea756111d94005cc1d9431352b298d8bc4 (patch) | |
tree | 3b96031bdee041ff0f4abc0328d68d8006673264 /src | |
parent | 450a57568e16822d625c3e0cd390e9c9e6a08718 (diff) |
MT07379: better automatic group bounds behaviour
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/render.h | 1 | ||||
-rw-r--r-- | src/emu/rendlay.cpp | 24 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/emu/render.h b/src/emu/render.h index ec8d22af149..0d70dc7684b 100644 --- a/src/emu/render.h +++ b/src/emu/render.h @@ -749,6 +749,7 @@ private: util::xml::data_node const &parentnode, group_map &groupmap, std::vector<layout_group const *> &seen, + bool empty, bool repeat, bool init); diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp index b5666a8f186..aa111f25e85 100644 --- a/src/emu/rendlay.cpp +++ b/src/emu/rendlay.cpp @@ -1062,8 +1062,9 @@ void layout_group::resolve_bounds(environment &env, group_map &groupmap, std::ve seen.push_back(this); if (!m_bounds_resolved) { + set_render_bounds_xy(m_bounds, 0.0F, 0.0F, 1.0F, 1.0F); environment local(env); - resolve_bounds(local, m_groupnode, groupmap, seen, false, true); + resolve_bounds(local, m_groupnode, groupmap, seen, true, false, true); } seen.pop_back(); } @@ -1073,6 +1074,7 @@ void layout_group::resolve_bounds( util::xml::data_node const &parentnode, group_map &groupmap, std::vector<layout_group const *> &seen, + bool empty, bool repeat, bool init) { @@ -1110,7 +1112,11 @@ void layout_group::resolve_bounds( { render_bounds itembounds; env.parse_bounds(itemnode->get_child("bounds"), itembounds); - union_render_bounds(m_bounds, itembounds); + if (empty) + m_bounds = itembounds; + else + union_render_bounds(m_bounds, itembounds); + empty = false; } else if (!strcmp(itemnode->get_name(), "group")) { @@ -1119,7 +1125,11 @@ void layout_group::resolve_bounds( { render_bounds itembounds; env.parse_bounds(itemboundsnode, itembounds); - union_render_bounds(m_bounds, itembounds); + if (empty) + m_bounds = itembounds; + else + union_render_bounds(m_bounds, itembounds); + empty = false; } else { @@ -1139,7 +1149,11 @@ void layout_group::resolve_bounds( found->second.m_bounds.y0, (orientation & ORIENTATION_SWAP_XY) ? (found->second.m_bounds.x0 + found->second.m_bounds.y1 - found->second.m_bounds.y0) : found->second.m_bounds.x1, (orientation & ORIENTATION_SWAP_XY) ? (found->second.m_bounds.y0 + found->second.m_bounds.x1 - found->second.m_bounds.x0) : found->second.m_bounds.y1 }; - union_render_bounds(m_bounds, itembounds); + if (empty) + m_bounds = itembounds; + else + union_render_bounds(m_bounds, itembounds); + empty = false; } } else if (!strcmp(itemnode->get_name(), "repeat")) @@ -1150,7 +1164,7 @@ void layout_group::resolve_bounds( environment local(env); for (int i = 0; !m_bounds_resolved && (count > i); ++i) { - resolve_bounds(local, *itemnode, groupmap, seen, true, !i); + resolve_bounds(local, *itemnode, groupmap, seen, empty, true, !i); local.increment_parameters(); } } |