Return touch type instead of true in screen pointer up's, return void for widget input/pointer up

This commit is contained in:
UnknownShadow200 2021-01-01 18:54:47 +11:00
parent 1303119929
commit 53e3ab92e6
7 changed files with 75 additions and 77 deletions

View File

@ -453,7 +453,6 @@ static cc_result ApplySkin(struct Entity* e, struct Bitmap* bmp, struct Stream*
static void LogInvalidSkin(cc_result res, const cc_string* url, const cc_uint8* data, int size) {
cc_string msg; char msgBuffer[256];
int i;
String_InitArray(msg, msgBuffer);
Logger_FormatWarn2(&msg, res, "decoding", url, Platform_DescribeError);

View File

@ -140,14 +140,14 @@ struct WidgetVTABLE {
void (*Reposition)(void* elem);
/* Returns non-zero if an input press is handled. */
int (*HandlesKeyDown)(void* elem, int key);
/* Returns non-zero if an input release is handled. */
int (*HandlesKeyUp)(void* elem, int key);
/* Called when an input key or button is released. */
void (*OnInputUp)(void* elem, int key);
/* Returns non-zero if a mouse wheel scroll is handled. */
int (*HandlesMouseScroll)(void* elem, float delta);
/* 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);
/* Builds the mesh of vertices for this widget. */
@ -248,11 +248,11 @@ void TextAtlas_AddInt(struct TextAtlas* atlas, int value, struct VertexTextured*
#define Elem_Free(elem) (elem)->VTABLE->Free(elem)
#define Elem_HandlesKeyPress(elem, key) (elem)->VTABLE->HandlesKeyPress(elem, key)
#define Elem_HandlesKeyDown(elem, key) (elem)->VTABLE->HandlesKeyDown(elem, key)
#define Elem_HandlesKeyUp(elem, key) (elem)->VTABLE->HandlesKeyUp(elem, key)
#define Elem_OnInputUp(elem, key) (elem)->VTABLE->OnInputUp(elem, key)
#define Elem_HandlesMouseScroll(elem, delta) (elem)->VTABLE->HandlesMouseScroll(elem, delta)
#define Elem_HandlesPointerDown(elem, id, x, y) (elem)->VTABLE->HandlesPointerDown(elem, id, x, y)
#define Elem_HandlesPointerUp(elem, id, x, y) (elem)->VTABLE->HandlesPointerUp(elem, id, x, y)
#define Elem_OnPointerUp(elem, id, x, y) (elem)->VTABLE->OnPointerUp(elem, id, x, y)
#define Elem_HandlesPointerMove(elem, id, x, y) (elem)->VTABLE->HandlesPointerMove(elem, id, x, y)
#define Widget_BuildMesh(widget, vertices) (widget)->VTABLE->BuildMesh(widget, vertices)

View File

@ -51,15 +51,6 @@ int Pointers_Count;
cc_bool Input_TapPlace = true, Input_HoldPlace = false;
cc_bool Input_TouchMode;
/* Touch fingers are initially are all type, meaning they could */
/* trigger menu clicks, camera movement, or place/delete blocks */
/* But for example, after clicking on a menu button, you wouldn't */
/* want moving that finger anymore to move the camera */
#define TOUCH_TYPE_GUI 1
#define TOUCH_TYPE_CAMERA 2
#define TOUCH_TYPE_BLOCKS 4
#define TOUCH_TYPE_ALL (TOUCH_TYPE_GUI | TOUCH_TYPE_CAMERA | TOUCH_TYPE_BLOCKS)
static void DoDeleteBlock(void);
static void DoPlaceBlock(void);
static void MouseStatePress(int button);

View File

@ -93,6 +93,15 @@ void Input_RemoveTouch(long id, int x, int y);
#define Input_TouchMode false
#endif
/* Touch fingers are initially are 'all' type, meaning they could */
/* trigger menu clicks, camera movement, or place/delete blocks */
/* But for example, after clicking on a menu button, you wouldn't */
/* want moving that finger anymore to move the camera */
#define TOUCH_TYPE_GUI 1
#define TOUCH_TYPE_CAMERA 2
#define TOUCH_TYPE_BLOCKS 4
#define TOUCH_TYPE_ALL (TOUCH_TYPE_GUI | TOUCH_TYPE_CAMERA | TOUCH_TYPE_BLOCKS)
/* Data for mouse and touch */
extern struct Pointer { int x, y; } Pointers[INPUT_MAX_POINTERS];
/* Raises InputEvents.Wheel with the given wheel delta. */

View File

@ -85,7 +85,7 @@ static void Menu_RenderBounds(void) {
}
int Menu_PointerDown(void* screen, int id, int x, int y) {
Screen_DoPointerDown(screen, id, x, y); return true;
Screen_DoPointerDown(screen, id, x, y); return TOUCH_TYPE_GUI;
}
static int Menu_DoPointerMove(void* screen, int id, int x, int y) {
@ -1100,13 +1100,13 @@ static int GenLevelScreen_TextChanged(void* screen, const cc_string* str) {
static int GenLevelScreen_PointerDown(void* screen, int id, int x, int y) {
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
int i = Screen_DoPointerDown(screen, id, x, y);
if (i == -1 || i >= 4) return true;
if (i == -1 || i >= 4) return TOUCH_TYPE_GUI;
if (s->selected) s->selected->base.showCaret = false;
s->selected = (struct TextInputWidget*)&s->inputs[i];
s->selected->base.showCaret = true;
Window_SetKeyboardText(&s->inputs[i].base.text);
return true;
return TOUCH_TYPE_GUI;
}
static void GenLevelScreen_ContextLost(void* screen) {

View File

@ -236,10 +236,10 @@ static int HUDScreen_KeyDown(void* screen, int key) {
return Elem_HandlesKeyDown(&s->hotbar, key);
}
static void HUDScreen_KeyUp(void* screen, int key) {
static void HUDScreen_InputUp(void* screen, int key) {
struct HUDScreen* s = (struct HUDScreen*)screen;
if (!InventoryScreen_IsHotbarActive()) return;
Elem_HandlesKeyUp(&s->hotbar, key);
Elem_OnInputUp(&s->hotbar, key);
}
static int HUDscreen_PointerDown(void* screen, int id, int x, int y) {
@ -300,7 +300,7 @@ static void HUDScreen_Free(void* screen) {
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_KeyDown, HUDScreen_InputUp, Screen_FKeyPress, Screen_FText,
HUDscreen_PointerDown, Screen_PointerUp, Screen_FPointer, HUDscreen_MouseScroll,
HUDScreen_Layout, HUDScreen_ContextLost, HUDScreen_ContextRecreated
};
@ -619,7 +619,7 @@ static int TabListOverlay_PointerDown(void* screen, int id, int x, int y) {
player = TabList_UNSAFE_GetPlayer(s->ids[i]);
String_Format1(&text, "%s ", &player);
ChatScreen_AppendInput(&text);
return true;
return TOUCH_TYPE_GUI;
}
return false;
}
@ -1188,15 +1188,15 @@ static int ChatScreen_PointerDown(void* screen, int id, int x, int y) {
if (!Utils_IsUrlPrefix(&text)) return false;
if (Chat_LogTime[s->chatIndex + i] + 10 < Game.Time) return false;
UrlWarningOverlay_Show(&text); return true;
UrlWarningOverlay_Show(&text); return TOUCH_TYPE_GUI;
}
#ifdef CC_BUILD_TOUCH
if (Widget_Contains(&s->send, x, y)) {
ChatScreen_EnterChatInput(s, false); return true;
ChatScreen_EnterChatInput(s, false); return TOUCH_TYPE_GUI;
}
if (Widget_Contains(&s->cancel, x, y)) {
ChatScreen_EnterChatInput(s, true); return true;
ChatScreen_EnterChatInput(s, true); return TOUCH_TYPE_GUI;
}
#endif
@ -1204,10 +1204,10 @@ static int ChatScreen_PointerDown(void* screen, int id, int x, int y) {
if (s->altText.active && Widget_Contains(&s->altText, x, y)) {
Elem_HandlesPointerDown(&s->altText, id, x, y);
ChatScreen_UpdateChatYOffsets(s);
return true;
return TOUCH_TYPE_GUI;
}
Elem_HandlesPointerDown(&s->input.base, id, x, y);
return true;
return TOUCH_TYPE_GUI;
}
height = TextGroupWidget_UsedHeight(&s->chat);
@ -1223,7 +1223,7 @@ static int ChatScreen_PointerDown(void* screen, int id, int x, int y) {
} else if (Gui.ClickableChat) {
ChatScreen_AppendInput(&text);
}
return true;
return TOUCH_TYPE_GUI;
}
static void ChatScreen_Init(void* screen) {
@ -1438,20 +1438,20 @@ static int InventoryScreen_PointerDown(void* screen, int id, int x, int y) {
struct TableWidget* table = &s->table;
cc_bool handled, hotbar;
if (table->scroll.draggingId == id) return true;
if (HUDscreen_PointerDown(Gui_HUD, id, x, y)) return true;
if (table->scroll.draggingId == id) return TOUCH_TYPE_GUI;
if (HUDscreen_PointerDown(Gui_HUD, id, x, y)) return TOUCH_TYPE_GUI;
handled = Elem_HandlesPointerDown(table, id, x, y);
if (!handled || table->pendingClose) {
hotbar = Key_IsControlPressed() || Key_IsShiftPressed();
if (!hotbar) Gui_Remove((struct Screen*)s);
}
return true;
return TOUCH_TYPE_GUI;
}
static void InventoryScreen_PointerUp(void* screen, int id, int x, int y) {
struct InventoryScreen* s = (struct InventoryScreen*)screen;
Elem_HandlesPointerUp(&s->table, id, x, y);
Elem_OnPointerUp(&s->table, id, x, y);
}
static int InventoryScreen_PointerMove(void* screen, int id, int x, int y) {

View File

@ -21,10 +21,12 @@
#define Widget_UV(u1,v1, u2,v2) Tex_UV(u1/256.0f,v1/256.0f, u2/256.0f,v2/256.0f)
static void Widget_NullFunc(void* widget) { }
static int Widget_Pointer(void* elem, int id, int x, int y) { return false; }
static int Widget_Key(void* elem, int key) { return false; }
static int Widget_PointerMove(void* elem, int id, int x, int y) { return false; }
static int Widget_MouseScroll(void* elem, float delta) { return false; }
static int Widget_Pointer(void* elem, int id, int x, int y) { return false; }
static void Widget_InputUp(void* elem, int key) { }
static int Widget_InputDown(void* elem, int key) { return false; }
static void Widget_PointerUp(void* elem, int id, int x, int y) { }
static int Widget_PointerMove(void* elem, int id, int x, int y) { return false; }
static int Widget_MouseScroll(void* elem, float delta) { return false; }
/*########################################################################################################################*
*-------------------------------------------------------TextWidget--------------------------------------------------------*
@ -60,9 +62,9 @@ static int TextWidget_Render2(void* widget, int offset) {
}
static const struct WidgetVTABLE TextWidget_VTABLE = {
TextWidget_Render, TextWidget_Free, TextWidget_Reposition,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove,
TextWidget_Render, TextWidget_Free, TextWidget_Reposition,
Widget_InputDown, Widget_InputUp, Widget_MouseScroll,
Widget_Pointer, Widget_PointerUp, Widget_PointerMove,
TextWidget_BuildMesh, TextWidget_Render2
};
void TextWidget_Init(struct TextWidget* w) {
@ -209,8 +211,8 @@ static int ButtonWidget_Render2(void* widget, int offset) {
static const struct WidgetVTABLE ButtonWidget_VTABLE = {
ButtonWidget_Render, ButtonWidget_Free, ButtonWidget_Reposition,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove,
Widget_InputDown, Widget_InputUp, Widget_MouseScroll,
Widget_Pointer, Widget_PointerUp, Widget_PointerMove,
ButtonWidget_BuildMesh, ButtonWidget_Render2
};
void ButtonWidget_Make(struct ButtonWidget* w, int minWidth, Widget_LeftClick onClick, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) {
@ -303,7 +305,7 @@ static int ScrollbarWidget_PointerDown(void* widget, int id, int x, int y) {
struct ScrollbarWidget* w = (struct ScrollbarWidget*)widget;
int posY, height;
if (w->draggingId == id) return true;
if (w->draggingId == id) return TOUCH_TYPE_GUI;
if (x < w->x || x >= w->x + w->width + w->padding) return false;
/* only intercept pointer that's dragging scrollbar */
if (w->draggingId) return false;
@ -320,16 +322,14 @@ static int ScrollbarWidget_PointerDown(void* widget, int id, int x, int y) {
w->dragOffset = y - posY;
}
ScrollbarWidget_ClampTopRow(w);
return true;
return TOUCH_TYPE_GUI;
}
static int ScrollbarWidget_PointerUp(void* widget, int id, int x, int y) {
static void ScrollbarWidget_PointerUp(void* widget, int id, int x, int y) {
struct ScrollbarWidget* w = (struct ScrollbarWidget*)widget;
if (w->draggingId != id) return true;
if (w->draggingId != id) return;
w->draggingId = 0;
w->dragOffset = 0;
return true;
}
static int ScrollbarWidget_MouseScroll(void* widget, float delta) {
@ -357,7 +357,7 @@ static int ScrollbarWidget_PointerMove(void* widget, int id, int x, int y) {
static const struct WidgetVTABLE ScrollbarWidget_VTABLE = {
ScrollbarWidget_Render, Widget_NullFunc, Widget_CalcPosition,
Widget_Key, Widget_Key, ScrollbarWidget_MouseScroll,
Widget_InputDown, Widget_InputUp, ScrollbarWidget_MouseScroll,
ScrollbarWidget_PointerDown, ScrollbarWidget_PointerUp, ScrollbarWidget_PointerMove
};
void ScrollbarWidget_Create(struct ScrollbarWidget* w) {
@ -490,18 +490,17 @@ static int HotbarWidget_KeyDown(void* widget, int key) {
return true;
}
static int HotbarWidget_KeyUp(void* widget, int key) {
static void HotbarWidget_InputUp(void* widget, int key) {
struct HotbarWidget* w = (struct HotbarWidget*)widget;
/* Need to handle these cases:
a) user presses alt then number
b) user presses alt
We only do case b) if case a) did not happen */
if (key != KeyBinds[KEYBIND_HOTBAR_SWITCH]) return false;
if (w->altHandled) { w->altHandled = false; return true; } /* handled already */
if (key != KeyBinds[KEYBIND_HOTBAR_SWITCH]) return;
if (w->altHandled) { w->altHandled = false; return; } /* handled already */
/* Don't switch hotbar when alt+tabbing to another window */
if (WindowInfo.Focused) Inventory_SwitchHotbar();
return true;
}
static int HotbarWidget_PointerDown(void* widget, int id, int x, int y) {
@ -520,11 +519,11 @@ static int HotbarWidget_PointerDown(void* widget, int id, int x, int y) {
#ifdef CC_BUILD_TOUCH
if (i == HOTBAR_MAX_INDEX && Input_TouchMode) {
InventoryScreen_Show(); return true;
InventoryScreen_Show(); return TOUCH_TYPE_GUI;
}
#endif
Inventory_SetSelectedIndex(i);
return true;
return TOUCH_TYPE_GUI;
}
return false;
}
@ -555,9 +554,9 @@ static void HotbarWidget_Free(void* widget) {
}
static const struct WidgetVTABLE HotbarWidget_VTABLE = {
HotbarWidget_Render, HotbarWidget_Free, HotbarWidget_Reposition,
HotbarWidget_KeyDown, HotbarWidget_KeyUp, HotbarWidget_MouseScroll,
HotbarWidget_PointerDown, Widget_Pointer, Widget_PointerMove
HotbarWidget_Render, HotbarWidget_Free, HotbarWidget_Reposition,
HotbarWidget_KeyDown, HotbarWidget_InputUp, HotbarWidget_MouseScroll,
HotbarWidget_PointerDown, Widget_PointerUp, Widget_PointerMove
};
void HotbarWidget_Create(struct HotbarWidget* w) {
Widget_Reset(w);
@ -811,20 +810,20 @@ static int TableWidget_PointerDown(void* widget, int id, int x, int y) {
w->pendingClose = false;
if (Elem_HandlesPointerDown(&w->scroll, id, x, y)) {
return true;
return TOUCH_TYPE_GUI;
} else if (w->selectedIndex != -1 && w->blocks[w->selectedIndex] != BLOCK_AIR) {
Inventory_SetSelectedBlock(w->blocks[w->selectedIndex]);
w->pendingClose = true;
return true;
return TOUCH_TYPE_GUI;
} else if (Gui_Contains(Table_X(w), Table_Y(w), Table_Width(w), Table_Height(w), x, y)) {
return true;
return TOUCH_TYPE_GUI;
}
return false;
}
static int TableWidget_PointerUp(void* widget, int id, int x, int y) {
static void TableWidget_PointerUp(void* widget, int id, int x, int y) {
struct TableWidget* w = (struct TableWidget*)widget;
return Elem_HandlesPointerUp(&w->scroll, id, x, y);
Elem_OnPointerUp(&w->scroll, id, x, y);
}
static int TableWidget_MouseScroll(void* widget, float delta) {
@ -896,7 +895,7 @@ static int TableWidget_KeyDown(void* widget, int key) {
static const struct WidgetVTABLE TableWidget_VTABLE = {
TableWidget_Render, TableWidget_Free, TableWidget_Reposition,
TableWidget_KeyDown, Widget_Key, TableWidget_MouseScroll,
TableWidget_KeyDown, Widget_InputUp, TableWidget_MouseScroll,
TableWidget_PointerDown, TableWidget_PointerUp, TableWidget_PointerMove
};
void TableWidget_Create(struct TableWidget* w) {
@ -1321,7 +1320,7 @@ static int InputWidget_PointerDown(void* widget, int id, int x, int y) {
if (Gui_Contains(charX, cy * charHeight, charWidth, charHeight, x, y)) {
w->caretPos = offset + cx;
InputWidget_UpdateCaret(w);
return true;
return TOUCH_TYPE_GUI;
}
}
offset += line.length;
@ -1329,7 +1328,7 @@ static int InputWidget_PointerDown(void* widget, int id, int x, int y) {
w->caretPos = -1;
InputWidget_UpdateCaret(w);
return true;
return TOUCH_TYPE_GUI;
}
@ -1555,8 +1554,8 @@ static cc_bool TextInputWidget_AllowedChar(void* widget, char c) {
static int TextInputWidget_GetMaxLines(void) { return 1; }
static const struct WidgetVTABLE TextInputWidget_VTABLE = {
TextInputWidget_Render, InputWidget_Free, InputWidget_Reposition,
InputWidget_KeyDown, Widget_Key, Widget_MouseScroll,
InputWidget_PointerDown, Widget_Pointer, Widget_PointerMove,
InputWidget_KeyDown, Widget_InputUp, Widget_MouseScroll,
InputWidget_PointerDown, Widget_PointerUp, Widget_PointerMove,
TextInputWidget_BuildMesh, TextInputWidget_Render2
};
void TextInputWidget_Create(struct TextInputWidget* w, int width, const cc_string* text, struct MenuInputDesc* desc) {
@ -1818,8 +1817,8 @@ static int ChatInputWidget_GetMaxLines(void) {
static const struct WidgetVTABLE ChatInputWidget_VTABLE = {
ChatInputWidget_Render, InputWidget_Free, InputWidget_Reposition,
ChatInputWidget_KeyDown, Widget_Key, Widget_MouseScroll,
InputWidget_PointerDown, Widget_Pointer, Widget_PointerMove
ChatInputWidget_KeyDown, Widget_InputUp, Widget_MouseScroll,
InputWidget_PointerDown, Widget_PointerUp, Widget_PointerMove
};
void ChatInputWidget_Create(struct ChatInputWidget* w) {
InputWidget_Reset(&w->base);
@ -2233,8 +2232,8 @@ static void TextGroupWidget_Free(void* widget) {
static const struct WidgetVTABLE TextGroupWidget_VTABLE = {
TextGroupWidget_Render, TextGroupWidget_Free, TextGroupWidget_Reposition,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove
Widget_InputDown, Widget_InputUp, Widget_MouseScroll,
Widget_Pointer, Widget_PointerUp, Widget_PointerMove
};
void TextGroupWidget_Create(struct TextGroupWidget* w, int lines, struct Texture* textures, TextGroupWidget_Get getLine) {
Widget_Reset(w);
@ -2460,7 +2459,7 @@ static int SpecialInputWidget_PointerDown(void* widget, int id, int x, int y) {
} else {
SpecialInputWidget_IntersectsBody(w, x, y);
}
return true;
return TOUCH_TYPE_GUI;
}
void SpecialInputWidget_UpdateCols(struct SpecialInputWidget* w) {
@ -2481,8 +2480,8 @@ void SpecialInputWidget_SetActive(struct SpecialInputWidget* w, cc_bool active)
static const struct WidgetVTABLE SpecialInputWidget_VTABLE = {
SpecialInputWidget_Render, SpecialInputWidget_Free, SpecialInputWidget_Reposition,
Widget_Key, Widget_Key, Widget_MouseScroll,
SpecialInputWidget_PointerDown, Widget_Pointer, Widget_PointerMove
Widget_InputDown, Widget_InputUp, Widget_MouseScroll,
SpecialInputWidget_PointerDown, Widget_PointerUp, Widget_PointerMove
};
void SpecialInputWidget_Create(struct SpecialInputWidget* w, struct FontDesc* font, struct InputWidget* target) {
Widget_Reset(w);
@ -2592,8 +2591,8 @@ static void ThumbstickWidget_Reposition(void* widget) {
static const struct WidgetVTABLE ThumbstickWidget_VTABLE = {
NULL, Screen_NullFunc, ThumbstickWidget_Reposition,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove,
Widget_InputDown, Widget_InputUp, Widget_MouseScroll,
Widget_Pointer, Widget_PointerUp, Widget_PointerMove,
ThumbstickWidget_BuildMesh, ThumbstickWidget_Render2
};
void ThumbstickWidget_Init(struct ThumbstickWidget* w) {