mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 19:45:23 -04:00
Move font initing/freeing to contextlost/contextrecreated for all menus
This fixes clicking 'use system font' crashing the game from recent changes
This commit is contained in:
parent
a4e67703cc
commit
e91d863997
214
src/Menus.c
214
src/Menus.c
@ -29,9 +29,6 @@
|
|||||||
#include "Builder.h"
|
#include "Builder.h"
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
|
|
||||||
#define MenuScreen_Layout Screen_Layout FontDesc titleFont, textFont;
|
|
||||||
struct MenuScreen { MenuScreen_Layout };
|
|
||||||
|
|
||||||
/* Describes a menu option button */
|
/* Describes a menu option button */
|
||||||
struct MenuOptionDesc {
|
struct MenuOptionDesc {
|
||||||
short dir, y;
|
short dir, y;
|
||||||
@ -55,9 +52,8 @@ static void Menu_Label(void* s, int i, struct TextWidget* label, int horAnchor,
|
|||||||
((struct Screen*)s)->widgets[i] = (struct Widget*)label;
|
((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, struct MenuInputDesc* desc, int horAnchor, int verAnchor, int x, int y) {
|
||||||
MenuInputWidget_Create(input, width, 30, text, desc);
|
MenuInputWidget_Create(input, width, 30, text, desc);
|
||||||
MenuInputWidget_SetFont(input, font);
|
|
||||||
Widget_SetLocation(input, horAnchor, verAnchor, x, y);
|
Widget_SetLocation(input, horAnchor, verAnchor, x, y);
|
||||||
input->base.showCaret = true;
|
input->base.showCaret = true;
|
||||||
((struct Screen*)s)->widgets[i] = (struct Widget*)input;
|
((struct Screen*)s)->widgets[i] = (struct Widget*)input;
|
||||||
@ -452,12 +448,6 @@ void ListScreen_Show(void) {
|
|||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static bool MenuScreen_KeyDown(void* screen, Key key) { return key < KEY_F1 || key > KEY_F35; }
|
static bool MenuScreen_KeyDown(void* screen, Key key) { return key < KEY_F1 || key > KEY_F35; }
|
||||||
|
|
||||||
static void MenuScreen_Init(void* screen) {
|
|
||||||
struct MenuScreen* s = (struct MenuScreen*)screen;
|
|
||||||
if (!s->titleFont.Size) Menu_MakeTitleFont(&s->titleFont);
|
|
||||||
if (!s->textFont.Size) Menu_MakeBodyFont(&s->textFont);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void MenuScreen_Render(void* screen, double delta) {
|
static void MenuScreen_Render(void* screen, double delta) {
|
||||||
Menu_RenderBounds();
|
Menu_RenderBounds();
|
||||||
Gfx_SetTexturing(true);
|
Gfx_SetTexturing(true);
|
||||||
@ -465,12 +455,6 @@ static void MenuScreen_Render(void* screen, double delta) {
|
|||||||
Gfx_SetTexturing(false);
|
Gfx_SetTexturing(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MenuScreen_Free(void* screen) {
|
|
||||||
struct MenuScreen* s = (struct MenuScreen*)screen;
|
|
||||||
Font_Free(&s->titleFont);
|
|
||||||
Font_Free(&s->textFont);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
*-------------------------------------------------------PauseScreen-------------------------------------------------------*
|
*-------------------------------------------------------PauseScreen-------------------------------------------------------*
|
||||||
@ -581,8 +565,9 @@ void PauseScreen_Show(void) {
|
|||||||
*--------------------------------------------------OptionsGroupScreen-----------------------------------------------------*
|
*--------------------------------------------------OptionsGroupScreen-----------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static struct OptionsGroupScreen {
|
static struct OptionsGroupScreen {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
int selectedI;
|
int selectedI;
|
||||||
|
FontDesc textFont;
|
||||||
struct ButtonWidget buttons[7];
|
struct ButtonWidget buttons[7];
|
||||||
struct TextWidget desc;
|
struct TextWidget desc;
|
||||||
struct ButtonWidget done;
|
struct ButtonWidget done;
|
||||||
@ -616,16 +601,27 @@ CC_NOINLINE static void OptionsGroupScreen_UpdateDesc(struct OptionsGroupScreen*
|
|||||||
TextWidget_SetConst(&s->desc, optsGroup_descs[s->selectedI], &s->textFont);
|
TextWidget_SetConst(&s->desc, optsGroup_descs[s->selectedI], &s->textFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void OptionsGroupScreen_ContextLost(void* screen) {
|
||||||
|
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
||||||
|
Font_Free(&s->textFont);
|
||||||
|
Menu_ContextLost(screen);
|
||||||
|
}
|
||||||
|
|
||||||
static void OptionsGroupScreen_ContextRecreated(void* screen) {
|
static void OptionsGroupScreen_ContextRecreated(void* screen) {
|
||||||
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
||||||
|
FontDesc titleFont;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < Array_Elems(optsGroup_btns); i++) {
|
Menu_MakeTitleFont(&titleFont);
|
||||||
ButtonWidget_SetConst(&s->buttons[i], optsGroup_btns[i].title, &s->titleFont);
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
}
|
|
||||||
|
for (i = 0; i < Array_Elems(optsGroup_btns); i++) {
|
||||||
|
ButtonWidget_SetConst(&s->buttons[i], optsGroup_btns[i].title, &titleFont);
|
||||||
|
}
|
||||||
|
ButtonWidget_SetConst(&s->done, "Done", &titleFont);
|
||||||
|
|
||||||
ButtonWidget_SetConst(&s->done, "Done", &s->titleFont);
|
|
||||||
if (s->selectedI >= 0) OptionsGroupScreen_UpdateDesc(s);
|
if (s->selectedI >= 0) OptionsGroupScreen_UpdateDesc(s);
|
||||||
OptionsGroupScreen_CheckHacksAllowed(s);
|
OptionsGroupScreen_CheckHacksAllowed(s);
|
||||||
|
Font_Free(&titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OptionsGroupScreen_Init(void* screen) {
|
static void OptionsGroupScreen_Init(void* screen) {
|
||||||
@ -633,9 +629,7 @@ static void OptionsGroupScreen_Init(void* screen) {
|
|||||||
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
MenuScreen_Init(s);
|
|
||||||
Event_RegisterVoid(&UserEvents.HackPermissionsChanged, s, OptionsGroupScreen_CheckHacksAllowed);
|
Event_RegisterVoid(&UserEvents.HackPermissionsChanged, s, OptionsGroupScreen_CheckHacksAllowed);
|
||||||
|
|
||||||
s->widgets = widgets;
|
s->widgets = widgets;
|
||||||
s->numWidgets = Array_Elems(widgets);
|
s->numWidgets = Array_Elems(widgets);
|
||||||
s->selectedI = -1;
|
s->selectedI = -1;
|
||||||
@ -652,7 +646,6 @@ static void OptionsGroupScreen_Init(void* screen) {
|
|||||||
|
|
||||||
static void OptionsGroupScreen_Free(void* screen) {
|
static void OptionsGroupScreen_Free(void* screen) {
|
||||||
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
||||||
MenuScreen_Free(s);
|
|
||||||
Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, s, OptionsGroupScreen_CheckHacksAllowed);
|
Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, s, OptionsGroupScreen_CheckHacksAllowed);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,7 +664,7 @@ static const struct ScreenVTABLE OptionsGroupScreen_VTABLE = {
|
|||||||
OptionsGroupScreen_Init, MenuScreen_Render, OptionsGroupScreen_Free,
|
OptionsGroupScreen_Init, MenuScreen_Render, OptionsGroupScreen_Free,
|
||||||
MenuScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
|
MenuScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
|
||||||
Menu_MouseDown, Screen_TMouse, OptionsGroupScreen_MouseMove, Screen_TMouseScroll,
|
Menu_MouseDown, Screen_TMouse, OptionsGroupScreen_MouseMove, Screen_TMouseScroll,
|
||||||
Menu_OnResize, Menu_ContextLost, OptionsGroupScreen_ContextRecreated
|
Menu_OnResize, OptionsGroupScreen_ContextLost, OptionsGroupScreen_ContextRecreated
|
||||||
};
|
};
|
||||||
void OptionsGroupScreen_Show(void) {
|
void OptionsGroupScreen_Show(void) {
|
||||||
struct OptionsGroupScreen* s = &OptionsGroupScreen;
|
struct OptionsGroupScreen* s = &OptionsGroupScreen;
|
||||||
@ -686,10 +679,11 @@ void OptionsGroupScreen_Show(void) {
|
|||||||
*----------------------------------------------------EditHotkeyScreen-----------------------------------------------------*
|
*----------------------------------------------------EditHotkeyScreen-----------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static struct EditHotkeyScreen {
|
static struct EditHotkeyScreen {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
struct HotkeyData curHotkey, origHotkey;
|
struct HotkeyData curHotkey, origHotkey;
|
||||||
int selectedI;
|
int selectedI;
|
||||||
bool supressNextPress;
|
bool supressNextPress;
|
||||||
|
FontDesc titleFont, textFont;
|
||||||
struct MenuInputWidget input;
|
struct MenuInputWidget input;
|
||||||
struct ButtonWidget buttons[5], cancel;
|
struct ButtonWidget buttons[5], cancel;
|
||||||
} EditHotkeyScreen_Instance;
|
} EditHotkeyScreen_Instance;
|
||||||
@ -806,12 +800,6 @@ static void EditHotkeyScreen_Render(void* screen, double delta) {
|
|||||||
Gfx_Draw2DFlat(x - 250, y + 45, 500, 2, grey);
|
Gfx_Draw2DFlat(x - 250, y + 45, 500, 2, grey);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void EditHotkeyScreen_Free(void* screen) {
|
|
||||||
struct EditHotkeyScreen* s = (struct EditHotkeyScreen*)screen;
|
|
||||||
s->selectedI = -1;
|
|
||||||
MenuScreen_Free(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool EditHotkeyScreen_KeyPress(void* screen, char keyChar) {
|
static bool EditHotkeyScreen_KeyPress(void* screen, char keyChar) {
|
||||||
struct EditHotkeyScreen* s = (struct EditHotkeyScreen*)screen;
|
struct EditHotkeyScreen* s = (struct EditHotkeyScreen*)screen;
|
||||||
if (s->supressNextPress) {
|
if (s->supressNextPress) {
|
||||||
@ -844,16 +832,26 @@ static bool EditHotkeyScreen_KeyDown(void* screen, Key key) {
|
|||||||
return Elem_HandlesKeyDown(&s->input.base, key) || MenuScreen_KeyDown(s, key);
|
return Elem_HandlesKeyDown(&s->input.base, key) || MenuScreen_KeyDown(s, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void EditHotkeyScreen_ContextLost(void* screen) {
|
||||||
|
struct EditHotkeyScreen* s = (struct EditHotkeyScreen*)screen;
|
||||||
|
Font_Free(&s->titleFont);
|
||||||
|
Font_Free(&s->textFont);
|
||||||
|
Menu_ContextLost(screen);
|
||||||
|
}
|
||||||
|
|
||||||
static void EditHotkeyScreen_ContextRecreated(void* screen) {
|
static void EditHotkeyScreen_ContextRecreated(void* screen) {
|
||||||
struct EditHotkeyScreen* s = (struct EditHotkeyScreen*)screen;
|
struct EditHotkeyScreen* s = (struct EditHotkeyScreen*)screen;
|
||||||
bool existed = s->origHotkey.Trigger != KEY_NONE;
|
bool existed = s->origHotkey.Trigger != KEY_NONE;
|
||||||
|
|
||||||
|
Menu_MakeTitleFont(&s->titleFont);
|
||||||
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
EditHotkeyScreen_UpdateBaseKey(s);
|
EditHotkeyScreen_UpdateBaseKey(s);
|
||||||
EditHotkeyScreen_UpdateModifiers(s);
|
EditHotkeyScreen_UpdateModifiers(s);
|
||||||
EditHotkeyScreen_UpdateLeaveOpen(s);
|
EditHotkeyScreen_UpdateLeaveOpen(s);
|
||||||
|
|
||||||
ButtonWidget_SetConst(&s->buttons[3], existed ? "Save changes" : "Add hotkey", &s->titleFont);
|
ButtonWidget_SetConst(&s->buttons[3], existed ? "Save changes" : "Add hotkey", &s->titleFont);
|
||||||
ButtonWidget_SetConst(&s->buttons[4], existed ? "Remove hotkey" : "Cancel", &s->titleFont);
|
ButtonWidget_SetConst(&s->buttons[4], existed ? "Remove hotkey" : "Cancel", &s->titleFont);
|
||||||
InputWidget_UpdateText(&s->input.base);
|
MenuInputWidget_SetFont(&s->input, &s->textFont);
|
||||||
ButtonWidget_SetConst(&s->cancel, "Cancel", &s->titleFont);
|
ButtonWidget_SetConst(&s->cancel, "Cancel", &s->titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -866,7 +864,6 @@ static void EditHotkeyScreen_Init(void* screen) {
|
|||||||
s->widgets = widgets;
|
s->widgets = widgets;
|
||||||
s->numWidgets = Array_Elems(widgets);
|
s->numWidgets = Array_Elems(widgets);
|
||||||
s->selectedI = -1;
|
s->selectedI = -1;
|
||||||
MenuScreen_Init(screen);
|
|
||||||
MenuInput_String(desc);
|
MenuInput_String(desc);
|
||||||
|
|
||||||
EditHotkeyScreen_Make(s, 0, 0, -150, EditHotkeyScreen_BaseKey);
|
EditHotkeyScreen_Make(s, 0, 0, -150, EditHotkeyScreen_BaseKey);
|
||||||
@ -879,16 +876,16 @@ static void EditHotkeyScreen_Init(void* screen) {
|
|||||||
text = StringsBuffer_UNSAFE_Get(&HotkeysText, s->origHotkey.TextIndex);
|
text = StringsBuffer_UNSAFE_Get(&HotkeysText, s->origHotkey.TextIndex);
|
||||||
} else { text = String_Empty; }
|
} else { text = String_Empty; }
|
||||||
|
|
||||||
Menu_Input(s, 6, &s->input, 500, &text, &s->textFont, &desc,
|
Menu_Input(s, 6, &s->input, 500, &text, &desc,
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -35);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -35);
|
||||||
Menu_Back(s, 5, &s->cancel, Menu_SwitchHotkeys);
|
Menu_Back(s, 5, &s->cancel, Menu_SwitchHotkeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct ScreenVTABLE EditHotkeyScreen_VTABLE = {
|
static const struct ScreenVTABLE EditHotkeyScreen_VTABLE = {
|
||||||
EditHotkeyScreen_Init, EditHotkeyScreen_Render, EditHotkeyScreen_Free,
|
EditHotkeyScreen_Init, EditHotkeyScreen_Render, Menu_NullFunc,
|
||||||
EditHotkeyScreen_KeyDown, Screen_TKey, EditHotkeyScreen_KeyPress,
|
EditHotkeyScreen_KeyDown, Screen_TKey, EditHotkeyScreen_KeyPress,
|
||||||
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
||||||
Menu_OnResize, Menu_ContextLost, EditHotkeyScreen_ContextRecreated
|
Menu_OnResize, EditHotkeyScreen_ContextLost, EditHotkeyScreen_ContextRecreated
|
||||||
};
|
};
|
||||||
void EditHotkeyScreen_Show(struct HotkeyData original) {
|
void EditHotkeyScreen_Show(struct HotkeyData original) {
|
||||||
struct EditHotkeyScreen* s = &EditHotkeyScreen_Instance;
|
struct EditHotkeyScreen* s = &EditHotkeyScreen_Instance;
|
||||||
@ -905,7 +902,8 @@ void EditHotkeyScreen_Show(struct HotkeyData original) {
|
|||||||
*-----------------------------------------------------GenLevelScreen------------------------------------------------------*
|
*-----------------------------------------------------GenLevelScreen------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static struct GenLevelScreen {
|
static struct GenLevelScreen {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
|
FontDesc textFont;
|
||||||
struct ButtonWidget flatgrass, vanilla, cancel;
|
struct ButtonWidget flatgrass, vanilla, cancel;
|
||||||
struct MenuInputWidget* selected;
|
struct MenuInputWidget* selected;
|
||||||
struct MenuInputWidget inputs[4];
|
struct MenuInputWidget inputs[4];
|
||||||
@ -979,7 +977,7 @@ static void GenLevelScreen_Make(struct GenLevelScreen* s, int i, int y, int def)
|
|||||||
String_InitArray(tmp, tmpBuffer);
|
String_InitArray(tmp, tmpBuffer);
|
||||||
desc.VTABLE->GetDefault(&desc, &tmp);
|
desc.VTABLE->GetDefault(&desc, &tmp);
|
||||||
|
|
||||||
Menu_Input(s, i, &s->inputs[i], 200, &tmp, &s->textFont, &desc,
|
Menu_Input(s, i, &s->inputs[i], 200, &tmp, &desc,
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y);
|
||||||
s->inputs[i].base.showCaret = false;
|
s->inputs[i].base.showCaret = false;
|
||||||
s->inputs[i].base.MenuClick = GenLevelScreen_InputClick;
|
s->inputs[i].base.MenuClick = GenLevelScreen_InputClick;
|
||||||
@ -1001,13 +999,22 @@ static bool GenLevelScreen_KeyPress(void* screen, char keyChar) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void GenLevelScreen_ContextLost(void* screen) {
|
||||||
|
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
|
||||||
|
Font_Free(&s->textFont);
|
||||||
|
Menu_ContextLost(screen);
|
||||||
|
}
|
||||||
|
|
||||||
static void GenLevelScreen_ContextRecreated(void* screen) {
|
static void GenLevelScreen_ContextRecreated(void* screen) {
|
||||||
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
|
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
|
||||||
|
FontDesc titleFont;
|
||||||
|
Menu_MakeTitleFont(&titleFont);
|
||||||
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
|
|
||||||
InputWidget_UpdateText(&s->inputs[0].base);
|
MenuInputWidget_SetFont(&s->inputs[0], &s->textFont);
|
||||||
InputWidget_UpdateText(&s->inputs[1].base);
|
MenuInputWidget_SetFont(&s->inputs[1], &s->textFont);
|
||||||
InputWidget_UpdateText(&s->inputs[2].base);
|
MenuInputWidget_SetFont(&s->inputs[2], &s->textFont);
|
||||||
InputWidget_UpdateText(&s->inputs[3].base);
|
MenuInputWidget_SetFont(&s->inputs[3], &s->textFont);
|
||||||
|
|
||||||
TextWidget_SetConst(&s->labels[0], "Width:", &s->textFont);
|
TextWidget_SetConst(&s->labels[0], "Width:", &s->textFont);
|
||||||
TextWidget_SetConst(&s->labels[1], "Height:", &s->textFont);
|
TextWidget_SetConst(&s->labels[1], "Height:", &s->textFont);
|
||||||
@ -1015,16 +1022,15 @@ static void GenLevelScreen_ContextRecreated(void* screen) {
|
|||||||
TextWidget_SetConst(&s->labels[3], "Seed:", &s->textFont);
|
TextWidget_SetConst(&s->labels[3], "Seed:", &s->textFont);
|
||||||
|
|
||||||
TextWidget_SetConst(&s->title, "Generate new level", &s->textFont);
|
TextWidget_SetConst(&s->title, "Generate new level", &s->textFont);
|
||||||
ButtonWidget_SetConst(&s->flatgrass, "Flatgrass", &s->titleFont);
|
ButtonWidget_SetConst(&s->flatgrass, "Flatgrass", &titleFont);
|
||||||
ButtonWidget_SetConst(&s->vanilla, "Vanilla", &s->titleFont);
|
ButtonWidget_SetConst(&s->vanilla, "Vanilla", &titleFont);
|
||||||
ButtonWidget_SetConst(&s->cancel, "Cancel", &s->titleFont);
|
ButtonWidget_SetConst(&s->cancel, "Cancel", &titleFont);
|
||||||
|
Font_Free(&titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GenLevelScreen_Init(void* screen) {
|
static void GenLevelScreen_Init(void* screen) {
|
||||||
static struct Widget* widgets[12];
|
static struct Widget* widgets[12];
|
||||||
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
|
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
|
||||||
|
|
||||||
MenuScreen_Init(s);
|
|
||||||
s->widgets = widgets;
|
s->widgets = widgets;
|
||||||
s->numWidgets = Array_Elems(widgets);
|
s->numWidgets = Array_Elems(widgets);
|
||||||
|
|
||||||
@ -1043,16 +1049,16 @@ static void GenLevelScreen_Init(void* screen) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const struct ScreenVTABLE GenLevelScreen_VTABLE = {
|
static const struct ScreenVTABLE GenLevelScreen_VTABLE = {
|
||||||
GenLevelScreen_Init, MenuScreen_Render, MenuScreen_Free,
|
GenLevelScreen_Init, MenuScreen_Render, Menu_NullFunc,
|
||||||
GenLevelScreen_KeyDown, Screen_TKey, GenLevelScreen_KeyPress,
|
GenLevelScreen_KeyDown, Screen_TKey, GenLevelScreen_KeyPress,
|
||||||
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
||||||
Menu_OnResize, Menu_ContextLost, GenLevelScreen_ContextRecreated
|
Menu_OnResize, GenLevelScreen_ContextLost, GenLevelScreen_ContextRecreated
|
||||||
};
|
};
|
||||||
void GenLevelScreen_Show(void) {
|
void GenLevelScreen_Show(void) {
|
||||||
struct GenLevelScreen* s = &GenLevelScreen_Instance;
|
struct GenLevelScreen* s = &GenLevelScreen_Instance;
|
||||||
s->grabsInput = true;
|
s->grabsInput = true;
|
||||||
s->closable = true;
|
s->closable = true;
|
||||||
s->VTABLE = &GenLevelScreen_VTABLE;
|
s->VTABLE = &GenLevelScreen_VTABLE;
|
||||||
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
|
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1097,10 +1103,8 @@ static void ClassicGenScreen_ContextRecreated(void* screen) {
|
|||||||
static void ClassicGenScreen_Init(void* screen) {
|
static void ClassicGenScreen_Init(void* screen) {
|
||||||
static struct Widget* widgets[4];
|
static struct Widget* widgets[4];
|
||||||
struct ClassicGenScreen* s = (struct ClassicGenScreen*)screen;
|
struct ClassicGenScreen* s = (struct ClassicGenScreen*)screen;
|
||||||
|
|
||||||
s->widgets = widgets;
|
s->widgets = widgets;
|
||||||
s->numWidgets = Array_Elems(widgets);
|
s->numWidgets = Array_Elems(widgets);
|
||||||
MenuScreen_Init(s);
|
|
||||||
|
|
||||||
ClassicGenScreen_Make(s, 0, -100, ClassicGenScreen_Small);
|
ClassicGenScreen_Make(s, 0, -100, ClassicGenScreen_Small);
|
||||||
ClassicGenScreen_Make(s, 1, -50, ClassicGenScreen_Medium);
|
ClassicGenScreen_Make(s, 1, -50, ClassicGenScreen_Medium);
|
||||||
@ -1128,7 +1132,8 @@ void ClassicGenScreen_Show(void) {
|
|||||||
*----------------------------------------------------SaveLevelScreen------------------------------------------------------*
|
*----------------------------------------------------SaveLevelScreen------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static struct SaveLevelScreen {
|
static struct SaveLevelScreen {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
|
FontDesc titleFont, textFont;
|
||||||
struct ButtonWidget save, schem, cancel;
|
struct ButtonWidget save, schem, cancel;
|
||||||
struct MenuInputWidget input;
|
struct MenuInputWidget input;
|
||||||
struct TextWidget mcEdit, desc;
|
struct TextWidget mcEdit, desc;
|
||||||
@ -1237,12 +1242,22 @@ static bool SaveLevelScreen_KeyDown(void* screen, Key key) {
|
|||||||
return MenuScreen_KeyDown(s, key);
|
return MenuScreen_KeyDown(s, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void SaveLevelScreen_ContextLost(void* screen) {
|
||||||
|
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
|
||||||
|
Font_Free(&s->titleFont);
|
||||||
|
Font_Free(&s->textFont);
|
||||||
|
Menu_ContextLost(screen);
|
||||||
|
}
|
||||||
|
|
||||||
static void SaveLevelScreen_ContextRecreated(void* screen) {
|
static void SaveLevelScreen_ContextRecreated(void* screen) {
|
||||||
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
|
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
|
||||||
|
Menu_MakeTitleFont(&s->titleFont);
|
||||||
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
SaveLevelScreen_UpdateSave(s);
|
SaveLevelScreen_UpdateSave(s);
|
||||||
SaveLevelScreen_UpdateSchem(s);
|
SaveLevelScreen_UpdateSchem(s);
|
||||||
|
|
||||||
TextWidget_SetConst(&s->mcEdit, "&eCan be imported into MCEdit", &s->textFont);
|
TextWidget_SetConst(&s->mcEdit, "&eCan be imported into MCEdit", &s->textFont);
|
||||||
InputWidget_UpdateText(&s->input.base);
|
MenuInputWidget_SetFont(&s->input, &s->textFont);
|
||||||
ButtonWidget_SetConst(&s->cancel, "Cancel", &s->titleFont);
|
ButtonWidget_SetConst(&s->cancel, "Cancel", &s->titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1253,7 +1268,6 @@ static void SaveLevelScreen_Init(void* screen) {
|
|||||||
|
|
||||||
s->widgets = widgets;
|
s->widgets = widgets;
|
||||||
s->numWidgets = Array_Elems(widgets);
|
s->numWidgets = Array_Elems(widgets);
|
||||||
MenuScreen_Init(s);
|
|
||||||
MenuInput_Path(desc);
|
MenuInput_Path(desc);
|
||||||
|
|
||||||
Menu_Button(s, 0, &s->save, 300, SaveLevelScreen_Classic,
|
Menu_Button(s, 0, &s->save, 300, SaveLevelScreen_Classic,
|
||||||
@ -1263,17 +1277,17 @@ static void SaveLevelScreen_Init(void* screen) {
|
|||||||
Menu_Label(s, 2, &s->mcEdit,
|
Menu_Label(s, 2, &s->mcEdit,
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 120);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 120);
|
||||||
Menu_Back(s, 3, &s->cancel, Menu_SwitchPause);
|
Menu_Back(s, 3, &s->cancel, Menu_SwitchPause);
|
||||||
Menu_Input(s, 4, &s->input, 500, &String_Empty, &s->textFont, &desc,
|
Menu_Input(s, 4, &s->input, 500, &String_Empty, &desc,
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -30);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -30);
|
||||||
Menu_Label(s, 5, &s->desc,
|
Menu_Label(s, 5, &s->desc,
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 65);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 65);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct ScreenVTABLE SaveLevelScreen_VTABLE = {
|
static const struct ScreenVTABLE SaveLevelScreen_VTABLE = {
|
||||||
SaveLevelScreen_Init, SaveLevelScreen_Render, MenuScreen_Free,
|
SaveLevelScreen_Init, SaveLevelScreen_Render, Menu_NullFunc,
|
||||||
SaveLevelScreen_KeyDown, Screen_TKey, SaveLevelScreen_KeyPress,
|
SaveLevelScreen_KeyDown, Screen_TKey, SaveLevelScreen_KeyPress,
|
||||||
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
||||||
Menu_OnResize, Menu_ContextLost, SaveLevelScreen_ContextRecreated
|
Menu_OnResize, SaveLevelScreen_ContextLost, SaveLevelScreen_ContextRecreated
|
||||||
};
|
};
|
||||||
void SaveLevelScreen_Show(void) {
|
void SaveLevelScreen_Show(void) {
|
||||||
struct SaveLevelScreen* s = &SaveLevelScreen_Instance;
|
struct SaveLevelScreen* s = &SaveLevelScreen_Instance;
|
||||||
@ -1497,7 +1511,7 @@ struct KeyBindingsScreen;
|
|||||||
typedef void (*InitKeyBindings)(struct KeyBindingsScreen* s);
|
typedef void (*InitKeyBindings)(struct KeyBindingsScreen* s);
|
||||||
|
|
||||||
static struct KeyBindingsScreen {
|
static struct KeyBindingsScreen {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
int curI, bindsCount;
|
int curI, bindsCount;
|
||||||
const char** descs;
|
const char** descs;
|
||||||
const cc_uint8* binds;
|
const cc_uint8* binds;
|
||||||
@ -1505,6 +1519,7 @@ static struct KeyBindingsScreen {
|
|||||||
InitKeyBindings DoInit;
|
InitKeyBindings DoInit;
|
||||||
const char* titleText;
|
const char* titleText;
|
||||||
const char* msgText;
|
const char* msgText;
|
||||||
|
FontDesc titleFont;
|
||||||
struct TextWidget title, msg;
|
struct TextWidget title, msg;
|
||||||
struct ButtonWidget back, left, right;
|
struct ButtonWidget back, left, right;
|
||||||
struct ButtonWidget buttons[12];
|
struct ButtonWidget buttons[12];
|
||||||
@ -1563,18 +1578,27 @@ static bool KeyBindingsScreen_MouseDown(void* screen, int x, int y, MouseButton
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void KeyBindingsScreen_ContextLost(void* screen) {
|
||||||
|
struct KeyBindingsScreen* s = (struct KeyBindingsScreen*)screen;
|
||||||
|
Font_Free(&s->titleFont);
|
||||||
|
Menu_ContextLost(screen);
|
||||||
|
}
|
||||||
|
|
||||||
static void KeyBindingsScreen_ContextRecreated(void* screen) {
|
static void KeyBindingsScreen_ContextRecreated(void* screen) {
|
||||||
struct KeyBindingsScreen* s = (struct KeyBindingsScreen*)screen;
|
struct KeyBindingsScreen* s = (struct KeyBindingsScreen*)screen;
|
||||||
|
FontDesc textFont;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < s->bindsCount; i++) {
|
|
||||||
KeyBindingsScreen_Update(s, i);
|
Menu_MakeTitleFont(&s->titleFont);
|
||||||
}
|
Menu_MakeBodyFont(&textFont);
|
||||||
|
for (i = 0; i < s->bindsCount; i++) { KeyBindingsScreen_Update(s, i); }
|
||||||
|
|
||||||
TextWidget_SetConst(&s->title, s->titleText, &s->titleFont);
|
TextWidget_SetConst(&s->title, s->titleText, &s->titleFont);
|
||||||
TextWidget_SetConst(&s->msg, s->msgText, &s->textFont);
|
TextWidget_SetConst(&s->msg, s->msgText, &textFont);
|
||||||
ButtonWidget_SetConst(&s->back, "Done", &s->titleFont);
|
ButtonWidget_SetConst(&s->back, "Done", &s->titleFont);
|
||||||
if (!s->leftPage && !s->rightPage) return;
|
|
||||||
|
|
||||||
|
Font_Free(&textFont);
|
||||||
|
if (!s->leftPage && !s->rightPage) return;
|
||||||
ButtonWidget_SetConst(&s->left, "<", &s->titleFont);
|
ButtonWidget_SetConst(&s->left, "<", &s->titleFont);
|
||||||
ButtonWidget_SetConst(&s->right, ">", &s->titleFont);
|
ButtonWidget_SetConst(&s->right, ">", &s->titleFont);
|
||||||
}
|
}
|
||||||
@ -1620,15 +1644,14 @@ static void KeyBindingsScreen_Init(void* screen) {
|
|||||||
s->rightPage = NULL;
|
s->rightPage = NULL;
|
||||||
s->titleText = NULL;
|
s->titleText = NULL;
|
||||||
s->msgText = "";
|
s->msgText = "";
|
||||||
MenuScreen_Init(s);
|
|
||||||
s->DoInit(s);
|
s->DoInit(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct ScreenVTABLE KeyBindingsScreen_VTABLE = {
|
static const struct ScreenVTABLE KeyBindingsScreen_VTABLE = {
|
||||||
KeyBindingsScreen_Init, MenuScreen_Render, MenuScreen_Free,
|
KeyBindingsScreen_Init, MenuScreen_Render, Menu_NullFunc,
|
||||||
KeyBindingsScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
|
KeyBindingsScreen_KeyDown, Screen_TKey, Screen_TKeyPress,
|
||||||
KeyBindingsScreen_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
KeyBindingsScreen_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
||||||
Menu_OnResize, Menu_ContextLost, KeyBindingsScreen_ContextRecreated
|
Menu_OnResize, KeyBindingsScreen_ContextLost, KeyBindingsScreen_ContextRecreated
|
||||||
};
|
};
|
||||||
static void KeyBindingsScreen_Show(int bindsCount, const cc_uint8* binds, const char** descs, InitKeyBindings doInit) {
|
static void KeyBindingsScreen_Show(int bindsCount, const cc_uint8* binds, const char** descs, InitKeyBindings doInit) {
|
||||||
struct KeyBindingsScreen* s = &KeyBindingsScreen_Instance;
|
struct KeyBindingsScreen* s = &KeyBindingsScreen_Instance;
|
||||||
@ -1749,12 +1772,13 @@ typedef void (*InitMenuOptions)(struct MenuOptionsScreen* s);
|
|||||||
#define MENUOPTIONS_CORE_WIDGETS 4 /* back + 3 input */
|
#define MENUOPTIONS_CORE_WIDGETS 4 /* back + 3 input */
|
||||||
|
|
||||||
static struct MenuOptionsScreen {
|
static struct MenuOptionsScreen {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
struct MenuInputDesc* descs;
|
struct MenuInputDesc* descs;
|
||||||
const char** descriptions;
|
const char** descriptions;
|
||||||
int activeI, selectedI, descriptionsCount;
|
int activeI, selectedI, descriptionsCount;
|
||||||
InitMenuOptions DoInit, DoRecreateExtra, OnHacksChanged;
|
InitMenuOptions DoInit, DoRecreateExtra, OnHacksChanged;
|
||||||
int numButtons;
|
int numButtons;
|
||||||
|
FontDesc titleFont, textFont;
|
||||||
struct ButtonWidget ok, Default;
|
struct ButtonWidget ok, Default;
|
||||||
struct MenuInputWidget input;
|
struct MenuInputWidget input;
|
||||||
struct TextGroupWidget extHelp;
|
struct TextGroupWidget extHelp;
|
||||||
@ -1846,7 +1870,7 @@ static void MenuOptionsScreen_FreeInput(struct MenuOptionsScreen* s) {
|
|||||||
|
|
||||||
static void MenuOptionsScreen_RedrawInput(struct MenuOptionsScreen* s) {
|
static void MenuOptionsScreen_RedrawInput(struct MenuOptionsScreen* s) {
|
||||||
if (s->activeI == -1) return;
|
if (s->activeI == -1) return;
|
||||||
InputWidget_UpdateText(&s->input.base);
|
MenuInputWidget_SetFont(&s->input, &s->textFont);
|
||||||
ButtonWidget_SetConst(&s->ok, "OK", &s->titleFont);
|
ButtonWidget_SetConst(&s->ok, "OK", &s->titleFont);
|
||||||
ButtonWidget_SetConst(&s->Default, "Default value", &s->titleFont);
|
ButtonWidget_SetConst(&s->Default, "Default value", &s->titleFont);
|
||||||
}
|
}
|
||||||
@ -1910,7 +1934,6 @@ static void MenuOptionsScreen_InitButtons(struct MenuOptionsScreen* s, const str
|
|||||||
Menu_Back(s, s->numWidgets - 4, &s->done, backClick);
|
Menu_Back(s, s->numWidgets - 4, &s->done, backClick);
|
||||||
|
|
||||||
TextGroupWidget_Create(&s->extHelp, 5, s->extHelpTextures, MenuOptionsScreen_GetDesc);
|
TextGroupWidget_Create(&s->extHelp, 5, s->extHelpTextures, MenuOptionsScreen_GetDesc);
|
||||||
TextGroupWidget_SetFont(&s->extHelp, &s->textFont);
|
|
||||||
s->extHelp.lines = 0;
|
s->extHelp.lines = 0;
|
||||||
Widget_SetLocation(&s->extHelp, ANCHOR_MIN, ANCHOR_CENTRE_MIN, 0, 100);
|
Widget_SetLocation(&s->extHelp, ANCHOR_MIN, ANCHOR_CENTRE_MIN, 0, 100);
|
||||||
}
|
}
|
||||||
@ -1983,7 +2006,7 @@ 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_Input(s, i - 1, &s->input, 400, &value, &s->descs[s->activeI],
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 110);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 110);
|
||||||
Menu_Button(s, i - 2, &s->ok, 40, MenuOptionsScreen_OK,
|
Menu_Button(s, i - 2, &s->ok, 40, MenuOptionsScreen_OK,
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 240, 110);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 240, 110);
|
||||||
@ -2005,7 +2028,6 @@ static void MenuOptionsScreen_Init(void* screen) {
|
|||||||
s->widgets = widgets;
|
s->widgets = widgets;
|
||||||
/* The various menu options screens might have different number of widgets */
|
/* The various menu options screens might have different number of widgets */
|
||||||
for (i = 0; i < Array_Elems(widgets); i++) { s->widgets[i] = NULL; }
|
for (i = 0; i < Array_Elems(widgets); i++) { s->widgets[i] = NULL; }
|
||||||
MenuScreen_Init(s);
|
|
||||||
|
|
||||||
s->activeI = -1;
|
s->activeI = -1;
|
||||||
s->selectedI = -1;
|
s->selectedI = -1;
|
||||||
@ -2032,7 +2054,6 @@ static void MenuOptionsScreen_Render(void* screen, double delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void MenuOptionsScreen_Free(void* screen) {
|
static void MenuOptionsScreen_Free(void* screen) {
|
||||||
MenuScreen_Free(screen);
|
|
||||||
Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, screen, MenuOptionsScreen_OnHacksChanged);
|
Event_UnregisterVoid(&UserEvents.HackPermissionsChanged, screen, MenuOptionsScreen_OnHacksChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2044,6 +2065,8 @@ static void MenuOptionsScreen_OnResize(void* screen) {
|
|||||||
|
|
||||||
static void MenuOptionsScreen_ContextLost(void* screen) {
|
static void MenuOptionsScreen_ContextLost(void* screen) {
|
||||||
struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen;
|
struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen;
|
||||||
|
Font_Free(&s->titleFont);
|
||||||
|
Font_Free(&s->textFont);
|
||||||
Menu_ContextLost(s);
|
Menu_ContextLost(s);
|
||||||
Elem_Free(&s->extHelp);
|
Elem_Free(&s->extHelp);
|
||||||
}
|
}
|
||||||
@ -2051,13 +2074,17 @@ static void MenuOptionsScreen_ContextLost(void* screen) {
|
|||||||
static void MenuOptionsScreen_ContextRecreated(void* screen) {
|
static void MenuOptionsScreen_ContextRecreated(void* screen) {
|
||||||
struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen;
|
struct MenuOptionsScreen* s = (struct MenuOptionsScreen*)screen;
|
||||||
int i;
|
int i;
|
||||||
|
Menu_MakeTitleFont(&s->titleFont);
|
||||||
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
|
|
||||||
for (i = 0; i < s->numButtons; i++) {
|
for (i = 0; i < s->numButtons; i++) {
|
||||||
if (s->widgets[i]) MenuOptionsScreen_Update(s, i);
|
if (s->widgets[i]) MenuOptionsScreen_Update(s, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
ButtonWidget_SetConst(&s->done, "Done", &s->titleFont);
|
ButtonWidget_SetConst(&s->done, "Done", &s->titleFont);
|
||||||
if (s->DoRecreateExtra) s->DoRecreateExtra(s);
|
if (s->DoRecreateExtra) s->DoRecreateExtra(s);
|
||||||
TextGroupWidget_RedrawAll(&s->extHelp);
|
TextGroupWidget_SetFont(&s->extHelp, &s->textFont);
|
||||||
|
TextGroupWidget_RedrawAll(&s->extHelp); /* TODO: SetFont should redrawall implicitly */
|
||||||
MenuOptionsScreen_RedrawInput(s);
|
MenuOptionsScreen_RedrawInput(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2917,7 +2944,7 @@ void TexIdsOverlay_Show(void) {
|
|||||||
*----------------------------------------------------UrlWarningOverlay----------------------------------------------------*
|
*----------------------------------------------------UrlWarningOverlay----------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static struct UrlWarningOverlay {
|
static struct UrlWarningOverlay {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
String url;
|
String url;
|
||||||
struct ButtonWidget buttons[2];
|
struct ButtonWidget buttons[2];
|
||||||
struct TextWidget labels[4];
|
struct TextWidget labels[4];
|
||||||
@ -2987,10 +3014,11 @@ void UrlWarningOverlay_Show(const String* url) {
|
|||||||
*-----------------------------------------------------TexPackOverlay------------------------------------------------------*
|
*-----------------------------------------------------TexPackOverlay------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static struct TexPackOverlay {
|
static struct TexPackOverlay {
|
||||||
MenuScreen_Layout
|
Screen_Layout
|
||||||
bool deny, alwaysDeny;
|
bool deny, alwaysDeny;
|
||||||
cc_uint32 contentLength;
|
cc_uint32 contentLength;
|
||||||
String url, identifier;
|
String url, identifier;
|
||||||
|
FontDesc textFont;
|
||||||
struct ButtonWidget buttons[4];
|
struct ButtonWidget buttons[4];
|
||||||
struct TextWidget labels[4];
|
struct TextWidget labels[4];
|
||||||
char _identifierBuffer[STRING_SIZE + 4];
|
char _identifierBuffer[STRING_SIZE + 4];
|
||||||
@ -3065,49 +3093,59 @@ static void TexPackOverlay_Render(void* screen, double delta) {
|
|||||||
TexPackOverlay_UpdateLine3(s);
|
TexPackOverlay_UpdateLine3(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void TexPackOverlay_ContextLost(void* screen) {
|
||||||
|
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
||||||
|
Font_Free(&s->textFont);
|
||||||
|
Menu_ContextLost(screen);
|
||||||
|
}
|
||||||
|
|
||||||
static void TexPackOverlay_ContextRecreated(void* screen) {
|
static void TexPackOverlay_ContextRecreated(void* screen) {
|
||||||
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
||||||
|
FontDesc titleFont;
|
||||||
|
Menu_MakeTitleFont(&titleFont);
|
||||||
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
|
|
||||||
TextWidget_SetConst(&s->labels[0], s->deny ? "&eYou might be missing out."
|
TextWidget_SetConst(&s->labels[0], s->deny ? "&eYou might be missing out."
|
||||||
: "Do you want to download the server's texture pack?", &s->titleFont);
|
: "Do you want to download the server's texture pack?", &titleFont);
|
||||||
TextWidget_SetConst(&s->labels[1], !s->deny ? "Texture pack url:"
|
TextWidget_SetConst(&s->labels[1], !s->deny ? "Texture pack url:"
|
||||||
: "Texture packs can play a vital role in the look and feel of maps.", &s->textFont);
|
: "Texture packs can play a vital role in the look and feel of maps.", &s->textFont);
|
||||||
TexPackOverlay_UpdateLine2(s);
|
TexPackOverlay_UpdateLine2(s);
|
||||||
TexPackOverlay_UpdateLine3(s);
|
TexPackOverlay_UpdateLine3(s);
|
||||||
|
|
||||||
ButtonWidget_SetConst(&s->buttons[0], s->deny ? "I'm sure" : "Yes", &s->titleFont);
|
ButtonWidget_SetConst(&s->buttons[0], s->deny ? "I'm sure" : "Yes", &titleFont);
|
||||||
ButtonWidget_SetConst(&s->buttons[1], s->deny ? "Go back" : "No", &s->titleFont);
|
ButtonWidget_SetConst(&s->buttons[1], s->deny ? "Go back" : "No", &titleFont);
|
||||||
s->buttons[0].MenuClick = s->deny ? TexPackOverlay_ConfirmNoClick : TexPackOverlay_YesClick;
|
s->buttons[0].MenuClick = s->deny ? TexPackOverlay_ConfirmNoClick : TexPackOverlay_YesClick;
|
||||||
s->buttons[1].MenuClick = s->deny ? TexPackOverlay_GoBackClick : TexPackOverlay_NoClick;
|
s->buttons[1].MenuClick = s->deny ? TexPackOverlay_GoBackClick : TexPackOverlay_NoClick;
|
||||||
|
|
||||||
if (!s->deny) {
|
if (!s->deny) {
|
||||||
ButtonWidget_SetConst(&s->buttons[2], "Always yes", &s->titleFont);
|
ButtonWidget_SetConst(&s->buttons[2], "Always yes", &titleFont);
|
||||||
ButtonWidget_SetConst(&s->buttons[3], "Always no", &s->titleFont);
|
ButtonWidget_SetConst(&s->buttons[3], "Always no", &titleFont);
|
||||||
s->buttons[2].MenuClick = TexPackOverlay_YesClick;
|
s->buttons[2].MenuClick = TexPackOverlay_YesClick;
|
||||||
s->buttons[3].MenuClick = TexPackOverlay_NoClick;
|
s->buttons[3].MenuClick = TexPackOverlay_NoClick;
|
||||||
}
|
}
|
||||||
|
|
||||||
s->numWidgets = s->deny ? 6 : 8;
|
s->numWidgets = s->deny ? 6 : 8;
|
||||||
|
Font_Free(&titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TexPackOverlay_Init(void* screen) {
|
static void TexPackOverlay_Init(void* screen) {
|
||||||
static struct Widget* widgets[8];
|
static struct Widget* widgets[8];
|
||||||
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
||||||
|
|
||||||
s->widgets = widgets;
|
s->widgets = widgets;
|
||||||
s->numWidgets = Array_Elems(widgets);
|
s->numWidgets = Array_Elems(widgets);
|
||||||
MenuScreen_Init(screen);
|
|
||||||
|
|
||||||
s->contentLength = 0;
|
s->contentLength = 0;
|
||||||
s->deny = false;
|
s->deny = false;
|
||||||
Overlay_MakeLabels(s, s->labels);
|
Overlay_MakeLabels(s, s->labels);
|
||||||
Overlay_MakeMainButtons(s, s->buttons);
|
Overlay_MakeMainButtons(s, s->buttons);
|
||||||
Overlay_MakeExtraButtons(s, s->buttons);
|
Overlay_MakeExtraButtons(s, s->buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct ScreenVTABLE TexPackOverlay_VTABLE = {
|
static const struct ScreenVTABLE TexPackOverlay_VTABLE = {
|
||||||
TexPackOverlay_Init, TexPackOverlay_Render, MenuScreen_Free,
|
TexPackOverlay_Init, TexPackOverlay_Render, Menu_NullFunc,
|
||||||
Screen_TKey, Screen_TKey, Screen_TKeyPress,
|
Screen_TKey, Screen_TKey, Screen_TKeyPress,
|
||||||
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
Menu_MouseDown, Screen_TMouse, Menu_MouseMove, Screen_TMouseScroll,
|
||||||
Menu_OnResize, Menu_ContextLost, TexPackOverlay_ContextRecreated
|
Menu_OnResize, TexPackOverlay_ContextLost, TexPackOverlay_ContextRecreated
|
||||||
};
|
};
|
||||||
void TexPackOverlay_Show(const String* url) {
|
void TexPackOverlay_Show(const String* url) {
|
||||||
struct TexPackOverlay* s = &TexPackOverlay_Instance;
|
struct TexPackOverlay* s = &TexPackOverlay_Instance;
|
||||||
|
@ -1460,6 +1460,7 @@ void MenuInputWidget_Create(struct MenuInputWidget* w, int width, int height, co
|
|||||||
void MenuInputWidget_SetFont(struct MenuInputWidget* w, FontDesc* font) {
|
void MenuInputWidget_SetFont(struct MenuInputWidget* w, FontDesc* font) {
|
||||||
w->base.font = font;
|
w->base.font = font;
|
||||||
w->base.lineHeight = Drawer2D_FontHeight(font, false);
|
w->base.lineHeight = Drawer2D_FontHeight(font, false);
|
||||||
|
InputWidget_UpdateText(&w->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,6 +179,7 @@ struct MenuInputWidget {
|
|||||||
char _textBuffer[INPUTWIDGET_LEN];
|
char _textBuffer[INPUTWIDGET_LEN];
|
||||||
};
|
};
|
||||||
CC_NOINLINE void MenuInputWidget_Create(struct MenuInputWidget* w, int width, int height, const String* text, struct MenuInputDesc* d);
|
CC_NOINLINE void MenuInputWidget_Create(struct MenuInputWidget* w, int width, int height, const String* text, struct MenuInputDesc* d);
|
||||||
|
/* Sets the font used, then redraws the input widget. */
|
||||||
CC_NOINLINE void MenuInputWidget_SetFont(struct MenuInputWidget* w, FontDesc* font);
|
CC_NOINLINE void MenuInputWidget_SetFont(struct MenuInputWidget* w, FontDesc* font);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1537,13 +1537,10 @@ static Key Window_MapKey(UInt32 key) { return key < Array_Elems(key_map) ? key_m
|
|||||||
/*Menu = 110, (0x6E, ??? according to that link)*/
|
/*Menu = 110, (0x6E, ??? according to that link)*/
|
||||||
static void Window_RefreshBounds(void) {
|
static void Window_RefreshBounds(void) {
|
||||||
Rect r;
|
Rect r;
|
||||||
OSStatus res;
|
|
||||||
if (win_fullscreen) return;
|
if (win_fullscreen) return;
|
||||||
|
|
||||||
/* TODO: kWindowContentRgn ??? */
|
/* TODO: kWindowContentRgn ??? */
|
||||||
res = GetWindowBounds(win_handle, kWindowGlobalPortRgn, &r);
|
GetWindowBounds(win_handle, kWindowGlobalPortRgn, &r);
|
||||||
if (res) Logger_Abort2(res, "Getting window clientbounds");
|
|
||||||
|
|
||||||
windowX = r.left; Window_Width = r.right - r.left;
|
windowX = r.left; Window_Width = r.right - r.left;
|
||||||
windowY = r.top; Window_Height = r.bottom - r.top;
|
windowY = r.top; Window_Height = r.bottom - r.top;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user