summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/rendlay.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/rendlay.c')
-rw-r--r--src/emu/rendlay.c44
1 files changed, 40 insertions, 4 deletions
diff --git a/src/emu/rendlay.c b/src/emu/rendlay.c
index cb229846299..6733ecbcb92 100644
--- a/src/emu/rendlay.c
+++ b/src/emu/rendlay.c
@@ -2304,6 +2304,22 @@ void layout_view::recompute(render_layer_config layerconfig)
}
+//-----------------------------
+// resolve_tags - resolve tags
+//-----------------------------
+
+void layout_view::resolve_tags()
+{
+ for (item_layer layer = ITEM_LAYER_FIRST; layer < ITEM_LAYER_MAX; layer++)
+ {
+ for (item *curitem = first_item(layer); curitem != NULL; curitem = curitem->next())
+ {
+ curitem->resolve_tags();
+ }
+ }
+}
+
+
//**************************************************************************
// LAYOUT VIEW ITEM
@@ -2316,6 +2332,7 @@ void layout_view::recompute(render_layer_config layerconfig)
layout_view::item::item(running_machine &machine, xml_data_node &itemnode, simple_list<layout_element> &elemlist)
: m_next(NULL),
m_element(NULL),
+ m_input_port(NULL),
m_input_mask(0),
m_screen(NULL),
m_orientation(ROT0)
@@ -2365,6 +2382,11 @@ layout_view::item::item(running_machine &machine, xml_data_node &itemnode, simpl
if (m_element == NULL)
throw emu_fatalerror("Layout item of type %s require an element tag", itemnode.name);
}
+
+ if (has_input())
+ {
+ m_input_port = m_element->machine().root_device().ioport(m_input_tag.c_str());
+ }
}
@@ -2387,6 +2409,7 @@ render_container *layout_view::item::screen_container(running_machine &machine)
return (m_screen != NULL) ? &m_screen->container() : NULL;
}
+
//-------------------------------------------------
// state - fetch state based on configured source
//-------------------------------------------------
@@ -2404,18 +2427,31 @@ int layout_view::item::state() const
// if configured to an input, fetch the input value
else if (m_input_tag[0] != 0)
{
- ioport_port *port = m_element->machine().root_device().ioport(m_input_tag.c_str());
- if (port != NULL)
+ if (m_input_port != NULL)
{
- ioport_field *field = port->field(m_input_mask);
+ ioport_field *field = m_input_port->field(m_input_mask);
if (field != NULL)
- state = ((port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0;
+ state = ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0;
}
}
return state;
}
+//---------------------------------------------
+// resolve_tags - resolve tags, if any are set
+//---------------------------------------------
+
+
+void layout_view::item::resolve_tags()
+{
+ if (has_input())
+ {
+ m_input_port = m_element->machine().root_device().ioport(m_input_tag.c_str());
+ }
+}
+
+
//**************************************************************************
// LAYOUT FILE