summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Nathan Woods <npwoods@mess.org>2014-03-02 13:21:32 +0000
committer Nathan Woods <npwoods@mess.org>2014-03-02 13:21:32 +0000
commit4b7c39ba4052b0d9b3d5214939b68c9742717423 (patch)
treed8ecbf20698a0e39a69fe9c4924c2f8105be0bad /src
parentd80d26245cbc93c6ac53c791b66dbe7eb54d8847 (diff)
Adding minimum width/height options; defaulting to '0' so there is no change in behavior (the menubar branch will have different defualts)
Diffstat (limited to 'src')
-rw-r--r--src/emu/emuopts.c2
-rw-r--r--src/emu/emuopts.h4
-rw-r--r--src/emu/render.c18
3 files changed, 21 insertions, 3 deletions
diff --git a/src/emu/emuopts.c b/src/emu/emuopts.c
index 6da6d5f7335..8495b4e457f 100644
--- a/src/emu/emuopts.c
+++ b/src/emu/emuopts.c
@@ -105,6 +105,8 @@ const options_entry emu_options::s_option_entries[] =
{ OPTION_GAMMA "(0.1-3.0)", "1.0", OPTION_FLOAT, "default game screen gamma correction" },
{ OPTION_PAUSE_BRIGHTNESS "(0.0-1.0)", "0.65", OPTION_FLOAT, "amount to scale the screen brightness when paused" },
{ OPTION_EFFECT, "none", OPTION_STRING, "name of a PNG file to use for visual effects, or 'none'" },
+ { OPTION_MINIMUM_WIDTH, "0", OPTION_INTEGER, "minimum screen width" },
+ { OPTION_MINIMUM_HEIGHT, "0", OPTION_INTEGER, "minimum screen height" },
// vector options
{ NULL, NULL, OPTION_HEADER, "CORE VECTOR OPTIONS" },
diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h
index 73c55cddbae..f7560722413 100644
--- a/src/emu/emuopts.h
+++ b/src/emu/emuopts.h
@@ -113,6 +113,8 @@ enum
#define OPTION_GAMMA "gamma"
#define OPTION_PAUSE_BRIGHTNESS "pause_brightness"
#define OPTION_EFFECT "effect"
+#define OPTION_MINIMUM_WIDTH "minimum_width"
+#define OPTION_MINIMUM_HEIGHT "minimum_height"
// core vector options
#define OPTION_ANTIALIAS "antialias"
@@ -279,6 +281,8 @@ public:
float gamma() const { return float_value(OPTION_GAMMA); }
float pause_brightness() const { return float_value(OPTION_PAUSE_BRIGHTNESS); }
const char *effect() const { return value(OPTION_EFFECT); }
+ int minimum_width() const { return int_value(OPTION_MINIMUM_WIDTH); }
+ int minimum_height() const { return int_value(OPTION_MINIMUM_HEIGHT); }
// core vector options
bool antialias() const { return bool_value(OPTION_ANTIALIAS); }
diff --git a/src/emu/render.c b/src/emu/render.c
index 91f87f0c6e7..87b108a4c1c 100644
--- a/src/emu/render.c
+++ b/src/emu/render.c
@@ -1232,10 +1232,22 @@ void render_target::compute_minimum_size(INT32 &minwidth, INT32 &minheight)
for (layout_view::item *curitem = m_curview->first_item(layer); curitem != NULL; curitem = curitem->next())
if (curitem->screen() != NULL)
{
- // use a hard-coded default visible area for vector screens
screen_device *screen = curitem->screen();
- const rectangle vectorvis(0, 639, 0, 479);
- const rectangle &visarea = (screen->screen_type() == SCREEN_TYPE_VECTOR) ? vectorvis : screen->visible_area();
+
+ // get visible area
+ rectangle visarea = (screen->screen_type() == SCREEN_TYPE_VECTOR)
+ ? rectangle(0, 639, 0, 479) // use a hard-coded default visible area for vector screens
+ : screen->visible_area();
+
+ // is our visible area too small? if so, we need to bump up the size
+ float minimum_width = m_manager.machine().options().minimum_width();
+ float minimum_height = m_manager.machine().options().minimum_height();
+ INT32 factor = (INT32) ceil(MAX(minimum_width / visarea.width(), minimum_height / visarea.height()));
+ factor = MAX(factor, 1);
+ visarea.min_x *= factor;
+ visarea.min_y *= factor;
+ visarea.max_x *= factor;
+ visarea.max_y *= factor;
// apply target orientation to the bounds
render_bounds bounds = curitem->bounds();