drawgfx.c: make it possible to reset the total elements of a gfx_element [Alex Jackson]

This commit is contained in:
Alex W. Jackson 2014-05-15 18:33:54 +00:00
parent 1a9ed9ebe8
commit ffd0b5f2ad
2 changed files with 47 additions and 5 deletions

View File

@ -172,6 +172,8 @@ gfx_element::gfx_element(palette_device *palette, const gfx_layout &gl, const UI
void gfx_element::set_layout(const gfx_layout &gl, const UINT8 *srcdata)
{
m_srcdata = srcdata;
// configure ourselves
m_width = m_origwidth = gl.width;
m_height = m_origheight = gl.height;
@ -199,7 +201,7 @@ void gfx_element::set_layout(const gfx_layout &gl, const UINT8 *srcdata)
// RAW graphics must have a pointer up front
assert(srcdata != NULL);
m_gfxdata = const_cast<UINT8 *>(m_srcdata);
m_gfxdata = const_cast<UINT8 *>(srcdata);
}
// decoded graphics case
@ -234,9 +236,6 @@ void gfx_element::set_layout(const gfx_layout &gl, const UINT8 *srcdata)
m_pen_usage.resize(m_total_elements);
else
m_pen_usage.reset();
// set the source
set_source(srcdata);
}
@ -258,6 +257,48 @@ void gfx_element::set_raw_layout(const UINT8 *srcdata, UINT32 width, UINT32 heig
}
//-------------------------------------------------
// set_source - set the source data for a gfx_element
//-------------------------------------------------
void gfx_element::set_source(const UINT8 *source)
{
m_srcdata = source;
memset(m_dirty, 1, elements());
if (m_layout_is_raw) m_gfxdata = const_cast<UINT8 *>(source);
}
//-------------------------------------------------
// set_source_and_total - set the source data
// and total elements for a gfx_element
//-------------------------------------------------
void gfx_element::set_source_and_total(const UINT8 *source, UINT32 total)
{
m_srcdata = source;
m_total_elements = total;
// mark everything dirty
m_dirty.resize_and_clear(m_total_elements, 1);
// allocate a pen usage array for entries with 32 pens or less
if (m_color_depth <= 32)
m_pen_usage.resize(m_total_elements);
if (m_layout_is_raw)
{
m_gfxdata = const_cast<UINT8 *>(source);
}
else
{
// allocate memory for the data
m_gfxdata_allocated.resize(m_total_elements * m_char_modulo);
m_gfxdata = &m_gfxdata_allocated[0];
}
}
//-------------------------------------------------
// set_source_clip - set a source clipping rect
//-------------------------------------------------

View File

@ -62,7 +62,8 @@ public:
// setters
void set_layout(const gfx_layout &gl, const UINT8 *srcdata);
void set_raw_layout(const UINT8 *srcdata, UINT32 width, UINT32 height, UINT32 total, UINT32 linemod, UINT32 charmod);
void set_source(const UINT8 *source) { m_srcdata = source; if (m_layout_is_raw) m_gfxdata = const_cast<UINT8 *>(source); memset(m_dirty, 1, elements()); }
void set_source(const UINT8 *source);
void set_source_and_total(const UINT8 *source, UINT32 total);
void set_xormask(UINT32 xormask) { m_layout_xormask = xormask; }
void set_palette(palette_device *palette) { m_palette = palette; }
void set_colors(UINT32 colors) { m_total_colors = colors; }