From 5934c3618b7a3e68c71e75c59ad02f3880c7670b Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 14 Aug 2019 07:52:03 +1000 Subject: [PATCH] Fix cursor being visible at wrong time And gen/save menus show up properly now --- src/Gui.c | 25 +++++++++++++++++++++---- src/Menus.c | 18 +++++++++--------- src/Menus.h | 6 +++--- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/Gui.c b/src/Gui.c index 558b2862f..16346f88d 100644 --- a/src/Gui.c +++ b/src/Gui.c @@ -227,7 +227,7 @@ int Gui_Index(struct Screen* s) { return -1; } -void Gui_Add(struct Screen* s, int priority) { +static void Gui_AddCore(struct Screen* s, int priority) { int i, j; if (Gui_ScreensCount >= GUI_MAX_SCREENS) Logger_Abort("Hit max screens"); @@ -252,7 +252,7 @@ void Gui_Add(struct Screen* s, int priority) { s->VTABLE->HandlesMouseMove(s, Mouse_X, Mouse_Y); } -void Gui_Remove(struct Screen* s) { +static void Gui_RemoveCore(struct Screen* s) { int i = Gui_Index(s); if (i == -1) return; @@ -266,9 +266,26 @@ void Gui_Remove(struct Screen* s) { s->VTABLE->Free(s); } +void Gui_Add(struct Screen* s, int priority) { + Gui_AddCore(s, priority); + Camera_CheckFocus(); +} + +void Gui_Remove(struct Screen* s) { + Gui_RemoveCore(s); + Camera_CheckFocus(); +} + void Gui_Replace(struct Screen* s, int priority) { - Gui_Remove(s); - Gui_Add(s, priority); + int i; + Gui_RemoveCore(s); + /* Backwards loop since removing changes count and gui_screens */ + for (i = Gui_ScreensCount - 1; i >= 0; i--) { + if (priorities[i] == priority) Gui_RemoveCore(Gui_Screens[i]); + } + + Gui_AddCore(s, priority); + Camera_CheckFocus(); } struct Screen* Gui_GetInputGrab(void) { diff --git a/src/Menus.c b/src/Menus.c index 829724bfb..4c1283dca 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -316,10 +316,10 @@ static void Menu_SwitchHacks(void* a, void* b) { Menu_ReplaceActive(HacksSet static void Menu_SwitchEnv(void* a, void* b) { Menu_ReplaceActive(EnvSettingsScreen_MakeInstance()); } static void Menu_SwitchNostalgia(void* a, void* b) { Menu_ReplaceActive(NostalgiaScreen_MakeInstance()); } -static void Menu_SwitchGenLevel(void* a, void* b) { Menu_ReplaceActive(GenLevelScreen_MakeInstance()); } -static void Menu_SwitchClassicGenLevel(void* a, void* b) { Menu_ReplaceActive(ClassicGenScreen_MakeInstance()); } +static void Menu_SwitchGenLevel(void* a, void* b) { GenLevelScreen_Show(); } +static void Menu_SwitchClassicGenLevel(void* a, void* b) { ClassicGenScreen_Show(); } static void Menu_SwitchLoadLevel(void* a, void* b) { LoadLevelScreen_Show(); } -static void Menu_SwitchSaveLevel(void* a, void* b) { Menu_ReplaceActive(SaveLevelScreen_MakeInstance()); } +static void Menu_SwitchSaveLevel(void* a, void* b) { SaveLevelScreen_Show(); } static void Menu_SwitchTexPacks(void* a, void* b) { TexturePackScreen_Show(); } static void Menu_SwitchHotkeys(void* a, void* b) { HotkeyListScreen_Show(); } static void Menu_SwitchFont(void* a, void* b) { FontListScreen_Show(); } @@ -1135,7 +1135,7 @@ static struct ScreenVTABLE GenLevelScreen_VTABLE = { Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll, Menu_OnResize, Menu_ContextLost, GenLevelScreen_ContextRecreated, }; -struct Screen* GenLevelScreen_MakeInstance(void) { +void GenLevelScreen_Show(void) { static struct Widget* widgets[12]; struct GenLevelScreen* s = &GenLevelScreen_Instance; @@ -1145,7 +1145,7 @@ struct Screen* GenLevelScreen_MakeInstance(void) { s->widgetsCount = Array_Elems(widgets); s->VTABLE = &GenLevelScreen_VTABLE; - return (struct Screen*)s; + Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU); } @@ -1186,7 +1186,7 @@ static struct ScreenVTABLE ClassicGenScreen_VTABLE = { Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll, Menu_OnResize, Menu_ContextLost, ClassicGenScreen_ContextRecreated, }; -struct Screen* ClassicGenScreen_MakeInstance(void) { +void ClassicGenScreen_Show(void) { static struct Widget* widgets[4]; struct ClassicGenScreen* s = &ClassicGenScreen_Instance; @@ -1196,7 +1196,7 @@ struct Screen* ClassicGenScreen_MakeInstance(void) { s->widgetsCount = Array_Elems(widgets); s->VTABLE = &ClassicGenScreen_VTABLE; - return (struct Screen*)s; + Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU); } @@ -1343,7 +1343,7 @@ static struct ScreenVTABLE SaveLevelScreen_VTABLE = { Menu_MouseDown, Menu_MouseUp, Menu_MouseMove, MenuScreen_MouseScroll, Menu_OnResize, Menu_ContextLost, SaveLevelScreen_ContextRecreated, }; -struct Screen* SaveLevelScreen_MakeInstance(void) { +void SaveLevelScreen_Show(void) { static struct Widget* widgets[6]; struct SaveLevelScreen* s = &SaveLevelScreen_Instance; @@ -1353,7 +1353,7 @@ struct Screen* SaveLevelScreen_MakeInstance(void) { s->widgetsCount = Array_Elems(widgets); s->VTABLE = &SaveLevelScreen_VTABLE; - return (struct Screen*)s; + Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU); } diff --git a/src/Menus.h b/src/Menus.h index beef3fbbe..9a94fa173 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -18,10 +18,10 @@ struct Screen* HacksKeyBindingsScreen_MakeInstance(void); struct Screen* OtherKeyBindingsScreen_MakeInstance(void); struct Screen* MouseKeyBindingsScreen_MakeInstance(void); -struct Screen* GenLevelScreen_MakeInstance(void); -struct Screen* ClassicGenScreen_MakeInstance(void); +void GenLevelScreen_Show(void); +void ClassicGenScreen_Show(void); void LoadLevelScreen_Show(void); -struct Screen* SaveLevelScreen_MakeInstance(void); +void SaveLevelScreen_Show(void); void TexturePackScreen_Show(void); void FontListScreen_Show(void); void HotkeyListScreen_Show(void);