summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/render.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/render.cpp')
-rw-r--r--src/emu/render.cpp47
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 (&current_view() == &view->first.get())
+ if (&current_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());