mame/src/emu/uiinput.h
2012-09-15 21:47:30 +00:00

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__ */