From face3d87b1e2aee1a380ee7a158b1152466b41f4 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 25 Aug 2020 22:03:17 +1000 Subject: [PATCH] Move base screen code into gui.c --- src/Gui.c | 141 +++++++++++++++++++++++++++++++++++++++----------- src/Gui.h | 11 ++++ src/Screens.c | 71 ------------------------- src/Screens.h | 12 ----- 4 files changed, 121 insertions(+), 114 deletions(-) diff --git a/src/Gui.c b/src/Gui.c index 522393156..4d9ed7e6e 100644 --- a/src/Gui.c +++ b/src/Gui.c @@ -20,37 +20,6 @@ struct ChatScreen* Gui_Chat; struct Screen* Gui_Screens[GUI_MAX_SCREENS]; static cc_uint8 priorities[GUI_MAX_SCREENS]; -void Widget_SetLocation(void* widget, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) { - struct Widget* w = (struct Widget*)widget; - w->horAnchor = horAnchor; w->verAnchor = verAnchor; - w->xOffset = Display_ScaleX(xOffset); - w->yOffset = Display_ScaleY(yOffset); - Widget_Layout(w); -} - -void Widget_CalcPosition(void* widget) { - struct Widget* w = (struct Widget*)widget; - w->x = Gui_CalcPos(w->horAnchor, w->xOffset, w->width , WindowInfo.Width ); - w->y = Gui_CalcPos(w->verAnchor, w->yOffset, w->height, WindowInfo.Height); -} - -void Widget_Reset(void* widget) { - struct Widget* w = (struct Widget*)widget; - w->active = false; - w->disabled = false; - w->x = 0; w->y = 0; - w->width = 0; w->height = 0; - w->horAnchor = ANCHOR_MIN; - w->verAnchor = ANCHOR_MIN; - w->xOffset = 0; w->yOffset = 0; - w->MenuClick = NULL; -} - -int Widget_Contains(void* widget, int x, int y) { - struct Widget* w = (struct Widget*)widget; - return Gui_Contains(w->x, w->y, w->width, w->height, x, y); -} - /*########################################################################################################################* *----------------------------------------------------------Gui------------------------------------------------------------* @@ -359,6 +328,116 @@ void TextAtlas_AddInt(struct TextAtlas* atlas, int value, struct VertexTextured* } +/*########################################################################################################################* +*-------------------------------------------------------Widget base-------------------------------------------------------* +*#########################################################################################################################*/ +void Widget_SetLocation(void* widget, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) { + struct Widget* w = (struct Widget*)widget; + w->horAnchor = horAnchor; w->verAnchor = verAnchor; + w->xOffset = Display_ScaleX(xOffset); + w->yOffset = Display_ScaleY(yOffset); + Widget_Layout(w); +} + +void Widget_CalcPosition(void* widget) { + struct Widget* w = (struct Widget*)widget; + w->x = Gui_CalcPos(w->horAnchor, w->xOffset, w->width , WindowInfo.Width ); + w->y = Gui_CalcPos(w->verAnchor, w->yOffset, w->height, WindowInfo.Height); +} + +void Widget_Reset(void* widget) { + struct Widget* w = (struct Widget*)widget; + w->active = false; + w->disabled = false; + w->x = 0; w->y = 0; + w->width = 0; w->height = 0; + w->horAnchor = ANCHOR_MIN; + w->verAnchor = ANCHOR_MIN; + w->xOffset = 0; w->yOffset = 0; + w->MenuClick = NULL; +} + +int Widget_Contains(void* widget, int x, int y) { + struct Widget* w = (struct Widget*)widget; + return Gui_Contains(w->x, w->y, w->width, w->height, x, y); +} + + +/*########################################################################################################################* +*-------------------------------------------------------Screen base-------------------------------------------------------* +*#########################################################################################################################*/ +void Screen_RenderWidgets(void* screen, double delta) { + struct Screen* s = (struct Screen*)screen; + struct Widget** widgets = s->widgets; + int i; + + for (i = 0; i < s->numWidgets; i++) { + if (!widgets[i]) continue; + Elem_Render(widgets[i], delta); + } +} + +void Screen_Render2Widgets(void* screen, double delta) { + struct Screen* s = (struct Screen*)screen; + struct Widget** widgets = s->widgets; + int i, offset = 0; + + Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED); + Gfx_BindDynamicVb(s->vb); + + for (i = 0; i < s->numWidgets; i++) { + if (!widgets[i]) continue; + offset = Widget_Render2(widgets[i], offset); + } +} + +void Screen_Layout(void* screen) { + struct Screen* s = (struct Screen*)screen; + struct Widget** widgets = s->widgets; + int i; + + for (i = 0; i < s->numWidgets; i++) { + if (!widgets[i]) continue; + Widget_Layout(widgets[i]); + } +} + +void Screen_ContextLost(void* screen) { + struct Screen* s = (struct Screen*)screen; + struct Widget** widgets = s->widgets; + int i; + Gfx_DeleteDynamicVb(&s->vb); + + for (i = 0; i < s->numWidgets; i++) { + if (!widgets[i]) continue; + Elem_Free(widgets[i]); + } +} + +void Screen_CreateVb(void* screen) { + struct Screen* s = (struct Screen*)screen; + s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_TEXTURED, s->maxVertices); +} + +void Screen_BuildMesh(void* screen) { + struct Screen* s = (struct Screen*)screen; + struct Widget** widgets = s->widgets; + struct VertexTextured* data; + struct VertexTextured** ptr; + int i; + + data = (struct VertexTextured*)Gfx_LockDynamicVb(s->vb, + VERTEX_FORMAT_TEXTURED, s->maxVertices); + ptr = &data; + + for (i = 0; i < s->numWidgets; i++) { + if (!widgets[i]) continue; + Widget_BuildMesh(widgets[i], ptr); + } + Gfx_UnlockDynamicVb(s->vb); +} + + /*########################################################################################################################* *------------------------------------------------------Gui component------------------------------------------------------* *#########################################################################################################################*/ diff --git a/src/Gui.h b/src/Gui.h index a4ad989df..05e0e310f 100644 --- a/src/Gui.h +++ b/src/Gui.h @@ -94,6 +94,17 @@ struct ScreenVTABLE { /* Represents a container of widgets and other 2D elements. May cover entire window. */ struct Screen { Screen_Body }; +/* Calls Elem_Render on each widget in the screen. */ +void Screen_RenderWidgets(void* screen, double delta); +/* Calls Widget_Render2 on each widget in the screen. */ +void Screen_Render2Widgets(void* screen, double delta); +/* Calls Widget_Layout on each widget in the screen. */ +void Screen_Layout(void* screen); +/* Calls Widget_Free on each widget in the screen. */ +/* Also deletes the screen's vb. */ +void Screen_ContextLost(void* screen); +void Screen_CreateVb(void* screen); +void Screen_BuildMesh(void* screen); typedef void (*Widget_LeftClick)(void* screen, void* widget); struct WidgetVTABLE { diff --git a/src/Screens.c b/src/Screens.c index 77271471f..9d05a9452 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -51,77 +51,6 @@ CC_NOINLINE static cc_bool IsOnlyChatActive(void) { return true; } -void Screen_RenderWidgets(void* screen, double delta) { - struct Screen* s = (struct Screen*)screen; - struct Widget** widgets = s->widgets; - int i; - - for (i = 0; i < s->numWidgets; i++) { - if (!widgets[i]) continue; - Elem_Render(widgets[i], delta); - } -} - -void Screen_Render2Widgets(void* screen, double delta) { - struct Screen* s = (struct Screen*)screen; - struct Widget** widgets = s->widgets; - int i, offset = 0; - - Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED); - Gfx_BindDynamicVb(s->vb); - - for (i = 0; i < s->numWidgets; i++) { - if (!widgets[i]) continue; - offset = Widget_Render2(widgets[i], offset); - } -} - -void Screen_Layout(void* screen) { - struct Screen* s = (struct Screen*)screen; - struct Widget** widgets = s->widgets; - int i; - - for (i = 0; i < s->numWidgets; i++) { - if (!widgets[i]) continue; - Widget_Layout(widgets[i]); - } -} - -void Screen_ContextLost(void* screen) { - struct Screen* s = (struct Screen*)screen; - struct Widget** widgets = s->widgets; - int i; - Gfx_DeleteDynamicVb(&s->vb); - - for (i = 0; i < s->numWidgets; i++) { - if (!widgets[i]) continue; - Elem_Free(widgets[i]); - } -} - -void Screen_CreateVb(void* screen) { - struct Screen* s = (struct Screen*)screen; - s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_TEXTURED, s->maxVertices); -} - -void Screen_BuildMesh(void* screen) { - struct Screen* s = (struct Screen*)screen; - struct Widget** widgets = s->widgets; - struct VertexTextured* data; - struct VertexTextured** ptr; - int i; - - data = (struct VertexTextured*)Gfx_LockDynamicVb(s->vb, - VERTEX_FORMAT_TEXTURED, s->maxVertices); - ptr = &data; - - for (i = 0; i < s->numWidgets; i++) { - if (!widgets[i]) continue; - Widget_BuildMesh(widgets[i], ptr); - } - Gfx_UnlockDynamicVb(s->vb); -} - /*########################################################################################################################* *--------------------------------------------------------HUDScreen--------------------------------------------------------* diff --git a/src/Screens.h b/src/Screens.h index 8d0970701..338b3d0aa 100644 --- a/src/Screens.h +++ b/src/Screens.h @@ -25,18 +25,6 @@ void Screen_NullFunc(void* screen); void Screen_NullUpdate(void* screen, double delta); int Screen_InputDown(void* screen, int key); -/* Calls Elem_Render on each widget in the screen. */ -void Screen_RenderWidgets(void* screen, double delta); -/* Calls Widget_Render2 on each widget in the screen. */ -void Screen_Render2Widgets(void* screen, double delta); -/* Calls Widget_Layout on each widget in the screen. */ -void Screen_Layout(void* screen); -/* Calls Widget_Free on each widget in the screen. */ -/* Also deletes the screen's vb. */ -void Screen_ContextLost(void* screen); -void Screen_CreateVb(void* screen); -void Screen_BuildMesh(void* screen); - void InventoryScreen_Show(void); void HUDScreen_Show(void); void LoadingScreen_Show(const String* title, const String* message);