Implement mouse wheel input

This implements iptGetWheelCount and iptClearWheelCount commands, and
wheel events for SACT backlog.
This commit is contained in:
kichikuou
2022-07-02 10:55:40 +09:00
parent d63e3503e7
commit f9b5fec03d
8 changed files with 61 additions and 22 deletions
+3
View File
@@ -153,6 +153,9 @@ static void Init() {
if (sact.version >= 120) {
sact.logging = TRUE;
#ifdef __EMSCRIPTEN__
EM_ASM( xsystem35.texthook.disableWheelEvent(0xffffffff) );
#endif
} else {
sact.logging = FALSE;
}
+16 -18
View File
@@ -223,16 +223,15 @@ static void cb_waitkey_simple(agsevent_t *e) {
}
break;
case AGSEVENT_BUTTON_RELEASE:
case AGSEVENT_MOUSE_WHEEL:
// back log view mode に移行
if (e->d3 == AGSEVENT_WHEEL_UP ||
e->d3 == AGSEVENT_WHEEL_DN) {
// MessageKey 待ちのときのみ
if (sact.waittype != KEYWAIT_MESSAGE) break;
sblog_start();
sact.waittype = KEYWAIT_BACKLOG;
break;
}
// MessageKey 待ちのときのみ
if (sact.waittype != KEYWAIT_MESSAGE) break;
sblog_start();
sact.waittype = KEYWAIT_BACKLOG;
break;
case AGSEVENT_BUTTON_RELEASE:
if (sact.zhiding) {
slist_foreach(sact.sp_zhide, cb_focused_zkey, &update);
sact.zhiding = FALSE;
@@ -407,19 +406,18 @@ static void cb_waitkey_backlog(agsevent_t *e) {
break;
case AGSEVENT_BUTTON_RELEASE:
switch(e->d3) {
case AGSEVENT_WHEEL_UP:
sblog_pagenext();
break;
case AGSEVENT_WHEEL_DN:
sblog_pagepre();
break;
case AGSEVENT_BUTTON_RIGHT:
if (e->d3 == AGSEVENT_BUTTON_RIGHT) {
sblog_end();
sact.waittype = KEYWAIT_MESSAGE;
break;
}
break;
case AGSEVENT_MOUSE_WHEEL:
if (e->d3 > 0)
sblog_pagenext();
else
sblog_pagepre();
break;
}
}
+1 -2
View File
@@ -91,12 +91,11 @@ typedef struct _agsevent agsevent_t;
#define AGSEVENT_KEY_PRESS 4
#define AGSEVENT_KEY_RELEASE 5
#define AGSEVENT_TIMER 6
#define AGSEVENT_MOUSE_WHEEL 7
#define AGSEVENT_BUTTON_LEFT 1
#define AGSEVENT_BUTTON_MID 2
#define AGSEVENT_BUTTON_RIGHT 3
#define AGSEVENT_WHEEL_UP 4
#define AGSEVENT_WHEEL_DN 5
struct _ags {
+2 -2
View File
@@ -619,6 +619,7 @@ void commands2F37() {
}
void commands2F38() {
sys_clearWheelInfo();
DEBUG_COMMAND("iptClearWheelCount:\n");
}
@@ -626,8 +627,7 @@ void commands2F39() {
int *vForward = getCaliVariable();
int *vBack = getCaliVariable();
*vForward = 0;
*vBack = 0;
sys_getWheelInfo(vForward, vBack);
DEBUG_COMMAND("iptGetWheelCount %d, %d:\n", *vForward, *vBack);
}
+8
View File
@@ -65,6 +65,14 @@ int sys_getMouseInfo(MyPoint *p, boolean is_dibgeo) {
return key;
}
void sys_getWheelInfo(int *forward, int *back) {
sdl_getWheelInfo(forward, back);
}
void sys_clearWheelInfo(void) {
sdl_clearWheelInfo();
}
int sys_getKeyInfo() {
return sdl_getKeyInfo();
}
+2
View File
@@ -46,6 +46,8 @@ extern int sys_getMouseInfo(MyPoint *p, boolean is_dibgeo);
extern int sys_getInputInfo(void);
extern int sys_getKeyInfo(void);
extern int sys_getJoyInfo(void);
extern void sys_getWheelInfo(int *forward, int *back);
extern void sys_clearWheelInfo(void);
extern void sys_key_releasewait(int key, boolean zi_mask_enabled);
extern void sys_hit_any_key();
extern void set_hak_keymode(int key, int mode);
+2
View File
@@ -97,6 +97,8 @@ extern void sdl_setCursorType(int type);
extern boolean sdl_cursorNew(BYTE* data, int no, CursorImage *cursorImage, TCursorDirEntry *cursordirentry);
extern int sdl_getKeyInfo();
extern int sdl_getMouseInfo(MyPoint *p);
extern void sdl_getWheelInfo(int *forward, int *back);
extern void sdl_clearWheelInfo(void);
extern int sdl_getJoyInfo(void);
extern void sdl_setAutoRepeat(boolean enable);
extern MyPoint sdl_translateMouseCoords(int x, int y);
+27
View File
@@ -44,6 +44,7 @@ static void keyEventProsess(SDL_KeyboardEvent *e, boolean pressed);
/* pointer の状態 */
static int mousex, mousey, mouseb;
static int mouse_wheel_up, mouse_wheel_down;
boolean RawKeyInfo[256];
/* SDL Joystick */
@@ -156,6 +157,18 @@ static void sdl_getEvent(void) {
mousey = e.motion.y;
send_agsevent(AGSEVENT_MOUSE_MOTION, 0);
break;
case SDL_MOUSEWHEEL:
{
int y = e.wheel.y * (e.wheel.direction == SDL_MOUSEWHEEL_FLIPPED ? -1 : 1);
if (y > 0)
mouse_wheel_up += y;
else if (y < 0)
mouse_wheel_down -= y;
send_agsevent(AGSEVENT_MOUSE_WHEEL, y);
break;
}
case SDL_MOUSEBUTTONDOWN:
mouseb |= (1 << e.button.button);
RawKeyInfo[mouse_to_rawkey(e.button.button)] = TRUE;
@@ -311,6 +324,20 @@ int sdl_getMouseInfo(MyPoint *p) {
return m1 | m2;
}
void sdl_getWheelInfo(int *forward, int *back) {
sdl_getEvent();
*forward = mouse_wheel_up;
*back = mouse_wheel_down;
#ifdef __EMSCRIPTEN__
EM_ASM( xsystem35.texthook.disableWheelEvent(100) );
#endif
}
void sdl_clearWheelInfo(void) {
mouse_wheel_up = mouse_wheel_down = 0;
}
int sdl_getJoyInfo(void) {
sdl_getEvent();
return joyinfo;