diff options
| author | 2015-02-12 10:42:02 +0100 | |
|---|---|---|
| committer | 2015-03-16 11:42:46 +0100 | |
| commit | b1a0e0167d8655e75275f7560958580ebce2d077 (patch) | |
| tree | dc58da4100bb70da19295647508c2c8935917e26 | |
| parent | 41cfcb26c4ecbcfae6f9648dd3eec53902219d77 (diff) | |
ui: use per-container pixel aspect (LUA draw_text bugfix)
Do not assume ui-container aspect when drawing on other containers.
This fixes LUA draw_text() in multi-screens games, where the font
aspect for each screen is wrongly computed on the aggregated target.
Signed-off-by: Luca Bruno <lucab@debian.org>
| -rw-r--r-- | src/emu/render.c | 39 | ||||
| -rw-r--r-- | src/emu/render.h | 2 | ||||
| -rw-r--r-- | src/emu/ui/ui.c | 4 |
3 files changed, 30 insertions, 15 deletions
diff --git a/src/emu/render.c b/src/emu/render.c index 2eed9176550..46ae77e8909 100644 --- a/src/emu/render.c +++ b/src/emu/render.c @@ -2483,26 +2483,41 @@ render_target *render_manager::target_by_index(int index) const // fonts //------------------------------------------------- -float render_manager::ui_aspect() +float render_manager::ui_aspect(render_container *rc) { - int orient = orientation_add(m_ui_target->orientation(), m_ui_container->orientation()); + int orient = 0; + float aspect = 1.0f; - // based on the orientation of the target, compute height/width or width/height - float aspect; - if (!(orient & ORIENTATION_SWAP_XY)) - aspect = (float)m_ui_target->height() / (float)m_ui_target->width(); - else - aspect = (float)m_ui_target->width() / (float)m_ui_target->height(); + if (rc == m_ui_container || rc == NULL) { + // ui container, aggregated multi-screen target - // if we have a valid pixel aspect, apply that and return - if (m_ui_target->pixel_aspect() != 0.0f) - return aspect / m_ui_target->pixel_aspect(); + orient = orientation_add(m_ui_target->orientation(), m_ui_container->orientation()); + // based on the orientation of the target, compute height/width or width/height + if (!(orient & ORIENTATION_SWAP_XY)) + aspect = (float)m_ui_target->height() / (float)m_ui_target->width(); + else + aspect = (float)m_ui_target->width() / (float)m_ui_target->height(); + + // if we have a valid pixel aspect, apply that and return + if (m_ui_target->pixel_aspect() != 0.0f) + return (aspect / m_ui_target->pixel_aspect()); + } else { + // single screen container + + orient = rc->orientation(); + // based on the orientation of the target, compute height/width or width/height + if (!(orient & ORIENTATION_SWAP_XY)) + aspect = (float)rc->screen()->visible_area().height() / (float)rc->screen()->visible_area().width(); + else + aspect = (float)rc->screen()->visible_area().width() / (float)rc->screen()->visible_area().height(); + } - // if not, clamp for extreme proportions + // clamp for extreme proportions if (aspect < 0.66f) aspect = 0.66f; if (aspect > 1.5f) aspect = 1.5f; + return aspect; } diff --git a/src/emu/render.h b/src/emu/render.h index 2ee8e108a09..bf058258577 100644 --- a/src/emu/render.h +++ b/src/emu/render.h @@ -744,7 +744,7 @@ public: // UI targets render_target &ui_target() const { assert(m_ui_target != NULL); return *m_ui_target; } void set_ui_target(render_target &target) { m_ui_target = ⌖ } - float ui_aspect(); + float ui_aspect(render_container *rc = NULL); // UI containers render_container &ui_container() const { assert(m_ui_container != NULL); return *m_ui_container; } diff --git a/src/emu/ui/ui.c b/src/emu/ui/ui.c index 664775f2b1b..b968937cbea 100644 --- a/src/emu/ui/ui.c +++ b/src/emu/ui/ui.c @@ -456,7 +456,7 @@ void ui_manager::update_and_render(render_container *container) { float mouse_y=-1,mouse_x=-1; if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) { - container->add_quad(mouse_x,mouse_y,mouse_x + 0.05*container->manager().ui_aspect(),mouse_y + 0.05,UI_TEXT_COLOR,m_mouse_arrow_texture,PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + container->add_quad(mouse_x,mouse_y,mouse_x + 0.05*container->manager().ui_aspect(container),mouse_y + 0.05,UI_TEXT_COLOR,m_mouse_arrow_texture,PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } } } @@ -600,7 +600,7 @@ void ui_manager::draw_text_full(render_container *container, const char *origs, const char *linestart; float cury = y; float maxwidth = 0; - float aspect = machine().render().ui_aspect(); + float aspect = machine().render().ui_aspect(container); // if we don't want wrapping, guarantee a huge wrapwidth if (wrap == WRAP_NEVER) |
