mirror of
https://github.com/holub/mame
synced 2025-04-29 11:30:28 +03:00
130 lines
3.8 KiB
C++
130 lines
3.8 KiB
C++
// license:BSD-3-Clause
|
|
// copyright-holders:Nicola Salmoria
|
|
/***************************************************************************
|
|
|
|
uiinput.h
|
|
|
|
Internal MAME user interface input state.
|
|
|
|
***************************************************************************/
|
|
|
|
#ifndef MAME_EMU_UIINPUT_H
|
|
#define MAME_EMU_UIINPUT_H
|
|
|
|
#pragma once
|
|
|
|
|
|
/***************************************************************************
|
|
CONSTANTS
|
|
***************************************************************************/
|
|
|
|
#define EVENT_QUEUE_SIZE 128
|
|
|
|
/***************************************************************************
|
|
TYPE DEFINITIONS
|
|
***************************************************************************/
|
|
|
|
struct ui_event
|
|
{
|
|
enum type
|
|
{
|
|
NONE,
|
|
MOUSE_MOVE,
|
|
MOUSE_LEAVE,
|
|
MOUSE_DOWN,
|
|
MOUSE_UP,
|
|
MOUSE_RDOWN,
|
|
MOUSE_RUP,
|
|
MOUSE_DOUBLE_CLICK,
|
|
MOUSE_WHEEL,
|
|
IME_CHAR
|
|
};
|
|
|
|
type event_type;
|
|
render_target * target;
|
|
s32 mouse_x;
|
|
s32 mouse_y;
|
|
input_item_id key;
|
|
char32_t ch;
|
|
short zdelta;
|
|
int num_lines;
|
|
};
|
|
|
|
// ======================> ui_input_manager
|
|
|
|
class ui_input_manager
|
|
{
|
|
public:
|
|
// construction/destruction
|
|
ui_input_manager(running_machine &machine);
|
|
|
|
void frame_update();
|
|
|
|
/* pushes a single event onto the queue */
|
|
bool push_event(ui_event event);
|
|
|
|
/* pops an event off of the queue */
|
|
bool pop_event(ui_event *event);
|
|
|
|
/* check the next event type without removing it */
|
|
ui_event::type peek_event_type() const { return (m_events_start != m_events_end) ? m_events[m_events_start].event_type : ui_event::NONE; }
|
|
|
|
/* clears all outstanding events */
|
|
void reset();
|
|
|
|
/* retrieves the current location of the mouse */
|
|
render_target *find_mouse(s32 *x, s32 *y, bool *button) const;
|
|
ioport_field *find_mouse_field() const;
|
|
|
|
/* return true if a key down for the given user interface sequence is detected */
|
|
bool pressed(int code);
|
|
|
|
// enable/disable UI key presses
|
|
bool presses_enabled() const { return m_presses_enabled; }
|
|
void set_presses_enabled(bool enabled) { m_presses_enabled = enabled; }
|
|
|
|
/* return true if a key down for the given user interface sequence is detected, or if
|
|
autorepeat at the given speed is triggered */
|
|
bool pressed_repeat(int code, int speed);
|
|
|
|
// getters
|
|
running_machine &machine() const { return m_machine; }
|
|
|
|
|
|
void push_mouse_move_event(render_target* target, s32 x, s32 y);
|
|
void push_mouse_leave_event(render_target* target);
|
|
void push_mouse_down_event(render_target* target, s32 x, s32 y);
|
|
void push_mouse_up_event(render_target* target, s32 x, s32 y);
|
|
void push_mouse_rdown_event(render_target* target, s32 x, s32 y);
|
|
void push_mouse_rup_event(render_target* target, s32 x, s32 y);
|
|
void push_mouse_double_click_event(render_target* target, s32 x, s32 y);
|
|
void push_char_event(render_target* target, char32_t ch);
|
|
void push_mouse_wheel_event(render_target *target, s32 x, s32 y, short delta, int ucNumLines);
|
|
|
|
void mark_all_as_pressed();
|
|
|
|
private:
|
|
|
|
// internal state
|
|
running_machine & m_machine; // reference to our machine
|
|
|
|
/* pressed states; retrieved with ui_input_pressed() */
|
|
bool m_presses_enabled;
|
|
osd_ticks_t m_next_repeat[IPT_COUNT];
|
|
u8 m_seqpressed[IPT_COUNT];
|
|
|
|
/* mouse position/info */
|
|
render_target * m_current_mouse_target;
|
|
s32 m_current_mouse_x;
|
|
s32 m_current_mouse_y;
|
|
bool m_current_mouse_down;
|
|
ioport_field * m_current_mouse_field;
|
|
|
|
/* popped states; ring buffer of ui_events */
|
|
ui_event m_events[EVENT_QUEUE_SIZE];
|
|
int m_events_start;
|
|
int m_events_end;
|
|
};
|
|
|
|
#endif // MAME_EMU_UIINPUT_H
|