mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
Replaced the crazy number of get/set functions for render containers with
a single get/set of a user settings struct.
This commit is contained in:
parent
c4e5ae4e41
commit
dabae9787b
228
src/emu/render.c
228
src/emu/render.c
@ -564,11 +564,16 @@ void render_init(running_machine *machine)
|
||||
{
|
||||
render_container *screen_container = render_container_alloc();
|
||||
render_container **temp = &screen_container->next;
|
||||
render_container_user_settings settings;
|
||||
|
||||
/* set the initial orientation and brightness/contrast/gamma */
|
||||
render_container_get_user_settings(screen_container, &settings);
|
||||
settings.orientation = machine->gamedrv->flags & ORIENTATION_MASK;
|
||||
settings.brightness = options_get_float(mame_options(), OPTION_BRIGHTNESS);
|
||||
settings.contrast = options_get_float(mame_options(), OPTION_CONTRAST);
|
||||
settings.gamma = options_get_float(mame_options(), OPTION_GAMMA);
|
||||
render_container_set_user_settings(screen_container, &settings);
|
||||
|
||||
render_container_set_orientation(screen_container, machine->gamedrv->flags & ORIENTATION_MASK);
|
||||
render_container_set_brightness(screen_container, options_get_float(mame_options(), OPTION_BRIGHTNESS));
|
||||
render_container_set_contrast(screen_container, options_get_float(mame_options(), OPTION_CONTRAST));
|
||||
render_container_set_gamma(screen_container, options_get_float(mame_options(), OPTION_GAMMA));
|
||||
screen_container->screen = screen;
|
||||
|
||||
/* link it up */
|
||||
@ -746,7 +751,13 @@ static void render_load(running_machine *machine, int config_type, xml_data_node
|
||||
|
||||
/* apply the opposite orientation to the UI */
|
||||
if (target == render_get_ui_target())
|
||||
render_container_set_orientation(ui_container, orientation_add(orientation_reverse(tmpint), ui_container->orientation));
|
||||
{
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(ui_container, &settings);
|
||||
settings.orientation = orientation_add(orientation_reverse(tmpint), settings.orientation);
|
||||
render_container_set_user_settings(ui_container, &settings);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -756,17 +767,24 @@ static void render_load(running_machine *machine, int config_type, xml_data_node
|
||||
{
|
||||
int index = xml_get_attribute_int(screennode, "index", -1);
|
||||
render_container *container = get_screen_container_by_index(index);
|
||||
render_container_user_settings settings;
|
||||
|
||||
/* fetch current settings */
|
||||
render_container_get_user_settings(container, &settings);
|
||||
|
||||
/* fetch color controls */
|
||||
render_container_set_brightness(container, xml_get_attribute_float(screennode, "brightness", container->brightness));
|
||||
render_container_set_contrast(container, xml_get_attribute_float(screennode, "contrast", container->contrast));
|
||||
render_container_set_gamma(container, xml_get_attribute_float(screennode, "gamma", container->gamma));
|
||||
settings.brightness = xml_get_attribute_float(screennode, "brightness", settings.brightness);
|
||||
settings.contrast = xml_get_attribute_float(screennode, "contrast", settings.contrast);
|
||||
settings.gamma = xml_get_attribute_float(screennode, "gamma", settings.gamma);
|
||||
|
||||
/* fetch positioning controls */
|
||||
render_container_set_xoffset(container, xml_get_attribute_float(screennode, "hoffset", container->xoffset));
|
||||
render_container_set_xscale(container, xml_get_attribute_float(screennode, "hstretch", container->xscale));
|
||||
render_container_set_yoffset(container, xml_get_attribute_float(screennode, "voffset", container->yoffset));
|
||||
render_container_set_yscale(container, xml_get_attribute_float(screennode, "vstretch", container->yscale));
|
||||
settings.xoffset = xml_get_attribute_float(screennode, "hoffset", settings.xoffset);
|
||||
settings.xscale = xml_get_attribute_float(screennode, "hstretch", settings.xscale);
|
||||
settings.yoffset = xml_get_attribute_float(screennode, "voffset", settings.yoffset);
|
||||
settings.yscale = xml_get_attribute_float(screennode, "vstretch", settings.yscale);
|
||||
|
||||
/* set the new values */
|
||||
render_container_set_user_settings(container, &settings);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2691,184 +2709,42 @@ int render_container_is_empty(render_container *container)
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_orientation - return the
|
||||
orientation of a container
|
||||
render_container_get_user_settings - get the
|
||||
current user settings for a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
int render_container_get_orientation(render_container *container)
|
||||
void render_container_get_user_settings(render_container *container, render_container_user_settings *settings)
|
||||
{
|
||||
return container->orientation;
|
||||
settings->orientation = container->orientation;
|
||||
settings->brightness = container->brightness;
|
||||
settings->contrast = container->contrast;
|
||||
settings->gamma = container->gamma;
|
||||
settings->xscale = container->xscale;
|
||||
settings->yscale = container->yscale;
|
||||
settings->xoffset = container->xoffset;
|
||||
settings->yoffset = container->yoffset;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_orientation - set the
|
||||
orientation of a container
|
||||
render_container_set_user_settings - set the
|
||||
current user settings for a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_orientation(render_container *container, int orientation)
|
||||
void render_container_set_user_settings(render_container *container, const render_container_user_settings *settings)
|
||||
{
|
||||
container->orientation = orientation;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_brightness - return the
|
||||
brightness of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
float render_container_get_brightness(render_container *container)
|
||||
{
|
||||
return container->brightness;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_brightness - set the
|
||||
brightness of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_brightness(render_container *container, float brightness)
|
||||
{
|
||||
container->brightness = brightness;
|
||||
container->orientation = settings->orientation;
|
||||
container->brightness = settings->brightness;
|
||||
container->contrast = settings->contrast;
|
||||
container->gamma = settings->gamma;
|
||||
container->xscale = settings->xscale;
|
||||
container->yscale = settings->yscale;
|
||||
container->xoffset = settings->xoffset;
|
||||
container->yoffset = settings->yoffset;
|
||||
render_container_recompute_lookups(container);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_contrast - return the
|
||||
contrast of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
float render_container_get_contrast(render_container *container)
|
||||
{
|
||||
return container->contrast;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_contrast - set the
|
||||
contrast of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_contrast(render_container *container, float contrast)
|
||||
{
|
||||
container->contrast = contrast;
|
||||
render_container_recompute_lookups(container);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_gamma - return the
|
||||
gamma of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
float render_container_get_gamma(render_container *container)
|
||||
{
|
||||
return container->gamma;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_gamma - set the
|
||||
gamma of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_gamma(render_container *container, float gamma)
|
||||
{
|
||||
container->gamma = gamma;
|
||||
render_container_recompute_lookups(container);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_xscale - return the
|
||||
X scale of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
float render_container_get_xscale(render_container *container)
|
||||
{
|
||||
return container->xscale;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_xscale - set the
|
||||
X scale of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_xscale(render_container *container, float xscale)
|
||||
{
|
||||
container->xscale = xscale;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_yscale - return the
|
||||
X scale of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
float render_container_get_yscale(render_container *container)
|
||||
{
|
||||
return container->yscale;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_yscale - set the
|
||||
X scale of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_yscale(render_container *container, float yscale)
|
||||
{
|
||||
container->yscale = yscale;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_xoffset - return the
|
||||
X offset of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
float render_container_get_xoffset(render_container *container)
|
||||
{
|
||||
return container->xoffset;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_xoffset - set the
|
||||
X offset of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_xoffset(render_container *container, float xoffset)
|
||||
{
|
||||
container->xoffset = xoffset;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_get_yoffset - return the
|
||||
X offset of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
float render_container_get_yoffset(render_container *container)
|
||||
{
|
||||
return container->yoffset;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_yoffset - set the
|
||||
X offset of a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
void render_container_set_yoffset(render_container *container, float yoffset)
|
||||
{
|
||||
container->yoffset = yoffset;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_set_overlay - set the
|
||||
overlay bitmap for the container
|
||||
|
@ -293,6 +293,26 @@ struct _render_primitive_list
|
||||
};
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
render_container_user_settings - an object
|
||||
containing user-controllable settings for
|
||||
a container
|
||||
-------------------------------------------------*/
|
||||
|
||||
typedef struct _render_container_user_settings render_container_user_settings;
|
||||
struct _render_container_user_settings
|
||||
{
|
||||
int orientation; /* orientation */
|
||||
float brightness; /* brightness */
|
||||
float contrast; /* contrast */
|
||||
float gamma; /* gamma */
|
||||
float xscale; /* horizontal scale factor */
|
||||
float yscale; /* vertical scale factor */
|
||||
float xoffset; /* horizontal offset */
|
||||
float yoffset; /* vertical offset */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
FUNCTION PROTOTYPES
|
||||
@ -416,53 +436,11 @@ void render_container_empty(render_container *container);
|
||||
/* return true if a container has nothing in it */
|
||||
int render_container_is_empty(render_container *container);
|
||||
|
||||
/* return the orientation of a container */
|
||||
int render_container_get_orientation(render_container *container);
|
||||
/* get the current user settings for a container */
|
||||
void render_container_get_user_settings(render_container *container, render_container_user_settings *settings);
|
||||
|
||||
/* set the orientation of a container */
|
||||
void render_container_set_orientation(render_container *container, int orientation);
|
||||
|
||||
/* return the brightness of a container */
|
||||
float render_container_get_brightness(render_container *container);
|
||||
|
||||
/* set the brightness of a container */
|
||||
void render_container_set_brightness(render_container *container, float brightness);
|
||||
|
||||
/* return the contrast of a container */
|
||||
float render_container_get_contrast(render_container *container);
|
||||
|
||||
/* set the contrast of a container */
|
||||
void render_container_set_contrast(render_container *container, float contrast);
|
||||
|
||||
/* return the gamma of a container */
|
||||
float render_container_get_gamma(render_container *container);
|
||||
|
||||
/* set the gamma of a container */
|
||||
void render_container_set_gamma(render_container *container, float gamma);
|
||||
|
||||
/* return the X scale of a container */
|
||||
float render_container_get_xscale(render_container *container);
|
||||
|
||||
/* set the X scale of a container */
|
||||
void render_container_set_xscale(render_container *container, float xscale);
|
||||
|
||||
/* return the Y scale of a container */
|
||||
float render_container_get_yscale(render_container *container);
|
||||
|
||||
/* set the Y scale of a container */
|
||||
void render_container_set_yscale(render_container *container, float yscale);
|
||||
|
||||
/* return the X offset of a container */
|
||||
float render_container_get_xoffset(render_container *container);
|
||||
|
||||
/* set the X offset of a container */
|
||||
void render_container_set_xoffset(render_container *container, float xoffset);
|
||||
|
||||
/* return the Y offset of a container */
|
||||
float render_container_get_yoffset(render_container *container);
|
||||
|
||||
/* set the Y offset of a container */
|
||||
void render_container_set_yoffset(render_container *container, float yoffset);
|
||||
/* set the current user settings for a container */
|
||||
void render_container_set_user_settings(render_container *container, const render_container_user_settings *settings);
|
||||
|
||||
/* set the overlay bitmap for the container */
|
||||
void render_container_set_overlay(render_container *container, bitmap_t *bitmap);
|
||||
|
70
src/emu/ui.c
70
src/emu/ui.c
@ -1805,12 +1805,16 @@ static INT32 slider_brightness(running_machine *machine, INT32 newval, char *buf
|
||||
{
|
||||
const device_config *screen = arg;
|
||||
render_container *container = render_container_get_screen(screen);
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (buffer != NULL)
|
||||
{
|
||||
render_container_set_brightness(container, (float)newval * 0.001f);
|
||||
sprintf(buffer, "%s Brightness %.3f", slider_get_screen_desc(screen), render_container_get_brightness(container));
|
||||
settings.brightness = (float)newval * 0.001f;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
sprintf(buffer, "%s Brightness %.3f", slider_get_screen_desc(screen), settings.brightness);
|
||||
}
|
||||
return floor(render_container_get_brightness(container) * 1000.0f + 0.5f);
|
||||
return floor(settings.brightness * 1000.0f + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
@ -1823,12 +1827,16 @@ static INT32 slider_contrast(running_machine *machine, INT32 newval, char *buffe
|
||||
{
|
||||
const device_config *screen = arg;
|
||||
render_container *container = render_container_get_screen(screen);
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (buffer != NULL)
|
||||
{
|
||||
render_container_set_contrast(container, (float)newval * 0.001f);
|
||||
sprintf(buffer, "%s Contrast %.3f", slider_get_screen_desc(screen), render_container_get_contrast(container));
|
||||
settings.contrast = (float)newval * 0.001f;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
sprintf(buffer, "%s Contrast %.3f", slider_get_screen_desc(screen), settings.contrast);
|
||||
}
|
||||
return floor(render_container_get_contrast(container) * 1000.0f + 0.5f);
|
||||
return floor(settings.contrast * 1000.0f + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
@ -1840,12 +1848,16 @@ static INT32 slider_gamma(running_machine *machine, INT32 newval, char *buffer,
|
||||
{
|
||||
const device_config *screen = arg;
|
||||
render_container *container = render_container_get_screen(screen);
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (buffer != NULL)
|
||||
{
|
||||
render_container_set_gamma(container, (float)newval * 0.001f);
|
||||
sprintf(buffer, "%s Gamma %.3f", slider_get_screen_desc(screen), render_container_get_gamma(container));
|
||||
settings.gamma = (float)newval * 0.001f;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
sprintf(buffer, "%s Gamma %.3f", slider_get_screen_desc(screen), settings.gamma);
|
||||
}
|
||||
return floor(render_container_get_gamma(container) * 1000.0f + 0.5f);
|
||||
return floor(settings.gamma * 1000.0f + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
@ -1858,12 +1870,16 @@ static INT32 slider_xscale(running_machine *machine, INT32 newval, char *buffer,
|
||||
{
|
||||
const device_config *screen = arg;
|
||||
render_container *container = render_container_get_screen(screen);
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (buffer != NULL)
|
||||
{
|
||||
render_container_set_xscale(container, (float)newval * 0.001f);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Horiz Stretch", render_container_get_xscale(container));
|
||||
settings.xscale = (float)newval * 0.001f;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Horiz Stretch", settings.xscale);
|
||||
}
|
||||
return floor(render_container_get_xscale(container) * 1000.0f + 0.5f);
|
||||
return floor(settings.xscale * 1000.0f + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
@ -1876,12 +1892,16 @@ static INT32 slider_yscale(running_machine *machine, INT32 newval, char *buffer,
|
||||
{
|
||||
const device_config *screen = arg;
|
||||
render_container *container = render_container_get_screen(screen);
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (buffer != NULL)
|
||||
{
|
||||
render_container_set_yscale(container, (float)newval * 0.001f);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Vert Stretch", render_container_get_yscale(container));
|
||||
settings.yscale = (float)newval * 0.001f;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Vert Stretch", settings.yscale);
|
||||
}
|
||||
return floor(render_container_get_yscale(container) * 1000.0f + 0.5f);
|
||||
return floor(settings.yscale * 1000.0f + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
@ -1894,12 +1914,16 @@ static INT32 slider_xoffset(running_machine *machine, INT32 newval, char *buffer
|
||||
{
|
||||
const device_config *screen = arg;
|
||||
render_container *container = render_container_get_screen(screen);
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (buffer != NULL)
|
||||
{
|
||||
render_container_set_xoffset(container, (float)newval * 0.001f);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Horiz Position", render_container_get_xoffset(container));
|
||||
settings.xoffset = (float)newval * 0.001f;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Horiz Position", settings.xoffset);
|
||||
}
|
||||
return floor(render_container_get_xoffset(container) * 1000.0f + 0.5f);
|
||||
return floor(settings.xoffset * 1000.0f + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
@ -1912,12 +1936,16 @@ static INT32 slider_yoffset(running_machine *machine, INT32 newval, char *buffer
|
||||
{
|
||||
const device_config *screen = arg;
|
||||
render_container *container = render_container_get_screen(screen);
|
||||
render_container_user_settings settings;
|
||||
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (buffer != NULL)
|
||||
{
|
||||
render_container_set_yoffset(container, (float)newval * 0.001f);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Vert Position", render_container_get_yoffset(container));
|
||||
settings.yoffset = (float)newval * 0.001f;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Vert Position", settings.yoffset);
|
||||
}
|
||||
return floor(render_container_get_yoffset(container) * 1000.0f + 0.5f);
|
||||
return floor(settings.yoffset * 1000.0f + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2552,7 +2552,12 @@ static void menu_video_options(running_machine *machine, ui_menu *menu, void *pa
|
||||
int delta = (event->iptkey == IPT_UI_LEFT) ? ROT270 : ROT90;
|
||||
render_target_set_orientation(target, orientation_add(delta, render_target_get_orientation(target)));
|
||||
if (target == render_get_ui_target())
|
||||
render_container_set_orientation(render_container_get_ui(), orientation_add(delta ^ ROT180, render_container_get_orientation(render_container_get_ui())));
|
||||
{
|
||||
render_container_user_settings settings;
|
||||
render_container_get_user_settings(render_container_get_ui(), &settings);
|
||||
settings.orientation = orientation_add(delta ^ ROT180, settings.orientation);
|
||||
render_container_set_user_settings(render_container_get_ui(), &settings);
|
||||
}
|
||||
changed = TRUE;
|
||||
}
|
||||
break;
|
||||
|
@ -1182,6 +1182,7 @@ static DEVICE_START( video_screen )
|
||||
const device_config *screen = device;
|
||||
char unique_tag[40];
|
||||
screen_state *state = get_safe_token(screen);
|
||||
render_container_user_settings settings;
|
||||
render_container *container;
|
||||
screen_config *config;
|
||||
|
||||
@ -1216,14 +1217,16 @@ static DEVICE_START( video_screen )
|
||||
state->scanline0_timer = timer_alloc(scanline0_callback, (void *)screen);
|
||||
|
||||
/* configure the default cliparea */
|
||||
render_container_get_user_settings(container, &settings);
|
||||
if (config->xoffset != 0)
|
||||
render_container_set_xoffset(container, config->xoffset);
|
||||
settings.xoffset = config->xoffset;
|
||||
if (config->yoffset != 0)
|
||||
render_container_set_yoffset(container, config->yoffset);
|
||||
settings.yoffset = config->yoffset;
|
||||
if (config->xscale != 0)
|
||||
render_container_set_xscale(container, config->xscale);
|
||||
settings.xscale = config->xscale;
|
||||
if (config->yscale != 0)
|
||||
render_container_set_yscale(container, config->yscale);
|
||||
settings.yscale = config->yscale;
|
||||
render_container_set_user_settings(container, &settings);
|
||||
|
||||
/* allocate a timer to generate per-scanline updates */
|
||||
if (screen->machine->config->video_attributes & VIDEO_UPDATE_SCANLINE)
|
||||
|
Loading…
Reference in New Issue
Block a user