From c2d84dcdb5bbc54daa63f585d8f61849cb55df9a Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 6 Aug 2021 18:39:59 +1000 Subject: [PATCH] Add themes list menu --- src/LScreens.c | 69 +++++++++++++++++++++++++++++++++++++++++++++----- src/LScreens.h | 1 + src/Launcher.c | 21 +++++---------- src/Launcher.h | 6 ++--- 4 files changed, 72 insertions(+), 25 deletions(-) diff --git a/src/LScreens.c b/src/LScreens.c index cbc04bbb3..aa6b752c4 100644 --- a/src/LScreens.c +++ b/src/LScreens.c @@ -204,7 +204,8 @@ static void SwitchToColours(void* w, int idx) { ColoursScreen_SetActive(); } static void SwitchToDirectConnect(void* w, int idx) { DirectConnectScreen_SetActive(); } static void SwitchToMain(void* w, int idx) { MainScreen_SetActive(); } static void SwitchToSettings(void* w, int idx) { SettingsScreen_SetActive(); } -static void SwitchToUpdates(void* w, int idx) { UpdatesScreen_SetActive(); } +static void SwitchToThemes(void* w, int idx) { ThemesScreen_SetActive(); } +static void SwitchToUpdates(void* w, int idx) { UpdatesScreen_SetActive(); } /*########################################################################################################################* @@ -411,7 +412,7 @@ static void ColoursScreen_KeyDown(struct LScreen* s, int key, cc_bool was) { } static void ColoursScreen_ResetAll(void* w, int idx) { - Launcher_ResetTheme(); + Launcher_Theme = Launcher_ModernTheme; Launcher_SaveTheme(); ColoursScreen_UpdateAll(&ColoursScreen_Instance); Launcher_Redraw(); @@ -447,7 +448,7 @@ static void ColoursScreen_Init(struct LScreen* s_) { LButton_Init(s_, &s->btnBack, 80, 35, "Back"); s->btnDefault.OnClick = ColoursScreen_ResetAll; - s->btnBack.OnClick = SwitchToSettings; + s->btnBack.OnClick = SwitchToThemes; } static void ColoursScreen_Show(struct LScreen* s_) { @@ -1410,21 +1411,21 @@ static void SettingsScreen_Init(struct LScreen* s_) { LButton_Init(s_, &s->btnMode, 110, 35, "Mode"); LLabel_Init(s_, &s->lblMode, "&eChange the enabled features"); - LButton_Init(s_, &s->btnColours, 110, 35, "Colours"); + LButton_Init(s_, &s->btnColours, 110, 35, "Theme"); LLabel_Init(s_, &s->lblColours, "&eChange how the launcher looks"); LButton_Init(s_, &s->btnBack, 80, 35, "Back"); s->btnMode.OnClick = SwitchToChooseMode; s->btnUpdates.OnClick = SwitchToUpdates; - s->btnColours.OnClick = SwitchToColours; + s->btnColours.OnClick = SwitchToThemes; s->btnBack.OnClick = SwitchToMain; } static void SettingsScreen_Show(struct LScreen* s_) { struct SettingsScreen* s = (struct SettingsScreen*)s_; - s->btnColours.hidden = Launcher_Theme.ClassicBackground; - s->lblColours.hidden = Launcher_Theme.ClassicBackground; + s->btnColours.hidden = Options_GetBool(OPT_CLASSIC_MODE, false); + s->lblColours.hidden = s->btnColours.hidden; } static void SettingsScreen_Layout(struct LScreen* s_) { @@ -1451,6 +1452,60 @@ void SettingsScreen_SetActive(void) { } +/*########################################################################################################################* +*----------------------------------------------------------ThemesScreen----------------------------------------------------* +*#########################################################################################################################*/ +static struct ThemesScreen { + LScreen_Layout + struct LButton btnModern, btnClassic, btnCustom, btnBack; + struct LWidget* _widgets[4]; +} ThemesScreen_Instance; + +static void ThemesScreen_Set(const struct LauncherTheme* theme) { + Launcher_Theme = *theme; + Launcher_SaveTheme(); + Launcher_Redraw(); +} + +static void ThemesScreen_Modern(void* w, int idx) { + ThemesScreen_Set(&Launcher_ModernTheme); +} +static void ThemesScreen_Classic(void* w, int idx) { + ThemesScreen_Set(&Launcher_ClassicTheme); +} + +static void ThemesScreen_Init(struct LScreen* s_) { + struct ThemesScreen* s = (struct ThemesScreen*)s_; + s->widgets = s->_widgets; + + LButton_Init(s_, &s->btnModern, 200, 35, "Modern"); + LButton_Init(s_, &s->btnClassic, 200, 35, "Classic"); + LButton_Init(s_, &s->btnCustom, 200, 35, "Custom"); + LButton_Init(s_, &s->btnBack, 80, 35, "Back"); + + s->btnModern.OnClick = ThemesScreen_Modern; + s->btnClassic.OnClick = ThemesScreen_Classic; + s->btnCustom.OnClick = SwitchToColours; + s->btnBack.OnClick = SwitchToSettings; +} + +static void ThemesScreen_Layout(struct LScreen* s_) { + struct ThemesScreen* s = (struct ThemesScreen*)s_; + LWidget_SetLocation(&s->btnModern, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -120); + LWidget_SetLocation(&s->btnClassic, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -70); + LWidget_SetLocation(&s->btnCustom, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -20); + LWidget_SetLocation(&s->btnBack, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 170); +} + +void ThemesScreen_SetActive(void) { + struct ThemesScreen* s = &ThemesScreen_Instance; + LScreen_Reset((struct LScreen*)s); + s->Init = ThemesScreen_Init; + s->Layout = ThemesScreen_Layout; + Launcher_SetScreen((struct LScreen*)s); +} + + /*########################################################################################################################* *--------------------------------------------------------UpdatesScreen----------------------------------------------------* *#########################################################################################################################*/ diff --git a/src/LScreens.h b/src/LScreens.h index 7c21d84fe..4d9264af4 100644 --- a/src/LScreens.h +++ b/src/LScreens.h @@ -44,5 +44,6 @@ void CheckResourcesScreen_SetActive(void); void FetchResourcesScreen_SetActive(void); void ServersScreen_SetActive(void); void SettingsScreen_SetActive(void); +void ThemesScreen_SetActive(void); void UpdatesScreen_SetActive(void); #endif diff --git a/src/Launcher.c b/src/Launcher.c index aa0bb2d71..df8b0c8b7 100644 --- a/src/Launcher.c +++ b/src/Launcher.c @@ -373,14 +373,6 @@ const struct LauncherTheme Launcher_ClassicTheme = { BitmapCol_Make(162, 131, 186, 255), /* button highlight WIP */ }; -static cc_bool IsClassicMode(void) { - return Options_GetBool(OPT_CLASSIC_MODE, false); -} - -void Launcher_ResetTheme(void) { - Launcher_Theme = IsClassicMode() ? Launcher_ClassicTheme : Launcher_ModernTheme; -} - CC_NOINLINE static void Launcher_GetCol(const char* key, BitmapCol* col) { cc_uint8 rgb[3]; cc_string value; @@ -391,18 +383,18 @@ CC_NOINLINE static void Launcher_GetCol(const char* key, BitmapCol* col) { } void Launcher_LoadTheme(void) { - cc_string classicBG; - Launcher_ResetTheme(); - if (IsClassicMode()) return; + if (Options_GetBool(OPT_CLASSIC_MODE, false)) { + Launcher_Theme = Launcher_ClassicTheme; + return; + } + Launcher_Theme = Launcher_ModernTheme; + Launcher_Theme.ClassicBackground = Options_GetBool("nostalgia-classicbg", false); Launcher_GetCol("launcher-back-col", &Launcher_Theme.BackgroundColor); Launcher_GetCol("launcher-btn-border-col", &Launcher_Theme.ButtonBorderColor); Launcher_GetCol("launcher-btn-fore-active-col", &Launcher_Theme.ButtonForeActiveColor); Launcher_GetCol("launcher-btn-fore-inactive-col", &Launcher_Theme.ButtonForeColor); Launcher_GetCol("launcher-btn-highlight-inactive-col", &Launcher_Theme.ButtonHighlightColor); - - if (!Options_UNSAFE_Get("nostalgia-classicbg", &classicBG)) return; - Launcher_Theme.ClassicBackground = Options_GetBool("nostalgia-classicbg", false); } CC_NOINLINE static void Launcher_SetCol(const char* key, BitmapCol col) { @@ -421,6 +413,7 @@ void Launcher_SaveTheme(void) { Launcher_SetCol("launcher-btn-fore-active-col", Launcher_Theme.ButtonForeActiveColor); Launcher_SetCol("launcher-btn-fore-inactive-col", Launcher_Theme.ButtonForeColor); Launcher_SetCol("launcher-btn-highlight-inactive-col", Launcher_Theme.ButtonHighlightColor); + Options_SetBool("nostalgia-classicbg", Launcher_Theme.ClassicBackground); } diff --git a/src/Launcher.h b/src/Launcher.h index 5f5caf3f1..c4d2fe907 100644 --- a/src/Launcher.h +++ b/src/Launcher.h @@ -44,11 +44,9 @@ extern const struct LauncherTheme Launcher_ModernTheme; /* Minecraft Classic theme */ extern const struct LauncherTheme Launcher_ClassicTheme; -/* Resets colours to default. */ -void Launcher_ResetTheme(void); -/* Loads colours from options. */ +/* Loads theme from options. */ void Launcher_LoadTheme(void); -/* Saves the colours to options. */ +/* Saves the theme to options. */ /* NOTE: Does not save options file itself. */ void Launcher_SaveTheme(void);