Start making scroll wheel bindable

This commit is contained in:
UnknownShadow200 2024-05-20 21:55:39 +10:00
parent dfe2ae1dd1
commit 48c5c0dc88
5 changed files with 24 additions and 22 deletions

View File

@ -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)

View File

@ -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) {

View File

@ -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,

View File

@ -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;

View File

@ -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) {