From ab36dc1211e2e2f4acbf0d7699e96d28e7352a96 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 7 May 2022 12:19:32 +1000 Subject: [PATCH] Port most screens to new layout system --- src/LBackend.c | 5 +- src/LScreens.c | 384 +++++++++++++++++++++++-------------------------- src/LWidgets.c | 4 +- src/LWidgets.h | 3 +- 4 files changed, 184 insertions(+), 212 deletions(-) diff --git a/src/LBackend.c b/src/LBackend.c index 28ff3716c..b2773e583 100644 --- a/src/LBackend.c +++ b/src/LBackend.c @@ -398,8 +398,9 @@ static Rect2D caretRect, lastCaretRect; #define Rect2D_Equals(a, b) a.X == b.X && a.Y == b.Y && a.Width == b.Width && a.Height == b.Height void LBackend_InputInit(struct LInput* w, int width) { - w->width = Display_ScaleX(width); - w->height = Display_ScaleY(30); + w->width = Display_ScaleX(width); + w->height = Display_ScaleY(30); + w->minWidth = w->width; } void LBackend_InputUpdate(struct LInput* w) { diff --git a/src/LScreens.c b/src/LScreens.c index 95b7642a4..9e835f6cb 100644 --- a/src/LScreens.c +++ b/src/LScreens.c @@ -233,6 +233,23 @@ static struct LWidget* chooseMode_widgets[] = { NULL }; +LAYOUTS mode_seps0[3] = { LLayout_X(ANCHOR_CENTRE, -5), LLayout_Y(ANCHOR_CENTRE, -85) }; +LAYOUTS mode_seps1[3] = { LLayout_X(ANCHOR_CENTRE, -5), LLayout_Y(ANCHOR_CENTRE, -15) }; + +LAYOUTS mode_btnEnhanced[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -250), LLayout_Y(ANCHOR_CENTRE, -120 ) }; +LAYOUTS mode_lblEnhanced0[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -85), LLayout_Y(ANCHOR_CENTRE, -120 - 12) }; +LAYOUTS mode_lblEnhanced1[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -85), LLayout_Y(ANCHOR_CENTRE, -120 + 12) }; +LAYOUTS mode_btnClassicHax[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -250), LLayout_Y(ANCHOR_CENTRE, -50 ) }; +LAYOUTS mode_lblClassicHax0[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -85), LLayout_Y(ANCHOR_CENTRE, -50 - 12) }; +LAYOUTS mode_lblClassicHax1[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -85), LLayout_Y(ANCHOR_CENTRE, -50 + 12) }; +LAYOUTS mode_btnClassic[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -250), LLayout_Y(ANCHOR_CENTRE, 20 ) }; +LAYOUTS mode_lblClassic0[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -85), LLayout_Y(ANCHOR_CENTRE, 20 - 12) }; +LAYOUTS mode_lblClassic1[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -85), LLayout_Y(ANCHOR_CENTRE, 20 + 12) }; + +LAYOUTS mode_lblHelp[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 160) }; +LAYOUTS mode_btnBack[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 170) }; + + CC_NOINLINE static void ChooseMode_Click(cc_bool classic, cc_bool classicHacks) { Options_SetBool(OPT_CLASSIC_MODE, classic); if (classic) Options_SetBool(OPT_CLASSIC_HACKS, classicHacks); @@ -258,23 +275,23 @@ static void ChooseModeScreen_Init(struct LScreen* s_) { s->widgets = chooseMode_widgets; s->numWidgets = Array_Elems(chooseMode_widgets); - LLine_Init( &s->seps[0], 490, NULL); - LLine_Init( &s->seps[1], 490, NULL); + LLine_Init( &s->seps[0], 490, mode_seps0); + LLine_Init( &s->seps[1], 490, mode_seps1); - LButton_Init(&s->btnEnhanced, 145, 35, "Enhanced", NULL); - LLabel_Init( &s->lblEnhanced[0], "&eEnables custom blocks, changing env", NULL); - LLabel_Init( &s->lblEnhanced[1], "&esettings, longer messages, and more", NULL); + LButton_Init(&s->btnEnhanced, 145, 35, "Enhanced", mode_btnEnhanced); + LLabel_Init( &s->lblEnhanced[0], "&eEnables custom blocks, changing env", mode_lblEnhanced0); + LLabel_Init( &s->lblEnhanced[1], "&esettings, longer messages, and more", mode_lblEnhanced1); - LButton_Init(&s->btnClassicHax, 145, 35, "Classic +hax", NULL); - LLabel_Init( &s->lblClassicHax[0], "&eSame as Classic mode, except that", NULL); - LLabel_Init( &s->lblClassicHax[1], "&ehacks (noclip/fly/speed) are enabled", NULL); + LButton_Init(&s->btnClassicHax, 145, 35, "Classic +hax", mode_btnClassicHax); + LLabel_Init( &s->lblClassicHax[0], "&eSame as Classic mode, except that", mode_lblClassicHax0); + LLabel_Init( &s->lblClassicHax[1], "&ehacks (noclip/fly/speed) are enabled", mode_lblClassicHax1); - LButton_Init(&s->btnClassic, 145, 35, "Classic", NULL); - LLabel_Init( &s->lblClassic[0], "&eOnly uses blocks and features from", NULL); - LLabel_Init( &s->lblClassic[1], "ðe original minecraft classic", NULL); + LButton_Init(&s->btnClassic, 145, 35, "Classic", mode_btnClassic); + LLabel_Init( &s->lblClassic[0], "&eOnly uses blocks and features from", mode_lblClassic0); + LLabel_Init( &s->lblClassic[1], "ðe original minecraft classic", mode_lblClassic1); - LLabel_Init( &s->lblHelp, "&eClick &fEnhanced &eif you're not sure which mode to choose.", NULL); - LButton_Init(&s->btnBack, 80, 35, "Back", NULL); + LLabel_Init( &s->lblHelp, "&eClick &fEnhanced &eif you're not sure which mode to choose.", mode_lblHelp); + LButton_Init(&s->btnBack, 80, 35, "Back", mode_btnBack); s->btnEnhanced.OnClick = UseModeEnhanced; s->btnClassicHax.OnClick = UseModeClassicHax; @@ -290,33 +307,11 @@ static void ChooseModeScreen_Show(struct LScreen* s_) { (struct LWidget*)&ChooseModeScreen.btnBack; } -static void ChooseModeScreen_Layout(struct LScreen* s_) { - struct ChooseModeScreen* s = (struct ChooseModeScreen*)s_; - LWidget_SetLocation(&s->seps[0], ANCHOR_CENTRE, ANCHOR_CENTRE, -5, -85); - LWidget_SetLocation(&s->seps[1], ANCHOR_CENTRE, ANCHOR_CENTRE, -5, -15); - - LWidget_SetLocation(&s->btnEnhanced, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -250, -120); - LWidget_SetLocation(&s->lblEnhanced[0], ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -85, -120 - 12); - LWidget_SetLocation(&s->lblEnhanced[1], ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -85, -120 + 12); - - LWidget_SetLocation(&s->btnClassicHax, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -250, -50); - LWidget_SetLocation(&s->lblClassicHax[0], ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -85, -50 - 12); - LWidget_SetLocation(&s->lblClassicHax[1], ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -85, -50 + 12); - - LWidget_SetLocation(&s->btnClassic, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -250, 20); - LWidget_SetLocation(&s->lblClassic[0], ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -85, 20 - 12); - LWidget_SetLocation(&s->lblClassic[1], ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -85, 20 + 12); - - LWidget_SetLocation(&s->lblHelp, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 160); - LWidget_SetLocation(&s->btnBack, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 170); -} - void ChooseModeScreen_SetActive(cc_bool firstTime) { struct ChooseModeScreen* s = &ChooseModeScreen; LScreen_Reset((struct LScreen*)s); s->Init = ChooseModeScreen_Init; s->Show = ChooseModeScreen_Show; - s->Layout = ChooseModeScreen_Layout; s->firstTime = firstTime; s->title = "Choose mode"; @@ -350,6 +345,27 @@ static struct LWidget* colours_widgets[] = { (struct LWidget*)&ColoursScreen.btnBack, (struct LWidget*)&ColoursScreen.cbClassic }; +#define IptColor_Layout(xx, yy) { LLayout_X(ANCHOR_CENTRE, xx), LLayout_Y(ANCHOR_CENTRE, yy) } +LAYOUTS clr_iptColours[15][3] = { + IptColor_Layout(30, -100), IptColor_Layout(95, -100), IptColor_Layout(160, -100), + IptColor_Layout(30, -60), IptColor_Layout(95, -60), IptColor_Layout(160, -60), + IptColor_Layout(30, -20), IptColor_Layout(95, -20), IptColor_Layout(160, -20), + IptColor_Layout(30, 20), IptColor_Layout(95, 20), IptColor_Layout(160, 20), + IptColor_Layout(30, 60), IptColor_Layout(95, 60), IptColor_Layout(160, 60), +}; +LAYOUTS clr_lblNames0[3] = { LLayout_X(ANCHOR_CENTRE_MAX, 10), LLayout_Y(ANCHOR_CENTRE, -100) }; +LAYOUTS clr_lblNames1[3] = { LLayout_X(ANCHOR_CENTRE_MAX, 10), LLayout_Y(ANCHOR_CENTRE, -60) }; +LAYOUTS clr_lblNames2[3] = { LLayout_X(ANCHOR_CENTRE_MAX, 10), LLayout_Y(ANCHOR_CENTRE, -20) }; +LAYOUTS clr_lblNames3[3] = { LLayout_X(ANCHOR_CENTRE_MAX, 10), LLayout_Y(ANCHOR_CENTRE, 20) }; +LAYOUTS clr_lblNames4[3] = { LLayout_X(ANCHOR_CENTRE_MAX, 10), LLayout_Y(ANCHOR_CENTRE, 60) }; + +LAYOUTS clr_lblRGB0[3] = { LLayout_X(ANCHOR_CENTRE, 30), LLayout_Y(ANCHOR_CENTRE, -130) }; +LAYOUTS clr_lblRGB1[3] = { LLayout_X(ANCHOR_CENTRE, 95), LLayout_Y(ANCHOR_CENTRE, -130) }; +LAYOUTS clr_lblRGB2[3] = { LLayout_X(ANCHOR_CENTRE, 160), LLayout_Y(ANCHOR_CENTRE, -130) }; +LAYOUTS clr_cbClassic[3] = { LLayout_X(ANCHOR_CENTRE, -16), LLayout_Y(ANCHOR_CENTRE, 130) }; +LAYOUTS clr_btnBack[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 170) }; + + CC_NOINLINE static void ColoursScreen_Set(struct LInput* w, cc_uint8 value) { cc_string tmp; char tmpBuffer[STRING_SIZE]; String_InitArray(tmp, tmpBuffer); @@ -444,25 +460,25 @@ static void ColoursScreen_Init(struct LScreen* s_) { int i; s->widgets = colours_widgets; s->numWidgets = Array_Elems(colours_widgets); - + for (i = 0; i < 5 * 3; i++) { s->iptColours[i].inputType = KEYBOARD_TYPE_INTEGER; s->iptColours[i].TextChanged = ColoursScreen_TextChanged; - LInput_Init(&s->iptColours[i], 55, NULL, NULL); + LInput_Init(&s->iptColours[i], 55, NULL, clr_iptColours[i]); } - LLabel_Init( &s->lblNames[0], "Background", NULL); - LLabel_Init( &s->lblNames[1], "Button border", NULL); - LLabel_Init( &s->lblNames[2], "Button highlight", NULL); - LLabel_Init( &s->lblNames[3], "Button", NULL); - LLabel_Init( &s->lblNames[4], "Active button", NULL); + LLabel_Init( &s->lblNames[0], "Background", clr_lblNames0); + LLabel_Init( &s->lblNames[1], "Button border", clr_lblNames1); + LLabel_Init( &s->lblNames[2], "Button highlight", clr_lblNames2); + LLabel_Init( &s->lblNames[3], "Button", clr_lblNames3); + LLabel_Init( &s->lblNames[4], "Active button", clr_lblNames4); - LLabel_Init( &s->lblRGB[0], "Red", NULL); - LLabel_Init( &s->lblRGB[1], "Green", NULL); - LLabel_Init( &s->lblRGB[2], "Blue", NULL); - LButton_Init(&s->btnBack, 80, 35, "Back", NULL); + LLabel_Init( &s->lblRGB[0], "Red", clr_lblRGB0); + LLabel_Init( &s->lblRGB[1], "Green", clr_lblRGB1); + LLabel_Init( &s->lblRGB[2], "Blue", clr_lblRGB2); + LButton_Init(&s->btnBack, 80, 35, "Back", clr_btnBack); - LCheckbox_Init(&s->cbClassic, "Classic style", NULL); + LCheckbox_Init(&s->cbClassic, "Classic style", clr_cbClassic); s->cbClassic.ValueChanged = ColoursScreen_ToggleBG; s->btnBack.OnClick = SwitchToThemes; } @@ -474,36 +490,11 @@ static void ColoursScreen_Show(struct LScreen* s_) { ColoursScreen_UpdateAll(s); } -static void ColoursScreen_Layout(struct LScreen* s_) { - struct ColoursScreen* s = (struct ColoursScreen*)s_; - int i, y; - for (i = 0; i < 5; i++) { - y = -100 + 40 * i; - LWidget_SetLocation(&s->iptColours[i*3 + 0], ANCHOR_CENTRE, ANCHOR_CENTRE, 30, y); - LWidget_SetLocation(&s->iptColours[i*3 + 1], ANCHOR_CENTRE, ANCHOR_CENTRE, 95, y); - LWidget_SetLocation(&s->iptColours[i*3 + 2], ANCHOR_CENTRE, ANCHOR_CENTRE, 160, y); - } - - LWidget_SetLocation(&s->lblNames[0], ANCHOR_CENTRE_MAX, ANCHOR_CENTRE, 10, -100); - LWidget_SetLocation(&s->lblNames[1], ANCHOR_CENTRE_MAX, ANCHOR_CENTRE, 10, -60); - LWidget_SetLocation(&s->lblNames[2], ANCHOR_CENTRE_MAX, ANCHOR_CENTRE, 10, -20); - LWidget_SetLocation(&s->lblNames[3], ANCHOR_CENTRE_MAX, ANCHOR_CENTRE, 10, 20); - LWidget_SetLocation(&s->lblNames[4], ANCHOR_CENTRE_MAX, ANCHOR_CENTRE, 10, 60); - - LWidget_SetLocation(&s->lblRGB[0], ANCHOR_CENTRE, ANCHOR_CENTRE, 30, -130); - LWidget_SetLocation(&s->lblRGB[1], ANCHOR_CENTRE, ANCHOR_CENTRE, 95, -130); - LWidget_SetLocation(&s->lblRGB[2], ANCHOR_CENTRE, ANCHOR_CENTRE, 160, -130); - - LWidget_SetLocation(&s->cbClassic, ANCHOR_CENTRE, ANCHOR_CENTRE, -16, 130); - LWidget_SetLocation(&s->btnBack, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 170); -} - void ColoursScreen_SetActive(void) { struct ColoursScreen* s = &ColoursScreen; LScreen_Reset((struct LScreen*)s); s->Init = ColoursScreen_Init; s->Show = ColoursScreen_Show; - s->Layout = ColoursScreen_Layout; s->KeyDown = ColoursScreen_KeyDown; s->MouseWheel = ColoursScreen_MouseWheel; @@ -528,6 +519,15 @@ static struct LWidget* directConnect_widgets[] = { (struct LWidget*)&DirectConnectScreen.btnBack, (struct LWidget*)&DirectConnectScreen.lblStatus }; +LAYOUTS dc_iptUsername[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -165), LLayout_Y(ANCHOR_CENTRE, -120) }; +LAYOUTS dc_iptAddress[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -165), LLayout_Y(ANCHOR_CENTRE, -75) }; +LAYOUTS dc_iptMppass[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -165), LLayout_Y(ANCHOR_CENTRE, -30) }; + +LAYOUTS dc_btnConnect[3] = { LLayout_X(ANCHOR_CENTRE, -110), LLayout_Y(ANCHOR_CENTRE, 20) }; +LAYOUTS dc_btnBack[3] = { LLayout_X(ANCHOR_CENTRE, 125), LLayout_Y(ANCHOR_CENTRE, 20) }; +LAYOUTS dc_lblStatus[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 70) }; + + static void DirectConnectScreen_UrlFilter(cc_string* str) { static const cc_string prefix = String_FromConst("mc://"); cc_string parts[6]; @@ -614,13 +614,13 @@ static void DirectConnectScreen_Init(struct LScreen* s_) { s->widgets = directConnect_widgets; s->numWidgets = Array_Elems(directConnect_widgets); - LInput_Init(&s->iptUsername, 330, "Username..", NULL); - LInput_Init(&s->iptAddress, 330, "IP address:Port number..", NULL); - LInput_Init(&s->iptMppass, 330, "Mppass..", NULL); + LInput_Init(&s->iptUsername, 330, "Username..", dc_iptUsername); + LInput_Init(&s->iptAddress, 330, "IP address:Port number..", dc_iptAddress); + LInput_Init(&s->iptMppass, 330, "Mppass..", dc_iptMppass); - LButton_Init(&s->btnConnect, 110, 35, "Connect", NULL); - LButton_Init(&s->btnBack, 80, 35, "Back", NULL); - LLabel_Init( &s->lblStatus, "", NULL); + LButton_Init(&s->btnConnect, 110, 35, "Connect", dc_btnConnect); + LButton_Init(&s->btnBack, 80, 35, "Back", dc_btnBack); + LLabel_Init( &s->lblStatus, "", dc_lblStatus); s->iptUsername.ClipboardFilter = DirectConnectScreen_UrlFilter; s->iptAddress.ClipboardFilter = DirectConnectScreen_UrlFilter; @@ -632,22 +632,10 @@ static void DirectConnectScreen_Init(struct LScreen* s_) { DirectConnectScreen_Load(s); } -static void DirectConnectScreen_Layout(struct LScreen* s_) { - struct DirectConnectScreen* s = (struct DirectConnectScreen*)s_; - LWidget_SetLocation(&s->iptUsername, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -165, -120); - LWidget_SetLocation(&s->iptAddress, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -165, -75); - LWidget_SetLocation(&s->iptMppass, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -165, -30); - - LWidget_SetLocation(&s->btnConnect, ANCHOR_CENTRE, ANCHOR_CENTRE, -110, 20); - LWidget_SetLocation(&s->btnBack, ANCHOR_CENTRE, ANCHOR_CENTRE, 125, 20); - LWidget_SetLocation(&s->lblStatus, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 70); -} - void DirectConnectScreen_SetActive(void) { struct DirectConnectScreen* s = &DirectConnectScreen; LScreen_Reset((struct LScreen*)s); - s->Init = DirectConnectScreen_Init; - s->Layout = DirectConnectScreen_Layout; + s->Init = DirectConnectScreen_Init; s->title = "Direct connect"; s->onEnterWidget = (struct LWidget*)&s->btnConnect; @@ -670,6 +658,12 @@ static struct LWidget* mfa_widgets[] = { (struct LWidget*)&MFAScreen.btnSignIn, (struct LWidget*)&MFAScreen.btnCancel }; +LAYOUTS mfa_lblTitle[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -115) }; +LAYOUTS mfa_iptCode[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -75) }; +LAYOUTS mfa_btnSignIn[3] = { LLayout_X(ANCHOR_CENTRE, -90), LLayout_Y(ANCHOR_CENTRE, -25) }; +LAYOUTS mfa_btnCancel[3] = { LLayout_X(ANCHOR_CENTRE, 90), LLayout_Y(ANCHOR_CENTRE, -25) }; + + static void MainScreen_DoLogin(void); static void MFAScreen_SignIn(void* w) { MainScreen_SetActive(); @@ -685,10 +679,10 @@ static void MFAScreen_Init(struct LScreen* s_) { s->widgets = mfa_widgets; s->numWidgets = Array_Elems(mfa_widgets); - LLabel_Init( &s->lblTitle, "", NULL); - LInput_Init( &s->iptCode, 280, "Login code..", NULL); - LButton_Init(&s->btnSignIn, 100, 35, "Sign in", NULL); - LButton_Init(&s->btnCancel, 100, 35, "Cancel", NULL); + LLabel_Init( &s->lblTitle, "", mfa_lblTitle); + LInput_Init( &s->iptCode, 280, "Login code..", mfa_iptCode); + LButton_Init(&s->btnSignIn, 100, 35, "Sign in", mfa_btnSignIn); + LButton_Init(&s->btnCancel, 100, 35, "Cancel", mfa_btnCancel); s->btnSignIn.OnClick = MFAScreen_SignIn; s->btnCancel.OnClick = MFAScreen_Cancel; @@ -702,20 +696,11 @@ static void MFAScreen_Show(struct LScreen* s_) { "&cLogin code required (Check emails)"); } -static void MFAScreen_Layout(struct LScreen* s_) { - struct MFAScreen* s = (struct MFAScreen*)s_; - LWidget_SetLocation(&s->lblTitle, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -115); - LWidget_SetLocation(&s->iptCode, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -75); - LWidget_SetLocation(&s->btnSignIn, ANCHOR_CENTRE, ANCHOR_CENTRE, -90, -25); - LWidget_SetLocation(&s->btnCancel, ANCHOR_CENTRE, ANCHOR_CENTRE, 90, -25); -} - void MFAScreen_SetActive(void) { struct MFAScreen* s = &MFAScreen; LScreen_Reset((struct LScreen*)s); - s->Init = MFAScreen_Init; - s->Show = MFAScreen_Show; - s->Layout = MFAScreen_Layout; + s->Init = MFAScreen_Init; + s->Show = MFAScreen_Show; s->title = "Enter login code"; s->onEnterWidget = (struct LWidget*)&s->btnSignIn; @@ -742,19 +727,20 @@ static struct LWidget* main_widgets[] = { (struct LWidget*)&MainScreen.btnRegister, (struct LWidget*)&MainScreen.btnOptions }; -LAYOUTS main_iptUsername[] = { LLayout_X(ANCHOR_CENTRE_MIN, -140), LLayout_Y(ANCHOR_CENTRE, -120), LLayout_End }; -LAYOUTS main_iptPassword[] = { LLayout_X(ANCHOR_CENTRE_MIN, -140), LLayout_Y(ANCHOR_CENTRE, -75), LLayout_End }; +LAYOUTS main_iptUsername[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -140), LLayout_Y(ANCHOR_CENTRE, -120) }; +LAYOUTS main_iptPassword[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -140), LLayout_Y(ANCHOR_CENTRE, -75) }; -LAYOUTS main_btnLogin[] = { LLayout_X(ANCHOR_CENTRE, -90), LLayout_Y(ANCHOR_CENTRE, -25), LLayout_End }; -LAYOUTS main_lblStatus[] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 20), LLayout_End }; +LAYOUTS main_btnLogin[3] = { LLayout_X(ANCHOR_CENTRE, -90), LLayout_Y(ANCHOR_CENTRE, -25) }; +LAYOUTS main_lblStatus[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 20) }; -LAYOUTS main_btnResume[] = { LLayout_X(ANCHOR_CENTRE, 90), LLayout_Y(ANCHOR_CENTRE, -25), LLayout_End }; -LAYOUTS main_btnDirect[] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 60), LLayout_End }; -LAYOUTS main_btnSPlayer[] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 110), LLayout_End }; +LAYOUTS main_btnResume[3] = { LLayout_X(ANCHOR_CENTRE, 90), LLayout_Y(ANCHOR_CENTRE, -25) }; +LAYOUTS main_btnDirect[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 60) }; +LAYOUTS main_btnSPlayer[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 110) }; + +LAYOUTS main_lblUpdate[3] = { LLayout_X(ANCHOR_MAX, 10), LLayout_Y(ANCHOR_MAX, 45) }; +LAYOUTS main_btnOptions[3] = { LLayout_X(ANCHOR_MAX, 6), LLayout_Y(ANCHOR_MAX, 6) }; +LAYOUTS main_btnRegister[3] = { LLayout_X(ANCHOR_MIN, 6), LLayout_Y(ANCHOR_MAX, 6) }; -LAYOUTS main_lblUpdate[] = { LLayout_X(ANCHOR_MAX, 10), LLayout_Y(ANCHOR_MAX, 45), LLayout_End }; -LAYOUTS main_btnOptions[] = { LLayout_X(ANCHOR_MAX, 6), LLayout_Y(ANCHOR_MAX, 6), LLayout_End }; -LAYOUTS main_btnRegister[] = { LLayout_X(ANCHOR_MIN, 6), LLayout_Y(ANCHOR_MAX, 6), LLayout_End }; struct ResumeInfo { cc_string user, ip, port, server, mppass; @@ -1048,6 +1034,14 @@ static struct LWidget* checkResources_widgets[] = { (struct LWidget*)&CheckResourcesScreen.btnNo }; +LAYOUTS cres_lblLine1[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -50) }; +LAYOUTS cres_lblLine2[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -30) }; +LAYOUTS cres_lblStatus[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 10) }; + +LAYOUTS cres_btnYes[3] = { LLayout_X(ANCHOR_CENTRE, -70), LLayout_Y(ANCHOR_CENTRE, 45) }; +LAYOUTS cres_btnNo[3] = { LLayout_X(ANCHOR_CENTRE, 70), LLayout_Y(ANCHOR_CENTRE, 45) }; + + static void CheckResourcesScreen_Yes(void* w) { FetchResourcesScreen_SetActive(); } static void CheckResourcesScreen_Next(void* w) { Http_ClearPending(); @@ -1064,12 +1058,12 @@ static void CheckResourcesScreen_Init(struct LScreen* s_) { s->numWidgets = Array_Elems(checkResources_widgets); s->lblStatus.small = true; - LLabel_Init( &s->lblLine1, "Some required resources weren't found", NULL); - LLabel_Init( &s->lblLine2, "Okay to download?", NULL); - LLabel_Init( &s->lblStatus, "", NULL); + LLabel_Init( &s->lblLine1, "Some required resources weren't found", cres_lblLine1); + LLabel_Init( &s->lblLine2, "Okay to download?", cres_lblLine2); + LLabel_Init( &s->lblStatus, "", cres_lblStatus); - LButton_Init(&s->btnYes, 70, 35, "Yes", NULL); - LButton_Init(&s->btnNo, 70, 35, "No", NULL); + LButton_Init(&s->btnYes, 70, 35, "Yes", cres_btnYes); + LButton_Init(&s->btnNo, 70, 35, "No", cres_btnNo); s->btnYes.OnClick = CheckResourcesScreen_Yes; s->btnNo.OnClick = CheckResourcesScreen_Next; } @@ -1084,17 +1078,6 @@ static void CheckResourcesScreen_Show(struct LScreen* s_) { LLabel_SetText(&s->lblStatus, &str); } -static void CheckResourcesScreen_Layout(struct LScreen* s_) { - struct CheckResourcesScreen* s = (struct CheckResourcesScreen*)s_; - - LWidget_SetLocation(&s->lblLine1, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -50); - LWidget_SetLocation(&s->lblLine2, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -30); - LWidget_SetLocation(&s->lblStatus, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 10); - - LWidget_SetLocation(&s->btnYes, ANCHOR_CENTRE, ANCHOR_CENTRE, -70, 45); - LWidget_SetLocation(&s->btnNo, ANCHOR_CENTRE, ANCHOR_CENTRE, 70, 45); -} - #define RESOURCES_BACK_COLOR BitmapCol_Make( 12, 12, 12, 255) #define RESOURCES_FORE_COLOR BitmapCol_Make(120, 85, 151, 255) @@ -1118,7 +1101,6 @@ void CheckResourcesScreen_SetActive(void) { LScreen_Reset((struct LScreen*)s); s->Init = CheckResourcesScreen_Init; s->Show = CheckResourcesScreen_Show; - s->Layout = CheckResourcesScreen_Layout; s->DrawBackground = CheckResourcesScreen_DrawBackground; s->ResetArea = CheckResourcesScreen_ResetArea; s->onEnterWidget = (struct LWidget*)&s->btnYes; @@ -1141,27 +1123,25 @@ static struct LWidget* fetchResources_widgets[] = { (struct LWidget*)&FetchResourcesScreen.sdrProgress }; +LAYOUTS fres_lblStatus[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -10) }; +LAYOUTS fres_btnCancel[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 45) }; +LAYOUTS fres_sdrProgress[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 15) }; + + static void FetchResourcesScreen_Init(struct LScreen* s_) { struct FetchResourcesScreen* s = (struct FetchResourcesScreen*)s_; s->widgets = fetchResources_widgets; s->numWidgets = Array_Elems(fetchResources_widgets); s->lblStatus.small = true; - LLabel_Init( &s->lblStatus, "", NULL); - LButton_Init(&s->btnCancel, 120, 35, "Cancel", NULL); - LSlider_Init(&s->sdrProgress, 200, 12, BitmapCol_Make(0, 220, 0, 255), NULL); + LLabel_Init( &s->lblStatus, "", fres_lblStatus); + LButton_Init(&s->btnCancel, 120, 35, "Cancel", fres_btnCancel); + LSlider_Init(&s->sdrProgress, 200, 12, BitmapCol_Make(0, 220, 0, 255), fres_sdrProgress); s->btnCancel.OnClick = CheckResourcesScreen_Next; } static void FetchResourcesScreen_Show(struct LScreen* s_) { Fetcher_Run(); } -static void FetchResourcesScreen_Layout(struct LScreen* s_) { - struct FetchResourcesScreen* s = (struct FetchResourcesScreen*)s_; - LWidget_SetLocation(&s->lblStatus, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -10); - LWidget_SetLocation(&s->btnCancel, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 45); - LWidget_SetLocation(&s->sdrProgress, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 15); -} - static void FetchResourcesScreen_UpdateStatus(struct FetchResourcesScreen* s, int reqID) { cc_string str; char strBuffer[STRING_SIZE]; const char* name; @@ -1214,10 +1194,9 @@ static void FetchResourcesScreen_Tick(struct LScreen* s_) { void FetchResourcesScreen_SetActive(void) { struct FetchResourcesScreen* s = &FetchResourcesScreen; LScreen_Reset((struct LScreen*)s); - s->Init = FetchResourcesScreen_Init; - s->Show = FetchResourcesScreen_Show; - s->Tick = FetchResourcesScreen_Tick; - s->Layout = FetchResourcesScreen_Layout; + s->Init = FetchResourcesScreen_Init; + s->Show = FetchResourcesScreen_Show; + s->Tick = FetchResourcesScreen_Tick; s->DrawBackground = CheckResourcesScreen_DrawBackground; s->ResetArea = CheckResourcesScreen_ResetArea; Launcher_SetScreen((struct LScreen*)s); @@ -1242,6 +1221,15 @@ static struct LWidget* servers_widgets[] = { (struct LWidget*)&ServersScreen.btnRefresh, (struct LWidget*)&ServersScreen.table }; +LAYOUTS srv_iptSearch[3] = { LLayout_X(ANCHOR_MIN, 10), LLayout_Y(ANCHOR_MIN, 10) }; +LAYOUTS srv_iptHash[3] = { LLayout_X(ANCHOR_MIN, 10), LLayout_Y(ANCHOR_MAX, 10) }; +LAYOUTS srv_table[3] = { LLayout_X(ANCHOR_MIN, 10), LLayout_Y(ANCHOR_MIN, 50) }; + +LAYOUTS srv_btnBack[3] = { LLayout_X(ANCHOR_MAX, 10), LLayout_Y(ANCHOR_MIN, 10) }; +LAYOUTS srv_btnConnect[3] = { LLayout_X(ANCHOR_MAX, 10), LLayout_Y(ANCHOR_MAX, 10) }; +LAYOUTS srv_btnRefresh[3] = { LLayout_X(ANCHOR_MAX, 135), LLayout_Y(ANCHOR_MIN, 10) }; + + static void ServersScreen_Connect(void* w) { struct LTable* table = &ServersScreen.table; cc_string* hash = &ServersScreen.iptHash.text; @@ -1307,12 +1295,12 @@ static void ServersScreen_Init(struct LScreen* s_) { s->widgets = servers_widgets; s->numWidgets = Array_Elems(servers_widgets); - LInput_Init( &s->iptSearch, 370, "Search servers..", NULL); - LInput_Init( &s->iptHash, 475, "classicube.net/server/play/...", NULL); + LInput_Init( &s->iptSearch, 370, "Search servers..", srv_iptSearch); + LInput_Init( &s->iptHash, 475, "classicube.net/server/play/...", srv_iptHash); - LButton_Init(&s->btnBack, 110, 30, "Back", NULL); - LButton_Init(&s->btnConnect, 130, 30, "Connect", NULL); - LButton_Init(&s->btnRefresh, 110, 30, "Refresh", NULL); + LButton_Init(&s->btnBack, 110, 30, "Back", srv_btnBack); + LButton_Init(&s->btnConnect, 130, 30, "Connect", srv_btnConnect); + LButton_Init(&s->btnRefresh, 110, 30, "Refresh", srv_btnRefresh); s->btnBack.OnClick = SwitchToMain; s->btnConnect.OnClick = ServersScreen_Connect; @@ -1322,7 +1310,7 @@ static void ServersScreen_Init(struct LScreen* s_) { s->iptHash.TextChanged = ServersScreen_HashChanged; s->iptHash.ClipboardFilter = ServersScreen_HashFilter; - LTable_Init(&s->table); + LTable_Init(&s->table, srv_table); s->table.filter = &s->iptSearch.text; s->table.selectedHash = &s->iptHash.text; s->table.OnSelectedChanged = ServersScreen_OnSelectedChanged; @@ -1365,14 +1353,7 @@ static void ServersScreen_Tick(struct LScreen* s_) { static void ServersScreen_Layout(struct LScreen* s_) { struct ServersScreen* s = (struct ServersScreen*)s_; - LWidget_SetLocation(&s->iptSearch, ANCHOR_MIN, ANCHOR_MIN, 10, 10); - LWidget_SetLocation(&s->iptHash, ANCHOR_MIN, ANCHOR_MAX, 10, 10); - - LWidget_SetLocation(&s->btnBack, ANCHOR_MAX, ANCHOR_MIN, 10, 10); - LWidget_SetLocation(&s->btnConnect, ANCHOR_MAX, ANCHOR_MAX, 10, 10); - LWidget_SetLocation(&s->btnRefresh, ANCHOR_MAX, ANCHOR_MIN, 135, 10); - - LWidget_SetLocation(&s->table, ANCHOR_MIN, ANCHOR_MIN, 10, 50); + LScreen_DoLayout(s_); s->table.width = WindowInfo.Width - s->table.x; s->table.height = WindowInfo.Height - s->table.y * 2; s->table.height = max(1, s->table.height); @@ -1444,6 +1425,19 @@ static struct LWidget* settings_classic[] = { (struct LWidget*)&SettingsScreen.btnBack }; +LAYOUTS set_btnUpdates[3] = { LLayout_X(ANCHOR_CENTRE, -135), LLayout_Y(ANCHOR_CENTRE, -120) }; +LAYOUTS set_lblUpdates[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -70), LLayout_Y(ANCHOR_CENTRE, -120) }; +LAYOUTS set_btnMode[3] = { LLayout_X(ANCHOR_CENTRE, -135), LLayout_Y(ANCHOR_CENTRE, -70) }; +LAYOUTS set_lblMode[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -70), LLayout_Y(ANCHOR_CENTRE, -70) }; +LAYOUTS set_btnColours[3] = { LLayout_X(ANCHOR_CENTRE, -135), LLayout_Y(ANCHOR_CENTRE, -20) }; +LAYOUTS set_lblColours[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -70), LLayout_Y(ANCHOR_CENTRE, -20) }; + +LAYOUTS set_sep[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 15) }; +LAYOUTS set_cbExtra[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -190), LLayout_Y(ANCHOR_CENTRE, 44) }; +LAYOUTS set_cbEmpty[3] = { LLayout_X(ANCHOR_CENTRE_MIN, -190), LLayout_Y(ANCHOR_CENTRE, 84) }; +LAYOUTS set_btnBack[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 170) }; + + #if defined CC_BUILD_MOBILE static void SettingsScreen_LockOrientation(struct LCheckbox* w) { Options_SetBool(OPT_LANDSCAPE_MODE, w->value); @@ -1462,28 +1456,28 @@ static void SettingsScreen_ShowEmpty(struct LCheckbox* w) { static void SettingsScreen_Init(struct LScreen* s_) { struct SettingsScreen* s = (struct SettingsScreen*)s_; - LLine_Init( &s->sep, 380, NULL); + LLine_Init( &s->sep, 380, set_sep); - LButton_Init(&s->btnUpdates, 110, 35, "Updates", NULL); - LLabel_Init( &s->lblUpdates, "&eGet the latest stuff", NULL); + LButton_Init(&s->btnUpdates, 110, 35, "Updates", set_btnUpdates); + LLabel_Init( &s->lblUpdates, "&eGet the latest stuff", set_lblUpdates); - LButton_Init(&s->btnMode, 110, 35, "Mode", NULL); - LLabel_Init( &s->lblMode, "&eChange the enabled features", NULL); + LButton_Init(&s->btnMode, 110, 35, "Mode", set_btnMode); + LLabel_Init( &s->lblMode, "&eChange the enabled features", set_lblMode); - LButton_Init(&s->btnColours, 110, 35, "Theme", NULL); - LLabel_Init( &s->lblColours, "&eChange how the launcher looks", NULL); + LButton_Init(&s->btnColours, 110, 35, "Theme", set_btnColours); + LLabel_Init( &s->lblColours, "&eChange how the launcher looks", set_lblColours); #if defined CC_BUILD_MOBILE - LCheckbox_Init(&s->cbExtra, "Force landscape", NULL); + LCheckbox_Init(&s->cbExtra, "Force landscape", set_cbExtra); s->cbExtra.ValueChanged = SettingsScreen_LockOrientation; #else - LCheckbox_Init(&s->cbExtra, "Close this after game starts", NULL); + LCheckbox_Init(&s->cbExtra, "Close this after game starts", set_cbExtra); s->cbExtra.ValueChanged = SettingsScreen_AutoClose; #endif - LCheckbox_Init(&s->cbEmpty, "Show empty servers in list", NULL); + LCheckbox_Init(&s->cbEmpty, "Show empty servers in list", set_cbEmpty); s->cbEmpty.ValueChanged = SettingsScreen_ShowEmpty; - LButton_Init( &s->btnBack, 80, 35, "Back", NULL); + LButton_Init( &s->btnBack, 80, 35, "Back", set_btnBack); s->btnMode.OnClick = SwitchToChooseMode; s->btnUpdates.OnClick = SwitchToUpdates; @@ -1510,30 +1504,11 @@ static void SettingsScreen_Show(struct LScreen* s_) { s->cbEmpty.value = Launcher_ShowEmptyServers; } -static void SettingsScreen_Layout(struct LScreen* s_) { - struct SettingsScreen* s = (struct SettingsScreen*)s_; - LWidget_SetLocation(&s->btnUpdates, ANCHOR_CENTRE, ANCHOR_CENTRE, -135, -120); - LWidget_SetLocation(&s->lblUpdates, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -70, -120); - - LWidget_SetLocation(&s->btnMode, ANCHOR_CENTRE, ANCHOR_CENTRE, -135, -70); - LWidget_SetLocation(&s->lblMode, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -70, -70); - - LWidget_SetLocation(&s->btnColours, ANCHOR_CENTRE, ANCHOR_CENTRE, -135, -20); - LWidget_SetLocation(&s->lblColours, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -70, -20); - - LWidget_SetLocation(&s->sep, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 15); - LWidget_SetLocation(&s->cbExtra, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -190, 44); - LWidget_SetLocation(&s->cbEmpty, ANCHOR_CENTRE_MIN, ANCHOR_CENTRE, -190, 84); - - LWidget_SetLocation(&s->btnBack, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 170); -} - void SettingsScreen_SetActive(void) { struct SettingsScreen* s = &SettingsScreen; LScreen_Reset((struct LScreen*)s); s->Init = SettingsScreen_Init; s->Show = SettingsScreen_Show; - s->Layout = SettingsScreen_Layout; s->title = "Options"; Launcher_SetScreen((struct LScreen*)s); @@ -1555,6 +1530,13 @@ static struct LWidget* themes_widgets[] = { (struct LWidget*)&ThemesScreen.btnBack }; +LAYOUTS the_btnModern[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -120) }; +LAYOUTS the_btnClassic[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -70) }; +LAYOUTS the_btnNordic[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, -20) }; +LAYOUTS the_btnCustom[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 120) }; +LAYOUTS the_btnBack[3] = { LLayout_X(ANCHOR_CENTRE, 0), LLayout_Y(ANCHOR_CENTRE, 170) }; + + static void ThemesScreen_Set(const struct LauncherTheme* theme) { Launcher_Theme = *theme; Launcher_SaveTheme(); @@ -1576,11 +1558,11 @@ static void ThemesScreen_Init(struct LScreen* s_) { s->widgets = themes_widgets; s->numWidgets = Array_Elems(themes_widgets); - LButton_Init(&s->btnModern, 200, 35, "Modern", NULL); - LButton_Init(&s->btnClassic, 200, 35, "Classic", NULL); - LButton_Init(&s->btnNordic, 200, 35, "Nordic", NULL); - LButton_Init(&s->btnCustom, 200, 35, "Custom", NULL); - LButton_Init(&s->btnBack, 80, 35, "Back", NULL); + LButton_Init(&s->btnModern, 200, 35, "Modern", the_btnModern); + LButton_Init(&s->btnClassic, 200, 35, "Classic", the_btnClassic); + LButton_Init(&s->btnNordic, 200, 35, "Nordic", the_btnNordic); + LButton_Init(&s->btnCustom, 200, 35, "Custom", the_btnCustom); + LButton_Init(&s->btnBack, 80, 35, "Back", the_btnBack); s->btnModern.OnClick = ThemesScreen_Modern; s->btnClassic.OnClick = ThemesScreen_Classic; @@ -1589,20 +1571,10 @@ static void ThemesScreen_Init(struct LScreen* s_) { 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->btnNordic, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -20); - LWidget_SetLocation(&s->btnCustom, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 120); - LWidget_SetLocation(&s->btnBack, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 170); -} - void ThemesScreen_SetActive(void) { struct ThemesScreen* s = &ThemesScreen; LScreen_Reset((struct LScreen*)s); s->Init = ThemesScreen_Init; - s->Layout = ThemesScreen_Layout; s->title = "Select theme"; Launcher_SetScreen((struct LScreen*)s); diff --git a/src/LWidgets.c b/src/LWidgets.c index 25154e32c..85f091441 100644 --- a/src/LWidgets.c +++ b/src/LWidgets.c @@ -361,7 +361,6 @@ void LInput_Init(struct LInput* w, int width, const char* hintText, const struct w->hintText = hintText; w->caretPos = -1; LBackend_InputInit(w, width); - w->minWidth = w->width; } void LInput_SetText(struct LInput* w, const cc_string* text) { @@ -661,7 +660,7 @@ static const struct LWidgetVTABLE ltable_VTABLE = { LTable_MouseDown, LTable_MouseUp, /* Select */ LTable_MouseWheel, /* Wheel */ }; -void LTable_Init(struct LTable* w) { +void LTable_Init(struct LTable* w, const struct LLayout* layouts) { int i; w->VTABLE = <able_VTABLE; w->type = LWIDGET_TABLE; @@ -669,6 +668,7 @@ void LTable_Init(struct LTable* w) { w->numColumns = Array_Elems(tableColumns); w->sortingCol = -1; w->opaque = true; + w->layouts = layouts; for (i = 0; i < w->numColumns; i++) { w->columns[i].width = Display_ScaleX(w->columns[i].width); diff --git a/src/LWidgets.h b/src/LWidgets.h index d6c11fb15..0e133f278 100644 --- a/src/LWidgets.h +++ b/src/LWidgets.h @@ -13,7 +13,6 @@ enum LWIDGET_TYPE { #define LLAYOUT_TYPE_X 0x0100 #define LLAYOUT_TYPE_Y 0x0200 -#define LLayout_End { 0, 0 } #define LLayout_X(anchor, offset) { LLAYOUT_TYPE_X | anchor, offset } #define LLayout_Y(anchor, offset) { LLAYOUT_TYPE_Y | anchor, offset } struct LLayout { short type, offset; }; @@ -212,7 +211,7 @@ struct LTableCell { struct LTable* table; int x, y, width; }; /* Initialises a table. */ /* NOTE: Must also call LTable_Reset to make a table actually useful. */ -void LTable_Init(struct LTable* table); +void LTable_Init(struct LTable* table, const struct LLayout* layouts); /* Resets state of a table (reset sorter, filter, etc) */ void LTable_Reset(struct LTable* table); /* Adjusts Y position of rows and number of visible rows. */