mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-15 18:45:23 -04:00
Move base screen code into gui.c
This commit is contained in:
parent
4e58d992b1
commit
face3d87b1
141
src/Gui.c
141
src/Gui.c
@ -20,37 +20,6 @@ struct ChatScreen* Gui_Chat;
|
|||||||
struct Screen* Gui_Screens[GUI_MAX_SCREENS];
|
struct Screen* Gui_Screens[GUI_MAX_SCREENS];
|
||||||
static cc_uint8 priorities[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------------------------------------------------------------*
|
*----------------------------------------------------------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------------------------------------------------------*
|
*------------------------------------------------------Gui component------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
|
11
src/Gui.h
11
src/Gui.h
@ -94,6 +94,17 @@ struct ScreenVTABLE {
|
|||||||
|
|
||||||
/* Represents a container of widgets and other 2D elements. May cover entire window. */
|
/* Represents a container of widgets and other 2D elements. May cover entire window. */
|
||||||
struct Screen { Screen_Body };
|
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);
|
typedef void (*Widget_LeftClick)(void* screen, void* widget);
|
||||||
struct WidgetVTABLE {
|
struct WidgetVTABLE {
|
||||||
|
@ -51,77 +51,6 @@ CC_NOINLINE static cc_bool IsOnlyChatActive(void) {
|
|||||||
return true;
|
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--------------------------------------------------------*
|
*--------------------------------------------------------HUDScreen--------------------------------------------------------*
|
||||||
|
@ -25,18 +25,6 @@ void Screen_NullFunc(void* screen);
|
|||||||
void Screen_NullUpdate(void* screen, double delta);
|
void Screen_NullUpdate(void* screen, double delta);
|
||||||
int Screen_InputDown(void* screen, int key);
|
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 InventoryScreen_Show(void);
|
||||||
void HUDScreen_Show(void);
|
void HUDScreen_Show(void);
|
||||||
void LoadingScreen_Show(const String* title, const String* message);
|
void LoadingScreen_Show(const String* title, const String* message);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user