mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-10 07:49:57 -04:00
Make in-game a GUI a bit simpler to work with by reducing the need to manually calculate max vertices for screens
This commit is contained in:
parent
83e331c500
commit
0def08bfd4
@ -590,7 +590,7 @@ static void BlockEditCommand_Execute(const cc_string* args, int argsCount__) {
|
||||
Chat_AddRaw("&eEditable block properties (page 2):");
|
||||
Chat_AddRaw("&a walksound &e- Sets walk/step sound of the block");
|
||||
Chat_AddRaw("&a breaksound &e- Sets break sound of the block");
|
||||
Chat_AddRaw("&a emitslight &e- Sets whether the block emits light");
|
||||
Chat_AddRaw("&a fullbright &e- Sets whether the block is fully lit");
|
||||
Chat_AddRaw("&a blockslight &e- Sets whether the block stops light");
|
||||
return;
|
||||
}
|
||||
@ -670,8 +670,8 @@ static void BlockEditCommand_Execute(const cc_string* args, int argsCount__) {
|
||||
if (!BlockEditCommand_GetInt(value, "Sound", &v, 0, SOUND_COUNT - 1)) return;
|
||||
|
||||
Blocks.DigSounds[block] = v;
|
||||
} else if (String_CaselessEqualsConst(prop, "emitslight")) {
|
||||
if (!BlockEditCommand_GetBool(value, "Emits light", &b)) return;
|
||||
} else if (String_CaselessEqualsConst(prop, "fullbright")) {
|
||||
if (!BlockEditCommand_GetBool(value, "Full brightness", &b)) return;
|
||||
|
||||
Blocks.FullBright[block] = b;
|
||||
} else if (String_CaselessEqualsConst(prop, "blockslight")) {
|
||||
|
14
src/Gui.c
14
src/Gui.c
@ -480,6 +480,20 @@ int Screen_Index(void* screen, void* widget) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int Screen_CalcDefaultMaxVertices(void* screen) {
|
||||
struct Screen* s = (struct Screen*)screen;
|
||||
struct Widget** widgets = s->widgets;
|
||||
int i, count = 0;
|
||||
|
||||
for (i = 0; i < s->numWidgets; i++)
|
||||
{
|
||||
if (!widgets[i]) continue;
|
||||
count += widgets[i]->VTABLE->GetMaxVertices(widgets[i]);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
void Screen_BuildMesh(void* screen) {
|
||||
struct Screen* s = (struct Screen*)screen;
|
||||
struct Widget** widgets = s->widgets;
|
||||
|
@ -112,6 +112,7 @@ void Screen_UpdateVb(void* screen);
|
||||
struct VertexTextured* Screen_LockVb(void* screen);
|
||||
int Screen_DoPointerDown(void* screen, int id, int x, int y);
|
||||
int Screen_Index(void* screen, void* w);
|
||||
int Screen_CalcDefaultMaxVertices(void* screen);
|
||||
|
||||
/* Default mesh building implementation for a screen */
|
||||
/* (Locks vb, calls Widget_BuildMesh on each widget, then unlocks vb) */
|
||||
@ -156,7 +157,10 @@ struct WidgetVTABLE {
|
||||
void (*BuildMesh)(void* elem, struct VertexTextured** vertices);
|
||||
/* Draws this widget on-screen. */
|
||||
int (*Render2)(void* elem, int offset);
|
||||
/* Returns the maximum number of vertices this widget may use */
|
||||
int (*GetMaxVertices)(void* elem);
|
||||
};
|
||||
|
||||
#define Widget_Body const struct WidgetVTABLE* VTABLE; \
|
||||
int x, y, width, height; /* Top left corner, and dimensions, of this widget */ \
|
||||
cc_bool active; /* Whether this widget is currently being moused over */ \
|
||||
|
62
src/Menus.c
62
src/Menus.c
@ -258,7 +258,6 @@ static struct Widget* list_widgets[] = {
|
||||
(struct Widget*)&ListScreen.right, (struct Widget*)&ListScreen.title,
|
||||
(struct Widget*)&ListScreen.done, NULL
|
||||
};
|
||||
#define LIST_MAX_VERTICES (9 * BUTTONWIDGET_MAX + TEXTWIDGET_MAX)
|
||||
#define LISTSCREEN_EMPTY "-"
|
||||
|
||||
static void ListScreen_Layout(void* screen) {
|
||||
@ -400,7 +399,6 @@ static void ListScreen_Init(void* screen) {
|
||||
s->numWidgets = Array_Elems(list_widgets);
|
||||
s->wheelAcc = 0.0f;
|
||||
s->currentIndex = 0;
|
||||
s->maxVertices = LIST_MAX_VERTICES;
|
||||
|
||||
for (i = 0; i < LIST_SCREEN_ITEMS; i++) {
|
||||
ButtonWidget_Init(&s->btns[i], 300, s->EntryClick);
|
||||
@ -419,6 +417,8 @@ static void ListScreen_Init(void* screen) {
|
||||
ButtonWidget_Init(&s->left, 40, ListScreen_MoveBackwards);
|
||||
ButtonWidget_Init(&s->right, 40, ListScreen_MoveForwards);
|
||||
TextWidget_Init(&s->title);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(screen);
|
||||
s->LoadEntries(s);
|
||||
}
|
||||
|
||||
@ -499,7 +499,6 @@ static struct PauseScreen {
|
||||
struct ButtonWidget btns[PAUSE_MAX_BTNS], quit, back;
|
||||
struct TextWidget title;
|
||||
} PauseScreen;
|
||||
#define PAUSE_MAX_VERTICES (TEXTWIDGET_MAX + (PAUSE_MAX_BTNS + 2) * BUTTONWIDGET_MAX)
|
||||
|
||||
static void PauseScreenBase_Quit(void* a, void* b) { Window_Close(); }
|
||||
static void PauseScreenBase_Game(void* a, void* b) { Gui_Remove((struct Screen*)&PauseScreen); }
|
||||
@ -513,10 +512,11 @@ static void PauseScreenBase_ContextRecreated(struct PauseScreen* s, struct FontD
|
||||
}
|
||||
|
||||
static void PauseScreenBase_Init(struct PauseScreen* s, int width) {
|
||||
s->maxVertices = PAUSE_MAX_VERTICES;
|
||||
Menu_InitButtons(s->btns, width, s->descs, s->descsCount);
|
||||
ButtonWidget_Init(&s->back, 400, PauseScreenBase_Game);
|
||||
TextWidget_Init(&s->title);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
|
||||
@ -683,7 +683,6 @@ static struct Widget* optGroups_widgets[] = {
|
||||
(struct Widget*)&OptionsGroupScreen.btns[6], (struct Widget*)&OptionsGroupScreen.btns[7],
|
||||
(struct Widget*)&OptionsGroupScreen.desc, (struct Widget*)&OptionsGroupScreen.done
|
||||
};
|
||||
#define OPTGROUPS_MAX_VERTICES (8 * BUTTONWIDGET_MAX + TEXTWIDGET_MAX + BUTTONWIDGET_MAX)
|
||||
|
||||
static const char* const optsGroup_descs[8] = {
|
||||
"&eMusic/Sound, view bobbing, and more",
|
||||
@ -753,11 +752,12 @@ static void OptionsGroupScreen_Init(void* screen) {
|
||||
s->widgets = optGroups_widgets;
|
||||
s->numWidgets = Array_Elems(optGroups_widgets);
|
||||
s->selectedI = -1;
|
||||
s->maxVertices = OPTGROUPS_MAX_VERTICES;
|
||||
|
||||
Menu_InitButtons(s->btns, 300, optsGroup_btns, 8);
|
||||
TextWidget_Init(&s->desc);
|
||||
ButtonWidget_Init(&s->done, 400, Menu_SwitchPause);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static void OptionsGroupScreen_Free(void* screen) {
|
||||
@ -805,13 +805,12 @@ static struct EditHotkeyScreen {
|
||||
struct ButtonWidget btns[5], cancel;
|
||||
} EditHotkeyScreen;
|
||||
|
||||
static struct Widget* edithotkey_widgets[7] = {
|
||||
static struct Widget* edithotkey_widgets[] = {
|
||||
(struct Widget*)&EditHotkeyScreen.btns[0], (struct Widget*)&EditHotkeyScreen.btns[1],
|
||||
(struct Widget*)&EditHotkeyScreen.btns[2], (struct Widget*)&EditHotkeyScreen.btns[3],
|
||||
(struct Widget*)&EditHotkeyScreen.btns[4], (struct Widget*)&EditHotkeyScreen.input,
|
||||
(struct Widget*)&EditHotkeyScreen.cancel
|
||||
};
|
||||
#define EDITHOTKEY_MAX_VERTICES (MENUINPUTWIDGET_MAX + 6 * BUTTONWIDGET_MAX)
|
||||
|
||||
static void HotkeyListScreen_MakeFlags(int flags, cc_string* str);
|
||||
static void EditHotkeyScreen_MakeFlags(int flags, cc_string* str) {
|
||||
@ -1020,7 +1019,6 @@ static void EditHotkeyScreen_Init(void* screen) {
|
||||
s->widgets = edithotkey_widgets;
|
||||
s->numWidgets = Array_Elems(edithotkey_widgets);
|
||||
s->selectedI = -1;
|
||||
s->maxVertices = EDITHOTKEY_MAX_VERTICES;
|
||||
MenuInput_String(desc);
|
||||
|
||||
ButtonWidget_Init(&s->btns[0], 300, EditHotkeyScreen_BaseKey);
|
||||
@ -1036,6 +1034,8 @@ static void EditHotkeyScreen_Init(void* screen) {
|
||||
TextInputWidget_Create(&s->input, 500, &text, &desc);
|
||||
ButtonWidget_Init(&s->cancel, 400, Menu_SwitchHotkeys);
|
||||
s->input.onscreenPlaceholder = "Hotkey text";
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE EditHotkeyScreen_VTABLE = {
|
||||
@ -1068,7 +1068,7 @@ static struct GenLevelScreen {
|
||||
} GenLevelScreen;
|
||||
#define GENLEVEL_NUM_INPUTS 4
|
||||
|
||||
static struct Widget* gen_widgets[12] = {
|
||||
static struct Widget* gen_widgets[] = {
|
||||
(struct Widget*)&GenLevelScreen.inputs[0], (struct Widget*)&GenLevelScreen.inputs[1],
|
||||
(struct Widget*)&GenLevelScreen.inputs[2], (struct Widget*)&GenLevelScreen.inputs[3],
|
||||
(struct Widget*)&GenLevelScreen.labels[0], (struct Widget*)&GenLevelScreen.labels[1],
|
||||
@ -1076,7 +1076,6 @@ static struct Widget* gen_widgets[12] = {
|
||||
(struct Widget*)&GenLevelScreen.title, (struct Widget*)&GenLevelScreen.flatgrass,
|
||||
(struct Widget*)&GenLevelScreen.vanilla, (struct Widget*)&GenLevelScreen.cancel
|
||||
};
|
||||
#define GEN_MAX_VERTICES (3 * BUTTONWIDGET_MAX + 4 * MENUINPUTWIDGET_MAX + 5 * TEXTWIDGET_MAX)
|
||||
|
||||
CC_NOINLINE static int GenLevelScreen_GetInt(struct GenLevelScreen* s, int index) {
|
||||
struct TextInputWidget* input = &s->inputs[index];
|
||||
@ -1252,7 +1251,6 @@ static void GenLevelScreen_Init(void* screen) {
|
||||
s->widgets = gen_widgets;
|
||||
s->numWidgets = Array_Elems(gen_widgets);
|
||||
s->selectedI = -1;
|
||||
s->maxVertices = GEN_MAX_VERTICES;
|
||||
|
||||
GenLevelScreen_Make(s, 0, World.Width);
|
||||
GenLevelScreen_Make(s, 1, World.Height);
|
||||
@ -1263,6 +1261,8 @@ static void GenLevelScreen_Init(void* screen) {
|
||||
ButtonWidget_Init(&s->flatgrass, 200, GenLevelScreen_Flatgrass);
|
||||
ButtonWidget_Init(&s->vanilla, 200, GenLevelScreen_Notchy);
|
||||
ButtonWidget_Init(&s->cancel, 400, Menu_SwitchPause);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE GenLevelScreen_VTABLE = {
|
||||
@ -1295,7 +1295,6 @@ static struct Widget* classicgen_widgets[] = {
|
||||
(struct Widget*)&ClassicGenScreen.btns[0], (struct Widget*)&ClassicGenScreen.btns[1],
|
||||
(struct Widget*)&ClassicGenScreen.btns[2], (struct Widget*)&ClassicGenScreen.cancel
|
||||
};
|
||||
#define CLASSICGEN_MAX_VERTICES (TEXTWIDGET_MAX + 4 * BUTTONWIDGET_MAX)
|
||||
|
||||
static void ClassicGenScreen_Gen(int size) {
|
||||
RNGState rnd; Random_SeedFromCurrentTime(&rnd);
|
||||
@ -1338,13 +1337,14 @@ static void ClassicGenScreen_Init(void* screen) {
|
||||
struct ClassicGenScreen* s = (struct ClassicGenScreen*)screen;
|
||||
s->widgets = classicgen_widgets;
|
||||
s->numWidgets = Array_Elems(classicgen_widgets);
|
||||
s->maxVertices = CLASSICGEN_MAX_VERTICES;
|
||||
|
||||
TextWidget_Init(&s->title);
|
||||
ButtonWidget_Init(&s->btns[0], 400, ClassicGenScreen_Small);
|
||||
ButtonWidget_Init(&s->btns[1], 400, ClassicGenScreen_Medium);
|
||||
ButtonWidget_Init(&s->btns[2], 400, ClassicGenScreen_Huge);
|
||||
ButtonWidget_Init(&s->cancel, 400, Menu_SwitchPause);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE ClassicGenScreen_VTABLE = {
|
||||
@ -1379,7 +1379,6 @@ static struct Widget* save_widgets[] = {
|
||||
(struct Widget*)&SaveLevelScreen.cancel,
|
||||
(struct Widget*)&SaveLevelScreen.input, (struct Widget*)&SaveLevelScreen.desc,
|
||||
};
|
||||
#define SAVE_MAX_VERTICES (3 * BUTTONWIDGET_MAX + MENUINPUTWIDGET_MAX + TEXTWIDGET_MAX)
|
||||
|
||||
static void SaveLevelScreen_UpdateSave(struct SaveLevelScreen* s) {
|
||||
ButtonWidget_SetConst(&s->save,
|
||||
@ -1554,7 +1553,6 @@ static void SaveLevelScreen_Init(void* screen) {
|
||||
|
||||
s->widgets = save_widgets;
|
||||
s->numWidgets = Array_Elems(save_widgets);
|
||||
s->maxVertices = SAVE_MAX_VERTICES;
|
||||
MenuInput_Path(desc);
|
||||
|
||||
ButtonWidget_Init(&s->save, 400, SaveLevelScreen_Save);
|
||||
@ -1564,6 +1562,8 @@ static void SaveLevelScreen_Init(void* screen) {
|
||||
TextInputWidget_Create(&s->input, 400, &World.Name, &desc);
|
||||
TextWidget_Init(&s->desc);
|
||||
s->input.onscreenPlaceholder = "Map name";
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE SaveLevelScreen_VTABLE = {
|
||||
@ -1853,7 +1853,6 @@ static struct Widget* bindsSource_widgets[] = {
|
||||
(struct Widget*)&BindsSourceScreen.btns[0], (struct Widget*)&BindsSourceScreen.btns[1],
|
||||
(struct Widget*)&BindsSourceScreen.cancel
|
||||
};
|
||||
#define BINDSSOURCE_MAX_VERTICES (BUTTONWIDGET_MAX * 3)
|
||||
|
||||
static void BindsSourceScreen_ModeNormal(void* screen, void* b) {
|
||||
binds_gamepad = false;
|
||||
@ -1890,11 +1889,12 @@ static void BindsSourceScreen_Init(void* screen) {
|
||||
s->widgets = bindsSource_widgets;
|
||||
s->numWidgets = Array_Elems(bindsSource_widgets);
|
||||
s->selectedI = -1;
|
||||
s->maxVertices = BINDSSOURCE_MAX_VERTICES;
|
||||
|
||||
ButtonWidget_Init(&s->btns[0], 300, BindsSourceScreen_ModeNormal);
|
||||
ButtonWidget_Init(&s->btns[1], 300, BindsSourceScreen_ModeGamepad);
|
||||
ButtonWidget_Init(&s->cancel, 400, Menu_SwitchPause);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE BindsSourceScreen_VTABLE = {
|
||||
@ -1947,7 +1947,6 @@ static struct KeyBindsScreen {
|
||||
struct ButtonWidget back, left, right;
|
||||
struct ButtonWidget buttons[KEYBINDS_MAX_BTNS];
|
||||
} KeyBindsScreen;
|
||||
#define KEYBINDS_MAX_VERTICES ((KEYBINDS_MAX_BTNS + 3) * BUTTONWIDGET_MAX + 2 * TEXTWIDGET_MAX)
|
||||
|
||||
static struct Widget* key_widgets[KEYBINDS_MAX_BTNS + 5] = {
|
||||
NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,
|
||||
@ -2057,7 +2056,6 @@ static void KeyBindsScreen_Init(void* screen) {
|
||||
s->widgets = key_widgets;
|
||||
s->numWidgets = KEYBINDS_MAX_BTNS + 3;
|
||||
s->curI = -1;
|
||||
s->maxVertices = KEYBINDS_MAX_VERTICES;
|
||||
|
||||
for (i = 0; i < s->bindsCount; i++) {
|
||||
ButtonWidget_Init(&s->buttons[i], s->btnWidth, KeyBindsScreen_OnBindingClick);
|
||||
@ -2074,8 +2072,10 @@ static void KeyBindsScreen_Init(void* screen) {
|
||||
Widget_SetDisabled(&s->left, !s->leftPage);
|
||||
Widget_SetDisabled(&s->right, !s->rightPage);
|
||||
|
||||
if (!s->leftPage && !s->rightPage) return;
|
||||
if (s->leftPage || s->rightPage)
|
||||
s->numWidgets += 2;
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE KeyBindsScreen_VTABLE = {
|
||||
@ -2229,11 +2229,10 @@ static struct MenuInputOverlay {
|
||||
cc_string value; char valueBuffer[STRING_SIZE];
|
||||
} MenuInputOverlay;
|
||||
|
||||
static struct Widget* menuInput_widgets[3] = {
|
||||
static struct Widget* menuInput_widgets[] = {
|
||||
(struct Widget*)&MenuInputOverlay.ok, (struct Widget*)&MenuInputOverlay.Default,
|
||||
(struct Widget*)&MenuInputOverlay.input
|
||||
};
|
||||
#define MENUINPUT_MAX_VERTICES (2 * BUTTONWIDGET_MAX + MENUINPUTWIDGET_MAX)
|
||||
|
||||
static void MenuInputOverlay_Close(struct MenuInputOverlay* s, cc_bool valid) {
|
||||
Gui_Remove((struct Screen*)&MenuInputOverlay);
|
||||
@ -2295,7 +2294,6 @@ static void MenuInputOverlay_Init(void* screen) {
|
||||
struct MenuInputOverlay* s = (struct MenuInputOverlay*)screen;
|
||||
s->widgets = menuInput_widgets;
|
||||
s->numWidgets = Array_Elems(menuInput_widgets);
|
||||
s->maxVertices = MENUINPUT_MAX_VERTICES;
|
||||
|
||||
TextInputWidget_Create(&s->input, 400, &s->value, s->desc);
|
||||
ButtonWidget_Init(&s->Default, 200, MenuInputOverlay_Default);
|
||||
@ -2306,6 +2304,8 @@ static void MenuInputOverlay_Init(void* screen) {
|
||||
} else if (s->desc->VTABLE == &FloatInput_VTABLE) {
|
||||
s->input.onscreenType = KEYBOARD_TYPE_NUMBER;
|
||||
}
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static void MenuInputOverlay_Update(void* screen, double delta) {
|
||||
@ -3314,7 +3314,6 @@ static struct Widget* nostalgiaMenu_widgets[] = {
|
||||
(struct Widget*)&NostalgiaMenuScreen.btnA, (struct Widget*)&NostalgiaMenuScreen.btnF,
|
||||
(struct Widget*)&NostalgiaMenuScreen.done, (struct Widget*)&NostalgiaMenuScreen.title
|
||||
};
|
||||
#define NOSTALGIA_MENU_MAX_VERTICES (3 * BUTTONWIDGET_MAX + TEXTWIDGET_MAX)
|
||||
|
||||
static void NostalgiaMenuScreen_Appearance(void* a, void* b) { NostalgiaAppearanceScreen_Show(); }
|
||||
static void NostalgiaMenuScreen_Functionality(void* a, void* b) { NostalgiaFunctionalityScreen_Show(); }
|
||||
@ -3350,12 +3349,13 @@ static void NostalgiaMenuScreen_Init(void* screen) {
|
||||
|
||||
s->widgets = nostalgiaMenu_widgets;
|
||||
s->numWidgets = Array_Elems(nostalgiaMenu_widgets);
|
||||
s->maxVertices = NOSTALGIA_MENU_MAX_VERTICES;
|
||||
|
||||
TextWidget_Init(&s->title);
|
||||
ButtonWidget_Init(&s->btnA, 400, NostalgiaMenuScreen_Appearance);
|
||||
ButtonWidget_Init(&s->btnF, 400, NostalgiaMenuScreen_Functionality);
|
||||
ButtonWidget_Init(&s->done, 400, NostalgiaMenuScreen_SwitchBack);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE NostalgiaMenuScreen_VTABLE = {
|
||||
@ -3734,12 +3734,11 @@ static struct UrlWarningOverlay {
|
||||
char _urlBuffer[STRING_SIZE * 4];
|
||||
} UrlWarningOverlay;
|
||||
|
||||
static struct Widget* urlwarning_widgets[6] = {
|
||||
static struct Widget* urlwarning_widgets[] = {
|
||||
(struct Widget*)&UrlWarningOverlay.lbls[0], (struct Widget*)&UrlWarningOverlay.lbls[1],
|
||||
(struct Widget*)&UrlWarningOverlay.lbls[2], (struct Widget*)&UrlWarningOverlay.lbls[3],
|
||||
(struct Widget*)&UrlWarningOverlay.btns[0], (struct Widget*)&UrlWarningOverlay.btns[1]
|
||||
};
|
||||
#define URLWARNING_MAX_VERTICES (4 * TEXTWIDGET_MAX + 2 * BUTTONWIDGET_MAX)
|
||||
|
||||
static void UrlWarningOverlay_OpenUrl(void* screen, void* b) {
|
||||
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
|
||||
@ -3783,11 +3782,12 @@ static void UrlWarningOverlay_Init(void* screen) {
|
||||
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
|
||||
s->widgets = urlwarning_widgets;
|
||||
s->numWidgets = Array_Elems(urlwarning_widgets);
|
||||
s->maxVertices = URLWARNING_MAX_VERTICES;
|
||||
|
||||
Overlay_InitLabels(s->lbls);
|
||||
ButtonWidget_Init(&s->btns[0], 160, UrlWarningOverlay_OpenUrl);
|
||||
ButtonWidget_Init(&s->btns[1], 160, UrlWarningOverlay_AppendUrl);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE UrlWarningOverlay_VTABLE = {
|
||||
@ -3830,7 +3830,6 @@ static struct Widget* texpack_widgets[] = {
|
||||
(struct Widget*)&TexPackOverlay.btns[0], (struct Widget*)&TexPackOverlay.btns[1],
|
||||
(struct Widget*)&TexPackOverlay.btns[2], (struct Widget*)&TexPackOverlay.btns[3]
|
||||
};
|
||||
#define TEXPACK_MAX_VERTICES (4 * TEXTWIDGET_MAX + 4 * BUTTONWIDGET_MAX)
|
||||
|
||||
static cc_bool TexPackOverlay_IsAlways(void* screen, void* w) { return Screen_Index(screen, w) >= 6; }
|
||||
|
||||
@ -3957,7 +3956,6 @@ static void TexPackOverlay_Init(void* screen) {
|
||||
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
||||
s->widgets = texpack_widgets;
|
||||
s->numWidgets = Array_Elems(texpack_widgets);
|
||||
s->maxVertices = TEXPACK_MAX_VERTICES;
|
||||
|
||||
s->contentLength = 0;
|
||||
s->gotContent = false;
|
||||
@ -3968,6 +3966,8 @@ static void TexPackOverlay_Init(void* screen) {
|
||||
ButtonWidget_Init(&s->btns[1], 160, NULL);
|
||||
ButtonWidget_Init(&s->btns[2], 160, NULL);
|
||||
ButtonWidget_Init(&s->btns[3], 160, NULL);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static const struct ScreenVTABLE TexPackOverlay_VTABLE = {
|
||||
|
@ -1502,7 +1502,11 @@ static struct InventoryScreen {
|
||||
struct TableWidget table;
|
||||
struct TextWidget title;
|
||||
cc_bool releasedInv, deferredSelect;
|
||||
} InventoryScreen_Instance;
|
||||
} InventoryScreen;
|
||||
|
||||
static struct Widget* inventory_widgets[] = {
|
||||
(struct Widget*)&InventoryScreen.title, (struct Widget*)&InventoryScreen.table
|
||||
};
|
||||
|
||||
|
||||
static void InventoryScreen_GetTitleText(cc_string* desc, BlockID block) {
|
||||
@ -1531,7 +1535,7 @@ static void InventoryScreen_UpdateTitle(struct InventoryScreen* s, BlockID block
|
||||
}
|
||||
|
||||
static void InventoryScreen_OnUpdateTitle(BlockID block) {
|
||||
InventoryScreen_UpdateTitle(&InventoryScreen_Instance, block);
|
||||
InventoryScreen_UpdateTitle(&InventoryScreen, block);
|
||||
}
|
||||
|
||||
|
||||
@ -1547,12 +1551,9 @@ static void InventoryScreen_NeedRedrawing(void* screen) {
|
||||
|
||||
static void InventoryScreen_ContextLost(void* screen) {
|
||||
struct InventoryScreen* s = (struct InventoryScreen*)screen;
|
||||
Gfx_DeleteDynamicVb(&s->vb);
|
||||
s->table.vb = 0;
|
||||
|
||||
Font_Free(&s->font);
|
||||
Elem_Free(&s->table);
|
||||
Elem_Free(&s->title);
|
||||
Screen_ContextLost(s);
|
||||
s->table.vb = 0;
|
||||
}
|
||||
|
||||
static void InventoryScreen_ContextRecreated(void* screen) {
|
||||
@ -1564,19 +1565,6 @@ static void InventoryScreen_ContextRecreated(void* screen) {
|
||||
TableWidget_Recreate(&s->table);
|
||||
}
|
||||
|
||||
static void InventoryScreen_BuildMesh(void* screen) {
|
||||
struct InventoryScreen* s = (struct InventoryScreen*)screen;
|
||||
struct VertexTextured* data;
|
||||
struct VertexTextured** ptr;
|
||||
|
||||
data = Screen_LockVb(s);
|
||||
ptr = &data;
|
||||
|
||||
Widget_BuildMesh(&s->title, ptr);
|
||||
Widget_BuildMesh(&s->table, ptr);
|
||||
Gfx_UnlockDynamicVb(s->vb);
|
||||
}
|
||||
|
||||
static void InventoryScreen_MoveToSelected(struct InventoryScreen* s) {
|
||||
struct TableWidget* table = &s->table;
|
||||
TableWidget_SetBlockTo(table, Inventory_SelectedBlock);
|
||||
@ -1591,7 +1579,8 @@ static void InventoryScreen_MoveToSelected(struct InventoryScreen* s) {
|
||||
|
||||
static void InventoryScreen_Init(void* screen) {
|
||||
struct InventoryScreen* s = (struct InventoryScreen*)screen;
|
||||
s->maxVertices = TEXTWIDGET_MAX + TABLE_MAX_VERTICES;
|
||||
s->widgets = inventory_widgets;
|
||||
s->numWidgets = Array_Elems(inventory_widgets);
|
||||
|
||||
TextWidget_Init(&s->title);
|
||||
TableWidget_Create(&s->table, 22 * Options_GetFloat(OPT_INV_SCROLLBAR_SCALE, 0, 10, 1));
|
||||
@ -1607,6 +1596,8 @@ static void InventoryScreen_Init(void* screen) {
|
||||
Event_Register_(&TextureEvents.AtlasChanged, s, InventoryScreen_NeedRedrawing);
|
||||
Event_Register_(&BlockEvents.PermissionsChanged, s, InventoryScreen_OnBlockChanged);
|
||||
Event_Register_(&BlockEvents.BlockDefChanged, s, InventoryScreen_OnBlockChanged);
|
||||
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static void InventoryScreen_Free(void* screen) {
|
||||
@ -1658,7 +1649,7 @@ static int InventoryScreen_KeyDown(void* screen, int key) {
|
||||
static cc_bool InventoryScreen_IsHotbarActive(void) {
|
||||
struct Screen* grabbed = Gui.InputGrab;
|
||||
/* Only toggle hotbar when inventory or no grab screen is open */
|
||||
return !grabbed || grabbed == (struct Screen*)&InventoryScreen_Instance;
|
||||
return !grabbed || grabbed == (struct Screen*)&InventoryScreen;
|
||||
}
|
||||
|
||||
static void InventoryScreen_KeyUp(void* screen, int key) {
|
||||
@ -1702,13 +1693,13 @@ static int InventoryScreen_MouseScroll(void* screen, float delta) {
|
||||
|
||||
static const struct ScreenVTABLE InventoryScreen_VTABLE = {
|
||||
InventoryScreen_Init, InventoryScreen_Update, InventoryScreen_Free,
|
||||
InventoryScreen_Render, InventoryScreen_BuildMesh,
|
||||
InventoryScreen_Render, Screen_BuildMesh,
|
||||
InventoryScreen_KeyDown, InventoryScreen_KeyUp, Screen_TKeyPress, Screen_TText,
|
||||
InventoryScreen_PointerDown, InventoryScreen_PointerUp, InventoryScreen_PointerMove, InventoryScreen_MouseScroll,
|
||||
InventoryScreen_Layout, InventoryScreen_ContextLost, InventoryScreen_ContextRecreated
|
||||
};
|
||||
void InventoryScreen_Show(void) {
|
||||
struct InventoryScreen* s = &InventoryScreen_Instance;
|
||||
struct InventoryScreen* s = &InventoryScreen;
|
||||
s->grabsInput = true;
|
||||
s->closable = true;
|
||||
|
||||
@ -1734,10 +1725,9 @@ static struct LoadingScreen {
|
||||
char _titleBuffer[STRING_SIZE];
|
||||
char _messageBuffer[STRING_SIZE];
|
||||
} LoadingScreen;
|
||||
#define LOADING_MAX_VERTICES (2 * TEXTWIDGET_MAX)
|
||||
#define LOADING_TILE_SIZE 64
|
||||
|
||||
static struct Widget* loading_widgets[2] = {
|
||||
static struct Widget* loading_widgets[] = {
|
||||
(struct Widget*)&LoadingScreen.title, (struct Widget*)&LoadingScreen.message
|
||||
};
|
||||
|
||||
@ -1752,7 +1742,7 @@ static void LoadingScreen_SetMessage(struct LoadingScreen* s) {
|
||||
|
||||
static void LoadingScreen_CalcMaxVertices(struct LoadingScreen* s) {
|
||||
s->rows = Math_CeilDiv(WindowInfo.Height, LOADING_TILE_SIZE);
|
||||
s->maxVertices = LOADING_MAX_VERTICES + s->rows * 4;
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s) + s->rows * 4;
|
||||
}
|
||||
|
||||
static void LoadingScreen_Layout(void* screen) {
|
||||
@ -1980,7 +1970,6 @@ static struct Widget* disconnect_widgets[] = {
|
||||
(struct Widget*)&DisconnectScreen.reconnect,
|
||||
(struct Widget*)&DisconnectScreen.quit
|
||||
};
|
||||
#define DISCONNECT_MAX_VERTICES (2 * TEXTWIDGET_MAX + 2 * BUTTONWIDGET_MAX)
|
||||
#define DISCONNECT_DELAY_SECS 5
|
||||
|
||||
static void DisconnectScreen_Layout(void* screen) {
|
||||
@ -2039,8 +2028,6 @@ static void DisconnectScreen_OnQuit(void* s, void* w) { Window_Close(); }
|
||||
|
||||
static void DisconnectScreen_Init(void* screen) {
|
||||
struct DisconnectScreen* s = (struct DisconnectScreen*)screen;
|
||||
s->maxVertices = DISCONNECT_MAX_VERTICES;
|
||||
|
||||
TextWidget_Init(&s->title);
|
||||
TextWidget_Init(&s->message);
|
||||
|
||||
@ -2055,6 +2042,7 @@ static void DisconnectScreen_Init(void* screen) {
|
||||
s->lastSecsLeft = DISCONNECT_DELAY_SECS;
|
||||
s->widgets = disconnect_widgets;
|
||||
s->numWidgets = Array_Elems(disconnect_widgets);
|
||||
s->maxVertices = Screen_CalcDefaultMaxVertices(s);
|
||||
}
|
||||
|
||||
static void DisconnectScreen_Update(void* screen, double delta) {
|
||||
|
@ -59,11 +59,13 @@ static int TextWidget_Render2(void* widget, int offset) {
|
||||
return offset + 4;
|
||||
}
|
||||
|
||||
static int TextWidget_MaxVertices(void* widget) { return TEXTWIDGET_MAX; }
|
||||
|
||||
static const struct WidgetVTABLE TextWidget_VTABLE = {
|
||||
TextWidget_Render, TextWidget_Free, TextWidget_Reposition,
|
||||
Widget_InputDown, Widget_InputUp, Widget_MouseScroll,
|
||||
Widget_Pointer, Widget_PointerUp, Widget_PointerMove,
|
||||
TextWidget_BuildMesh, TextWidget_Render2
|
||||
TextWidget_BuildMesh, TextWidget_Render2, TextWidget_MaxVertices
|
||||
};
|
||||
void TextWidget_Init(struct TextWidget* w) {
|
||||
Widget_Reset(w);
|
||||
@ -209,11 +211,13 @@ static int ButtonWidget_Render2(void* widget, int offset) {
|
||||
return offset + 12;
|
||||
}
|
||||
|
||||
static int ButtonWidget_MaxVertices(void* widget) { return BUTTONWIDGET_MAX; }
|
||||
|
||||
static const struct WidgetVTABLE ButtonWidget_VTABLE = {
|
||||
ButtonWidget_Render, ButtonWidget_Free, ButtonWidget_Reposition,
|
||||
Widget_InputDown, Widget_InputUp, Widget_MouseScroll,
|
||||
Widget_Pointer, Widget_PointerUp, Widget_PointerMove,
|
||||
ButtonWidget_BuildMesh, ButtonWidget_Render2
|
||||
ButtonWidget_BuildMesh, ButtonWidget_Render2, ButtonWidget_MaxVertices
|
||||
};
|
||||
void ButtonWidget_Make(struct ButtonWidget* w, int minWidth, Widget_LeftClick onClick, cc_uint8 horAnchor, cc_uint8 verAnchor, int xOffset, int yOffset) {
|
||||
ButtonWidget_Init(w, minWidth, onClick);
|
||||
@ -456,6 +460,8 @@ static int HotbarWidget_Render2(void* widget, int offset) {
|
||||
return HOTBAR_MAX_VERTICES;
|
||||
}
|
||||
|
||||
static int HotbarWidget_MaxVertices(void* w) { return HOTBAR_MAX_VERTICES; }
|
||||
|
||||
void HotbarWidget_Update(struct HotbarWidget* w, double delta) {
|
||||
#ifdef CC_BUILD_TOUCH
|
||||
int i;
|
||||
@ -653,7 +659,7 @@ static const struct WidgetVTABLE HotbarWidget_VTABLE = {
|
||||
NULL, HotbarWidget_Free, HotbarWidget_Reposition,
|
||||
HotbarWidget_KeyDown, HotbarWidget_InputUp, HotbarWidget_MouseScroll,
|
||||
HotbarWidget_PointerDown, HotbarWidget_PointerUp, HotbarWidget_PointerMove,
|
||||
HotbarWidget_BuildMesh, HotbarWidget_Render2,
|
||||
HotbarWidget_BuildMesh, HotbarWidget_Render2, HotbarWidget_MaxVertices
|
||||
};
|
||||
void HotbarWidget_Create(struct HotbarWidget* w) {
|
||||
Widget_Reset(w);
|
||||
@ -823,6 +829,8 @@ static int TableWidget_Render2(void* widget, int offset) {
|
||||
return offset + TABLE_MAX_VERTICES;
|
||||
}
|
||||
|
||||
static int TableWidget_MaxVertices(void* w) { return TABLE_MAX_VERTICES; }
|
||||
|
||||
static void TableWidget_Free(void* widget) { }
|
||||
|
||||
void TableWidget_Recreate(struct TableWidget* w) {
|
||||
@ -970,7 +978,7 @@ static const struct WidgetVTABLE TableWidget_VTABLE = {
|
||||
NULL, TableWidget_Free, TableWidget_Reposition,
|
||||
TableWidget_KeyDown, Widget_InputUp, TableWidget_MouseScroll,
|
||||
TableWidget_PointerDown, TableWidget_PointerUp, TableWidget_PointerMove,
|
||||
TableWidget_BuildMesh, TableWidget_Render2
|
||||
TableWidget_BuildMesh, TableWidget_Render2, TableWidget_MaxVertices
|
||||
};
|
||||
void TableWidget_Create(struct TableWidget* w, int sbWidth) {
|
||||
cc_bool classic;
|
||||
@ -1569,6 +1577,8 @@ static int TextInputWidget_Render2(void* widget, int offset) {
|
||||
return offset + 4;
|
||||
}
|
||||
|
||||
static int TextInputWidget_MaxVertices(void* widget) { return MENUINPUTWIDGET_MAX; }
|
||||
|
||||
static void TextInputWidget_RemakeTexture(void* widget) {
|
||||
cc_string range; char rangeBuffer[STRING_SIZE];
|
||||
struct TextInputWidget* w = (struct TextInputWidget*)widget;
|
||||
@ -1655,7 +1665,7 @@ static const struct WidgetVTABLE TextInputWidget_VTABLE = {
|
||||
TextInputWidget_Render, InputWidget_Free, InputWidget_Reposition,
|
||||
InputWidget_KeyDown, Widget_InputUp, Widget_MouseScroll,
|
||||
TextInputWidget_PointerDown, Widget_PointerUp, Widget_PointerMove,
|
||||
TextInputWidget_BuildMesh, TextInputWidget_Render2
|
||||
TextInputWidget_BuildMesh, TextInputWidget_Render2, TextInputWidget_MaxVertices
|
||||
};
|
||||
void TextInputWidget_Create(struct TextInputWidget* w, int width, const cc_string* text, struct MenuInputDesc* desc) {
|
||||
InputWidget_Reset(&w->base);
|
||||
|
Loading…
x
Reference in New Issue
Block a user