mirror of https://github.com/encounter/SDL.git
Implement mouse input on RISC OS
This commit is contained in:
parent
f7f54f0d04
commit
1268984edc
|
@ -30,6 +30,7 @@
|
|||
#include "scancodes_riscos.h"
|
||||
|
||||
#include <kernel.h>
|
||||
#include <swis.h>
|
||||
|
||||
static SDL_Scancode
|
||||
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
|
||||
RISCOS_InitEvents(_THIS)
|
||||
{
|
||||
|
@ -126,6 +168,7 @@ RISCOS_InitEvents(_THIS)
|
|||
void
|
||||
RISCOS_PumpEvents(_THIS)
|
||||
{
|
||||
RISCOS_PollMouse(_this);
|
||||
RISCOS_PollKeyboard(_this);
|
||||
}
|
||||
|
||||
|
|
|
@ -247,6 +247,9 @@ RISCOS_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
|
|||
_kernel_oswrch(disable_cursor[i]);
|
||||
}
|
||||
|
||||
/* Turn the mouse pointer on */
|
||||
_kernel_osbyte(106, 1, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
typedef struct SDL_VideoData
|
||||
{
|
||||
int last_mouse_buttons;
|
||||
Uint8 key_pressed[RISCOS_MAX_KEYS_PRESSED];
|
||||
} SDL_VideoData;
|
||||
|
||||
|
|
Loading…
Reference in New Issue