mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-15 10:35:11 -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];
|
||||
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------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
|
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. */
|
||||
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 {
|
||||
|
@ -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--------------------------------------------------------*
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user