Split up LScreen Init methods into Init/Show methods (since this was what all the screens were doing anyways)

This commit is contained in:
UnknownShadow200 2020-07-18 12:53:46 +10:00
parent 1a7c4a24f7
commit f1522b9fc9
3 changed files with 54 additions and 30 deletions

View File

@ -166,6 +166,7 @@ CC_NOINLINE static void LScreen_Reset(struct LScreen* s) {
int i; int i;
s->Init = NULL; /* screens should always override this */ s->Init = NULL; /* screens should always override this */
s->Show = NULL; /* screens should always override this */
s->Free = LScreen_NullFunc; s->Free = LScreen_NullFunc;
s->Draw = LScreen_Draw; s->Draw = LScreen_Draw;
s->Tick = LScreen_Tick; s->Tick = LScreen_Tick;
@ -245,13 +246,6 @@ static void UseModeClassic(void* w, int x, int y) { ChooseMode_Click(true, f
static void ChooseModeScreen_Init(struct LScreen* s_) { static void ChooseModeScreen_Init(struct LScreen* s_) {
struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_; struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_;
s->lblHelp.hidden = !s->firstTime;
s->btnBack.hidden = s->firstTime;
s->seps[0].col = Launcher_ButtonBorderCol;
s->seps[1].col = Launcher_ButtonBorderCol;
if (s->numWidgets) return;
s->widgets = s->_widgets; s->widgets = s->_widgets;
LLabel_Init(s_, &s->lblTitle, ""); LLabel_Init(s_, &s->lblTitle, "");
LLine_Init(s_, &s->seps[0], 490); LLine_Init(s_, &s->seps[0], 490);
@ -281,6 +275,15 @@ static void ChooseModeScreen_Init(struct LScreen* s_) {
LLabel_SetConst(&s->lblTitle, "Choose game mode"); LLabel_SetConst(&s->lblTitle, "Choose game mode");
} }
static void ChooseModeScreen_Show(struct LScreen* s_) {
struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_;
s->lblHelp.hidden = !s->firstTime;
s->btnBack.hidden = s->firstTime;
s->seps[0].col = Launcher_ButtonBorderCol;
s->seps[1].col = Launcher_ButtonBorderCol;
}
static void ChooseModeScreen_Layout(struct LScreen* s_) { static void ChooseModeScreen_Layout(struct LScreen* s_) {
struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_; struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_;
LWidget_SetLocation(&s->lblTitle, ANCHOR_CENTRE, ANCHOR_CENTRE, 10, -135); LWidget_SetLocation(&s->lblTitle, ANCHOR_CENTRE, ANCHOR_CENTRE, 10, -135);
@ -307,6 +310,7 @@ struct LScreen* ChooseModeScreen_MakeInstance(cc_bool firstTime) {
struct ChooseModeScreen* s = &ChooseModeScreen_Instance; struct ChooseModeScreen* s = &ChooseModeScreen_Instance;
LScreen_Reset((struct LScreen*)s); LScreen_Reset((struct LScreen*)s);
s->Init = ChooseModeScreen_Init; s->Init = ChooseModeScreen_Init;
s->Show = ChooseModeScreen_Show;
s->Layout = ChooseModeScreen_Layout; s->Layout = ChooseModeScreen_Layout;
s->firstTime = firstTime; s->firstTime = firstTime;
s->onEnterWidget = (struct LWidget*)&s->btnEnhanced; s->onEnterWidget = (struct LWidget*)&s->btnEnhanced;
@ -428,9 +432,6 @@ static cc_bool ColoursScreen_InputFilter(char c) {
static void ColoursScreen_Init(struct LScreen* s_) { static void ColoursScreen_Init(struct LScreen* s_) {
struct ColoursScreen* s = (struct ColoursScreen*)s_; struct ColoursScreen* s = (struct ColoursScreen*)s_;
int i; int i;
s->colourAcc = 0;
if (s->numWidgets) return;
s->widgets = s->_widgets; s->widgets = s->_widgets;
for (i = 0; i < 5 * 3; i++) { for (i = 0; i < 5 * 3; i++) {
@ -454,6 +455,11 @@ static void ColoursScreen_Init(struct LScreen* s_) {
s->btnDefault.OnClick = ColoursScreen_ResetAll; s->btnDefault.OnClick = ColoursScreen_ResetAll;
s->btnBack.OnClick = SwitchToSettings; s->btnBack.OnClick = SwitchToSettings;
}
static void ColoursScreen_Show(struct LScreen* s_) {
struct ColoursScreen* s = (struct ColoursScreen*)s_;
s->colourAcc = 0;
ColoursScreen_UpdateAll(s); ColoursScreen_UpdateAll(s);
} }
@ -485,6 +491,7 @@ struct LScreen* ColoursScreen_MakeInstance(void) {
struct ColoursScreen* s = &ColoursScreen_Instance; struct ColoursScreen* s = &ColoursScreen_Instance;
LScreen_Reset((struct LScreen*)s); LScreen_Reset((struct LScreen*)s);
s->Init = ColoursScreen_Init; s->Init = ColoursScreen_Init;
s->Show = ColoursScreen_Show;
s->Layout = ColoursScreen_Layout; s->Layout = ColoursScreen_Layout;
s->KeyDown = ColoursScreen_KeyDown; s->KeyDown = ColoursScreen_KeyDown;
s->MouseWheel = ColoursScreen_MouseWheel; s->MouseWheel = ColoursScreen_MouseWheel;
@ -578,7 +585,6 @@ static void DirectConnectScreen_StartClient(void* w, int x, int y) {
static void DirectConnectScreen_Init(struct LScreen* s_) { static void DirectConnectScreen_Init(struct LScreen* s_) {
struct DirectConnectScreen* s = (struct DirectConnectScreen*)s_; struct DirectConnectScreen* s = (struct DirectConnectScreen*)s_;
if (s->numWidgets) return;
s->widgets = s->_widgets; s->widgets = s->_widgets;
LInput_Init(s_, &s->iptUsername, 330, "&gUsername.."); LInput_Init(s_, &s->iptUsername, 330, "&gUsername..");
@ -610,6 +616,7 @@ struct LScreen* DirectConnectScreen_MakeInstance(void) {
struct DirectConnectScreen* s = &DirectConnectScreen_Instance; struct DirectConnectScreen* s = &DirectConnectScreen_Instance;
LScreen_Reset((struct LScreen*)s); LScreen_Reset((struct LScreen*)s);
s->Init = DirectConnectScreen_Init; s->Init = DirectConnectScreen_Init;
s->Show = LScreen_NullFunc;
s->Layout = DirectConnectScreen_Layout; s->Layout = DirectConnectScreen_Layout;
s->onEnterWidget = (struct LWidget*)&s->btnConnect; s->onEnterWidget = (struct LWidget*)&s->btnConnect;
return (struct LScreen*)s; return (struct LScreen*)s;
@ -716,10 +723,6 @@ static cc_bool MainScreen_PasswordFilter(char c) { return true; }
static void MainScreen_Init(struct LScreen* s_) { static void MainScreen_Init(struct LScreen* s_) {
String user, pass; char passBuffer[STRING_SIZE]; String user, pass; char passBuffer[STRING_SIZE];
struct MainScreen* s = (struct MainScreen*)s_; struct MainScreen* s = (struct MainScreen*)s_;
/* status should reset after user has gone to another menu */
s->lblStatus.text.length = 0;
if (s->numWidgets) return;
s->widgets = s->_widgets; s->widgets = s->_widgets;
LInput_Init(s_, &s->iptUsername, 280, "&gUsername.."); LInput_Init(s_, &s->iptUsername, 280, "&gUsername..");
@ -757,6 +760,12 @@ static void MainScreen_Init(struct LScreen* s_) {
LInput_SetText(&s->iptPassword, &pass); LInput_SetText(&s->iptPassword, &pass);
} }
static void MainScreen_Show(struct LScreen* s_) {
struct MainScreen* s = (struct MainScreen*)s_;
/* status should reset after user has gone to another menu */
s->lblStatus.text.length = 0;
}
static void MainScreen_Layout(struct LScreen* s_) { static void MainScreen_Layout(struct LScreen* s_) {
struct MainScreen* s = (struct MainScreen*)s_; struct MainScreen* s = (struct MainScreen*)s_;
LWidget_SetLocation(&s->iptUsername, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -140, -120); LWidget_SetLocation(&s->iptUsername, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -140, -120);
@ -902,6 +911,7 @@ struct LScreen* MainScreen_MakeInstance(void) {
struct MainScreen* s = &MainScreen_Instance; struct MainScreen* s = &MainScreen_Instance;
LScreen_Reset((struct LScreen*)s); LScreen_Reset((struct LScreen*)s);
s->Init = MainScreen_Init; s->Init = MainScreen_Init;
s->Show = MainScreen_Show;
s->Tick = MainScreen_Tick; s->Tick = MainScreen_Tick;
s->Layout = MainScreen_Layout; s->Layout = MainScreen_Layout;
s->HoverWidget = MainScreen_HoverWidget; s->HoverWidget = MainScreen_HoverWidget;
@ -957,7 +967,6 @@ static void ResourcesScreen_Init(struct LScreen* s_) {
float size; float size;
s->statusYOffset = 10; s->statusYOffset = 10;
if (s->numWidgets) return;
s->widgets = s->_widgets; s->widgets = s->_widgets;
LLabel_Init(s_, &s->lblLine1, "Some required resources weren't found"); LLabel_Init(s_, &s->lblLine1, "Some required resources weren't found");
@ -986,6 +995,11 @@ static void ResourcesScreen_Init(struct LScreen* s_) {
s->btnCancel.OnClick = ResourcesScreen_Next; s->btnCancel.OnClick = ResourcesScreen_Next;
} }
static void ResourcesScreen_Show(struct LScreen* s_) {
struct ResourcesScreen* s = (struct ResourcesScreen*)s_;
s->statusYOffset = 10;
}
static void ResourcesScreen_Layout(struct LScreen* s_) { static void ResourcesScreen_Layout(struct LScreen* s_) {
struct ResourcesScreen* s = (struct ResourcesScreen*)s_; struct ResourcesScreen* s = (struct ResourcesScreen*)s_;
@ -1089,6 +1103,7 @@ struct LScreen* ResourcesScreen_MakeInstance(void) {
struct ResourcesScreen* s = &ResourcesScreen_Instance; struct ResourcesScreen* s = &ResourcesScreen_Instance;
LScreen_Reset((struct LScreen*)s); LScreen_Reset((struct LScreen*)s);
s->Init = ResourcesScreen_Init; s->Init = ResourcesScreen_Init;
s->Show = ResourcesScreen_Show;
s->Draw = ResourcesScreen_Draw; s->Draw = ResourcesScreen_Draw;
s->Tick = ResourcesScreen_Tick; s->Tick = ResourcesScreen_Tick;
s->Layout = ResourcesScreen_Layout; s->Layout = ResourcesScreen_Layout;
@ -1171,7 +1186,7 @@ static void ServersScreen_ReloadServers(struct ServersScreen* s) {
} }
} }
static void ServersScreen_InitWidgets(struct LScreen* s_) { static void ServersScreen_Init(struct LScreen* s_) {
struct ServersScreen* s = (struct ServersScreen*)s_; struct ServersScreen* s = (struct ServersScreen*)s_;
s->widgets = s->_widgets; s->widgets = s->_widgets;
@ -1198,11 +1213,10 @@ static void ServersScreen_InitWidgets(struct LScreen* s_) {
s->widgets[s->numWidgets++] = (struct LWidget*)&s->table; s->widgets[s->numWidgets++] = (struct LWidget*)&s->table;
} }
static void ServersScreen_Init(struct LScreen* s_) { static void ServersScreen_Show(struct LScreen* s_) {
struct ServersScreen* s = (struct ServersScreen*)s_; struct ServersScreen* s = (struct ServersScreen*)s_;
Drawer2D_MakeFont(&s->rowFont, 11, FONT_STYLE_NORMAL); Drawer2D_MakeFont(&s->rowFont, 11, FONT_STYLE_NORMAL);
if (!s->numWidgets) ServersScreen_InitWidgets(s_);
s->table.rowFont = &s->rowFont; s->table.rowFont = &s->rowFont;
/* also resets hash and filter */ /* also resets hash and filter */
LTable_Reset(&s->table); LTable_Reset(&s->table);
@ -1287,6 +1301,7 @@ struct LScreen* ServersScreen_MakeInstance(void) {
s->tableAcc = 0.0f; s->tableAcc = 0.0f;
s->Init = ServersScreen_Init; s->Init = ServersScreen_Init;
s->Show = ServersScreen_Show;
s->Tick = ServersScreen_Tick; s->Tick = ServersScreen_Tick;
s->Free = ServersScreen_Free; s->Free = ServersScreen_Free;
s->Layout = ServersScreen_Layout; s->Layout = ServersScreen_Layout;
@ -1310,11 +1325,6 @@ static struct SettingsScreen {
static void SettingsScreen_Init(struct LScreen* s_) { static void SettingsScreen_Init(struct LScreen* s_) {
struct SettingsScreen* s = (struct SettingsScreen*)s_; struct SettingsScreen* s = (struct SettingsScreen*)s_;
s->btnColours.hidden = Launcher_ClassicBackground;
s->lblColours.hidden = Launcher_ClassicBackground;
if (s->numWidgets) return;
s->widgets = s->_widgets; s->widgets = s->_widgets;
LButton_Init(s_, &s->btnUpdates, 110, 35, "Updates"); LButton_Init(s_, &s->btnUpdates, 110, 35, "Updates");
@ -1334,6 +1344,12 @@ static void SettingsScreen_Init(struct LScreen* s_) {
s->btnBack.OnClick = SwitchToMain; s->btnBack.OnClick = SwitchToMain;
} }
static void SettingsScreen_Show(struct LScreen* s_) {
struct SettingsScreen* s = (struct SettingsScreen*)s_;
s->btnColours.hidden = Launcher_ClassicBackground;
s->lblColours.hidden = Launcher_ClassicBackground;
}
static void SettingsScreen_Layout(struct LScreen* s_) { static void SettingsScreen_Layout(struct LScreen* s_) {
struct SettingsScreen* s = (struct SettingsScreen*)s_; struct SettingsScreen* s = (struct SettingsScreen*)s_;
LWidget_SetLocation(&s->btnUpdates, ANCHOR_CENTRE, ANCHOR_CENTRE, -135, -120); LWidget_SetLocation(&s->btnUpdates, ANCHOR_CENTRE, ANCHOR_CENTRE, -135, -120);
@ -1352,6 +1368,7 @@ struct LScreen* SettingsScreen_MakeInstance(void) {
struct SettingsScreen* s = &SettingsScreen_Instance; struct SettingsScreen* s = &SettingsScreen_Instance;
LScreen_Reset((struct LScreen*)s); LScreen_Reset((struct LScreen*)s);
s->Init = SettingsScreen_Init; s->Init = SettingsScreen_Init;
s->Show = SettingsScreen_Show;
s->Layout = SettingsScreen_Layout; s->Layout = SettingsScreen_Layout;
return (struct LScreen*)s; return (struct LScreen*)s;
} }
@ -1506,9 +1523,8 @@ static void UpdatesScreen_Init(struct LScreen* s_) {
struct UpdatesScreen* s = (struct UpdatesScreen*)s_; struct UpdatesScreen* s = (struct UpdatesScreen*)s_;
s->seps[0].col = Launcher_ButtonBorderCol; s->seps[0].col = Launcher_ButtonBorderCol;
s->seps[1].col = Launcher_ButtonBorderCol; s->seps[1].col = Launcher_ButtonBorderCol;
if (s->numWidgets) { UpdatesScreen_Update(s); return; }
s->widgets = s->_widgets; s->widgets = s->_widgets;
LLabel_Init(s_, &s->lblYour, "Your build: (unknown)"); LLabel_Init(s_, &s->lblYour, "Your build: (unknown)");
LLine_Init(s_, &s->seps[0], 320); LLine_Init(s_, &s->seps[0], 320);
LLine_Init(s_, &s->seps[1], 320); LLine_Init(s_, &s->seps[1], 320);
@ -1523,7 +1539,6 @@ static void UpdatesScreen_Init(struct LScreen* s_) {
LButton_Init(s_, &s->btnDev[0], 130, 35, "Direct3D 9"); LButton_Init(s_, &s->btnDev[0], 130, 35, "Direct3D 9");
LLabel_Init(s_, &s->lblInfo, "&eDirect3D 9 is recommended"); LLabel_Init(s_, &s->lblInfo, "&eDirect3D 9 is recommended");
} }
if (Updater_OGL) { if (Updater_OGL) {
LButton_Init(s_, &s->btnRel[1], 130, 35, "OpenGL"); LButton_Init(s_, &s->btnRel[1], 130, 35, "OpenGL");
LButton_Init(s_, &s->btnDev[1], 130, 35, "OpenGL"); LButton_Init(s_, &s->btnDev[1], 130, 35, "OpenGL");
@ -1534,6 +1549,12 @@ static void UpdatesScreen_Init(struct LScreen* s_) {
s->btnDev[0].OnClick = UpdatesScreen_DevD3D9; s->btnDev[0].OnClick = UpdatesScreen_DevD3D9;
s->btnDev[1].OnClick = UpdatesScreen_DevOpenGL; s->btnDev[1].OnClick = UpdatesScreen_DevOpenGL;
s->btnBack.OnClick = SwitchToSettings; s->btnBack.OnClick = SwitchToSettings;
}
static void UpdatesScreen_Show(struct LScreen* s_) {
struct UpdatesScreen* s = (struct UpdatesScreen*)s_;
s->seps[0].col = Launcher_ButtonBorderCol;
s->seps[1].col = Launcher_ButtonBorderCol;
UpdatesScreen_Update(s); UpdatesScreen_Update(s);
} }
@ -1588,6 +1609,7 @@ struct LScreen* UpdatesScreen_MakeInstance(void) {
struct UpdatesScreen* s = &UpdatesScreen_Instance; struct UpdatesScreen* s = &UpdatesScreen_Instance;
LScreen_Reset((struct LScreen*)s); LScreen_Reset((struct LScreen*)s);
s->Init = UpdatesScreen_Init; s->Init = UpdatesScreen_Init;
s->Show = UpdatesScreen_Show;
s->Tick = UpdatesScreen_Tick; s->Tick = UpdatesScreen_Tick;
s->Free = UpdatesScreen_Free; s->Free = UpdatesScreen_Free;
s->Layout = UpdatesScreen_Layout; s->Layout = UpdatesScreen_Layout;

View File

@ -11,7 +11,8 @@ typedef void (*LScreen_Func)(struct LScreen* s);
typedef void (*LWidget_Func)(struct LScreen* s, struct LWidget* w); typedef void (*LWidget_Func)(struct LScreen* s, struct LWidget* w);
#define LScreen_Layout \ #define LScreen_Layout \
LScreen_Func Init; /* Initialises widgets and other data. */ \ LScreen_Func Init; /* Initialises widgets and other data. Only called once. */ \
LScreen_Func Show; /* Called every time this screen is set as the active one. */ \
LScreen_Func Free; /* Cleans up all native resources. */ \ LScreen_Func Free; /* Cleans up all native resources. */ \
LScreen_Func Layout; /* Positions the widgets on the screen. */ \ LScreen_Func Layout; /* Positions the widgets on the screen. */ \
LScreen_Func Draw; /* Draws all widgets and any other features such as lines/rectangles. */ \ LScreen_Func Draw; /* Draws all widgets and any other features such as lines/rectangles. */ \

View File

@ -34,8 +34,9 @@ static void Launcher_ApplyUpdate(void);
void Launcher_SetScreen(struct LScreen* screen) { void Launcher_SetScreen(struct LScreen* screen) {
if (Launcher_Screen) Launcher_Screen->Free(Launcher_Screen); if (Launcher_Screen) Launcher_Screen->Free(Launcher_Screen);
Launcher_Screen = screen; Launcher_Screen = screen;
if (!screen->numWidgets) screen->Init(screen);
screen->Init(screen); screen->Show(screen);
screen->Layout(screen); screen->Layout(screen);
/* for hovering over active button etc */ /* for hovering over active button etc */
screen->MouseMove(screen, 0, 0); screen->MouseMove(screen, 0, 0);