diff options
author | 2021-01-04 12:08:16 -0500 | |
---|---|---|
committer | 2021-01-04 12:15:09 -0500 | |
commit | c231ee373a461ee8555b2df25e68efea4506229d (patch) | |
tree | 30cfd37e502317b69d3695bc74aebaacc5756418 /src/emu/render.cpp | |
parent | 687e7e162dbadc4b4d0ca58343493f15a0cdabbc (diff) |
render.h, rendlay.h: Dependency refactoring
- render.h: Split out layout class declarations into rendlay.h, with some adjustments for the resulting incomplete types (std::reference_wrapper unfortunately does not allow these by C++17 rules)
- rendlay.h: Move old header contents to layout/generic.h
Diffstat (limited to 'src/emu/render.cpp')
-rw-r--r-- | src/emu/render.cpp | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp index 68c840f89a6..b9b98528547 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -45,6 +45,7 @@ #include "rendutil.h" #include "config.h" #include "drivenum.h" +#include "layout/generic.h" #include "ui/uimain.h" @@ -891,6 +892,7 @@ render_target::render_target(render_manager &manager, util::xml::data_node const template <typename T> render_target::render_target(render_manager &manager, T &&layout, u32 flags, constructor_impl_t) : m_next(nullptr) , m_manager(manager) + , m_filelist(std::make_unique<std::list<layout_file>>()) , m_curview(0U) , m_flags(flags) , m_listindex(0) @@ -947,7 +949,7 @@ template <typename T> render_target::render_target(render_manager &manager, T && // load the layout files load_layout_files(std::forward<T>(layout), flags & RENDER_CREATE_SINGLE_FILE); - for (layout_file &file : m_filelist) + for (layout_file &file : *m_filelist) for (layout_view &view : file.views()) if (!(m_flags & RENDER_CREATE_NO_ART) || !view.has_art()) m_views.emplace_back(view, view.default_visibility_mask()); @@ -1042,7 +1044,7 @@ void render_target::set_max_texture_size(int maxwidth, int maxheight) void render_target::set_visibility_toggle(unsigned index, bool enable) { - assert(visibility_toggles().size() > index); + assert(current_view().visibility_toggles().size() > index); if (enable) m_views[m_curview].second |= u32(1) << index; else @@ -1067,8 +1069,8 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i // scan for a matching view name 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(); + if (!core_strnicmp(m_views[i].first.name().c_str(), viewname, viewlen)) + view = &m_views[i].first; } // if we don't have a match, default to the nth view @@ -1084,12 +1086,12 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i screen_device const &screen = screens[index() % screens.size()]; for (unsigned i = 0; !view && (m_views.size() > i); ++i) { - for (layout_view::item &viewitem : m_views[i].first.get().items()) + for (layout_view::item &viewitem : m_views[i].first.items()) { screen_device const *const viewscreen(viewitem.screen()); if (viewscreen == &screen) { - view = &m_views[i].first.get(); + view = &m_views[i].first; } else if (viewscreen) { @@ -1123,12 +1125,7 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i const char *render_target::view_name(unsigned viewindex) { - return (m_views.size() > viewindex) ? m_views[viewindex].first.get().name().c_str() : nullptr; -} - -layout_view::visibility_toggle_vector const &render_target::visibility_toggles() -{ - return current_view().visibility_toggles(); + return (m_views.size() > viewindex) ? m_views[viewindex].first.name().c_str() : nullptr; } @@ -1262,7 +1259,7 @@ void render_target::compute_minimum_size(s32 &minwidth, s32 &minheight) // scan the current view for all screens for (layout_view::item &curitem : current_view().items()) { - screen_device *const screen = curitem.screen(); + screen_device const *const screen = curitem.screen(); if (screen) { // use a hard-coded default visible area for vector screens @@ -1615,7 +1612,7 @@ void render_target::debug_append(render_container &container) void render_target::resolve_tags() { - for (layout_file &file : m_filelist) + for (layout_file &file : *m_filelist) file.resolve_tags(); current_view().recompute(visibility_mask(), m_layerconfig.zoom_to_screen()); @@ -1780,7 +1777,7 @@ void render_target::load_additional_layout_files(const char *basename, bool have auto const nth_view = [this] (unsigned n) -> layout_view * { - for (layout_file &file : m_filelist) + for (layout_file &file : *m_filelist) for (layout_view &view : file.views()) if (!(m_flags & RENDER_CREATE_NO_ART) || !view.has_art()) if (n-- == 0) @@ -1793,7 +1790,7 @@ void render_target::load_additional_layout_files(const char *basename, bool have if (!nth_view(0)) { load_layout_file(nullptr, layout_noscreens); - if (m_filelist.empty()) + if (m_filelist->empty()) throw emu_fatalerror("Couldn't parse default layout??"); } } @@ -2200,7 +2197,7 @@ bool render_target::load_layout_file(device_t &device, util::xml::data_node cons // parse and catch any errors try { - m_filelist.emplace_back(device, rootnode, searchpath, dirname); + m_filelist->emplace_back(device, rootnode, searchpath, dirname); } catch (emu_fatalerror &err) { @@ -2570,7 +2567,7 @@ std::pair<float, float> render_target::map_point_internal(s32 target_x, s32 targ layout_view *render_target::view_by_index(unsigned index) { - return (m_views.size() > index) ? &m_views[index].first.get() : nullptr; + return (m_views.size() > index) ? &m_views[index].first : nullptr; } @@ -2584,7 +2581,7 @@ int render_target::view_index(layout_view &targetview) const // return index of view, or zero if not found for (int index = 0; m_views.size() > index; ++index) { - if (&m_views[index].first.get() == &targetview) + if (&m_views[index].first == &targetview) return index; } return 0; @@ -2648,7 +2645,7 @@ void render_target::config_load(util::xml::data_node const &targetnode) if (!viewname) continue; - auto const view = std::find_if(m_views.begin(), m_views.end(), [viewname] (auto const &x) { return x.first.get().name() == viewname; }); + auto const view = std::find_if(m_views.begin(), m_views.end(), [viewname] (auto const &x) { return x.first.name() == viewname; }); if (m_views.end() == view) continue; @@ -2658,7 +2655,7 @@ void render_target::config_load(util::xml::data_node const &targetnode) if (!vistogglename) continue; - auto const &vistoggles = view->first.get().visibility_toggles(); + auto const &vistoggles = view->first.visibility_toggles(); auto const vistoggle = std::find_if(vistoggles.begin(), vistoggles.end(), [vistogglename] (auto const &x) { return x.name() == vistogglename; }); if (vistoggles.end() == vistoggle) continue; @@ -2673,7 +2670,7 @@ void render_target::config_load(util::xml::data_node const &targetnode) } } - if (¤t_view() == &view->first.get()) + if (¤t_view() == &view->first) { current_view().recompute(visibility_mask(), m_layerconfig.zoom_to_screen()); current_view().preload(); @@ -2726,19 +2723,19 @@ bool render_target::config_save(util::xml::data_node &targetnode) // output layer configuration for (auto const &view : m_views) { - u32 const defvismask = view.first.get().default_visibility_mask(); + u32 const defvismask = view.first.default_visibility_mask(); if (defvismask != view.second) { util::xml::data_node *viewnode = nullptr; unsigned i = 0; - for (layout_view::visibility_toggle const &toggle : view.first.get().visibility_toggles()) + for (layout_view::visibility_toggle const &toggle : view.first.visibility_toggles()) { if (BIT(defvismask, i) != BIT(view.second, i)) { if (!viewnode) { viewnode = targetnode.add_child("view", nullptr); - viewnode->set_attribute("name", view.first.get().name().c_str()); + viewnode->set_attribute("name", view.first.name().c_str()); } util::xml::data_node *const vistogglenode = viewnode->add_child("collection", nullptr); vistogglenode->set_attribute("name", toggle.name().c_str()); |