mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 11:35:08 -04:00
Simplify UI code a little bit
This commit is contained in:
parent
1a82ef84ce
commit
aa4fc4f218
13
src/Gui.c
13
src/Gui.c
@ -500,19 +500,6 @@ int Screen_DoPointerDown(void* screen, int id, int x, int y) {
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Screen_Index(void* screen, void* widget) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
struct Widget** widgets = s->widgets;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
struct Widget* w = (struct Widget*)widget;
|
|
||||||
for (i = 0; i < s->numWidgets; i++)
|
|
||||||
{
|
|
||||||
if (widgets[i] == w) return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Screen_CalcDefaultMaxVertices(void* screen) {
|
int Screen_CalcDefaultMaxVertices(void* screen) {
|
||||||
struct Screen* s = (struct Screen*)screen;
|
struct Screen* s = (struct Screen*)screen;
|
||||||
struct Widget** widgets = s->widgets;
|
struct Widget** widgets = s->widgets;
|
||||||
|
@ -117,7 +117,6 @@ void Screen_Render2Widgets(void* screen, double delta);
|
|||||||
void Screen_UpdateVb(void* screen);
|
void Screen_UpdateVb(void* screen);
|
||||||
struct VertexTextured* Screen_LockVb(void* screen);
|
struct VertexTextured* Screen_LockVb(void* screen);
|
||||||
int Screen_DoPointerDown(void* screen, int id, int x, int y);
|
int Screen_DoPointerDown(void* screen, int id, int x, int y);
|
||||||
int Screen_Index(void* screen, void* w);
|
|
||||||
int Screen_CalcDefaultMaxVertices(void* screen);
|
int Screen_CalcDefaultMaxVertices(void* screen);
|
||||||
|
|
||||||
/* Default mesh building implementation for a screen */
|
/* Default mesh building implementation for a screen */
|
||||||
|
34
src/Menus.c
34
src/Menus.c
@ -1963,8 +1963,10 @@ static void KeyBindsScreen_Update(struct KeyBindsScreen* s, int i) {
|
|||||||
|
|
||||||
static void KeyBindsScreen_OnBindingClick(void* screen, void* widget) {
|
static void KeyBindsScreen_OnBindingClick(void* screen, void* widget) {
|
||||||
struct KeyBindsScreen* s = (struct KeyBindsScreen*)screen;
|
struct KeyBindsScreen* s = (struct KeyBindsScreen*)screen;
|
||||||
|
struct ButtonWidget* btn = (struct ButtonWidget*)widget;
|
||||||
|
|
||||||
int old = s->curI;
|
int old = s->curI;
|
||||||
s->curI = Screen_Index(s, widget);
|
s->curI = btn->meta.val;
|
||||||
s->closable = false;
|
s->closable = false;
|
||||||
|
|
||||||
KeyBindsScreen_Update(s, s->curI);
|
KeyBindsScreen_Update(s, s->curI);
|
||||||
@ -2053,6 +2055,7 @@ static void KeyBindsScreen_Init(void* screen) {
|
|||||||
for (i = 0; i < s->bindsCount; i++) {
|
for (i = 0; i < s->bindsCount; i++) {
|
||||||
ButtonWidget_Init(&s->buttons[i], s->btnWidth, KeyBindsScreen_OnBindingClick);
|
ButtonWidget_Init(&s->buttons[i], s->btnWidth, KeyBindsScreen_OnBindingClick);
|
||||||
s->widgets[i] = (struct Widget*)&s->buttons[i];
|
s->widgets[i] = (struct Widget*)&s->buttons[i];
|
||||||
|
s->buttons[i].meta.val = i;
|
||||||
}
|
}
|
||||||
for (; i < KEYBINDS_MAX_BTNS; i++) { s->widgets[i] = NULL; }
|
for (; i < KEYBINDS_MAX_BTNS; i++) { s->widgets[i] = NULL; }
|
||||||
|
|
||||||
@ -2494,7 +2497,7 @@ static void MenuOptionsScreen_OnDone(const cc_string* value, cc_bool valid) {
|
|||||||
s->dirty = true;
|
s->dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuOptionsScreen_SelectExtHelp(s, Screen_Index(s, s->activeBtn));
|
if (s->selectedI >= 0) MenuOptionsScreen_SelectExtHelp(s, s->selectedI);
|
||||||
s->activeBtn = NULL;
|
s->activeBtn = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3837,7 +3840,10 @@ static struct Widget* texpack_widgets[] = {
|
|||||||
(struct Widget*)&TexPackOverlay.btns[2], (struct Widget*)&TexPackOverlay.btns[3]
|
(struct Widget*)&TexPackOverlay.btns[2], (struct Widget*)&TexPackOverlay.btns[3]
|
||||||
};
|
};
|
||||||
|
|
||||||
static cc_bool TexPackOverlay_IsAlways(void* screen, void* w) { return Screen_Index(screen, w) >= 6; }
|
static cc_bool TexPackOverlay_IsAlways(void* screen, void* w) {
|
||||||
|
struct ButtonWidget* btn = (struct ButtonWidget*)w;
|
||||||
|
return btn->meta.val != 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void TexPackOverlay_YesClick(void* screen, void* widget) {
|
static void TexPackOverlay_YesClick(void* screen, void* widget) {
|
||||||
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
||||||
@ -3944,6 +3950,8 @@ static void TexPackOverlay_ContextRecreated(void* screen) {
|
|||||||
ButtonWidget_SetConst(&s->btns[3], "Always no", &titleFont);
|
ButtonWidget_SetConst(&s->btns[3], "Always no", &titleFont);
|
||||||
s->btns[2].MenuClick = TexPackOverlay_YesClick;
|
s->btns[2].MenuClick = TexPackOverlay_YesClick;
|
||||||
s->btns[3].MenuClick = TexPackOverlay_NoClick;
|
s->btns[3].MenuClick = TexPackOverlay_NoClick;
|
||||||
|
s->btns[2].meta.val = 1;
|
||||||
|
s->btns[3].meta.val = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s->numWidgets = s->deny ? 6 : 8;
|
s->numWidgets = s->deny ? 6 : 8;
|
||||||
@ -4005,7 +4013,6 @@ void TexPackOverlay_Show(const cc_string* url) {
|
|||||||
#define ONSCREEN_PAGE_BTNS 8
|
#define ONSCREEN_PAGE_BTNS 8
|
||||||
static struct TouchOnscreenScreen {
|
static struct TouchOnscreenScreen {
|
||||||
Screen_Body
|
Screen_Body
|
||||||
int offset;
|
|
||||||
struct ButtonWidget back, left, right;
|
struct ButtonWidget back, left, right;
|
||||||
struct ButtonWidget btns[ONSCREEN_PAGE_BTNS];
|
struct ButtonWidget btns[ONSCREEN_PAGE_BTNS];
|
||||||
const struct SimpleButtonDesc* btnDescs;
|
const struct SimpleButtonDesc* btnDescs;
|
||||||
@ -4023,17 +4030,20 @@ static struct Widget* touchOnscreen_widgets[3 + ONSCREEN_PAGE_BTNS] = {
|
|||||||
|
|
||||||
static void TouchOnscreen_UpdateColors(struct TouchOnscreenScreen* s) {
|
static void TouchOnscreen_UpdateColors(struct TouchOnscreenScreen* s) {
|
||||||
PackedCol grey = PackedCol_Make(0x7F, 0x7F, 0x7F, 0xFF);
|
PackedCol grey = PackedCol_Make(0x7F, 0x7F, 0x7F, 0xFF);
|
||||||
int i, j;
|
int i, bit;
|
||||||
|
|
||||||
for (i = 0, j = s->offset; i < ONSCREEN_PAGE_BTNS; i++, j++)
|
for (i = 0; i < ONSCREEN_PAGE_BTNS; i++)
|
||||||
{
|
{
|
||||||
s->btns[i].color = (Gui._onscreenButtons & (1 << j)) ? PACKEDCOL_WHITE : grey;
|
bit = s->btns[i].meta.val;
|
||||||
|
s->btns[i].color = (Gui._onscreenButtons & bit) ? PACKEDCOL_WHITE : grey;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TouchOnscreen_Any(void* screen, void* w) {
|
static void TouchOnscreen_Any(void* screen, void* w) {
|
||||||
struct TouchOnscreenScreen* s = (struct TouchOnscreenScreen*)screen;
|
struct TouchOnscreenScreen* s = (struct TouchOnscreenScreen*)screen;
|
||||||
int bit = 1 << (Screen_Index(s, w) - 3 + s->offset);
|
struct ButtonWidget* btn = (struct ButtonWidget*)w;
|
||||||
|
int bit = btn->meta.val;
|
||||||
|
|
||||||
if (Gui._onscreenButtons & bit) {
|
if (Gui._onscreenButtons & bit) {
|
||||||
Gui._onscreenButtons &= ~bit;
|
Gui._onscreenButtons &= ~bit;
|
||||||
} else {
|
} else {
|
||||||
@ -4060,12 +4070,18 @@ static const struct SimpleButtonDesc touchOnscreen_page2[ONSCREEN_PAGE_BTNS] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void TouchOnscreen_SetPage(struct TouchOnscreenScreen* s, cc_bool page1) {
|
static void TouchOnscreen_SetPage(struct TouchOnscreenScreen* s, cc_bool page1) {
|
||||||
s->offset = page1 ? 0 : ONSCREEN_PAGE_BTNS;
|
int i;
|
||||||
|
int offset = page1 ? 0 : ONSCREEN_PAGE_BTNS;
|
||||||
s->btnDescs = page1 ? touchOnscreen_page1 : touchOnscreen_page2;
|
s->btnDescs = page1 ? touchOnscreen_page1 : touchOnscreen_page2;
|
||||||
Menu_InitButtons(s->btns, 200, s->btnDescs, ONSCREEN_PAGE_BTNS);
|
Menu_InitButtons(s->btns, 200, s->btnDescs, ONSCREEN_PAGE_BTNS);
|
||||||
|
|
||||||
Widget_SetDisabled(&s->left, page1);
|
Widget_SetDisabled(&s->left, page1);
|
||||||
Widget_SetDisabled(&s->right, !page1);
|
Widget_SetDisabled(&s->right, !page1);
|
||||||
|
|
||||||
|
for (i = 0; i < ONSCREEN_PAGE_BTNS; i++)
|
||||||
|
{
|
||||||
|
s->btns[i].meta.val = 1 << (i + offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TouchOnscreen_Left(void* screen, void* b) {
|
static void TouchOnscreen_Left(void* screen, void* b) {
|
||||||
|
@ -2254,8 +2254,10 @@ static void TouchScreen_HalfClick(void* s, void* w) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void TouchScreen_BindClick(void* screen, void* widget) {
|
static void TouchScreen_BindClick(void* screen, void* widget) {
|
||||||
struct TouchScreen* s = (struct TouchScreen*)screen;
|
struct TouchScreen* s = (struct TouchScreen*)screen;
|
||||||
int i = Screen_Index(screen, widget) - ONSCREEN_MAX_BTNS;
|
struct ButtonWidget* btn = (struct ButtonWidget*)widget;
|
||||||
|
|
||||||
|
int i = btn->meta.val;
|
||||||
Input_Set(KeyBinds_Normal[s->descs[i].bind], true);
|
Input_Set(KeyBinds_Normal[s->descs[i].bind], true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2316,6 +2318,7 @@ static void TouchScreen_InitButtons(struct TouchScreen* s) {
|
|||||||
s->widgets[i + ONSCREEN_MAX_BTNS] = (struct Widget*)&s->btns[i];
|
s->widgets[i + ONSCREEN_MAX_BTNS] = (struct Widget*)&s->btns[i];
|
||||||
ButtonWidget_Init(&s->btns[i], 60, s->descs[i].OnClick);
|
ButtonWidget_Init(&s->btns[i], 60, s->descs[i].OnClick);
|
||||||
s->btns[i].color = TOUCHSCREEN_BTN_COLOR;
|
s->btns[i].color = TOUCHSCREEN_BTN_COLOR;
|
||||||
|
s->btns[i].meta.val = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user