WIP changes

This commit is contained in:
UnknownShadow200 2019-09-01 07:29:27 +10:00
parent 5072b8566d
commit 08cf8f5805
9 changed files with 142 additions and 137 deletions

View File

@ -194,6 +194,7 @@ static void Gui_AddCore(struct Screen* s, int priority) {
s->VTABLE->Init(s);
s->VTABLE->ContextRecreated(s);
/* for selecting active button etc */
s->VTABLE->HandlesMouseMove(s, Mouse_X, Mouse_Y);
}

View File

@ -42,9 +42,9 @@ struct ScreenVTABLE {
bool (*HandlesKeyDown)(void* elem, Key key);
bool (*HandlesKeyUp)(void* elem, Key key);
bool (*HandlesKeyPress)(void* elem, char keyChar);
bool (*HandlesMouseDown)(void* elem, int x, int y, MouseButton btn);
bool (*HandlesMouseUp)(void* elem, int x, int y, MouseButton btn);
bool (*HandlesMouseMove)(void* elem, int x, int y);
bool (*HandlesPointerDown)(void* elem, int id, int x, int y);
bool (*HandlesPointerUp)(void* elem, int id, int x, int y);
bool (*HandlesPointerMove)(void* elem, int id, int x, int y);
bool (*HandlesMouseScroll)(void* elem, float delta);
void (*OnResize)(void* elem);
Event_Void_Callback ContextLost;
@ -66,10 +66,10 @@ struct WidgetVTABLE {
void (*Free)(void* elem);
bool (*HandlesKeyDown)(void* elem, Key key);
bool (*HandlesKeyUp)(void* elem, Key key);
bool (*HandlesMouseDown)(void* elem, int x, int y, MouseButton btn);
bool (*HandlesMouseUp)(void* elem, int x, int y, MouseButton btn);
bool (*HandlesMouseMove)(void* elem, int x, int y);
bool (*HandlesMouseScroll)(void* elem, float delta);
bool (*HandlesPointerDown)(void* elem, int id, int x, int y);
bool (*HandlesPointerUp)(void* elem, int id, int x, int y);
bool (*HandlesPointerMove)(void* elem, int id, int x, int y);
void (*Reposition)(void* elem);
};
#define Widget_Layout const struct WidgetVTABLE* VTABLE; \
@ -165,10 +165,12 @@ void TextAtlas_AddInt(struct TextAtlas* atlas, int value, VertexP3fT2fC4b** vert
#define Elem_HandlesKeyDown(elem, key) (elem)->VTABLE->HandlesKeyDown(elem, key)
#define Elem_HandlesKeyUp(elem, key) (elem)->VTABLE->HandlesKeyUp(elem, key)
#define Elem_HandlesMouseDown(elem, x, y, btn) (elem)->VTABLE->HandlesMouseDown(elem, x, y, btn)
#define Elem_HandlesMouseUp(elem, x, y, btn) (elem)->VTABLE->HandlesMouseUp(elem, x, y, btn)
#define Elem_HandlesMouseMove(elem, x, y) (elem)->VTABLE->HandlesMouseMove(elem, x, y)
#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_HandlesPointerMove(elem, id, x, y) (elem)->VTABLE->HandlesPointerMove(elem, id, x, y)
#define Widget_Reposition(widget) (widget)->VTABLE->Reposition(widget);
#define Elem_TryFree(elem) if ((elem)->VTABLE) { Elem_Free(elem); }
#endif

View File

@ -78,7 +78,6 @@ extern float Mouse_Wheel;
/* Data for mouse and touch */
extern struct Pointer {
long id;
int x, y;
} Pointers[INPUT_MAX_POINTERS];
/* X and Y coordinates of the mouse. Use Mouse_SetPosition to change. */

View File

@ -457,31 +457,31 @@ static void HandleMouseWheel(void* obj, float delta) {
static void HandlePointerMove(void* obj, int idx, int xDelta, int yDelta) {
struct Screen* s;
int i;
int i, x = Pointers[idx].x, y = Pointers[idx].y;
for (i = 0; i < Gui_ScreensCount; i++) {
s = Gui_Screens[i];
if (s->VTABLE->HandlesMouseMove(s, Pointers[idx].x, Pointers[idx].y)) return;
if (s->VTABLE->HandlesPointerMove(s, 1 << idx, x, y)) return;
}
}
static void HandlePointerDown(void* obj, int idx) {
struct Screen* s;
int i;
int i, x = Pointers[idx].x, y = Pointers[idx].y;
for (i = 0; i < Gui_ScreensCount; i++) {
s = Gui_Screens[i];
if (s->VTABLE->HandlesMouseDown(s, Pointers[idx].x, Pointers[idx].y, 0)) return;
if (s->VTABLE->HandlesPointerDown(s, 1 << idx, x, y)) return;
}
}
static void HandlePointerUp(void* obj, int idx) {
struct Screen* s;
int i;
int i, x = Pointers[idx].x, y = Pointers[idx].y;
for (i = 0; i < Gui_ScreensCount; i++) {
s = Gui_Screens[i];
if (s->VTABLE->HandlesMouseUp(s, Pointers[idx].x, Pointers[idx].y, 0)) return;
if (s->VTABLE->HandlesPointerUp(s, 1 << idx, x, y)) return;
}
}

View File

@ -111,7 +111,7 @@ static void Menu_RenderBounds(void) {
Gfx_Draw2DGradient(0, 0, Window_Width, Window_Height, topCol, bottomCol);
}
static int Menu_DoMouseDown(void* screen, int x, int y, MouseButton btn) {
static int Menu_DoPointerDown(void* screen, int id, int x, int y) {
struct Screen* s = (struct Screen*)screen;
struct Widget** widgets = s->widgets;
int i, count = s->numWidgets;
@ -125,21 +125,22 @@ static int Menu_DoMouseDown(void* screen, int x, int y, MouseButton btn) {
if (w->MenuClick) {
w->MenuClick(s, w);
} else {
Elem_HandlesMouseDown(w, x, y, btn);
Elem_HandlesPointerDown(w, id, x, y);
}
return i;
}
return -1;
}
static bool Menu_MouseDown(void* screen, int x, int y, MouseButton btn) {
Menu_DoMouseDown(screen, x, y, btn); return true;
static bool Menu_PointerDown(void* screen, int id, int x, int y) {
Menu_DoPointerDown(screen, id, x, y); return true;
}
static int Menu_DoMouseMove(void* screen, int x, int y) {
static int Menu_DoPointerMove(void* screen, int id, int x, int y) {
struct Screen* s = (struct Screen*)screen;
struct Widget** widgets = s->widgets;
int i, count = s->numWidgets;
/* TODO: id mask */
for (i = 0; i < count; i++) {
struct Widget* w = widgets[i];
if (w) w->active = false;
@ -155,8 +156,8 @@ static int Menu_DoMouseMove(void* screen, int x, int y) {
return -1;
}
static bool Menu_MouseMove(void* screen, int x, int y) {
Menu_DoMouseMove(screen, x, y); return true;
static bool Menu_PointerMove(void* screen, int id, int x, int y) {
Menu_DoPointerMove(screen, id, x, y); return true;
}
@ -429,7 +430,7 @@ static void ListScreen_ContextRecreated(void* screen) {
static const struct ScreenVTABLE ListScreen_VTABLE = {
ListScreen_Init, ListScreen_Render, ListScreen_Free,
ListScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, ListScreen_MouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, ListScreen_MouseScroll,
Menu_OnResize, ListScreen_ContextLost, ListScreen_ContextRecreated
};
void ListScreen_Show(void) {
@ -547,7 +548,7 @@ static void PauseScreen_Free(void* screen) {
static const struct ScreenVTABLE PauseScreen_VTABLE = {
PauseScreen_Init, MenuScreen_Render, PauseScreen_Free,
MenuScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, Menu_ContextLost, PauseScreen_ContextRecreated
};
void PauseScreen_Show(void) {
@ -647,9 +648,9 @@ static void OptionsGroupScreen_Free(void* screen) {
Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, s, OptionsGroupScreen_CheckHacksAllowed);
}
static bool OptionsGroupScreen_MouseMove(void* screen, int x, int y) {
static bool OptionsGroupScreen_PointerMove(void* screen, int id, int x, int y) {
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
int i = Menu_DoMouseMove(s, x, y);
int i = Menu_DoPointerMove(s, id, x, y);
if (i == -1 || i == s->selectedI) return true;
if (i >= Array_Elems(optsGroup_descs)) return true;
@ -661,7 +662,7 @@ static bool OptionsGroupScreen_MouseMove(void* screen, int x, int y) {
static const struct ScreenVTABLE OptionsGroupScreen_VTABLE = {
OptionsGroupScreen_Init, MenuScreen_Render, OptionsGroupScreen_Free,
MenuScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
Menu_MouseDown, Screen_TMouse, OptionsGroupScreen_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, OptionsGroupScreen_PointerMove, Screen_TMouseScroll,
Menu_OnResize, OptionsGroupScreen_ContextLost, OptionsGroupScreen_ContextRecreated
};
void OptionsGroupScreen_Show(void) {
@ -882,7 +883,7 @@ static void EditHotkeyScreen_Init(void* screen) {
static const struct ScreenVTABLE EditHotkeyScreen_VTABLE = {
EditHotkeyScreen_Init, EditHotkeyScreen_Render, Menu_NullFunc,
EditHotkeyScreen_KeyDown, Screen_TKey, EditHotkeyScreen_KeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, EditHotkeyScreen_ContextLost, EditHotkeyScreen_ContextRecreated
};
void EditHotkeyScreen_Show(struct HotkeyData original) {
@ -1049,7 +1050,7 @@ static void GenLevelScreen_Init(void* screen) {
static const struct ScreenVTABLE GenLevelScreen_VTABLE = {
GenLevelScreen_Init, MenuScreen_Render, Menu_NullFunc,
GenLevelScreen_KeyDown, Screen_TKey, GenLevelScreen_KeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, GenLevelScreen_ContextLost, GenLevelScreen_ContextRecreated
};
void GenLevelScreen_Show(void) {
@ -1114,7 +1115,7 @@ static void ClassicGenScreen_Init(void* screen) {
static const struct ScreenVTABLE ClassicGenScreen_VTABLE = {
ClassicGenScreen_Init, MenuScreen_Render, Menu_NullFunc,
MenuScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, Menu_ContextLost, ClassicGenScreen_ContextRecreated
};
void ClassicGenScreen_Show(void) {
@ -1284,7 +1285,7 @@ static void SaveLevelScreen_Init(void* screen) {
static const struct ScreenVTABLE SaveLevelScreen_VTABLE = {
SaveLevelScreen_Init, SaveLevelScreen_Render, Menu_NullFunc,
SaveLevelScreen_KeyDown, Screen_TKey, SaveLevelScreen_KeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, SaveLevelScreen_ContextLost, SaveLevelScreen_ContextRecreated
};
void SaveLevelScreen_Show(void) {
@ -1632,7 +1633,7 @@ static void KeyBindingsScreen_Init(void* screen) {
static const struct ScreenVTABLE KeyBindingsScreen_VTABLE = {
KeyBindingsScreen_Init, MenuScreen_Render, Menu_NullFunc,
KeyBindingsScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, KeyBindingsScreen_ContextLost, KeyBindingsScreen_ContextRecreated
};
static void KeyBindingsScreen_Show(int bindsCount, const cc_uint8* binds, const char** descs, InitKeyBindings doInit) {
@ -1888,9 +1889,9 @@ static bool MenuOptionsScreen_KeyDown(void* screen, Key key) {
return MenuScreen_KeyDown(s, key);
}
static bool MenuOptionsScreen_MouseMove(void* screen, int x, int y) {
static bool MenuOptionsScreen_PointerMove(void* screen, int id, int x, int y) {
struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen;
int i = Menu_DoMouseMove(s, x, y);
int i = Menu_DoPointerMove(s, id, x, y);
if (i == -1 || i == s->selectedI) return true;
if (!s->descriptions || i >= s->descriptionsCount) return true;
@ -2073,7 +2074,7 @@ static void MenuOptionsScreen_ContextRecreated(void* screen) {
static const struct ScreenVTABLE MenuOptionsScreen_VTABLE = {
MenuOptionsScreen_Init, MenuOptionsScreen_Render, MenuOptionsScreen_Free,
MenuOptionsScreen_KeyDown, Screen_TKey, MenuOptionsScreen_KeyPress,
Menu_MouseDown, Screen_TMouse, MenuOptionsScreen_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, MenuOptionsScreen_PointerMove, Screen_TMouseScroll,
MenuOptionsScreen_OnResize, MenuOptionsScreen_ContextLost, MenuOptionsScreen_ContextRecreated
};
void MenuOptionsScreen_Show(struct MenuInputDesc* descs, const char** descriptions, int descsCount, InitMenuOptions init) {
@ -2910,7 +2911,7 @@ static bool TexIdsOverlay_KeyDown(void* screen, Key key) {
static const struct ScreenVTABLE TexIdsOverlay_VTABLE = {
TexIdsOverlay_Init, TexIdsOverlay_Render, Menu_NullFunc,
TexIdsOverlay_KeyDown, Screen_FKey, Screen_FKeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, TexIdsOverlay_ContextLost, TexIdsOverlay_ContextRecreated
};
void TexIdsOverlay_Show(void) {
@ -2977,7 +2978,7 @@ static void UrlWarningOverlay_Init(void* screen) {
static const struct ScreenVTABLE UrlWarningOverlay_VTABLE = {
UrlWarningOverlay_Init, MenuScreen_Render, Menu_NullFunc,
Screen_TKey, Screen_TKey, Screen_TKeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, Menu_ContextLost, UrlWarningOverlay_ContextRecreated
};
void UrlWarningOverlay_Show(const String* url) {
@ -3126,7 +3127,7 @@ static void TexPackOverlay_Init(void* screen) {
static const struct ScreenVTABLE TexPackOverlay_VTABLE = {
TexPackOverlay_Init, TexPackOverlay_Render, Menu_NullFunc,
Screen_TKey, Screen_TKey, Screen_TKeyPress,
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Menu_OnResize, TexPackOverlay_ContextLost, TexPackOverlay_ContextRecreated
};
void TexPackOverlay_Show(const String* url) {

View File

@ -49,17 +49,17 @@ struct HUDScreen {
struct Texture chatTextures[TEXTGROUPWIDGET_MAX_LINES];
};
bool Screen_FKey(void* elem, int key) { return false; }
bool Screen_FKeyPress(void* elem, char keyChar) { return false; }
bool Screen_FMouseScroll(void* elem, float delta) { return false; }
bool Screen_FMouse(void* elem, int x, int y, int btn) { return false; }
bool Screen_FMouseMove(void* elem, int x, int y) { return false; }
bool Screen_FKey(void* s, int key) { return false; }
bool Screen_FKeyPress(void* s, char keyChar) { return false; }
bool Screen_FMouseScroll(void* s, float delta) { return false; }
bool Screen_FPointer(void* s, int id, int x, int y) { return false; }
bool Screen_FPointerMove(void* s, int id, int x, int y) { return false; }
bool Screen_TKeyPress(void* elem, char keyChar) { return true; }
bool Screen_TKey(void* s, int key) { return true; }
bool Screen_TMouseScroll(void* screen, float delta) { return true; }
bool Screen_TMouse(void* screen, int x, int y, int btn) { return true; }
bool Screen_TMouseMove(void* elem, int x, int y) { return true; }
bool Screen_TKeyPress(void* s, char keyChar) { return true; }
bool Screen_TKey(void* s, int key) { return true; }
bool Screen_TMouseScroll(void* s, float delta) { return true; }
bool Screen_TPointer(void* s, int id, int x, int y) { return true; }
bool Screen_TPointerMove(void* s, int id, int x, int y) { return true; }
static void Screen_NullFunc(void* screen) { }
CC_NOINLINE static bool IsOnlyHudActive(void) {
@ -176,14 +176,15 @@ static bool InventoryScreen_KeyUp(void* screen, Key key) {
return Elem_HandlesKeyUp(&hud->hotbar, key);
}
static bool InventoryScreen_MouseDown(void* screen, int x, int y, MouseButton btn) {
static bool InventoryScreen_PointerDown(void* screen, int id, int x, int y) {
struct InventoryScreen* s = (struct InventoryScreen*)screen;
struct TableWidget* table = &s->table;
struct HUDScreen* hud = (struct HUDScreen*)Gui_HUD;
bool handled, hotbar;
if (table->scroll.draggingMouse || Elem_HandlesMouseDown(&hud->hotbar, x, y, btn)) return true;
handled = Elem_HandlesMouseDown(table, x, y, btn);
if (table->scroll.draggingId == id) return true;
if (Elem_HandlesPointerDown(&hud->hotbar, id, x, y)) return true;
handled = Elem_HandlesPointerDown(table, id, x, y);
if (!handled || table->pendingClose) {
hotbar = Key_IsControlPressed() || Key_IsShiftPressed();
@ -192,31 +193,28 @@ static bool InventoryScreen_MouseDown(void* screen, int x, int y, MouseButton bt
return true;
}
static bool InventoryScreen_MouseUp(void* screen, int x, int y, MouseButton btn) {
static bool InventoryScreen_PointerUp(void* screen, int id, int x, int y) {
struct InventoryScreen* s = (struct InventoryScreen*)screen;
struct TableWidget* table = &s->table;
return Elem_HandlesMouseUp(table, x, y, btn);
return Elem_HandlesPointerUp(&s->table, id, x, y);
}
static bool InventoryScreen_MouseMove(void* screen, int x, int y) {
static bool InventoryScreen_PointerMove(void* screen, int id, int x, int y) {
struct InventoryScreen* s = (struct InventoryScreen*)screen;
struct TableWidget* table = &s->table;
return Elem_HandlesMouseMove(table, x, y);
return Elem_HandlesPointerMove(&s->table, id, x, y);
}
static bool InventoryScreen_MouseScroll(void* screen, float delta) {
struct InventoryScreen* s = (struct InventoryScreen*)screen;
struct TableWidget* table = &s->table;
bool hotbar = Key_IsAltPressed() || Key_IsControlPressed() || Key_IsShiftPressed();
if (hotbar) return false;
return Elem_HandlesMouseScroll(table, delta);
return Elem_HandlesMouseScroll(&s->table, delta);
}
static const struct ScreenVTABLE InventoryScreen_VTABLE = {
InventoryScreen_Init, InventoryScreen_Render, InventoryScreen_Free,
InventoryScreen_KeyDown, InventoryScreen_KeyUp, Screen_TKeyPress,
InventoryScreen_MouseDown, InventoryScreen_MouseUp, InventoryScreen_MouseMove, InventoryScreen_MouseScroll,
InventoryScreen_Init, InventoryScreen_Render, InventoryScreen_Free,
InventoryScreen_KeyDown, InventoryScreen_KeyUp, Screen_TKeyPress,
InventoryScreen_PointerDown, InventoryScreen_PointerUp, InventoryScreen_PointerMove, InventoryScreen_MouseScroll,
InventoryScreen_OnResize, InventoryScreen_ContextLost, InventoryScreen_ContextRecreated
};
void InventoryScreen_Show(void) {
@ -407,7 +405,7 @@ static void StatusScreen_Render(void* screen, double delta) {
static const struct ScreenVTABLE StatusScreen_VTABLE = {
Screen_NullFunc, StatusScreen_Render, Screen_NullFunc,
Screen_FKey, Screen_FKey, Screen_FKeyPress,
Screen_FMouse, Screen_FMouse, Screen_FMouseMove, Screen_FMouseScroll,
Screen_FPointer, Screen_FPointer, Screen_FPointerMove, Screen_FMouseScroll,
Screen_NullFunc, StatusScreen_ContextLost, StatusScreen_ContextRecreated
};
void StatusScreen_Show(void) {
@ -570,7 +568,7 @@ CC_NOINLINE static void LoadingScreen_ShowCommon(const String* title, const Stri
static const struct ScreenVTABLE LoadingScreen_VTABLE = {
LoadingScreen_Init, LoadingScreen_Render, LoadingScreen_Free,
Screen_TKey, Screen_TKey, Screen_TKeyPress,
Screen_TMouse, Screen_TMouse, Screen_TMouseMove, Screen_TMouseScroll,
Screen_TPointer, Screen_TPointer, Screen_TPointerMove, Screen_TMouseScroll,
LoadingScreen_OnResize, LoadingScreen_ContextLost, LoadingScreen_ContextRecreated
};
void LoadingScreen_Show(const String* title, const String* message) {
@ -640,7 +638,7 @@ static void GeneratingScreen_Render(void* screen, double delta) {
static const struct ScreenVTABLE GeneratingScreen_VTABLE = {
GeneratingScreen_Init, GeneratingScreen_Render, LoadingScreen_Free,
Screen_TKey, Screen_TKey, Screen_TKeyPress,
Screen_TMouse, Screen_TMouse, Screen_FMouseMove, Screen_TMouseScroll,
Screen_TPointer, Screen_TPointer, Screen_FPointerMove, Screen_TMouseScroll,
LoadingScreen_OnResize, LoadingScreen_ContextLost, LoadingScreen_ContextRecreated
};
void GeneratingScreen_Show(void) {
@ -1086,7 +1084,7 @@ static bool HUDScreen_MouseScroll(void* screen, float delta) {
return true;
}
static bool HUDScreen_MouseDown(void* screen, int x, int y, MouseButton btn) {
static bool HUDScreen_PointerDown(void* screen, int id, int x, int y) {
String text; char textBuffer[STRING_SIZE * 4];
struct HUDScreen* s = (struct HUDScreen*)screen;
int height, chatY;
@ -1110,11 +1108,11 @@ static bool HUDScreen_MouseDown(void* screen, int x, int y, MouseButton btn) {
if (!Widget_Contains(&s->chat, x, y)) {
if (s->altText.active && Widget_Contains(&s->altText, x, y)) {
Elem_HandlesMouseDown(&s->altText, x, y, btn);
Elem_HandlesPointerDown(&s->altText, id, x, y);
HUDScreen_UpdateChatYOffsets(s);
return true;
}
Elem_HandlesMouseDown(&s->input.base, x, y, btn);
Elem_HandlesPointerDown(&s->input.base, id, x, y);
return true;
}
@ -1188,10 +1186,10 @@ static void HUDScreen_Free(void* screen) {
}
static const struct ScreenVTABLE HUDScreen_VTABLE = {
HUDScreen_Init, HUDScreen_Render, HUDScreen_Free,
HUDScreen_KeyDown, HUDScreen_KeyUp, HUDScreen_KeyPress,
HUDScreen_MouseDown, Screen_FMouse, Screen_FMouseMove, HUDScreen_MouseScroll,
HUDScreen_OnResize, HUDScreen_ContextLost, HUDScreen_ContextRecreated
HUDScreen_Init, HUDScreen_Render, HUDScreen_Free,
HUDScreen_KeyDown, HUDScreen_KeyUp, HUDScreen_KeyPress,
HUDScreen_PointerDown, Screen_FPointer, Screen_FPointerMove, HUDScreen_MouseScroll,
HUDScreen_OnResize, HUDScreen_ContextLost, HUDScreen_ContextRecreated
};
void HUDScreen_Show(void) {
struct HUDScreen* s = &HUDScreen_Instance;
@ -1350,7 +1348,7 @@ static void DisconnectScreen_OnResize(void* screen) {
static bool DisconnectScreen_KeyDown(void* s, Key key) { return key < KEY_F1 || key > KEY_F35; }
static bool DisconnectScreen_MouseDown(void* screen, int x, int y, MouseButton btn) {
static bool DisconnectScreen_PointerDown(void* screen, int id, int x, int y) {
struct DisconnectScreen* s = (struct DisconnectScreen*)screen;
struct ButtonWidget* w = &s->reconnect;
@ -1371,10 +1369,10 @@ static bool DisconnectScreen_MouseMove(void* screen, int x, int y) {
}
static const struct ScreenVTABLE DisconnectScreen_VTABLE = {
DisconnectScreen_Init, DisconnectScreen_Render, DisconnectScreen_Free,
DisconnectScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
DisconnectScreen_MouseDown, Screen_TMouse, DisconnectScreen_MouseMove, Screen_TMouseScroll,
DisconnectScreen_OnResize, DisconnectScreen_ContextLost, DisconnectScreen_ContextRecreated
DisconnectScreen_Init, DisconnectScreen_Render, DisconnectScreen_Free,
DisconnectScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
DisconnectScreen_PointerDown, Screen_TPointer, DisconnectScreen_MouseMove, Screen_TMouseScroll,
DisconnectScreen_OnResize, DisconnectScreen_ContextLost, DisconnectScreen_ContextRecreated
};
void DisconnectScreen_Show(const String* title, const String* message) {
static const String kick = String_FromConst("Kicked ");

View File

@ -8,18 +8,18 @@ struct Screen;
struct Widget;
/* These always return false */
bool Screen_FKey(void* elem, int key);
bool Screen_FKeyPress(void* elem, char keyChar);
bool Screen_FMouseScroll(void* elem, float delta);
bool Screen_FMouse(void* elem, int x, int y, int btn);
bool Screen_FMouseMove(void* elem, int x, int y);
bool Screen_FKey(void* s, int key);
bool Screen_FKeyPress(void* s, char keyChar);
bool Screen_FMouseScroll(void* s, float delta);
bool Screen_FPointer(void* s, int id, int x, int y);
bool Screen_FPointerMove(void* s, int id, int x, int y);
/* These always return true */
bool Screen_TKeyPress(void* elem, char keyChar);
bool Screen_TKeyPress(void* s, char keyChar);
bool Screen_TKey(void* s, int key);
bool Screen_TMouseScroll(void* screen, float delta);
bool Screen_TMouse(void* screen, int x, int y, int btn);
bool Screen_TMouseMove(void* elem, int x, int y);
bool Screen_TMouseScroll(void* s, float delta);
bool Screen_TPointer(void* s, int id, int x, int y);
bool Screen_TPointerMove(void* s, int id, int x, int y);
void InventoryScreen_Show(void);
void StatusScreen_Show(void);

View File

@ -20,9 +20,9 @@
#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 bool Widget_Mouse(void* elem, int x, int y, MouseButton btn) { return false; }
static bool Widget_Pointer(void* elem, int id, int x, int y) { return false; }
static bool Widget_Key(void* elem, Key key) { return false; }
static bool Widget_MouseMove(void* elem, int x, int y) { return false; }
static bool Widget_PointerMove(void* elem, int id, int x, int y) { return false; }
static bool Widget_MouseScroll(void* elem, float delta) { return false; }
/*########################################################################################################################*
@ -46,8 +46,8 @@ static void TextWidget_Reposition(void* widget) {
static const struct WidgetVTABLE TextWidget_VTABLE = {
Widget_NullFunc, TextWidget_Render, TextWidget_Free,
Widget_Key, Widget_Key,
Widget_Mouse, Widget_Mouse, Widget_MouseMove, Widget_MouseScroll,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove,
TextWidget_Reposition
};
void TextWidget_Make(struct TextWidget* w, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) {
@ -148,8 +148,8 @@ static void ButtonWidget_Render(void* widget, double delta) {
static const struct WidgetVTABLE ButtonWidget_VTABLE = {
Widget_NullFunc, ButtonWidget_Render, ButtonWidget_Free,
Widget_Key, Widget_Key,
Widget_Mouse, Widget_Mouse, Widget_MouseMove, Widget_MouseScroll,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove,
ButtonWidget_Reposition
};
void ButtonWidget_Make(struct ButtonWidget* w, int minWidth, Widget_LeftClick onClick, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) {
@ -239,12 +239,14 @@ static void ScrollbarWidget_Render(void* widget, double delta) {
Gfx_Draw2DFlat(x, y - 1 + 4, width, SCROLL_BORDER, Scroll_BackCol);
}
static bool ScrollbarWidget_MouseDown(void* widget, int x, int y, MouseButton btn) {
static bool ScrollbarWidget_PointerDown(void* widget, int id, int x, int y) {
struct ScrollbarWidget* w = (struct ScrollbarWidget*)widget;
int posY, height;
if (w->draggingMouse) return true;
if (w->draggingId == id) return true;
if (x < w->x || x >= w->x + w->width) return false;
/* only intercept pointer that's dragging scrollbar */
if (w->draggingId) return false;
y -= w->y;
ScrollbarWidget_GetScrollbarCoords(w, &posY, &height);
@ -254,17 +256,19 @@ static bool ScrollbarWidget_MouseDown(void* widget, int x, int y, MouseButton bt
} else if (y >= posY + height) {
w->topRow += TABLE_MAX_ROWS_DISPLAYED;
} else {
w->draggingMouse = true;
w->mouseOffset = y - posY;
w->draggingId = id;
w->dragOffset = y - posY;
}
ScrollbarWidget_ClampTopRow(w);
return true;
}
static bool ScrollbarWidget_MouseUp(void* widget, int x, int y, MouseButton btn) {
static bool ScrollbarWidget_PointerUp(void* widget, int id, int x, int y) {
struct ScrollbarWidget* w = (struct ScrollbarWidget*)widget;
w->draggingMouse = false;
w->mouseOffset = 0;
if (w->draggingId != id) return true;
w->draggingId = 0;
w->dragOffset = 0;
return true;
}
@ -277,14 +281,14 @@ static bool ScrollbarWidget_MouseScroll(void* widget, float delta) {
return true;
}
static bool ScrollbarWidget_MouseMove(void* widget, int x, int y) {
static bool ScrollbarWidget_PointerMove(void* widget, int id, int x, int y) {
struct ScrollbarWidget* w = (struct ScrollbarWidget*)widget;
float scale;
if (w->draggingMouse) {
if (w->draggingId == id) {
y -= w->y;
scale = ScrollbarWidget_GetScale(w);
w->topRow = (int)((y - w->mouseOffset) / scale);
w->topRow = (int)((y - w->dragOffset) / scale);
ScrollbarWidget_ClampTopRow(w);
return true;
}
@ -292,20 +296,20 @@ static bool ScrollbarWidget_MouseMove(void* widget, int x, int y) {
}
static const struct WidgetVTABLE ScrollbarWidget_VTABLE = {
Widget_NullFunc, ScrollbarWidget_Render, Widget_NullFunc,
Widget_Key, Widget_Key,
ScrollbarWidget_MouseDown, ScrollbarWidget_MouseUp, ScrollbarWidget_MouseMove, ScrollbarWidget_MouseScroll,
Widget_NullFunc, ScrollbarWidget_Render, Widget_NullFunc,
Widget_Key, Widget_Key, ScrollbarWidget_MouseScroll,
ScrollbarWidget_PointerDown, ScrollbarWidget_PointerUp, ScrollbarWidget_PointerMove,
Widget_CalcPosition
};
void ScrollbarWidget_Create(struct ScrollbarWidget* w) {
Widget_Reset(w);
w->VTABLE = &ScrollbarWidget_VTABLE;
w->width = SCROLL_WIDTH;
w->totalRows = 0;
w->topRow = 0;
w->scrollingAcc = 0.0f;
w->draggingMouse = false;
w->mouseOffset = 0;
w->totalRows = 0;
w->topRow = 0;
w->scrollingAcc = 0.0f;
w->draggingId = 0;
w->dragOffset = 0;
}
@ -435,7 +439,7 @@ static bool HotbarWidget_KeyUp(void* widget, Key key) {
return true;
}
static bool HotbarWidget_MouseDown(void* widget, int x, int y, MouseButton btn) {
static bool HotbarWidget_PointerDown(void* widget, int id, int x, int y) {
struct HotbarWidget* w = (struct HotbarWidget*)widget;
int width, height;
int i, cellX, cellY;
@ -474,9 +478,9 @@ static bool HotbarWidget_MouseScroll(void* widget, float delta) {
}
static const struct WidgetVTABLE HotbarWidget_VTABLE = {
Widget_NullFunc, HotbarWidget_Render, Widget_NullFunc,
HotbarWidget_KeyDown, HotbarWidget_KeyUp,
HotbarWidget_MouseDown, Widget_Mouse, Widget_MouseMove, HotbarWidget_MouseScroll,
Widget_NullFunc, HotbarWidget_Render, Widget_NullFunc,
HotbarWidget_KeyDown, HotbarWidget_KeyUp, HotbarWidget_MouseScroll,
HotbarWidget_PointerDown, Widget_Pointer, Widget_PointerMove,
HotbarWidget_Reposition
};
void HotbarWidget_Create(struct HotbarWidget* w) {
@ -700,11 +704,11 @@ static void TableWidget_ScrollRelative(struct TableWidget* w, int delta) {
TableWidget_MoveCursorToSelected(w);
}
static bool TableWidget_MouseDown(void* widget, int x, int y, MouseButton btn) {
static bool TableWidget_PointerDown(void* widget, int id, int x, int y) {
struct TableWidget* w = (struct TableWidget*)widget;
w->pendingClose = false;
if (Elem_HandlesMouseDown(&w->scroll, x, y, btn)) {
if (Elem_HandlesPointerDown(&w->scroll, id, x, y)) {
return true;
} else if (w->selectedIndex != -1 && w->blocks[w->selectedIndex] != BLOCK_AIR) {
Inventory_SetSelectedBlock(w->blocks[w->selectedIndex]);
@ -716,9 +720,9 @@ static bool TableWidget_MouseDown(void* widget, int x, int y, MouseButton btn) {
return false;
}
static bool TableWidget_MouseUp(void* widget, int x, int y, MouseButton btn) {
static bool TableWidget_PointerUp(void* widget, int id, int x, int y) {
struct TableWidget* w = (struct TableWidget*)widget;
return Elem_HandlesMouseUp(&w->scroll, x, y, btn);
return Elem_HandlesPointerUp(&w->scroll, id, x, y);
}
static bool TableWidget_MouseScroll(void* widget, float delta) {
@ -742,12 +746,12 @@ static bool TableWidget_MouseScroll(void* widget, float delta) {
return true;
}
static bool TableWidget_MouseMove(void* widget, int x, int y) {
static bool TableWidget_PointerMove(void* widget, int id, int x, int y) {
struct TableWidget* w = (struct TableWidget*)widget;
int cellSize, maxHeight;
int i, cellX, cellY;
if (Elem_HandlesMouseMove(&w->scroll, x, y)) return true;
if (Elem_HandlesPointerMove(&w->scroll, id, x, y)) return true;
if (w->lastX == x && w->lastY == y) return true;
w->lastX = x; w->lastY = y;
@ -788,9 +792,9 @@ static bool TableWidget_KeyDown(void* widget, Key key) {
}
static const struct WidgetVTABLE TableWidget_VTABLE = {
Widget_NullFunc, TableWidget_Render, TableWidget_Free,
TableWidget_KeyDown, Widget_Key,
TableWidget_MouseDown, TableWidget_MouseUp, TableWidget_MouseMove, TableWidget_MouseScroll,
Widget_NullFunc, TableWidget_Render, TableWidget_Free,
TableWidget_KeyDown, Widget_Key, TableWidget_MouseScroll,
TableWidget_PointerDown, TableWidget_PointerUp, TableWidget_PointerMove,
TableWidget_Reposition
};
void TableWidget_Create(struct TableWidget* w) {
@ -1182,7 +1186,7 @@ static bool InputWidget_KeyDown(void* widget, Key key) {
static bool InputWidget_KeyUp(void* widget, Key key) { return true; }
static bool InputWidget_MouseDown(void* widget, int x, int y, MouseButton button) {
static bool InputWidget_PointerDown(void* widget, int id, int x, int y) {
String line; char lineBuffer[STRING_SIZE];
struct InputWidget* w = (struct InputWidget*)widget;
struct DrawTextArgs args;
@ -1427,9 +1431,9 @@ static bool MenuInputWidget_AllowedChar(void* widget, char c) {
static int MenuInputWidget_GetMaxLines(void) { return 1; }
static const struct WidgetVTABLE MenuInputWidget_VTABLE = {
Widget_NullFunc, MenuInputWidget_Render, InputWidget_Free,
InputWidget_KeyDown, InputWidget_KeyUp,
InputWidget_MouseDown, Widget_Mouse, Widget_MouseMove, Widget_MouseScroll,
Widget_NullFunc, MenuInputWidget_Render, InputWidget_Free,
InputWidget_KeyDown, InputWidget_KeyUp, Widget_MouseScroll,
InputWidget_PointerDown, Widget_Pointer, Widget_PointerMove,
InputWidget_Reposition
};
void MenuInputWidget_Create(struct MenuInputWidget* w, int width, int height, const String* text, struct MenuInputDesc* desc) {
@ -1691,8 +1695,8 @@ static int ChatInputWidget_GetMaxLines(void) {
static const struct WidgetVTABLE ChatInputWidget_VTABLE = {
Widget_NullFunc, ChatInputWidget_Render, InputWidget_Free,
ChatInputWidget_KeyDown, InputWidget_KeyUp,
InputWidget_MouseDown, Widget_Mouse, Widget_MouseMove, Widget_MouseScroll,
ChatInputWidget_KeyDown, InputWidget_KeyUp, Widget_MouseScroll,
InputWidget_PointerDown, Widget_Pointer, Widget_PointerMove,
InputWidget_Reposition
};
void ChatInputWidget_Create(struct ChatInputWidget* w) {
@ -2098,8 +2102,8 @@ static void PlayerListWidget_Free(void* widget) {
static const struct WidgetVTABLE PlayerListWidget_VTABLE = {
PlayerListWidget_Init, PlayerListWidget_Render, PlayerListWidget_Free,
Widget_Key, Widget_Key,
Widget_Mouse, Widget_Mouse, Widget_MouseMove, Widget_MouseScroll,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove,
PlayerListWidget_Reposition
};
void PlayerListWidget_Create(struct PlayerListWidget* w, struct FontDesc* font, bool classic) {
@ -2498,8 +2502,8 @@ static void TextGroupWidget_Free(void* widget) {
static const struct WidgetVTABLE TextGroupWidget_VTABLE = {
Widget_NullFunc, TextGroupWidget_Render, TextGroupWidget_Free,
Widget_Key, Widget_Key,
Widget_Mouse, Widget_Mouse, Widget_MouseMove, Widget_MouseScroll,
Widget_Key, Widget_Key, Widget_MouseScroll,
Widget_Pointer, Widget_Pointer, Widget_PointerMove,
TextGroupWidget_Reposition
};
void TextGroupWidget_Create(struct TextGroupWidget* w, int lines, struct Texture* textures, TextGroupWidget_Get getLine) {
@ -2744,8 +2748,8 @@ void SpecialInputWidget_SetActive(struct SpecialInputWidget* w, bool active) {
static const struct WidgetVTABLE SpecialInputWidget_VTABLE = {
Widget_NullFunc, SpecialInputWidget_Render, SpecialInputWidget_Free,
Widget_Key, Widget_Key,
SpecialInputWidget_MouseDown, Widget_Mouse, Widget_MouseMove, Widget_MouseScroll,
Widget_Key, Widget_Key, Widget_MouseScroll,
SpecialInputWidget_MouseDown, Widget_Pointer, Widget_PointerMove,
SpecialInputWidget_Reposition
};
void SpecialInputWidget_Create(struct SpecialInputWidget* w, struct FontDesc* font, struct InputWidget* target) {

View File

@ -49,8 +49,8 @@ struct ScrollbarWidget {
Widget_Layout
int totalRows, topRow;
float scrollingAcc;
int mouseOffset;
bool draggingMouse;
int dragOffset;
int draggingId;
};
/* Resets state of the given scrollbar widget to default. */
CC_NOINLINE void ScrollbarWidget_Create(struct ScrollbarWidget* w);