mirror of
https://github.com/holub/mame
synced 2025-06-01 10:31:48 +03:00
encapsulate mouse translation in the menu code, make more stuff const
This commit is contained in:
parent
32c256eccc
commit
95254fb277
@ -1060,19 +1060,18 @@ void menu_palette_sel::draw(uint32_t flags)
|
||||
auto line_height = ui().get_line_height();
|
||||
auto lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect();
|
||||
auto ud_arrow_width = line_height * machine().render().ui_aspect();
|
||||
auto gutter_width = lr_arrow_width * 1.3f;
|
||||
int itemnum, linenum;
|
||||
float const gutter_width = lr_arrow_width * 1.3f;
|
||||
|
||||
if (&machine().system() == &GAME_NAME(___empty))
|
||||
draw_background();
|
||||
|
||||
// compute the width and height of the full menu
|
||||
auto visible_width = 0.0f;
|
||||
auto visible_main_menu_height = 0.0f;
|
||||
for (auto & pitem : item)
|
||||
float visible_width = 0.0f;
|
||||
float visible_main_menu_height = 0.0f;
|
||||
for (auto &pitem : item)
|
||||
{
|
||||
// compute width of left hand side
|
||||
auto total_width = gutter_width + ui().get_string_width(pitem.text.c_str()) + gutter_width;
|
||||
float total_width = gutter_width + ui().get_string_width(pitem.text.c_str()) + gutter_width;
|
||||
|
||||
// add in width of right hand side
|
||||
if (!pitem.subtext.empty())
|
||||
@ -1087,7 +1086,7 @@ void menu_palette_sel::draw(uint32_t flags)
|
||||
}
|
||||
|
||||
// account for extra space at the top and bottom
|
||||
auto visible_extra_menu_height = get_customtop() + get_custombottom();
|
||||
float const visible_extra_menu_height = get_customtop() + get_custombottom();
|
||||
|
||||
// add a little bit of slop for rounding
|
||||
visible_width += 0.01f;
|
||||
@ -1112,10 +1111,10 @@ void menu_palette_sel::draw(uint32_t flags)
|
||||
visible_top += get_customtop();
|
||||
|
||||
// first add us a box
|
||||
float x1 = visible_left - UI_BOX_LR_BORDER;
|
||||
float y1 = visible_top - UI_BOX_TB_BORDER;
|
||||
float x2 = visible_left + visible_width + UI_BOX_LR_BORDER;
|
||||
float y2 = visible_top + visible_main_menu_height + UI_BOX_TB_BORDER;
|
||||
float const x1 = visible_left - UI_BOX_LR_BORDER;
|
||||
float const y1 = visible_top - UI_BOX_TB_BORDER;
|
||||
float const x2 = visible_left + visible_width + UI_BOX_LR_BORDER;
|
||||
float const y2 = visible_top + visible_main_menu_height + UI_BOX_TB_BORDER;
|
||||
ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR);
|
||||
|
||||
// determine the first visible line based on the current selection
|
||||
@ -1130,43 +1129,37 @@ void menu_palette_sel::draw(uint32_t flags)
|
||||
float effective_left = visible_left + gutter_width;
|
||||
|
||||
// locate mouse
|
||||
mouse_hit = false;
|
||||
mouse_button = false;
|
||||
mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button);
|
||||
if (mouse_target != nullptr)
|
||||
if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y))
|
||||
mouse_hit = true;
|
||||
map_mouse();
|
||||
|
||||
// loop over visible lines
|
||||
hover = item.size() + 1;
|
||||
float line_x0 = x1 + 0.5f * UI_LINE_WIDTH;
|
||||
float line_x1 = x2 - 0.5f * UI_LINE_WIDTH;
|
||||
float const line_x0 = x1 + 0.5f * UI_LINE_WIDTH;
|
||||
float const line_x1 = x2 - 0.5f * UI_LINE_WIDTH;
|
||||
|
||||
for (linenum = 0; linenum < visible_lines; linenum++)
|
||||
for (int linenum = 0; linenum < visible_lines; linenum++)
|
||||
{
|
||||
float line_y = visible_top + (float)linenum * line_height;
|
||||
itemnum = top_line + linenum;
|
||||
const menu_item &pitem = item[itemnum];
|
||||
const char *itemtext = pitem.text.c_str();
|
||||
rgb_t fgcolor = UI_TEXT_COLOR;
|
||||
rgb_t bgcolor = UI_TEXT_BG_COLOR;
|
||||
float line_y0 = line_y;
|
||||
float line_y1 = line_y + line_height;
|
||||
float const line_y = visible_top + float(linenum) * line_height;
|
||||
int const itemnum = top_line + linenum;
|
||||
menu_item const &pitem = item[itemnum];
|
||||
char const *const itemtext = pitem.text.c_str();
|
||||
float const line_y0 = line_y;
|
||||
float const line_y1 = line_y + line_height;
|
||||
|
||||
// set the hover if this is our item
|
||||
if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem))
|
||||
if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1) && is_selectable(pitem))
|
||||
hover = itemnum;
|
||||
|
||||
// if we're selected, draw with a different background
|
||||
rgb_t fgcolor = UI_TEXT_COLOR;
|
||||
rgb_t bgcolor = UI_TEXT_BG_COLOR;
|
||||
if (itemnum == selected)
|
||||
{
|
||||
// if we're selected, draw with a different background
|
||||
fgcolor = UI_SELECTED_COLOR;
|
||||
bgcolor = UI_SELECTED_BG_COLOR;
|
||||
}
|
||||
|
||||
// else if the mouse is over this item, draw with a different background
|
||||
else if (itemnum == hover)
|
||||
{
|
||||
// else if the mouse is over this item, draw with a different background
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
bgcolor = UI_MOUSEOVER_BG_COLOR;
|
||||
}
|
||||
@ -1175,46 +1168,46 @@ void menu_palette_sel::draw(uint32_t flags)
|
||||
if (bgcolor != UI_TEXT_BG_COLOR)
|
||||
highlight(line_x0, line_y0, line_x1, line_y1, bgcolor);
|
||||
|
||||
// if we're on the top line, display the up arrow
|
||||
if (linenum == 0 && top_line != 0)
|
||||
{
|
||||
// if we're on the top line, display the up arrow
|
||||
draw_arrow(
|
||||
0.5f * (x1 + x2) - 0.5f * ud_arrow_width,
|
||||
line_y + 0.25f * line_height,
|
||||
0.5f * (x1 + x2) + 0.5f * ud_arrow_width,
|
||||
line_y + 0.75f * line_height,
|
||||
fgcolor,
|
||||
ROT0);
|
||||
0.5f * (x1 + x2) - 0.5f * ud_arrow_width,
|
||||
line_y + 0.25f * line_height,
|
||||
0.5f * (x1 + x2) + 0.5f * ud_arrow_width,
|
||||
line_y + 0.75f * line_height,
|
||||
fgcolor,
|
||||
ROT0);
|
||||
if (hover == itemnum)
|
||||
hover = HOVER_ARROW_UP;
|
||||
}
|
||||
|
||||
// if we're on the bottom line, display the down arrow
|
||||
else if (linenum == visible_lines - 1 && itemnum != item.size() - 1)
|
||||
{
|
||||
// if we're on the bottom line, display the down arrow
|
||||
draw_arrow(
|
||||
0.5f * (x1 + x2) - 0.5f * ud_arrow_width,
|
||||
line_y + 0.25f * line_height,
|
||||
0.5f * (x1 + x2) + 0.5f * ud_arrow_width,
|
||||
line_y + 0.75f * line_height,
|
||||
fgcolor,
|
||||
ROT0 ^ ORIENTATION_FLIP_Y);
|
||||
0.5f * (x1 + x2) - 0.5f * ud_arrow_width,
|
||||
line_y + 0.25f * line_height,
|
||||
0.5f * (x1 + x2) + 0.5f * ud_arrow_width,
|
||||
line_y + 0.75f * line_height,
|
||||
fgcolor,
|
||||
ROT0 ^ ORIENTATION_FLIP_Y);
|
||||
if (hover == itemnum)
|
||||
hover = HOVER_ARROW_DOWN;
|
||||
}
|
||||
|
||||
// if we're just a divider, draw a line
|
||||
else if (pitem.type == menu_item_type::SEPARATOR)
|
||||
{
|
||||
// if we're just a divider, draw a line
|
||||
container().add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||
|
||||
// if we don't have a subitem, just draw the string centered
|
||||
}
|
||||
else if (pitem.subtext.empty())
|
||||
{
|
||||
// if we don't have a subitem, just draw the string centered
|
||||
ui().draw_text_full(container(), itemtext, effective_left, line_y, effective_width,
|
||||
ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr);
|
||||
|
||||
// otherwise, draw the item on the left and the subitem text on the right
|
||||
ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
// otherwise, draw the item on the left and the subitem text on the right
|
||||
const char *subitem_text = pitem.subtext.c_str();
|
||||
rgb_t color = rgb_t((uint32_t)strtoul(subitem_text, nullptr, 16));
|
||||
|
||||
|
@ -151,7 +151,6 @@ void menu_dats_view::draw(uint32_t flags)
|
||||
auto line_height = ui().get_line_height();
|
||||
auto ud_arrow_width = line_height * machine().render().ui_aspect();
|
||||
auto gutter_width = 0.52f * line_height * machine().render().ui_aspect();
|
||||
mouse_x = -1, mouse_y = -1;
|
||||
float visible_width = 1.0f - 2.0f * UI_BOX_LR_BORDER;
|
||||
float visible_left = (1.0f - visible_width) * 0.5f;
|
||||
|
||||
@ -163,12 +162,7 @@ void menu_dats_view::draw(uint32_t flags)
|
||||
float visible_extra_menu_height = get_customtop() + get_custombottom() + extra_height;
|
||||
|
||||
// locate mouse
|
||||
mouse_hit = false;
|
||||
mouse_button = false;
|
||||
mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button);
|
||||
if (mouse_target != nullptr)
|
||||
if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y))
|
||||
mouse_hit = true;
|
||||
map_mouse();
|
||||
|
||||
// account for extra space at the top and bottom
|
||||
float visible_main_menu_height = 1.0f - 2.0f * UI_BOX_TB_BORDER - visible_extra_menu_height;
|
||||
@ -219,7 +213,7 @@ void menu_dats_view::draw(uint32_t flags)
|
||||
draw_arrow(0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height,
|
||||
0.5f * (x1 + x2) + 0.5f * ud_arrow_width, line_y + 0.75f * line_height, fgcolor, ROT0);
|
||||
|
||||
if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y)
|
||||
if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1))
|
||||
{
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
bgcolor = UI_MOUSEOVER_BG_COLOR;
|
||||
@ -233,7 +227,7 @@ void menu_dats_view::draw(uint32_t flags)
|
||||
draw_arrow(0.5f * (x1 + x2) - 0.5f * ud_arrow_width, line_y + 0.25f * line_height,
|
||||
0.5f * (x1 + x2) + 0.5f * ud_arrow_width, line_y + 0.75f * line_height, fgcolor, ROT0 ^ ORIENTATION_FLIP_Y);
|
||||
|
||||
if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y)
|
||||
if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1))
|
||||
{
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
bgcolor = UI_MOUSEOVER_BG_COLOR;
|
||||
@ -261,7 +255,7 @@ void menu_dats_view::draw(uint32_t flags)
|
||||
rgb_t fgcolor = UI_SELECTED_COLOR;
|
||||
rgb_t bgcolor = UI_SELECTED_BG_COLOR;
|
||||
|
||||
if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem))
|
||||
if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1) && is_selectable(pitem))
|
||||
hover = count;
|
||||
|
||||
if (pitem.type == menu_item_type::SEPARATOR)
|
||||
|
@ -89,8 +89,8 @@ void menu_file_selector::custom_render(void *selectedref, float top, float botto
|
||||
y1 += UI_BOX_TB_BORDER;
|
||||
|
||||
size_t hit_start = 0, hit_span = 0;
|
||||
if (mouse_hit
|
||||
&& layout.hit_test(mouse_x - x1, mouse_y - y1, hit_start, hit_span)
|
||||
if (is_mouse_hit()
|
||||
&& layout.hit_test(get_mouse_x() - x1, get_mouse_y() - y1, hit_start, hit_span)
|
||||
&& m_current_directory.substr(hit_start, hit_span) != PATH_SEPARATOR)
|
||||
{
|
||||
// we're hovering over a directory! highlight it
|
||||
|
@ -237,6 +237,10 @@ menu::menu(mame_ui_manager &mui, render_container &container)
|
||||
, m_custombottom(0.0f)
|
||||
, m_resetpos(0)
|
||||
, m_resetref(nullptr)
|
||||
, m_mouse_hit(false)
|
||||
, m_mouse_button(false)
|
||||
, m_mouse_x(-1.0f)
|
||||
, m_mouse_y(-1.0f)
|
||||
{
|
||||
assert(m_global_state); // not calling init is bad
|
||||
|
||||
@ -602,16 +606,10 @@ void menu::draw(uint32_t flags)
|
||||
float const effective_left = visible_left + gutter_width;
|
||||
|
||||
// locate mouse
|
||||
mouse_hit = false;
|
||||
mouse_button = false;
|
||||
if (!customonly && !noinput)
|
||||
{
|
||||
int32_t mouse_target_x, mouse_target_y;
|
||||
render_target *mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button);
|
||||
if (mouse_target != nullptr)
|
||||
if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y))
|
||||
mouse_hit = true;
|
||||
}
|
||||
map_mouse();
|
||||
else
|
||||
ignore_mouse();
|
||||
|
||||
// loop over visible lines
|
||||
hover = item.size() + 1;
|
||||
@ -633,7 +631,7 @@ void menu::draw(uint32_t flags)
|
||||
float const line_y1 = line_y0 + line_height;
|
||||
|
||||
// set the hover if this is our item
|
||||
if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem))
|
||||
if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1) && is_selectable(pitem))
|
||||
hover = itemnum;
|
||||
|
||||
// if we're selected, draw with a different background
|
||||
@ -861,6 +859,38 @@ void menu::draw_text_box()
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// map_mouse - map mouse pointer location to menu
|
||||
// coordinates
|
||||
//-------------------------------------------------
|
||||
|
||||
void menu::map_mouse()
|
||||
{
|
||||
ignore_mouse();
|
||||
int32_t mouse_target_x, mouse_target_y;
|
||||
render_target *const mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &m_mouse_button);
|
||||
if (mouse_target)
|
||||
{
|
||||
if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), m_mouse_x, m_mouse_y))
|
||||
m_mouse_hit = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ignore_mouse - set members to ignore mouse
|
||||
// input
|
||||
//-------------------------------------------------
|
||||
|
||||
void menu::ignore_mouse()
|
||||
{
|
||||
m_mouse_hit = false;
|
||||
m_mouse_button = false;
|
||||
m_mouse_x = -1.0f;
|
||||
m_mouse_y = -1.0f;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// handle_events - generically handle
|
||||
// input events for a menu
|
||||
|
@ -97,13 +97,6 @@ private:
|
||||
virtual void draw(uint32_t flags);
|
||||
void draw_text_box();
|
||||
|
||||
public:
|
||||
// mouse handling
|
||||
bool mouse_hit, mouse_button;
|
||||
render_target *mouse_target;
|
||||
int32_t mouse_target_x, mouse_target_y;
|
||||
float mouse_x, mouse_y;
|
||||
|
||||
protected:
|
||||
using cleanup_callback = std::function<void(running_machine &)>;
|
||||
using bitmap_ptr = widgets_manager::bitmap_ptr;
|
||||
@ -211,6 +204,22 @@ protected:
|
||||
// configure the menu for custom rendering
|
||||
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2);
|
||||
|
||||
// map mouse to menu coordinates
|
||||
void map_mouse();
|
||||
|
||||
// clear the mouse position
|
||||
void ignore_mouse();
|
||||
|
||||
bool is_mouse_hit() const { return m_mouse_hit; } // is mouse pointer inside menu's render container?
|
||||
float get_mouse_x() const { return m_mouse_x; } // mouse x location in menu coordinates
|
||||
float get_mouse_y() const { return m_mouse_y; } // mouse y location in menu coordinates
|
||||
|
||||
// mouse hit test - checks whether mouse_x is in [x0, x1) and mouse_y is in [y0, y1)
|
||||
bool mouse_in_rect(float x0, float y0, float x1, float y1) const
|
||||
{
|
||||
return m_mouse_hit && (m_mouse_x >= x0) && (m_mouse_x < x1) && (m_mouse_y >= y0) && (m_mouse_y < y1);
|
||||
}
|
||||
|
||||
// overridable event handling
|
||||
virtual void handle_events(uint32_t flags, event &ev);
|
||||
virtual void handle_keys(uint32_t flags, int &iptkey);
|
||||
@ -313,6 +322,11 @@ private:
|
||||
int m_resetpos; // reset position
|
||||
void *m_resetref; // reset reference
|
||||
|
||||
bool m_mouse_hit;
|
||||
bool m_mouse_button;
|
||||
float m_mouse_x;
|
||||
float m_mouse_y;
|
||||
|
||||
static std::mutex s_global_state_guard;
|
||||
static global_state_map s_global_states;
|
||||
};
|
||||
|
@ -1559,12 +1559,12 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2)
|
||||
rgb_t bgcolor = UI_TEXT_BG_COLOR;
|
||||
rgb_t fgcolor = UI_TEXT_COLOR;
|
||||
|
||||
if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y1 + line_height_max > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x2, y1 + line_height_max))
|
||||
{
|
||||
bgcolor = UI_MOUSEOVER_BG_COLOR;
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
hover = phover + filter;
|
||||
menu::highlight(x1, y1, x2, y1+ line_height_max, bgcolor);
|
||||
menu::highlight(x1, y1, x2, y1 + line_height_max, bgcolor);
|
||||
}
|
||||
|
||||
if (highlight == filter && get_focus() == focused_menu::left)
|
||||
@ -1626,7 +1626,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2)
|
||||
|
||||
ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B));
|
||||
|
||||
if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x2, y2))
|
||||
{
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
hover = HOVER_LPANEL_ARROW;
|
||||
@ -1649,7 +1649,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2)
|
||||
|
||||
ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B));
|
||||
|
||||
if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x2, y2))
|
||||
{
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
hover = HOVER_LPANEL_ARROW;
|
||||
|
@ -469,28 +469,28 @@ void menu_select_launch::draw_common_arrow(float origx1, float origy1, float ori
|
||||
auto gutter_width = lr_arrow_width * 1.3f;
|
||||
|
||||
// set left-right arrows dimension
|
||||
float ar_x0 = 0.5f * (origx2 + origx1) + 0.5f * title_size + gutter_width - lr_arrow_width;
|
||||
float ar_y0 = origy1 + 0.1f * line_height;
|
||||
float ar_x1 = 0.5f * (origx2 + origx1) + 0.5f * title_size + gutter_width;
|
||||
float ar_y1 = origy1 + 0.9f * line_height;
|
||||
float const ar_x0 = 0.5f * (origx2 + origx1) + 0.5f * title_size + gutter_width - lr_arrow_width;
|
||||
float const ar_y0 = origy1 + 0.1f * line_height;
|
||||
float const ar_x1 = 0.5f * (origx2 + origx1) + 0.5f * title_size + gutter_width;
|
||||
float const ar_y1 = origy1 + 0.9f * line_height;
|
||||
|
||||
float al_x0 = 0.5f * (origx2 + origx1) - 0.5f * title_size - gutter_width;
|
||||
float al_y0 = origy1 + 0.1f * line_height;
|
||||
float al_x1 = 0.5f * (origx2 + origx1) - 0.5f * title_size - gutter_width + lr_arrow_width;
|
||||
float al_y1 = origy1 + 0.9f * line_height;
|
||||
float const al_x0 = 0.5f * (origx2 + origx1) - 0.5f * title_size - gutter_width;
|
||||
float const al_y0 = origy1 + 0.1f * line_height;
|
||||
float const al_x1 = 0.5f * (origx2 + origx1) - 0.5f * title_size - gutter_width + lr_arrow_width;
|
||||
float const al_y1 = origy1 + 0.9f * line_height;
|
||||
|
||||
rgb_t fgcolor_right, fgcolor_left;
|
||||
fgcolor_right = fgcolor_left = UI_TEXT_COLOR;
|
||||
|
||||
// set hover
|
||||
if (mouse_hit && ar_x0 <= mouse_x && ar_x1 > mouse_x && ar_y0 <= mouse_y && ar_y1 > mouse_y && current != dmax)
|
||||
if (mouse_in_rect(ar_x0, ar_y0, ar_x1, ar_y1) && current != dmax)
|
||||
{
|
||||
ui().draw_textured_box(container(), ar_x0 + 0.01f, ar_y0, ar_x1 - 0.01f, ar_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43),
|
||||
hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(1));
|
||||
hover = HOVER_UI_RIGHT;
|
||||
fgcolor_right = UI_MOUSEOVER_COLOR;
|
||||
}
|
||||
else if (mouse_hit && al_x0 <= mouse_x && al_x1 > mouse_x && al_y0 <= mouse_y && al_y1 > mouse_y && current != dmin)
|
||||
else if (mouse_in_rect(al_x0, al_y0, al_x1, al_y1) && current != dmin)
|
||||
{
|
||||
ui().draw_textured_box(container(), al_x0 + 0.01f, al_y0, al_x1 - 0.01f, al_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43),
|
||||
hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(1));
|
||||
@ -522,7 +522,7 @@ void menu_select_launch::draw_info_arrow(int ub, float origx1, float origx2, flo
|
||||
rgb_t fgcolor = UI_TEXT_COLOR;
|
||||
uint32_t orientation = (!ub) ? ROT0 : ROT0 ^ ORIENTATION_FLIP_Y;
|
||||
|
||||
if (mouse_hit && origx1 <= mouse_x && origx2 > mouse_x && oy1 <= mouse_y && oy1 + (line_height * text_size) > mouse_y)
|
||||
if (mouse_in_rect(origx1, oy1, origx2, oy1 + (line_height * text_size)))
|
||||
{
|
||||
ui().draw_textured_box(container(), origx1 + 0.01f, oy1, origx2 - 0.01f, oy1 + (line_height * text_size), UI_MOUSEOVER_BG_COLOR,
|
||||
rgb_t(43, 43, 43), hilight_main_texture(), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(1));
|
||||
@ -531,7 +531,7 @@ void menu_select_launch::draw_info_arrow(int ub, float origx1, float origx2, flo
|
||||
}
|
||||
|
||||
draw_arrow(0.5f * (origx1 + origx2) - 0.5f * (ud_arrow_width * text_size), oy1 + 0.25f * (line_height * text_size),
|
||||
0.5f * (origx1 + origx2) + 0.5f * (ud_arrow_width * text_size), oy1 + 0.75f * (line_height * text_size), fgcolor, orientation);
|
||||
0.5f * (origx1 + origx2) + 0.5f * (ud_arrow_width * text_size), oy1 + 0.75f * (line_height * text_size), fgcolor, orientation);
|
||||
}
|
||||
|
||||
|
||||
@ -565,7 +565,7 @@ void menu_select_launch::draw_toolbar(float x1, float y1, float x2, float y2)
|
||||
if (t_bitmap[z] && t_bitmap[z]->valid())
|
||||
{
|
||||
rgb_t color(0xEFEFEFEF);
|
||||
if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x2, y2))
|
||||
{
|
||||
hover = HOVER_B_FAV + z;
|
||||
color = rgb_t::white();
|
||||
@ -981,19 +981,19 @@ void menu_select_launch::handle_keys(uint32_t flags, int &iptkey)
|
||||
|
||||
void menu_select_launch::handle_events(uint32_t flags, event &ev)
|
||||
{
|
||||
auto stop = false;
|
||||
bool stop = false;
|
||||
ui_event local_menu_event;
|
||||
|
||||
if (m_pressed)
|
||||
{
|
||||
bool pressed = mouse_pressed();
|
||||
int32_t m_target_x, m_target_y;
|
||||
bool m_button;
|
||||
auto mouse_target = machine().ui_input().find_mouse(&m_target_x, &m_target_y, &m_button);
|
||||
if (mouse_target && m_button && (hover == HOVER_ARROW_DOWN || hover == HOVER_ARROW_UP))
|
||||
bool const pressed = mouse_pressed();
|
||||
int32_t target_x, target_y;
|
||||
bool button;
|
||||
render_target *const mouse_target = machine().ui_input().find_mouse(&target_x, &target_y, &button);
|
||||
if (mouse_target && button && (hover == HOVER_ARROW_DOWN || hover == HOVER_ARROW_UP))
|
||||
{
|
||||
if (pressed)
|
||||
machine().ui_input().push_mouse_down_event(mouse_target, m_target_x, m_target_y);
|
||||
machine().ui_input().push_mouse_down_event(mouse_target, target_x, target_y);
|
||||
}
|
||||
else
|
||||
reset_pressed();
|
||||
@ -1190,7 +1190,6 @@ void menu_select_launch::draw(uint32_t flags)
|
||||
float line_height = ui().get_line_height();
|
||||
float ud_arrow_width = line_height * machine().render().ui_aspect();
|
||||
float gutter_width = 0.52f * ud_arrow_width;
|
||||
mouse_x = -1, mouse_y = -1;
|
||||
float right_panel_size = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_RIGHT_PANEL) ? 2.0f * UI_BOX_LR_BORDER : 0.3f;
|
||||
float visible_width = 1.0f - 4.0f * UI_BOX_LR_BORDER;
|
||||
float primary_left = (1.0f - visible_width) * 0.5f;
|
||||
@ -1204,15 +1203,10 @@ void menu_select_launch::draw(uint32_t flags)
|
||||
float visible_extra_menu_height = get_customtop() + get_custombottom() + extra_height;
|
||||
|
||||
// locate mouse
|
||||
mouse_hit = false;
|
||||
mouse_button = false;
|
||||
if (!noinput)
|
||||
{
|
||||
mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button);
|
||||
if (mouse_target)
|
||||
if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, container(), mouse_x, mouse_y))
|
||||
mouse_hit = true;
|
||||
}
|
||||
if (noinput)
|
||||
ignore_mouse();
|
||||
else
|
||||
map_mouse();
|
||||
|
||||
// account for extra space at the top and bottom
|
||||
float visible_main_menu_height = 1.0f - 2.0f * UI_BOX_TB_BORDER - visible_extra_menu_height;
|
||||
@ -1277,7 +1271,7 @@ void menu_select_launch::draw(uint32_t flags)
|
||||
float line_y1 = line_y + line_height;
|
||||
|
||||
// set the hover if this is our item
|
||||
if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem))
|
||||
if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1) && is_selectable(pitem))
|
||||
hover = itemnum;
|
||||
|
||||
// if we're selected, draw with a different background
|
||||
@ -1368,7 +1362,7 @@ void menu_select_launch::draw(uint32_t flags)
|
||||
rgb_t fgcolor = UI_TEXT_COLOR;
|
||||
rgb_t bgcolor = UI_TEXT_BG_COLOR;
|
||||
|
||||
if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem))
|
||||
if (mouse_in_rect(line_x0, line_y0, line_x1, line_y1) && is_selectable(pitem))
|
||||
hover = count;
|
||||
|
||||
// if we're selected, draw with a different background
|
||||
@ -1449,7 +1443,7 @@ void menu_select_launch::draw_right_panel(float origx1, float origy1, float orig
|
||||
ui().draw_outlined_box(container(), origx1, origy1, origx2, origy2, rgb_t(0xEF, 0x12, 0x47, 0x7B));
|
||||
|
||||
rgb_t fgcolor(UI_TEXT_COLOR);
|
||||
if (mouse_hit && origx1 <= mouse_x && x2 > mouse_x && origy1 <= mouse_y && origy2 > mouse_y)
|
||||
if (mouse_in_rect(origx1, origy1, x2, origy2))
|
||||
{
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
hover = HOVER_RPANEL_ARROW;
|
||||
@ -1478,7 +1472,7 @@ void menu_select_launch::draw_right_panel(float origx1, float origy1, float orig
|
||||
float menu_select_launch::draw_right_box_title(float x1, float y1, float x2, float y2)
|
||||
{
|
||||
auto line_height = ui().get_line_height();
|
||||
float midl = (x2 - x1) * 0.5f;
|
||||
float const midl = (x2 - x1) * 0.5f;
|
||||
|
||||
// add outlined box for options
|
||||
ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR);
|
||||
@ -1504,7 +1498,7 @@ float menu_select_launch::draw_right_box_title(float x1, float y1, float x2, flo
|
||||
rgb_t bgcolor = UI_TEXT_BG_COLOR;
|
||||
rgb_t fgcolor = UI_TEXT_COLOR;
|
||||
|
||||
if (mouse_hit && x1 <= mouse_x && x1 + midl > mouse_x && y1 <= mouse_y && y1 + line_height > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x1 + midl, y1 + line_height))
|
||||
{
|
||||
if (ui_globals::rpanel != cells)
|
||||
{
|
||||
|
@ -1139,7 +1139,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float
|
||||
rgb_t bgcolor = UI_TEXT_BG_COLOR;
|
||||
rgb_t fgcolor = UI_TEXT_COLOR;
|
||||
|
||||
if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y1 + line_height > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x2, y1 + line_height))
|
||||
{
|
||||
bgcolor = UI_MOUSEOVER_BG_COLOR;
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
@ -1209,7 +1209,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float
|
||||
|
||||
ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B));
|
||||
|
||||
if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x2, y2))
|
||||
{
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
hover = HOVER_LPANEL_ARROW;
|
||||
@ -1232,7 +1232,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float
|
||||
|
||||
ui().draw_outlined_box(container(), x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B));
|
||||
|
||||
if (mouse_hit && x1 <= mouse_x && x2 > mouse_x && y1 <= mouse_y && y2 > mouse_y)
|
||||
if (mouse_in_rect(x1, y1, x2, y2))
|
||||
{
|
||||
fgcolor = UI_MOUSEOVER_COLOR;
|
||||
hover = HOVER_LPANEL_ARROW;
|
||||
|
Loading…
Reference in New Issue
Block a user