mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-28 23:13:02 +00:00
fix some djui related issues (#53)
- fixed a crash that could occur when closing the game with the mods menu open. this was a use after free. - allowed pressing the B button to go back in the save file name editor to refresh the file name. - fixed text getting cut off on paginated page count, and centered the text (as one string) - fixed disabled buttons not fading out since the addition of djui themes
This commit is contained in:
parent
bdd427c561
commit
695b1cc84e
12 changed files with 50 additions and 32 deletions
|
@ -24,11 +24,15 @@ static struct DjuiText* sDjuiLuaError = NULL;
|
||||||
static u32 sDjuiLuaErrorTimeout = 0;
|
static u32 sDjuiLuaErrorTimeout = 0;
|
||||||
bool gDjuiInMainMenu = true;
|
bool gDjuiInMainMenu = true;
|
||||||
bool gDjuiDisabled = false;
|
bool gDjuiDisabled = false;
|
||||||
|
bool gDjuiShuttingDown = false;
|
||||||
static bool sDjuiInited = false;
|
static bool sDjuiInited = false;
|
||||||
|
|
||||||
bool sDjuiRendered60fps = false;
|
bool sDjuiRendered60fps = false;
|
||||||
|
|
||||||
void djui_shutdown(void) {
|
void djui_shutdown(void) {
|
||||||
|
gDjuiShuttingDown = true;
|
||||||
|
djui_panel_shutdown();
|
||||||
|
|
||||||
sSavedDisplayListHead = NULL;
|
sSavedDisplayListHead = NULL;
|
||||||
if (sDjuiPauseOptions) djui_base_destroy(&sDjuiPauseOptions->base);
|
if (sDjuiPauseOptions) djui_base_destroy(&sDjuiPauseOptions->base);
|
||||||
if (sDjuiLuaError) djui_base_destroy(&sDjuiLuaError->base);
|
if (sDjuiLuaError) djui_base_destroy(&sDjuiLuaError->base);
|
||||||
|
@ -49,6 +53,7 @@ void djui_shutdown(void) {
|
||||||
|
|
||||||
djui_fps_display_destroy();
|
djui_fps_display_destroy();
|
||||||
|
|
||||||
|
gDjuiShuttingDown = false;
|
||||||
sDjuiInited = false;
|
sDjuiInited = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@ static void djui_button_update_style(struct DjuiBase* base) {
|
||||||
struct DjuiTheme* theme = gDjuiThemes[configDjuiTheme];
|
struct DjuiTheme* theme = gDjuiThemes[configDjuiTheme];
|
||||||
|
|
||||||
if (!button->base.enabled) {
|
if (!button->base.enabled) {
|
||||||
struct DjuiColor bc = button->style ? djui_theme_shade_color(theme->interactables.defaultBorderColor) : theme->interactables.defaultBorderColor;
|
struct DjuiColor bc = djui_theme_shade_color(theme->interactables.defaultBorderColor, button->style ? 0.3f : 0.6f);
|
||||||
struct DjuiColor rc = button->style ? djui_theme_shade_color(theme->interactables.defaultRectColor) : theme->interactables.defaultRectColor;
|
struct DjuiColor rc = djui_theme_shade_color(theme->interactables.defaultRectColor, button->style ? 0.3f : 0.6f);
|
||||||
|
|
||||||
djui_base_set_border_color(base, bc.r, bc.g, bc.b, bc.a);
|
djui_base_set_border_color(base, bc.r, bc.g, bc.b, bc.a);
|
||||||
djui_base_set_color(&button->rect->base, rc.r, rc.g, rc.b, rc.a);
|
djui_base_set_color(&button->rect->base, rc.r, rc.g, rc.b, rc.a);
|
||||||
|
@ -27,8 +27,8 @@ static void djui_button_update_style(struct DjuiBase* base) {
|
||||||
djui_base_set_color(&button->rect->base, rc.r, rc.g, rc.b, rc.a);
|
djui_base_set_color(&button->rect->base, rc.r, rc.g, rc.b, rc.a);
|
||||||
djui_base_set_location(&button->text->base, -1.0f, -1.0f);
|
djui_base_set_location(&button->text->base, -1.0f, -1.0f);
|
||||||
} else {
|
} else {
|
||||||
struct DjuiColor bc = button->style ? djui_theme_shade_color(theme->interactables.defaultBorderColor) : theme->interactables.defaultBorderColor;
|
struct DjuiColor bc = button->style ? djui_theme_shade_color(theme->interactables.defaultBorderColor, 0.6f) : theme->interactables.defaultBorderColor;
|
||||||
struct DjuiColor rc = button->style ? djui_theme_shade_color(theme->interactables.defaultRectColor) : theme->interactables.defaultRectColor;
|
struct DjuiColor rc = button->style ? djui_theme_shade_color(theme->interactables.defaultRectColor, 0.6f) : theme->interactables.defaultRectColor;
|
||||||
|
|
||||||
djui_base_set_border_color(base, bc.r, bc.g, bc.b, bc.a);
|
djui_base_set_border_color(base, bc.r, bc.g, bc.b, bc.a);
|
||||||
djui_base_set_color(&button->rect->base, rc.r, rc.g, rc.b, rc.a);
|
djui_base_set_color(&button->rect->base, rc.r, rc.g, rc.b, rc.a);
|
||||||
|
|
|
@ -10,8 +10,8 @@ static void djui_lobby_entry_update_style(struct DjuiBase* base) {
|
||||||
struct DjuiTheme* theme = gDjuiThemes[configDjuiTheme];
|
struct DjuiTheme* theme = gDjuiThemes[configDjuiTheme];
|
||||||
|
|
||||||
if (!entry->base.enabled) {
|
if (!entry->base.enabled) {
|
||||||
struct DjuiColor bc = djui_theme_shade_color(theme->interactables.defaultBorderColor);
|
struct DjuiColor bc = djui_theme_shade_color(theme->interactables.defaultBorderColor, 0.3f);
|
||||||
struct DjuiColor rc = djui_theme_shade_color(theme->interactables.defaultRectColor);
|
struct DjuiColor rc = djui_theme_shade_color(theme->interactables.defaultRectColor, 0.3f);
|
||||||
|
|
||||||
djui_base_set_border_color(base, bc.r, bc.g, bc.b, bc.a);
|
djui_base_set_border_color(base, bc.r, bc.g, bc.b, bc.a);
|
||||||
djui_base_set_color(&entry->base, rc.r, rc.g, rc.b, rc.a);
|
djui_base_set_color(&entry->base, rc.r, rc.g, rc.b, rc.a);
|
||||||
|
|
|
@ -56,7 +56,6 @@ static void djui_paginated_next(struct DjuiBase* base) {
|
||||||
if (paginated->startIndex >= count) { paginated->startIndex -= paginated->showCount; }
|
if (paginated->startIndex >= count) { paginated->startIndex -= paginated->showCount; }
|
||||||
|
|
||||||
djui_paginated_update_page_buttons(paginated);
|
djui_paginated_update_page_buttons(paginated);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void djui_paginated_calculate_height(struct DjuiPaginated* paginated) {
|
void djui_paginated_calculate_height(struct DjuiPaginated* paginated) {
|
||||||
|
@ -169,8 +168,10 @@ struct DjuiPaginated* djui_paginated_create(struct DjuiBase* parent, u32 showCou
|
||||||
sPageNumText = djui_text_create(&paginated->base, "");
|
sPageNumText = djui_text_create(&paginated->base, "");
|
||||||
djui_base_set_color(&sPageNumText->base, 220, 220, 220, 255);
|
djui_base_set_color(&sPageNumText->base, 220, 220, 220, 255);
|
||||||
djui_base_set_alignment(&sPageNumText->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM);
|
djui_base_set_alignment(&sPageNumText->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM);
|
||||||
|
djui_text_set_alignment(sPageNumText, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP);
|
||||||
djui_text_set_drop_shadow(sPageNumText, 64, 64, 64, 100);
|
djui_text_set_drop_shadow(sPageNumText, 64, 64, 64, 100);
|
||||||
sPageNumText->base.y.value -= 30;
|
sPageNumText->base.y.value -= 30;
|
||||||
|
sPageNumText->base.width.value += 30;
|
||||||
|
|
||||||
sNextButton = djui_button_create(&paginated->base, ">", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_next);
|
sNextButton = djui_button_create(&paginated->base, ">", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_next);
|
||||||
djui_base_set_alignment(&sNextButton->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_BOTTOM);
|
djui_base_set_alignment(&sNextButton->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_BOTTOM);
|
||||||
|
|
|
@ -56,6 +56,7 @@ struct DjuiPanel* djui_panel_add(struct DjuiBase* caller, struct DjuiThreePanel*
|
||||||
panel->parent = sPanelList;
|
panel->parent = sPanelList;
|
||||||
panel->base = panelBase;
|
panel->base = panelBase;
|
||||||
panel->defaultElementBase = defaultElementBase;
|
panel->defaultElementBase = defaultElementBase;
|
||||||
|
panel->on_back = threePanel->on_back;
|
||||||
panel->on_panel_destroy = NULL;
|
panel->on_panel_destroy = NULL;
|
||||||
sPanelList = panel;
|
sPanelList = panel;
|
||||||
|
|
||||||
|
@ -99,6 +100,13 @@ void djui_panel_back(void) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// call back hook, return true to cancel back
|
||||||
|
if (sPanelList->on_back) {
|
||||||
|
if (sPanelList->on_back(sPanelList->base)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// deselect cursor input
|
// deselect cursor input
|
||||||
djui_cursor_input_controlled_center(NULL);
|
djui_cursor_input_controlled_center(NULL);
|
||||||
|
|
||||||
|
@ -177,6 +185,7 @@ void djui_panel_update(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern bool gDjuiShuttingDown;
|
||||||
void djui_panel_shutdown(void) {
|
void djui_panel_shutdown(void) {
|
||||||
static bool sShuttingDown = false;
|
static bool sShuttingDown = false;
|
||||||
if (sShuttingDown) { return; }
|
if (sShuttingDown) { return; }
|
||||||
|
@ -210,10 +219,12 @@ void djui_panel_shutdown(void) {
|
||||||
gDjuiPanelMainCreated = false;
|
gDjuiPanelMainCreated = false;
|
||||||
gDjuiPanelPauseCreated = false;
|
gDjuiPanelPauseCreated = false;
|
||||||
djui_cursor_set_visible(false);
|
djui_cursor_set_visible(false);
|
||||||
|
if (!gDjuiShuttingDown) {
|
||||||
configfile_save(configfile_name());
|
configfile_save(configfile_name());
|
||||||
if (gDjuiInMainMenu) {
|
if (gDjuiInMainMenu) {
|
||||||
gDjuiInMainMenu = false;
|
gDjuiInMainMenu = false;
|
||||||
newcam_init_settings();
|
newcam_init_settings();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
sShuttingDown = false;
|
sShuttingDown = false;
|
||||||
}
|
}
|
|
@ -10,6 +10,7 @@ struct DjuiPanel {
|
||||||
struct DjuiPanel* parent;
|
struct DjuiPanel* parent;
|
||||||
struct DjuiBase* defaultElementBase;
|
struct DjuiBase* defaultElementBase;
|
||||||
bool temporary;
|
bool temporary;
|
||||||
|
bool (*on_back)(struct DjuiBase*);
|
||||||
void (*on_panel_destroy)(struct DjuiBase*);
|
void (*on_panel_destroy)(struct DjuiBase*);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
static struct DjuiFlowLayout* sModLayout = NULL;
|
static struct DjuiFlowLayout* sModLayout = NULL;
|
||||||
static struct DjuiThreePanel* sDescriptionPanel = NULL;
|
static struct DjuiThreePanel* sDescriptionPanel = NULL;
|
||||||
static struct DjuiText* sTooltip = NULL;
|
static struct DjuiText* sTooltip = NULL;
|
||||||
static s64 sTag = 0;
|
|
||||||
static bool sWarned = false;
|
static bool sWarned = false;
|
||||||
|
|
||||||
void djui_panel_host_mods_create(struct DjuiBase* caller);
|
void djui_panel_host_mods_create(struct DjuiBase* caller);
|
||||||
|
@ -115,13 +114,12 @@ static void djui_panel_host_mods_destroy(struct DjuiBase* base) {
|
||||||
djui_base_destroy(&sDescriptionPanel->base);
|
djui_base_destroy(&sDescriptionPanel->base);
|
||||||
sDescriptionPanel = NULL;
|
sDescriptionPanel = NULL;
|
||||||
}
|
}
|
||||||
|
sModLayout = NULL;
|
||||||
|
sTooltip = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void djui_panel_host_mods_create(struct DjuiBase* caller) {
|
void djui_panel_host_mods_create(struct DjuiBase* caller) {
|
||||||
if (caller != NULL) {
|
bool isRomHacks = caller != NULL ? caller->tag != 0 : false;
|
||||||
sTag = caller->tag;
|
|
||||||
}
|
|
||||||
bool isRomHacks = sTag;
|
|
||||||
|
|
||||||
mods_update_selectable();
|
mods_update_selectable();
|
||||||
djui_panel_host_mods_description_create();
|
djui_panel_host_mods_description_create();
|
||||||
|
|
|
@ -22,9 +22,9 @@ static void djui_panel_host_save_save_name_change(UNUSED struct DjuiBase* caller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void djui_panel_edit_back(struct DjuiBase* caller) {
|
static bool djui_panel_edit_back(UNUSED struct DjuiBase* caller) {
|
||||||
djui_panel_host_save_update_button(sSaveButtons[sButtonTag], sButtonTag);
|
djui_panel_host_save_update_button(sSaveButtons[sButtonTag], sButtonTag);
|
||||||
djui_panel_menu_back(caller);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void djui_panel_edit_create(struct DjuiBase* caller) {
|
static void djui_panel_edit_create(struct DjuiBase* caller) {
|
||||||
|
@ -52,9 +52,10 @@ static void djui_panel_edit_create(struct DjuiBase* caller) {
|
||||||
djui_interactable_hook_value_change(&sSaveNameInputBox->base, djui_panel_host_save_save_name_change);
|
djui_interactable_hook_value_change(&sSaveNameInputBox->base, djui_panel_host_save_save_name_change);
|
||||||
}
|
}
|
||||||
|
|
||||||
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_edit_back);
|
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
panel->on_back = djui_panel_edit_back;
|
||||||
djui_panel_add(caller, panel, NULL);
|
djui_panel_add(caller, panel, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@ static void djui_selectionbox_update_style(struct DjuiBase* base) {
|
||||||
|
|
||||||
if (!selectionbox->base.enabled) {
|
if (!selectionbox->base.enabled) {
|
||||||
struct DjuiSelectionbox* selectionbox = (struct DjuiSelectionbox*)base;
|
struct DjuiSelectionbox* selectionbox = (struct DjuiSelectionbox*)base;
|
||||||
struct DjuiColor bc = djui_theme_shade_color(theme->interactables.defaultBorderColor);
|
struct DjuiColor bc = djui_theme_shade_color(theme->interactables.defaultBorderColor, 0.6f);
|
||||||
struct DjuiColor rc = djui_theme_shade_color(theme->interactables.defaultRectColor);
|
struct DjuiColor rc = djui_theme_shade_color(theme->interactables.defaultRectColor, 0.6f);
|
||||||
struct DjuiColor tc = theme->interactables.textColor;
|
struct DjuiColor tc = theme->interactables.textColor;
|
||||||
|
|
||||||
djui_base_set_border_color(&selectionbox->rect->base, bc.r, bc.g, bc.b, bc.a);
|
djui_base_set_border_color(&selectionbox->rect->base, bc.r, bc.g, bc.b, bc.a);
|
||||||
|
|
|
@ -171,10 +171,10 @@ struct DjuiTheme* gDjuiThemes[] = {
|
||||||
&sDjuiThemeMario
|
&sDjuiThemeMario
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DjuiColor djui_theme_shade_color(struct DjuiColor color) {
|
struct DjuiColor djui_theme_shade_color(struct DjuiColor color, f32 mult) {
|
||||||
color.r *= 0.6f;
|
color.r *= mult;
|
||||||
color.g *= 0.6f;
|
color.g *= mult;
|
||||||
color.b *= 0.6f;
|
color.b *= mult;
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,5 +43,5 @@ struct DjuiTheme {
|
||||||
|
|
||||||
extern struct DjuiTheme* gDjuiThemes[];
|
extern struct DjuiTheme* gDjuiThemes[];
|
||||||
|
|
||||||
struct DjuiColor djui_theme_shade_color(struct DjuiColor color);
|
struct DjuiColor djui_theme_shade_color(struct DjuiColor color, f32 mult);
|
||||||
void djui_themes_init(void);
|
void djui_themes_init(void);
|
||||||
|
|
|
@ -6,6 +6,7 @@ struct DjuiThreePanel {
|
||||||
struct DjuiScreenValue minHeaderSize;
|
struct DjuiScreenValue minHeaderSize;
|
||||||
struct DjuiScreenValue bodySize;
|
struct DjuiScreenValue bodySize;
|
||||||
struct DjuiScreenValue minFooterSize;
|
struct DjuiScreenValue minFooterSize;
|
||||||
|
bool (*on_back)(struct DjuiBase*);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DjuiBase* djui_three_panel_get_header(struct DjuiThreePanel* threePanel);
|
struct DjuiBase* djui_three_panel_get_header(struct DjuiThreePanel* threePanel);
|
||||||
|
|
Loading…
Reference in a new issue