Implement mouse input on RISC OS
parent
f7f54f0d04
commit
1268984edc
|
@ -30,6 +30,7 @@
|
||||||
#include "scancodes_riscos.h"
|
#include "scancodes_riscos.h"
|
||||||
|
|
||||||
#include <kernel.h>
|
#include <kernel.h>
|
||||||
|
#include <swis.h>
|
||||||
|
|
||||||
static SDL_Scancode
|
static SDL_Scancode
|
||||||
SDL_RISCOS_translate_keycode(int keycode)
|
SDL_RISCOS_translate_keycode(int keycode)
|
||||||
|
@ -104,6 +105,47 @@ RISCOS_PollKeyboard(_THIS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const Uint8 mouse_button_map[] = {
|
||||||
|
SDL_BUTTON_RIGHT,
|
||||||
|
SDL_BUTTON_MIDDLE,
|
||||||
|
SDL_BUTTON_LEFT,
|
||||||
|
SDL_BUTTON_X1,
|
||||||
|
SDL_BUTTON_X2,
|
||||||
|
SDL_BUTTON_X2 + 1,
|
||||||
|
SDL_BUTTON_X2 + 2,
|
||||||
|
SDL_BUTTON_X2 + 3
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
RISCOS_PollMouse(_THIS)
|
||||||
|
{
|
||||||
|
SDL_VideoData *driverdata = (SDL_VideoData *)_this->driverdata;
|
||||||
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
|
SDL_Rect rect;
|
||||||
|
_kernel_swi_regs regs;
|
||||||
|
int i, x, y, buttons;
|
||||||
|
|
||||||
|
if (SDL_GetDisplayBounds(0, &rect) < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_kernel_swi(OS_Mouse, ®s, ®s);
|
||||||
|
x = (regs.r[0] >> 1);
|
||||||
|
y = rect.h - (regs.r[1] >> 1);
|
||||||
|
buttons = regs.r[2];
|
||||||
|
|
||||||
|
if (mouse->x != x || mouse->y != y) {
|
||||||
|
SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 0, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (driverdata->last_mouse_buttons != buttons) {
|
||||||
|
for (i = 0; i < SDL_arraysize(mouse_button_map); i++) {
|
||||||
|
SDL_SendMouseButton(mouse->focus, mouse->mouseID, (buttons & (1 << i)) ? SDL_PRESSED : SDL_RELEASED, mouse_button_map[i]);
|
||||||
|
}
|
||||||
|
driverdata->last_mouse_buttons = buttons;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
RISCOS_InitEvents(_THIS)
|
RISCOS_InitEvents(_THIS)
|
||||||
{
|
{
|
||||||
|
@ -126,6 +168,7 @@ RISCOS_InitEvents(_THIS)
|
||||||
void
|
void
|
||||||
RISCOS_PumpEvents(_THIS)
|
RISCOS_PumpEvents(_THIS)
|
||||||
{
|
{
|
||||||
|
RISCOS_PollMouse(_this);
|
||||||
RISCOS_PollKeyboard(_this);
|
RISCOS_PollKeyboard(_this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -247,6 +247,9 @@ RISCOS_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
|
||||||
_kernel_oswrch(disable_cursor[i]);
|
_kernel_oswrch(disable_cursor[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Turn the mouse pointer on */
|
||||||
|
_kernel_osbyte(106, 1, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
typedef struct SDL_VideoData
|
typedef struct SDL_VideoData
|
||||||
{
|
{
|
||||||
|
int last_mouse_buttons;
|
||||||
Uint8 key_pressed[RISCOS_MAX_KEYS_PRESSED];
|
Uint8 key_pressed[RISCOS_MAX_KEYS_PRESSED];
|
||||||
} SDL_VideoData;
|
} SDL_VideoData;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue