mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-10-03 20:27:58 +03:00
Implement mouse wheel input
This implements iptGetWheelCount and iptClearWheelCount commands, and wheel events for SACT backlog.
This commit is contained in:
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user