From 48c5c0dc88a9e12b89f0b956a92b24f907041748 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 20 May 2024 21:55:39 +1000 Subject: [PATCH] Start making scroll wheel bindable --- misc/ps2/Makefile | 2 +- src/Input.c | 14 ++++++++++++++ src/Input.h | 1 + src/LScreens.c | 12 +++--------- src/Menus.c | 17 +++++------------ 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/misc/ps2/Makefile b/misc/ps2/Makefile index 6bc2485ae..ee5fc509c 100644 --- a/misc/ps2/Makefile +++ b/misc/ps2/Makefile @@ -12,7 +12,7 @@ EE_OBJS = $(OBJS) $(patsubst %.o, $(BUILD_DIR)/%.o, $(IOP_MODS)) EE_LIBS = -lpatches -lpad -lpacket -ldma -lgraph -ldraw -lc -lps2ip -lnetman -lmc EE_CFLAGS = -DPLAT_PS2 -all: $(EE_BIN) +all: $(BUILD_DIR) $(EE_BIN) clean: rm -f $(EE_BIN) $(EE_OBJS) diff --git a/src/Input.c b/src/Input.c index 60b8c441a..fa28fb60f 100644 --- a/src/Input.c +++ b/src/Input.c @@ -224,6 +224,7 @@ static const char* const storageNames[INPUT_COUNT] = { "XButton1", "XButton2", "XButton3", "XButton4", "XButton5", "XButton6", "LeftMouse", "RightMouse", "MiddleMouse", + "WheelUp", "WheelDown", "WheelLeft", "WheelRight", Pad_Names }; @@ -254,6 +255,7 @@ const char* const Input_DisplayNames[INPUT_COUNT] = { "XBUTTON1", "XBUTTON2", "XBUTTON3", "XBUTTON4", "XBUTTON5", "XBUTTON6", "LMOUSE", "RMOUSE", "MMOUSE", + "WHEELUP", "WHEELDOWN", "WHEELLEFT", "WHEELRIGHT", Pad_Names }; @@ -328,8 +330,20 @@ void Pointer_SetPressed(int idx, cc_bool pressed) { } } +static float scrollingAcc; void Mouse_ScrollWheel(float delta) { + int steps = Utils_AccumulateWheelDelta(&scrollingAcc, delta); Event_RaiseFloat(&InputEvents.Wheel, delta); + + if (steps > 0) { + for (; steps != 0; steps--) + Input_SetPressed(CCWHEEL_UP); + Input_SetReleased(CCWHEEL_UP); + } else if (steps < 0) { + for (; steps != 0; steps++) + Input_SetPressed(CCWHEEL_DOWN); + Input_SetReleased(CCWHEEL_DOWN); + } } void Pointer_SetPosition(int idx, int x, int y) { diff --git a/src/Input.h b/src/Input.h index 5c08927d8..982242543 100644 --- a/src/Input.h +++ b/src/Input.h @@ -50,6 +50,7 @@ enum InputButtons { /* NOTE: RMOUSE must be before MMOUSE for PlayerClick compatibility */ CCMOUSE_X1, CCMOUSE_X2, CCMOUSE_X3, CCMOUSE_X4, CCMOUSE_X5, CCMOUSE_X6, CCMOUSE_L, CCMOUSE_R, CCMOUSE_M, + CCWHEEL_UP, CCWHEEL_DOWN, CCWHEEL_LEFT, CCWHEEL_RIGHT, CCPAD_A, CCPAD_B, CCPAD_X, CCPAD_Y, CCPAD_L, CCPAD_R, CCPAD_Z, CCPAD_LEFT, CCPAD_RIGHT, CCPAD_UP, CCPAD_DOWN, diff --git a/src/LScreens.c b/src/LScreens.c index 4d8df2bd6..000804d43 100644 --- a/src/LScreens.c +++ b/src/LScreens.c @@ -283,7 +283,6 @@ static struct ColoursScreen { struct LLabel lblRGB[COLOURS_NUM_COLS]; struct LInput iptColours[COLOURS_NUM_ENTRIES]; struct LCheckbox cbClassic; - float colourAcc; } ColoursScreen; #define COLOURSSCREEN_MAX_WIDGETS 25 @@ -373,14 +372,11 @@ static void ColoursScreen_AdjustSelected(struct LScreen* s, int delta) { ColoursScreen_TextChanged(w); } -static void ColoursScreen_MouseWheel(struct LScreen* s_, float delta) { - struct ColoursScreen* s = (struct ColoursScreen*)s_; - int steps = Utils_AccumulateWheelDelta(&s->colourAcc, delta); - ColoursScreen_AdjustSelected(s_, steps); -} - static void ColoursScreen_KeyDown(struct LScreen* s, int key, cc_bool was) { int delta = Input_CalcDelta(key, 1, 10); + if (key == CCWHEEL_UP) delta = +1; + if (key == CCWHEEL_DOWN) delta = -1; + if (delta) { ColoursScreen_AdjustSelected(s, delta); } else { @@ -423,7 +419,6 @@ static void ColoursScreen_Activated(struct LScreen* s_) { struct ColoursScreen* s = (struct ColoursScreen*)s_; ColoursScreen_AddWidgets(s); - s->colourAcc = 0; LCheckbox_Set(&s->cbClassic, Launcher_Theme.ClassicBackground); ColoursScreen_UpdateAll(s); } @@ -437,7 +432,6 @@ void ColoursScreen_SetActive(void) { s->Activated = ColoursScreen_Activated; s->KeyDown = ColoursScreen_KeyDown; - s->MouseWheel = ColoursScreen_MouseWheel; s->title = "Custom theme"; s->onEscapeWidget = (struct LWidget*)&s->btnBack; diff --git a/src/Menus.c b/src/Menus.c index 78106405f..dadb15b18 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -241,7 +241,6 @@ static struct ListScreen { struct ButtonWidget btns[LIST_SCREEN_ITEMS]; struct ButtonWidget left, right, done, action; struct FontDesc font; - float wheelAcc; int currentIndex; Widget_LeftClick EntryClick, DoneClick, ActionClick; const char* actionText; @@ -374,28 +373,22 @@ static int ListScreen_KeyDown(void* screen, int key) { ListScreen_PageClick(s, false); } else if (Input_IsRightButton(key) || key == CCKEY_PAGEDOWN) { ListScreen_PageClick(s, true); + } else if (key == CCWHEEL_UP) { + ListScreen_SetCurrentIndex(s, s->currentIndex - 1); + } else if (key == CCWHEEL_DOWN) { + ListScreen_SetCurrentIndex(s, s->currentIndex + 1); } else { Menu_InputDown(screen, key); } return true; } -static int ListScreen_MouseScroll(void* screen, float delta) { - struct ListScreen* s = (struct ListScreen*)screen; - int steps = Utils_AccumulateWheelDelta(&s->wheelAcc, delta); - - if (steps) ListScreen_SetCurrentIndex(s, s->currentIndex - steps); - return true; -} - static void ListScreen_Init(void* screen) { struct ListScreen* s = (struct ListScreen*)screen; int i, width; s->widgets = list_widgets; s->numWidgets = 0; s->maxWidgets = Array_Elems(list_widgets); - - s->wheelAcc = 0.0f; s->currentIndex = 0; for (i = 0; i < LIST_SCREEN_ITEMS; i++) @@ -455,7 +448,7 @@ static const struct ScreenVTABLE ListScreen_VTABLE = { ListScreen_Init, Screen_NullUpdate, ListScreen_Free, ListScreen_Render, Screen_BuildMesh, ListScreen_KeyDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, ListScreen_MouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, ListScreen_Layout, ListScreen_ContextLost, ListScreen_ContextRecreated }; void ListScreen_Show(void) {