From 3758fc3e84b6fa85b60bcdb0c7e65532609d6e91 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 29 Dec 2020 18:49:35 +1100 Subject: [PATCH] Screen PointerUp should not be cancellable --- src/Gui.c | 1 + src/Gui.h | 9 ++++++--- src/Input.c | 2 +- src/Menus.c | 34 +++++++++++++++++----------------- src/Screens.c | 21 ++++++++++----------- 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/Gui.c b/src/Gui.c index 1d1685cef..cb03a08f0 100644 --- a/src/Gui.c +++ b/src/Gui.c @@ -496,6 +496,7 @@ void Screen_ContextLost(void* screen) { int Screen_InputDown(void* screen, int key) { return key < KEY_F1 || key > KEY_F24; } void Screen_InputUp(void* screen, int key) { } +void Screen_PointerUp(void* s, int id, int x, int y) { } /*########################################################################################################################* diff --git a/src/Gui.h b/src/Gui.h index a4853957f..2a5aa6b6d 100644 --- a/src/Gui.h +++ b/src/Gui.h @@ -72,7 +72,7 @@ struct ScreenVTABLE { void (*BuildMesh)(void* elem); /* Returns non-zero if an input press is handled. */ int (*HandlesInputDown)(void* elem, int key); - /* Called when an input key or buttonm is released */ + /* Called when an input key or button is released */ void (*OnInputUp)(void* elem, int key); /* Returns non-zero if a key character press is handled. */ int (*HandlesKeyPress)(void* elem, char keyChar); @@ -80,8 +80,8 @@ struct ScreenVTABLE { int (*HandlesTextChanged)(void* elem, const cc_string* str); /* Returns non-zero if a pointer press is handled. */ int (*HandlesPointerDown)(void* elem, int id, int x, int y); - /* Returns non-zero if a pointer release is handled. */ - int (*HandlesPointerUp)(void* elem, int id, int x, int y); + /* Called when a pointer is released. */ + void (*OnPointerUp)(void* elem, int id, int x, int y); /* Returns non-zero if a pointer movement is handled. */ int (*HandlesPointerMove)(void* elem, int id, int x, int y); /* Returns non-zero if a mouse wheel scroll is handled. */ @@ -126,6 +126,9 @@ int Screen_InputDown(void* screen, int key); /* Default input up implementation for a screen */ /* (does nothing) */ void Screen_InputUp(void* screen, int key); +/* Default pointer release implementation for a screen */ +/* (does nothing) */ +void Screen_PointerUp(void* s, int id, int x, int y); typedef void (*Widget_LeftClick)(void* screen, void* widget); struct WidgetVTABLE { diff --git a/src/Input.c b/src/Input.c index dae1c15f8..a346f6b9f 100644 --- a/src/Input.c +++ b/src/Input.c @@ -1003,7 +1003,7 @@ static void OnPointerUp(void* obj, int idx) { for (i = 0; i < Gui.ScreensCount; i++) { s = Gui_Screens[i]; s->dirty = true; - if (s->VTABLE->HandlesPointerUp(s, 1 << idx, x, y)) return; + s->VTABLE->OnPointerUp(s, 1 << idx, x, y); } } diff --git a/src/Menus.c b/src/Menus.c index 9b82955cf..eefa24454 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -415,7 +415,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_FPointer, Menu_PointerMove, ListScreen_MouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, ListScreen_MouseScroll, ListScreen_Layout, ListScreen_ContextLost, ListScreen_ContextRecreated }; void ListScreen_Show(void) { @@ -545,7 +545,7 @@ static const struct ScreenVTABLE PauseScreen_VTABLE = { PauseScreen_Init, Screen_NullUpdate, PauseScreen_Free, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, PauseScreen_Layout, Screen_ContextLost, PauseScreen_ContextRecreated }; void PauseScreen_Show(void) { @@ -596,7 +596,7 @@ static const struct ScreenVTABLE ClassicPauseScreen_VTABLE = { ClassicPauseScreen_Init, Screen_NullUpdate, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, PauseScreenBase_Layout, Screen_ContextLost, ClassicPauseScreen_ContextRecreated }; void ClassicPauseScreen_Show(void) { @@ -723,7 +723,7 @@ static const struct ScreenVTABLE OptionsGroupScreen_VTABLE = { OptionsGroupScreen_Init, Screen_NullUpdate, OptionsGroupScreen_Free, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, OptionsGroupScreen_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, OptionsGroupScreen_PointerMove, Screen_TMouseScroll, OptionsGroupScreen_Layout, OptionsGroupScreen_ContextLost, OptionsGroupScreen_ContextRecreated }; void OptionsGroupScreen_Show(void) { @@ -984,7 +984,7 @@ static const struct ScreenVTABLE EditHotkeyScreen_VTABLE = { EditHotkeyScreen_Init, EditHotkeyScreen_Update, Menu_CloseKeyboard, EditHotkeyScreen_Render, Screen_BuildMesh, EditHotkeyScreen_KeyDown, Screen_InputUp, EditHotkeyScreen_KeyPress, EditHotkeyScreen_TextChanged, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, EditHotkeyScreen_Layout, EditHotkeyScreen_ContextLost, EditHotkeyScreen_ContextRecreated }; void EditHotkeyScreen_Show(struct HotkeyData original) { @@ -1188,7 +1188,7 @@ static const struct ScreenVTABLE GenLevelScreen_VTABLE = { GenLevelScreen_Init, GenLevelScreen_Update, Menu_CloseKeyboard, MenuScreen_Render2, Screen_BuildMesh, GenLevelScreen_KeyDown, Screen_InputUp, GenLevelScreen_KeyPress, GenLevelScreen_TextChanged, - GenLevelScreen_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + GenLevelScreen_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, GenLevelScreen_Layout, GenLevelScreen_ContextLost, GenLevelScreen_ContextRecreated }; void GenLevelScreen_Show(void) { @@ -1264,7 +1264,7 @@ static const struct ScreenVTABLE ClassicGenScreen_VTABLE = { ClassicGenScreen_Init, Screen_NullUpdate, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, ClassicGenScreen_Layout, Screen_ContextLost, ClassicGenScreen_ContextRecreated }; void ClassicGenScreen_Show(void) { @@ -1543,7 +1543,7 @@ static const struct ScreenVTABLE SaveLevelScreen_VTABLE = { SaveLevelScreen_Init, SaveLevelScreen_Update, Menu_CloseKeyboard, SaveLevelScreen_Render, Screen_BuildMesh, SaveLevelScreen_KeyDown, Screen_InputUp, SaveLevelScreen_KeyPress, SaveLevelScreen_TextChanged, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, SaveLevelScreen_Layout, SaveLevelScreen_ContextLost, SaveLevelScreen_ContextRecreated }; void SaveLevelScreen_Show(void) { @@ -1946,7 +1946,7 @@ static const struct ScreenVTABLE KeyBindsScreen_VTABLE = { KeyBindsScreen_Init, Screen_NullUpdate, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, KeyBindsScreen_KeyDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, KeyBindsScreen_Layout, KeyBindsScreen_ContextLost, KeyBindsScreen_ContextRecreated }; @@ -2214,7 +2214,7 @@ static const struct ScreenVTABLE MenuInputOverlay_VTABLE = { MenuInputOverlay_Init, MenuInputOverlay_Update, MenuInputOverlay_Free, MenuInputOverlay_Render, Screen_BuildMesh, MenuInputOverlay_KeyDown, Screen_InputUp, MenuInputOverlay_KeyPress, MenuInputOverlay_TextChanged, - MenuInputOverlay_PointerDown, Screen_FPointer, MenuInputOverlay_PointerMove, Screen_TMouseScroll, + MenuInputOverlay_PointerDown, Screen_PointerUp, MenuInputOverlay_PointerMove, Screen_TMouseScroll, MenuInputOverlay_Layout, MenuInputOverlay_ContextLost, MenuInputOverlay_ContextRecreated }; void MenuInputOverlay_Show(struct MenuInputDesc* desc, const cc_string* value, MenuInputDone onDone, cc_bool screenMode) { @@ -2504,7 +2504,7 @@ static const struct ScreenVTABLE MenuOptionsScreen_VTABLE = { MenuOptionsScreen_Init, Screen_NullUpdate, MenuOptionsScreen_Free, MenuOptionsScreen_Render, MenuOptionsScreen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, MenuOptionsScreen_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, MenuOptionsScreen_PointerMove, Screen_TMouseScroll, MenuOptionsScreen_Layout, MenuOptionsScreen_ContextLost, MenuOptionsScreen_ContextRecreated }; void MenuOptionsScreen_Show(struct MenuInputDesc* descs, const char** descriptions, int descsCount, InitMenuOptions init) { @@ -3427,7 +3427,7 @@ static const struct ScreenVTABLE TexIdsOverlay_VTABLE = { TexIdsOverlay_Init, Screen_NullUpdate, TexIdsOverlay_Free, TexIdsOverlay_Render, TexIdsOverlay_BuildMesh, TexIdsOverlay_KeyDown, Screen_InputUp, Screen_FKeyPress, Screen_FText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, TexIdsOverlay_Layout, TexIdsOverlay_ContextLost, TexIdsOverlay_ContextRecreated }; void TexIdsOverlay_Show(void) { @@ -3509,7 +3509,7 @@ static const struct ScreenVTABLE UrlWarningOverlay_VTABLE = { UrlWarningOverlay_Init, Screen_NullUpdate, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, UrlWarningOverlay_Layout, Screen_ContextLost, UrlWarningOverlay_ContextRecreated }; void UrlWarningOverlay_Show(const cc_string* url) { @@ -3683,7 +3683,7 @@ static const struct ScreenVTABLE TexPackOverlay_VTABLE = { TexPackOverlay_Init, TexPackOverlay_Update, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, TexPackOverlay_Layout, TexPackOverlay_ContextLost, TexPackOverlay_ContextRecreated }; void TexPackOverlay_Show(const cc_string* url) { @@ -3825,7 +3825,7 @@ static const struct ScreenVTABLE TouchOnscreenScreen_VTABLE = { TouchOnscreenScreen_Init, Screen_NullUpdate, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, TouchOnscreenScreen_Layout, TouchOnscreenScreen_ContextLost, TouchOnscreenScreen_ContextRecreated }; void TouchOnscreenScreen_Show(void) { @@ -3987,7 +3987,7 @@ static const struct ScreenVTABLE TouchCtrlsScreen_VTABLE = { TouchCtrlsScreen_Init, Screen_NullUpdate, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, TouchCtrlsScreen_Layout, TouchCtrlsScreen_ContextLost, TouchCtrlsScreen_ContextRecreated }; void TouchCtrlsScreen_Show(void) { @@ -4081,7 +4081,7 @@ static const struct ScreenVTABLE TouchMoreScreen_VTABLE = { TouchMoreScreen_Init, Screen_NullUpdate, Screen_NullFunc, MenuScreen_Render2, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, TouchMoreScreen_Layout, Screen_ContextLost, TouchMoreScreen_ContextRecreated }; void TouchMoreScreen_Show(void) { diff --git a/src/Screens.c b/src/Screens.c index 4f04d7a7a..2e917c26f 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -300,7 +300,7 @@ static const struct ScreenVTABLE HUDScreen_VTABLE = { HUDScreen_Init, HUDScreen_Update, HUDScreen_Free, HUDScreen_Render, HUDScreen_BuildMesh, HUDScreen_KeyDown, HUDScreen_KeyUp, Screen_FKeyPress, Screen_FText, - HUDscreen_PointerDown, Screen_FPointer, Screen_FPointer, HUDscreen_MouseScroll, + HUDscreen_PointerDown, Screen_PointerUp, Screen_FPointer, HUDscreen_MouseScroll, HUDScreen_Layout, HUDScreen_ContextLost, HUDScreen_ContextRecreated }; void HUDScreen_Show(void) { @@ -714,7 +714,7 @@ static const struct ScreenVTABLE TabListOverlay_VTABLE = { TabListOverlay_Init, Screen_NullUpdate, TabListOverlay_Free, TabListOverlay_Render, TabListOverlay_BuildMesh, Screen_FInput, TabListOverlay_KeyUp, Screen_FKeyPress, Screen_FText, - TabListOverlay_PointerDown, Screen_FPointer, Screen_FPointer, Screen_FMouseScroll, + TabListOverlay_PointerDown, Screen_PointerUp, Screen_FPointer, Screen_FMouseScroll, TabListOverlay_Layout, TabListOverlay_ContextLost, TabListOverlay_ContextRecreated }; void TabListOverlay_Show(void) { @@ -1292,7 +1292,7 @@ static const struct ScreenVTABLE ChatScreen_VTABLE = { ChatScreen_Init, Screen_NullUpdate, ChatScreen_Free, ChatScreen_Render, ChatScreen_BuildMesh, ChatScreen_KeyDown, ChatScreen_KeyUp, ChatScreen_KeyPress, ChatScreen_TextChanged, - ChatScreen_PointerDown, Screen_FPointer, Screen_FPointer, ChatScreen_MouseScroll, + ChatScreen_PointerDown, Screen_PointerUp, Screen_FPointer, ChatScreen_MouseScroll, ChatScreen_Layout, ChatScreen_ContextLost, ChatScreen_ContextRecreated }; void ChatScreen_Show(void) { @@ -1448,9 +1448,9 @@ static int InventoryScreen_PointerDown(void* screen, int id, int x, int y) { return true; } -static int InventoryScreen_PointerUp(void* screen, int id, int x, int y) { +static void InventoryScreen_PointerUp(void* screen, int id, int x, int y) { struct InventoryScreen* s = (struct InventoryScreen*)screen; - return Elem_HandlesPointerUp(&s->table, id, x, y); + Elem_HandlesPointerUp(&s->table, id, x, y); } static int InventoryScreen_PointerMove(void* screen, int id, int x, int y) { @@ -1655,7 +1655,7 @@ static const struct ScreenVTABLE LoadingScreen_VTABLE = { LoadingScreen_Init, Screen_NullUpdate, LoadingScreen_Free, LoadingScreen_Render, LoadingScreen_BuildMesh, Screen_TInput, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Screen_TPointer, Screen_FPointer, Screen_TPointer, Screen_TMouseScroll, + Screen_TPointer, Screen_PointerUp, Screen_TPointer, Screen_TMouseScroll, LoadingScreen_Layout, LoadingScreen_ContextLost, LoadingScreen_ContextRecreated }; void LoadingScreen_Show(const cc_string* title, const cc_string* message) { @@ -1730,7 +1730,7 @@ static const struct ScreenVTABLE GeneratingScreen_VTABLE = { GeneratingScreen_Init, GeneratingScreen_Update, GeneratingScreen_Free, GeneratingScreen_Render, LoadingScreen_BuildMesh, Screen_TInput, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Screen_TPointer, Screen_FPointer, Screen_FPointer, Screen_TMouseScroll, + Screen_TPointer, Screen_PointerUp, Screen_FPointer, Screen_TMouseScroll, LoadingScreen_Layout, LoadingScreen_ContextLost, LoadingScreen_ContextRecreated }; void GeneratingScreen_Show(void) { @@ -1874,7 +1874,7 @@ static const struct ScreenVTABLE DisconnectScreen_VTABLE = { DisconnectScreen_Init, DisconnectScreen_Update, DisconnectScreen_Free, DisconnectScreen_Render, Screen_BuildMesh, Screen_InputDown, Screen_InputUp, Screen_TKeyPress, Screen_TText, - Menu_PointerDown, Screen_FPointer, Menu_PointerMove, Screen_TMouseScroll, + Menu_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll, DisconnectScreen_Layout, DisconnectScreen_ContextLost, DisconnectScreen_ContextRecreated }; void DisconnectScreen_Show(const cc_string* title, const cc_string* message) { @@ -2081,7 +2081,7 @@ static int TouchScreen_PointerDown(void* screen, int id, int x, int y) { return i >= 0; } -static int TouchScreen_PointerUp(void* screen, int id, int x, int y) { +static void TouchScreen_PointerUp(void* screen, int id, int x, int y) { struct TouchScreen* s = (struct TouchScreen*)screen; int i; //Chat_Add1("POINTER UP: %i", &id); @@ -2095,9 +2095,8 @@ static int TouchScreen_PointerUp(void* screen, int id, int x, int y) { Input_Set(KeyBinds[s->descs[i].bind], false); } s->btns[i].active &= ~id; - return true; + return; } - return false; } static void TouchScreen_Layout(void* screen) {