mirror of
https://github.com/holub/mame
synced 2025-05-07 06:44:51 +03:00
188 lines
5.2 KiB
C
188 lines
5.2 KiB
C
/***************************************************************************
|
|
|
|
uiinput.h
|
|
|
|
Internal MAME user interface input state.
|
|
|
|
Copyright Nicola Salmoria and the MAME Team.
|
|
Visit http://mamedev.org for licensing and usage restrictions.
|
|
|
|
***************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#ifndef __UIINPUT_H__
|
|
#define __UIINPUT_H__
|
|
|
|
#include "render.h"
|
|
|
|
|
|
/***************************************************************************
|
|
TYPE DEFINITIONS
|
|
***************************************************************************/
|
|
|
|
enum ui_event_type
|
|
{
|
|
UI_EVENT_NONE,
|
|
UI_EVENT_MOUSE_MOVE,
|
|
UI_EVENT_MOUSE_LEAVE,
|
|
UI_EVENT_MOUSE_DOWN,
|
|
UI_EVENT_MOUSE_UP,
|
|
UI_EVENT_MOUSE_DOUBLE_CLICK,
|
|
UI_EVENT_CHAR
|
|
};
|
|
|
|
|
|
struct ui_event
|
|
{
|
|
ui_event_type event_type;
|
|
render_target * target;
|
|
INT32 mouse_x;
|
|
INT32 mouse_y;
|
|
input_item_id key;
|
|
unicode_char ch;
|
|
};
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
FUNCTION PROTOTYPES
|
|
***************************************************************************/
|
|
|
|
|
|
/* ----- core system management ----- */
|
|
|
|
/* initialization */
|
|
void ui_input_init(running_machine &machine);
|
|
|
|
|
|
|
|
/* ----- event handling ----- */
|
|
|
|
void ui_input_frame_update(running_machine &machine);
|
|
|
|
/* pushes a single event onto the queue */
|
|
int ui_input_push_event(running_machine &machine, ui_event event);
|
|
|
|
/* pops an event off of the queue */
|
|
int ui_input_pop_event(running_machine &machine, ui_event *event);
|
|
|
|
/* clears all outstanding events */
|
|
void ui_input_reset(running_machine &machine);
|
|
|
|
/* retrieves the current location of the mouse */
|
|
render_target *ui_input_find_mouse(running_machine &machine, INT32 *x, INT32 *y, int *button);
|
|
|
|
|
|
|
|
/* ----- user interface sequence reading ----- */
|
|
|
|
/* return TRUE if a key down for the given user interface sequence is detected */
|
|
int ui_input_pressed(running_machine &machine, int code);
|
|
|
|
/* return TRUE if a key down for the given user interface sequence is detected, or if
|
|
autorepeat at the given speed is triggered */
|
|
int ui_input_pressed_repeat(running_machine &machine, int code, int speed);
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
INLINE FUNCTIONS
|
|
***************************************************************************/
|
|
|
|
/*-------------------------------------------------
|
|
ui_input_push_mouse_move_event - pushes a mouse
|
|
move event to the specified render_target
|
|
-------------------------------------------------*/
|
|
|
|
INLINE void ui_input_push_mouse_move_event(running_machine &machine, render_target *target, INT32 x, INT32 y)
|
|
{
|
|
ui_event event = { UI_EVENT_NONE };
|
|
event.event_type = UI_EVENT_MOUSE_MOVE;
|
|
event.target = target;
|
|
event.mouse_x = x;
|
|
event.mouse_y = y;
|
|
ui_input_push_event(machine, event);
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
ui_input_push_mouse_leave_event - pushes a
|
|
mouse leave event to the specified render_target
|
|
-------------------------------------------------*/
|
|
|
|
INLINE void ui_input_push_mouse_leave_event(running_machine &machine, render_target *target)
|
|
{
|
|
ui_event event = { UI_EVENT_NONE };
|
|
event.event_type = UI_EVENT_MOUSE_LEAVE;
|
|
event.target = target;
|
|
ui_input_push_event(machine, event);
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
ui_input_push_mouse_down_event - pushes a mouse
|
|
down event to the specified render_target
|
|
-------------------------------------------------*/
|
|
|
|
INLINE void ui_input_push_mouse_down_event(running_machine &machine, render_target *target, INT32 x, INT32 y)
|
|
{
|
|
ui_event event = { UI_EVENT_NONE };
|
|
event.event_type = UI_EVENT_MOUSE_DOWN;
|
|
event.target = target;
|
|
event.mouse_x = x;
|
|
event.mouse_y = y;
|
|
ui_input_push_event(machine, event);
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
ui_input_push_mouse_down_event - pushes a mouse
|
|
down event to the specified render_target
|
|
-------------------------------------------------*/
|
|
|
|
INLINE void ui_input_push_mouse_up_event(running_machine &machine, render_target *target, INT32 x, INT32 y)
|
|
{
|
|
ui_event event = { UI_EVENT_NONE };
|
|
event.event_type = UI_EVENT_MOUSE_UP;
|
|
event.target = target;
|
|
event.mouse_x = x;
|
|
event.mouse_y = y;
|
|
ui_input_push_event(machine, event);
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
ui_input_push_mouse_double_click_event - pushes
|
|
a mouse double-click event to the specified
|
|
render_target
|
|
-------------------------------------------------*/
|
|
|
|
INLINE void ui_input_push_mouse_double_click_event(running_machine &machine, render_target *target, INT32 x, INT32 y)
|
|
{
|
|
ui_event event = { UI_EVENT_NONE };
|
|
event.event_type = UI_EVENT_MOUSE_DOUBLE_CLICK;
|
|
event.target = target;
|
|
event.mouse_x = x;
|
|
event.mouse_y = y;
|
|
ui_input_push_event(machine, event);
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
ui_input_push_char_event - pushes a char event
|
|
to the specified render_target
|
|
-------------------------------------------------*/
|
|
|
|
INLINE void ui_input_push_char_event(running_machine &machine, render_target *target, unicode_char ch)
|
|
{
|
|
ui_event event = { UI_EVENT_NONE };
|
|
event.event_type = UI_EVENT_CHAR;
|
|
event.target = target;
|
|
event.ch = ch;
|
|
ui_input_push_event(machine, event);
|
|
}
|
|
|
|
|
|
#endif /* __UIINPUT_H__ */
|