Fix list screen disabling left button even if there's still 1-4 more entries before the current one

This commit is contained in:
UnknownShadow200 2019-08-17 20:59:54 +10:00
parent 02deabc0da
commit a8c9c471a0

View File

@ -45,18 +45,41 @@ struct SimpleButtonDesc { int x, y; const char* title; Widget_LeftClick onClick;
/*########################################################################################################################* /*########################################################################################################################*
*--------------------------------------------------------Menu base--------------------------------------------------------* *--------------------------------------------------------Menu base--------------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
static void Menu_Button(void* s, int i, struct ButtonWidget* btn, int width, const String* text, const FontDesc* font, Widget_LeftClick onClick, int horAnchor, int verAnchor, int x, int y) { static void Menu_OldButton(void* s, int i, struct ButtonWidget* btn, int width, const String* text, const FontDesc* font, Widget_LeftClick onClick, int horAnchor, int verAnchor, int x, int y) {
ButtonWidget_Make(btn, width, onClick, horAnchor, verAnchor, x, y); ButtonWidget_Make(btn, width, onClick, horAnchor, verAnchor, x, y);
ButtonWidget_Set(btn, text, font); ButtonWidget_Set(btn, text, font);
((struct Screen*)s)->widgets[i] = (struct Widget*)btn; ((struct Screen*)s)->widgets[i] = (struct Widget*)btn;
} }
static void Menu_Label(void* s, int i, struct TextWidget* label, const String* text, const FontDesc* font, int horAnchor, int verAnchor, int x, int y) { static void Menu_OldLabel(void* s, int i, struct TextWidget* label, const String* text, const FontDesc* font, int horAnchor, int verAnchor, int x, int y) {
TextWidget_Make(label, horAnchor, verAnchor, x, y); TextWidget_Make(label, horAnchor, verAnchor, x, y);
TextWidget_Set(label, text, font); TextWidget_Set(label, text, font);
((struct Screen*)s)->widgets[i] = (struct Widget*)label; ((struct Screen*)s)->widgets[i] = (struct Widget*)label;
} }
static void Menu_OldInput(void* s, int i, struct MenuInputWidget* input, int width, const String* text, FontDesc* font, struct MenuInputDesc* desc, int horAnchor, int verAnchor, int x, int y) {
MenuInputWidget_Create(input, width, 30, text, font, desc);
Widget_SetLocation(input, horAnchor, verAnchor, x, y);
input->base.showCaret = true;
((struct Screen*)s)->widgets[i] = (struct Widget*)input;
}
static void Menu_OldBack(void* s, int i, struct ButtonWidget* btn, const char* label, const FontDesc* font, Widget_LeftClick onClick) {
int width = Gui_ClassicMenu ? 400 : 200;
String msg = String_FromReadonly(label);
Menu_OldButton(s, i, btn, width, &msg, font, onClick, ANCHOR_CENTRE, ANCHOR_MAX, 0, 25);
}
static void Menu_Button(void* s, int i, struct ButtonWidget* btn, int width, Widget_LeftClick onClick, int horAnchor, int verAnchor, int x, int y) {
ButtonWidget_Make(btn, width, onClick, horAnchor, verAnchor, x, y);
((struct Screen*)s)->widgets[i] = (struct Widget*)btn;
}
static void Menu_Label(void* s, int i, struct TextWidget* label, int horAnchor, int verAnchor, int x, int y) {
TextWidget_Make(label, horAnchor, verAnchor, x, y);
((struct Screen*)s)->widgets[i] = (struct Widget*)label;
}
static void Menu_Input(void* s, int i, struct MenuInputWidget* input, int width, const String* text, FontDesc* font, struct MenuInputDesc* desc, int horAnchor, int verAnchor, int x, int y) { static void Menu_Input(void* s, int i, struct MenuInputWidget* input, int width, const String* text, FontDesc* font, struct MenuInputDesc* desc, int horAnchor, int verAnchor, int x, int y) {
MenuInputWidget_Create(input, width, 30, text, font, desc); MenuInputWidget_Create(input, width, 30, text, font, desc);
Widget_SetLocation(input, horAnchor, verAnchor, x, y); Widget_SetLocation(input, horAnchor, verAnchor, x, y);
@ -64,10 +87,9 @@ static void Menu_Input(void* s, int i, struct MenuInputWidget* input, int width,
((struct Screen*)s)->widgets[i] = (struct Widget*)input; ((struct Screen*)s)->widgets[i] = (struct Widget*)input;
} }
static void Menu_Back(void* s, int i, struct ButtonWidget* btn, const char* label, const FontDesc* font, Widget_LeftClick onClick) { static void Menu_Back(void* s, int i, struct ButtonWidget* btn, Widget_LeftClick onClick) {
int width = Gui_ClassicMenu ? 400 : 200; int width = Gui_ClassicMenu ? 400 : 200;
String msg = String_FromReadonly(label); Menu_Button(s, i, btn, width, onClick, ANCHOR_CENTRE, ANCHOR_MAX, 0, 25);
Menu_Button(s, i, btn, width, &msg, font, onClick, ANCHOR_CENTRE, ANCHOR_MAX, 0, 25);
} }
CC_NOINLINE static void Menu_MakeBack(struct ButtonWidget* btn, Widget_LeftClick onClick) { CC_NOINLINE static void Menu_MakeBack(struct ButtonWidget* btn, Widget_LeftClick onClick) {
@ -75,13 +97,8 @@ CC_NOINLINE static void Menu_MakeBack(struct ButtonWidget* btn, Widget_LeftClick
ButtonWidget_Make(btn, width, onClick, ANCHOR_CENTRE, ANCHOR_MAX, 0, 25); ButtonWidget_Make(btn, width, onClick, ANCHOR_CENTRE, ANCHOR_MAX, 0, 25);
} }
CC_NOINLINE static void Menu_MakeTitleFont(FontDesc* font) { CC_NOINLINE static void Menu_MakeTitleFont(FontDesc* font) { Drawer2D_MakeFont(font, 16, FONT_STYLE_BOLD); }
Drawer2D_MakeFont(font, 16, FONT_STYLE_BOLD); CC_NOINLINE static void Menu_MakeBodyFont(FontDesc* font) { Drawer2D_MakeFont(font, 16, FONT_STYLE_NORMAL); }
}
CC_NOINLINE static void Menu_MakeBodyFont(FontDesc* font) {
Drawer2D_MakeFont(font, 16, FONT_STYLE_NORMAL);
}
static void Menu_ContextLost(void* screen) { static void Menu_ContextLost(void* screen) {
@ -272,12 +289,10 @@ static STRING_REF String ListScreen_UNSAFE_Get(struct ListScreen* s, int index)
static void ListScreen_UpdatePage(struct ListScreen* s) { static void ListScreen_UpdatePage(struct ListScreen* s) {
String page; char pageBuffer[STRING_SIZE]; String page; char pageBuffer[STRING_SIZE];
int beg, end; int end, num, pages;
int num, pages;
beg = LIST_SCREEN_ITEMS;
end = s->entries.count - LIST_SCREEN_ITEMS; end = s->entries.count - LIST_SCREEN_ITEMS;
s->left.disabled = s->currentIndex < beg; s->left.disabled = s->currentIndex <= 0;
s->right.disabled = s->currentIndex >= end; s->right.disabled = s->currentIndex >= end;
if (Game_ClassicMode) return; if (Game_ClassicMode) return;
@ -393,13 +408,7 @@ static bool ListScreen_MouseScroll(void* screen, float delta) {
} }
static void ListScreen_Init(void* screen) { static void ListScreen_Init(void* screen) {
static struct Widget* widgets[LIST_SCREEN_ITEMS + 3 + 2] = { static struct Widget* widgets[LIST_SCREEN_ITEMS + 3 + 2];
(struct Widget*)&ListScreen.buttons[0], (struct Widget*)&ListScreen.buttons[1],
(struct Widget*)&ListScreen.buttons[2], (struct Widget*)&ListScreen.buttons[3],
(struct Widget*)&ListScreen.buttons[4], (struct Widget*)&ListScreen.left,
(struct Widget*)&ListScreen.right, (struct Widget*)&ListScreen.done,
(struct Widget*)&ListScreen.title, (struct Widget*)&ListScreen.page
};
struct ListScreen* s = (struct ListScreen*)screen; struct ListScreen* s = (struct ListScreen*)screen;
int i; int i;
@ -409,20 +418,20 @@ static void ListScreen_Init(void* screen) {
s->currentIndex = 0; s->currentIndex = 0;
for (i = 0; i < LIST_SCREEN_ITEMS; i++) { for (i = 0; i < LIST_SCREEN_ITEMS; i++) {
ButtonWidget_Make(&s->buttons[i], 300, s->EntryClick, Menu_Button(s, i, &s->buttons[i], 300, s->EntryClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, (i - 2) * 50); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, (i - 2) * 50);
} }
ButtonWidget_Make(&s->left, 40, ListScreen_MoveBackwards, Menu_Button(s, 5, &s->left, 40, ListScreen_MoveBackwards,
ANCHOR_CENTRE, ANCHOR_CENTRE, -220, 0); ANCHOR_CENTRE, ANCHOR_CENTRE, -220, 0);
ButtonWidget_Make(&s->right, 40, ListScreen_MoveForwards, Menu_Button(s, 6, &s->right, 40, ListScreen_MoveForwards,
ANCHOR_CENTRE, ANCHOR_CENTRE, 220, 0); ANCHOR_CENTRE, ANCHOR_CENTRE, 220, 0);
TextWidget_Make(&s->title, Menu_Label(s, 7, &s->title,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -155); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -155);
TextWidget_Make(&s->page, Menu_Label(s, 8, &s->page,
ANCHOR_CENTRE, ANCHOR_MAX, 0, 75); ANCHOR_CENTRE, ANCHOR_MAX, 0, 75);
Menu_Back(s, 9, &s->done, Menu_SwitchPause);
Menu_MakeBack(&s->done, Menu_SwitchPause);
Menu_MakeTitleFont(&s->font); Menu_MakeTitleFont(&s->font);
s->LoadEntries(s); s->LoadEntries(s);
} }
@ -513,7 +522,7 @@ static void PauseScreen_MakeButtons(struct PauseScreen* s, int width, const stru
int i; int i;
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
String text = String_FromReadonly(descs[i].title); String text = String_FromReadonly(descs[i].title);
Menu_Button(s, i, &s->buttons[i], width, &text, &s->titleFont, descs[i].onClick, Menu_OldButton(s, i, &s->buttons[i], width, &text, &s->titleFont, descs[i].onClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, descs[i].x, descs[i].y); ANCHOR_CENTRE, ANCHOR_CENTRE, descs[i].x, descs[i].y);
} }
} }
@ -540,7 +549,7 @@ static void PauseScreen_ContextRecreated(void* screen) {
if (Gui_ClassicMenu) { if (Gui_ClassicMenu) {
PauseScreen_MakeButtons(s, 400, classicDescs, 5); PauseScreen_MakeButtons(s, 400, classicDescs, 5);
Menu_Back(s, 5, &s->buttons[5], "Back to game", &s->titleFont, PauseScreen_Game); Menu_OldBack(s, 5, &s->buttons[5], "Back to game", &s->titleFont, PauseScreen_Game);
/* Disable nostalgia options in classic mode */ /* Disable nostalgia options in classic mode */
if (Game_ClassicMode) Menu_Remove(s, 4); if (Game_ClassicMode) Menu_Remove(s, 4);
@ -548,9 +557,9 @@ static void PauseScreen_ContextRecreated(void* screen) {
s->widgets[7] = NULL; s->widgets[7] = NULL;
} else { } else {
PauseScreen_MakeButtons(s, 300, modernDescs, 6); PauseScreen_MakeButtons(s, 300, modernDescs, 6);
Menu_Button(s, 6, &s->buttons[6], 120, &quitMsg, &s->titleFont, PauseScreen_Quit, Menu_OldButton(s, 6, &s->buttons[6], 120, &quitMsg, &s->titleFont, PauseScreen_Quit,
ANCHOR_MAX, ANCHOR_MAX, 5, 5); ANCHOR_MAX, ANCHOR_MAX, 5, 5);
Menu_Back(s, 7, &s->buttons[7], "Back to game",&s->titleFont, PauseScreen_Game); Menu_OldBack(s, 7, &s->buttons[7], "Back to game",&s->titleFont, PauseScreen_Game);
} }
if (!Server.IsSinglePlayer) { if (!Server.IsSinglePlayer) {
@ -644,13 +653,7 @@ static void OptionsGroupScreen_ContextRecreated(void* screen) {
} }
static void OptionsGroupScreen_Init(void* screen) { static void OptionsGroupScreen_Init(void* screen) {
static struct Widget* widgets[9] = { static struct Widget* widgets[9];
(struct Widget*)&OptionsGroupScreen.buttons[0], (struct Widget*)&OptionsGroupScreen.buttons[1],
(struct Widget*)&OptionsGroupScreen.buttons[2], (struct Widget*)&OptionsGroupScreen.buttons[3],
(struct Widget*)&OptionsGroupScreen.buttons[4], (struct Widget*)&OptionsGroupScreen.buttons[5],
(struct Widget*)&OptionsGroupScreen.buttons[6], (struct Widget*)&OptionsGroupScreen.desc,
(struct Widget*)&OptionsGroupScreen.done
};
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen; struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
int i; int i;
@ -662,12 +665,13 @@ static void OptionsGroupScreen_Init(void* screen) {
s->selectedI = -1; s->selectedI = -1;
for (i = 0; i < Array_Elems(optsGroup_btns); i++) { for (i = 0; i < Array_Elems(optsGroup_btns); i++) {
ButtonWidget_Make(&s->buttons[i], 300, optsGroup_btns[i].onClick, Menu_Button(s, i, &s->buttons[i], 300, optsGroup_btns[i].onClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, optsGroup_btns[i].x, optsGroup_btns[i].y); ANCHOR_CENTRE, ANCHOR_CENTRE, optsGroup_btns[i].x, optsGroup_btns[i].y);
} }
Menu_MakeBack(&s->done, Menu_SwitchPause); Menu_Label(s, 7, &s->desc,
TextWidget_Make(&s->desc, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100);
Menu_Back(s, 8, &s->done, Menu_SwitchPause);
} }
static void OptionsGroupScreen_Free(void* screen) { static void OptionsGroupScreen_Free(void* screen) {
@ -715,7 +719,7 @@ static struct EditHotkeyScreen {
} EditHotkeyScreen_Instance; } EditHotkeyScreen_Instance;
static void EditHotkeyScreen_Make(struct EditHotkeyScreen* s, int i, int x, int y, const String* text, Widget_LeftClick onClick) { static void EditHotkeyScreen_Make(struct EditHotkeyScreen* s, int i, int x, int y, const String* text, Widget_LeftClick onClick) {
Menu_Button(s, i, &s->buttons[i], 300, text, &s->titleFont, onClick, Menu_OldButton(s, i, &s->buttons[i], 300, text, &s->titleFont, onClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, x, y); ANCHOR_CENTRE, ANCHOR_CENTRE, x, y);
} }
@ -893,8 +897,8 @@ static void EditHotkeyScreen_ContextRecreated(void* screen) {
EditHotkeyScreen_Make(s, 4, 0, 130, existed ? &remHK : &cancel, EditHotkeyScreen_Make(s, 4, 0, 130, existed ? &remHK : &cancel,
EditHotkeyScreen_RemoveHotkey); EditHotkeyScreen_RemoveHotkey);
Menu_Back(s, 5, &s->buttons[5], "Cancel", &s->titleFont, Menu_SwitchHotkeys); Menu_OldBack(s, 5, &s->buttons[5], "Cancel", &s->titleFont, Menu_SwitchHotkeys);
Menu_Input(s, 6, &s->input, 500, &text, &s->textFont, &desc, Menu_OldInput(s, 6, &s->input, 500, &text, &s->textFont, &desc,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -35); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -35);
} }
@ -1005,7 +1009,7 @@ static void GenLevelScreen_Input(struct GenLevelScreen* s, int i, int y, bool se
String_InitArray(tmp, tmpBuffer); String_InitArray(tmp, tmpBuffer);
desc.VTABLE->GetDefault(&desc, &tmp); desc.VTABLE->GetDefault(&desc, &tmp);
Menu_Input(s, i, input, 200, &tmp, &s->textFont, &desc, Menu_OldInput(s, i, input, 200, &tmp, &s->textFont, &desc,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y);
input->base.showCaret = false; input->base.showCaret = false;
@ -1017,7 +1021,7 @@ static void GenLevelScreen_Label(struct GenLevelScreen* s, int i, int y, const c
PackedCol col = PACKEDCOL_CONST(224, 224, 224, 255); PackedCol col = PACKEDCOL_CONST(224, 224, 224, 255);
String text = String_FromReadonly(title); String text = String_FromReadonly(title);
Menu_Label(s, i + 4, label, &text, &s->textFont, Menu_OldLabel(s, i + 4, label, &text, &s->textFont,
ANCHOR_CENTRE_MAX, ANCHOR_CENTRE, 110, y); ANCHOR_CENTRE_MAX, ANCHOR_CENTRE, 110, y);
label->col = col; label->col = col;
@ -1056,13 +1060,13 @@ static void GenLevelScreen_ContextRecreated(void* screen) {
GenLevelScreen_Label(s, 2, 0, "Length:"); GenLevelScreen_Label(s, 2, 0, "Length:");
GenLevelScreen_Label(s, 3, 40, "Seed:"); GenLevelScreen_Label(s, 3, 40, "Seed:");
Menu_Label(s, 8, &s->labels[4], &title, &s->textFont, Menu_OldLabel(s, 8, &s->labels[4], &title, &s->textFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -130); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -130);
Menu_Button(s, 9, &s->buttons[0], 200, &flat, &s->titleFont, GenLevelScreen_Flatgrass, Menu_OldButton(s, 9, &s->buttons[0], 200, &flat, &s->titleFont, GenLevelScreen_Flatgrass,
ANCHOR_CENTRE, ANCHOR_CENTRE, -120, 100); ANCHOR_CENTRE, ANCHOR_CENTRE, -120, 100);
Menu_Button(s, 10, &s->buttons[1], 200, &norm, &s->titleFont, GenLevelScreen_Notchy, Menu_OldButton(s, 10, &s->buttons[1], 200, &norm, &s->titleFont, GenLevelScreen_Notchy,
ANCHOR_CENTRE, ANCHOR_CENTRE, 120, 100); ANCHOR_CENTRE, ANCHOR_CENTRE, 120, 100);
Menu_Back(s, 11, &s->buttons[2], "Cancel", &s->titleFont, Menu_SwitchPause); Menu_OldBack(s, 11, &s->buttons[2], "Cancel", &s->titleFont, Menu_SwitchPause);
} }
static struct ScreenVTABLE GenLevelScreen_VTABLE = { static struct ScreenVTABLE GenLevelScreen_VTABLE = {
@ -1107,7 +1111,7 @@ static void ClassicGenScreen_Huge(void* a, void* b) { ClassicGenScreen_Gen(512
static void ClassicGenScreen_Make(struct ClassicGenScreen* s, int i, int y, const char* title, Widget_LeftClick onClick) { static void ClassicGenScreen_Make(struct ClassicGenScreen* s, int i, int y, const char* title, Widget_LeftClick onClick) {
String text = String_FromReadonly(title); String text = String_FromReadonly(title);
Menu_Button(s, i, &s->buttons[i], 400, &text, &s->titleFont, onClick, Menu_OldButton(s, i, &s->buttons[i], 400, &text, &s->titleFont, onClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y);
} }
@ -1117,7 +1121,7 @@ static void ClassicGenScreen_ContextRecreated(void* screen) {
ClassicGenScreen_Make(s, 1, -50, "Normal", ClassicGenScreen_Medium); ClassicGenScreen_Make(s, 1, -50, "Normal", ClassicGenScreen_Medium);
ClassicGenScreen_Make(s, 2, 0, "Huge", ClassicGenScreen_Huge); ClassicGenScreen_Make(s, 2, 0, "Huge", ClassicGenScreen_Huge);
Menu_Back(s, 3, &s->buttons[3], "Cancel", &s->titleFont, Menu_SwitchPause); Menu_OldBack(s, 3, &s->buttons[3], "Cancel", &s->titleFont, Menu_SwitchPause);
} }
static struct ScreenVTABLE ClassicGenScreen_VTABLE = { static struct ScreenVTABLE ClassicGenScreen_VTABLE = {
@ -1168,7 +1172,7 @@ static void SaveLevelScreen_RemoveOverwrites(struct SaveLevelScreen* s) {
static void SaveLevelScreen_MakeDesc(struct SaveLevelScreen* s, const String* text) { static void SaveLevelScreen_MakeDesc(struct SaveLevelScreen* s, const String* text) {
if (s->widgets[5]) { Elem_TryFree(s->widgets[5]); } if (s->widgets[5]) { Elem_TryFree(s->widgets[5]); }
Menu_Label(s, 5, &s->desc, text, &s->textFont, Menu_OldLabel(s, 5, &s->desc, text, &s->textFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 65); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 65);
} }
@ -1267,15 +1271,15 @@ static void SaveLevelScreen_ContextRecreated(void* screen) {
struct MenuInputDesc desc; struct MenuInputDesc desc;
MenuInput_Path(desc); MenuInput_Path(desc);
Menu_Button(s, 0, &s->buttons[0], 300, &save, &s->titleFont, SaveLevelScreen_Classic, Menu_OldButton(s, 0, &s->buttons[0], 300, &save, &s->titleFont, SaveLevelScreen_Classic,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 20); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 20);
Menu_Button(s, 1, &s->buttons[1], 200, &schem, &s->titleFont, SaveLevelScreen_Schematic, Menu_OldButton(s, 1, &s->buttons[1], 200, &schem, &s->titleFont, SaveLevelScreen_Schematic,
ANCHOR_CENTRE, ANCHOR_CENTRE, -150, 120); ANCHOR_CENTRE, ANCHOR_CENTRE, -150, 120);
Menu_Label(s, 2, &s->mcEdit, &mcEdit, &s->textFont, Menu_OldLabel(s, 2, &s->mcEdit, &mcEdit, &s->textFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 120); ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 120);
Menu_Back(s, 3, &s->buttons[2], "Cancel", &s->titleFont, Menu_SwitchPause); Menu_OldBack(s, 3, &s->buttons[2], "Cancel", &s->titleFont, Menu_SwitchPause);
Menu_Input(s, 4, &s->input, 500, &String_Empty, &s->textFont, &desc, Menu_OldInput(s, 4, &s->input, 500, &String_Empty, &s->textFont, &desc,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -30); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -30);
s->widgets[5] = NULL; /* description widget placeholder */ s->widgets[5] = NULL; /* description widget placeholder */
} }
@ -1573,22 +1577,22 @@ static int KeyBindingsScreen_MakeWidgets(struct KeyBindingsScreen* s, int y, int
text.length = 0; text.length = 0;
KeyBindingsScreen_GetText(s, i, &text); KeyBindingsScreen_GetText(s, i, &text);
Menu_Button(s, i, &s->buttons[i], btnWidth, &text, &s->titleFont, KeyBindingsScreen_OnBindingClick, Menu_OldButton(s, i, &s->buttons[i], btnWidth, &text, &s->titleFont, KeyBindingsScreen_OnBindingClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, xDir * xOffset, y); ANCHOR_CENTRE, ANCHOR_CENTRE, xDir * xOffset, y);
y += 50; /* distance between buttons */ y += 50; /* distance between buttons */
} }
titleText = String_FromReadonly(title); titleText = String_FromReadonly(title);
Menu_Label(s, i, &s->title, &titleText, &s->titleFont, Menu_OldLabel(s, i, &s->title, &titleText, &s->titleFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -180); i++; ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -180); i++;
backClick = Gui_ClassicMenu ? Menu_SwitchClassicOptions : Menu_SwitchOptions; backClick = Gui_ClassicMenu ? Menu_SwitchClassicOptions : Menu_SwitchOptions;
Menu_Back(s, i, &s->back, "Done", &s->titleFont, backClick); i++; Menu_OldBack(s, i, &s->back, "Done", &s->titleFont, backClick); i++;
if (!s->leftPage && !s->rightPage) return i; if (!s->leftPage && !s->rightPage) return i;
Menu_Button(s, i, &s->left, 40, &lArrow, &s->titleFont, s->leftPage, Menu_OldButton(s, i, &s->left, 40, &lArrow, &s->titleFont, s->leftPage,
ANCHOR_CENTRE, ANCHOR_CENTRE, -btnWidth - 35, arrowsY); i++; ANCHOR_CENTRE, ANCHOR_CENTRE, -btnWidth - 35, arrowsY); i++;
Menu_Button(s, i, &s->right, 40, &rArrow, &s->titleFont, s->rightPage, Menu_OldButton(s, i, &s->right, 40, &rArrow, &s->titleFont, s->rightPage,
ANCHOR_CENTRE, ANCHOR_CENTRE, btnWidth + 35, arrowsY); i++; ANCHOR_CENTRE, ANCHOR_CENTRE, btnWidth + 35, arrowsY); i++;
s->left.disabled = !s->leftPage; s->left.disabled = !s->leftPage;
@ -1767,7 +1771,7 @@ static void MouseKeyBindingsScreen_ContextRecreated(void* screen) {
static struct TextWidget text; static struct TextWidget text;
int i = KeyBindingsScreen_MakeWidgets(s, -40, 10, -1, "Mouse key bindings", 260); int i = KeyBindingsScreen_MakeWidgets(s, -40, 10, -1, "Mouse key bindings", 260);
Menu_Label(s, i, &text, &msg, &s->textFont, Menu_OldLabel(s, i, &text, &msg, &s->textFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100);
} }
@ -1865,7 +1869,7 @@ static void MenuOptionsScreen_SelectExtHelp(struct MenuOptionsScreen* s, int idx
count = String_UNSAFE_Split(&descRaw, '\n', descLines, Array_Elems(descLines)); count = String_UNSAFE_Split(&descRaw, '\n', descLines, Array_Elems(descLines));
TextGroupWidget_Create(&s->extHelp, count, &s->textFont, s->extHelpTextures, MenuOptionsScreen_GetDesc); TextGroupWidget_Create(&s->extHelp, count, &s->textFont, s->extHelpTextures, MenuOptionsScreen_GetDesc);
Widget_SetLocation((struct Widget*)&s->extHelp, ANCHOR_MIN, ANCHOR_MIN, 0, 0); Widget_SetLocation(&s->extHelp, ANCHOR_MIN, ANCHOR_MIN, 0, 0);
Elem_Init(&s->extHelp); Elem_Init(&s->extHelp);
s->extHelp.getLineObj = desc; s->extHelp.getLineObj = desc;
@ -1985,7 +1989,7 @@ static void MenuOptionsScreen_MakeButtons(struct MenuOptionsScreen* s, const str
} }
btn = &s->buttons[i]; btn = &s->buttons[i];
Menu_Button(s, i, btn, 300, &title, &s->titleFont, btns[i].OnClick, Menu_OldButton(s, i, btn, 300, &title, &s->titleFont, btns[i].OnClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, btns[i].dir * 160, btns[i].y); ANCHOR_CENTRE, ANCHOR_CENTRE, btns[i].dir * 160, btns[i].y);
btn->optName = btns[i].name; btn->optName = btns[i].name;
@ -2069,11 +2073,11 @@ static void MenuOptionsScreen_Input(void* screen, void* widget) {
btn->GetValue(&value); btn->GetValue(&value);
i = s->numWidgets; i = s->numWidgets;
Menu_Input(s, i - 1, &s->input, 400, &value, &s->textFont, &s->descs[s->activeI], Menu_OldInput(s, i - 1, &s->input, 400, &value, &s->textFont, &s->descs[s->activeI],
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 110); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 110);
Menu_Button(s, i - 2, &s->ok, 40, &okay, &s->titleFont, MenuOptionsScreen_OK, Menu_OldButton(s, i - 2, &s->ok, 40, &okay, &s->titleFont, MenuOptionsScreen_OK,
ANCHOR_CENTRE, ANCHOR_CENTRE, 240, 110); ANCHOR_CENTRE, ANCHOR_CENTRE, 240, 110);
Menu_Button(s, i - 3, &s->Default, 200, &def, &s->titleFont, MenuOptionsScreen_Default, Menu_OldButton(s, i - 3, &s->Default, 200, &def, &s->titleFont, MenuOptionsScreen_Default,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 150); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 150);
} }
@ -2188,9 +2192,9 @@ static void ClassicOptionsScreen_ContextRecreated(void* screen) {
struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen; struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen;
MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons)); MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons));
Menu_Button(s, 9, &s->buttons[9], 400, &title, &s->titleFont, Menu_SwitchKeysClassic, Menu_OldButton(s, 9, &s->buttons[9], 400, &title, &s->titleFont, Menu_SwitchKeysClassic,
ANCHOR_CENTRE, ANCHOR_MAX, 0, 95); ANCHOR_CENTRE, ANCHOR_MAX, 0, 95);
Menu_Back(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchPause); Menu_OldBack(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchPause);
/* Disable certain options */ /* Disable certain options */
if (!Server.IsSinglePlayer) Menu_Remove(s, 3); if (!Server.IsSinglePlayer) Menu_Remove(s, 3);
@ -2271,7 +2275,7 @@ static void EnvSettingsScreen_ContextRecreated(void* screen) {
struct Widget** widgets = s->widgets; struct Widget** widgets = s->widgets;
MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons)); MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons));
Menu_Back(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchOptions); Menu_OldBack(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchOptions);
widgets[11] = NULL; widgets[12] = NULL; widgets[13] = NULL; widgets[11] = NULL; widgets[12] = NULL; widgets[13] = NULL;
} }
@ -2352,7 +2356,7 @@ static void GraphicsOptionsScreen_ContextRecreated(void* screen) {
struct Widget** widgets = s->widgets; struct Widget** widgets = s->widgets;
MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons)); MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons));
Menu_Back(s, 6, &s->buttons[6], "Done", &s->titleFont, Menu_SwitchOptions); Menu_OldBack(s, 6, &s->buttons[6], "Done", &s->titleFont, Menu_SwitchOptions);
widgets[7] = NULL; widgets[8] = NULL; widgets[9] = NULL; widgets[7] = NULL; widgets[8] = NULL; widgets[9] = NULL;
} }
@ -2462,7 +2466,7 @@ static void GuiOptionsScreen_ContextRecreated(void* screen) {
struct Widget** widgets = s->widgets; struct Widget** widgets = s->widgets;
MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons)); MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons));
Menu_Back(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchOptions); Menu_OldBack(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchOptions);
widgets[11] = NULL; widgets[12] = NULL; widgets[13] = NULL; widgets[11] = NULL; widgets[12] = NULL; widgets[13] = NULL;
} }
@ -2602,7 +2606,7 @@ static void HacksSettingsScreen_ContextRecreated(void* screen) {
Event_RegisterVoid(&UserEvents.HackPermissionsChanged, s, HacksSettingsScreen_CheckHacksAllowed); Event_RegisterVoid(&UserEvents.HackPermissionsChanged, s, HacksSettingsScreen_CheckHacksAllowed);
MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons)); MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons));
Menu_Back(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchOptions); Menu_OldBack(s, 10, &s->buttons[10], "Done", &s->titleFont, Menu_SwitchOptions);
widgets[11] = NULL; widgets[12] = NULL; widgets[13] = NULL; widgets[11] = NULL; widgets[12] = NULL; widgets[13] = NULL;
HacksSettingsScreen_CheckHacksAllowed(screen); HacksSettingsScreen_CheckHacksAllowed(screen);
} }
@ -2692,7 +2696,7 @@ static void MiscOptionsScreen_ContextRecreated(void* screen) {
struct Widget** widgets = s->widgets; struct Widget** widgets = s->widgets;
MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons)); MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons));
Menu_Back(s, 8, &s->buttons[8], "Done", &s->titleFont, Menu_SwitchOptions); Menu_OldBack(s, 8, &s->buttons[8], "Done", &s->titleFont, Menu_SwitchOptions);
widgets[9] = NULL; widgets[10] = NULL; widgets[11] = NULL; widgets[9] = NULL; widgets[10] = NULL; widgets[11] = NULL;
/* Disable certain options */ /* Disable certain options */
@ -2775,8 +2779,8 @@ static void NostalgiaScreen_ContextRecreated(void* screen) {
static struct TextWidget desc; static struct TextWidget desc;
MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons)); MenuOptionsScreen_MakeButtons(s, buttons, Array_Elems(buttons));
Menu_Back(s, 8, &s->buttons[8], "Done", &s->titleFont, NostalgiaScreen_SwitchBack); Menu_OldBack(s, 8, &s->buttons[8], "Done", &s->titleFont, NostalgiaScreen_SwitchBack);
Menu_Label(s, 9, &desc, &descText, &s->textFont, Menu_OldLabel(s, 9, &desc, &descText, &s->textFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100);
} }
@ -2800,13 +2804,13 @@ static void Overlay_MakeLabels(void* menu, struct TextWidget* labels, const Stri
struct MenuScreen* s = (struct MenuScreen*)menu; struct MenuScreen* s = (struct MenuScreen*)menu;
PackedCol col = PACKEDCOL_CONST(224, 224, 224, 255); PackedCol col = PACKEDCOL_CONST(224, 224, 224, 255);
int i; int i;
Menu_Label(s, 0, &labels[0], &lines[0], &s->titleFont, Menu_OldLabel(s, 0, &labels[0], &lines[0], &s->titleFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -120); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -120);
for (i = 1; i < 4; i++) { for (i = 1; i < 4; i++) {
if (!lines[i].length) continue; if (!lines[i].length) continue;
Menu_Label(s, i, &labels[i], &lines[i], &s->textFont, Menu_OldLabel(s, i, &labels[i], &lines[i], &s->textFont,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -70 + 20 * i); ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -70 + 20 * i);
labels[i].col = col; labels[i].col = col;
} }
@ -2819,15 +2823,15 @@ static void WarningOverlay_MakeButtons(void* menu, struct ButtonWidget* btns, bo
static const String alwaysNo = String_FromConst("Always no"); static const String alwaysNo = String_FromConst("Always no");
struct MenuScreen* s = (struct MenuScreen*)menu; struct MenuScreen* s = (struct MenuScreen*)menu;
Menu_Button(s, 4, &btns[0], 160, &yes, &s->titleFont, yesClick, Menu_OldButton(s, 4, &btns[0], 160, &yes, &s->titleFont, yesClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 30); ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 30);
Menu_Button(s, 5, &btns[1], 160, &no, &s->titleFont, noClick, Menu_OldButton(s, 5, &btns[1], 160, &no, &s->titleFont, noClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 30); ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 30);
if (!always) return; if (!always) return;
Menu_Button(s, 6, &btns[2], 160, &alwaysYes, &s->titleFont, yesClick, Menu_OldButton(s, 6, &btns[2], 160, &alwaysYes, &s->titleFont, yesClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 85); ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 85);
Menu_Button(s, 7, &btns[3], 160, &alwaysNo, &s->titleFont, noClick, Menu_OldButton(s, 7, &btns[3], 160, &alwaysNo, &s->titleFont, noClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 85); ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 85);
} }
static bool WarningOverlay_IsAlways(void* screen, void* w) { return Menu_Index(screen, w) >= 6; } static bool WarningOverlay_IsAlways(void* screen, void* w) { return Menu_Index(screen, w) >= 6; }
@ -2872,7 +2876,7 @@ static void TexIdsOverlay_ContextRecreated(void* screen) {
s->yOffset = Gui_CalcPos(ANCHOR_CENTRE, 0, size * ATLAS2D_TILES_PER_ROW, Window_Height); s->yOffset = Gui_CalcPos(ANCHOR_CENTRE, 0, size * ATLAS2D_TILES_PER_ROW, Window_Height);
s->tileSize = size; s->tileSize = size;
Menu_Label(s, 0, &s->title, &title, &s->titleFont, Menu_OldLabel(s, 0, &s->title, &title, &s->titleFont,
ANCHOR_CENTRE, ANCHOR_MIN, 0, s->yOffset - 30); ANCHOR_CENTRE, ANCHOR_MIN, 0, s->yOffset - 30);
} }
@ -3175,9 +3179,9 @@ static void TexPackOverlay_MakeDenyElements(struct TexPackOverlay* s) {
static const String goBack = String_FromConst("Go back"); static const String goBack = String_FromConst("Go back");
Overlay_MakeLabels(s, s->labels, lines); Overlay_MakeLabels(s, s->labels, lines);
Menu_Button(s, 4, &s->buttons[0], 160, &imSure, &s->titleFont, TexPackOverlay_ConfirmNoClick, Menu_OldButton(s, 4, &s->buttons[0], 160, &imSure, &s->titleFont, TexPackOverlay_ConfirmNoClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 30); ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 30);
Menu_Button(s, 5, &s->buttons[1], 160, &goBack, &s->titleFont, TexPackOverlay_GoBackClick, Menu_OldButton(s, 5, &s->buttons[1], 160, &goBack, &s->titleFont, TexPackOverlay_GoBackClick,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 30); ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 30);
} }