diff --git a/src/game/level_update.c b/src/game/level_update.c index 7137436c2..dcd4be5a9 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -65,7 +65,7 @@ s16 gChangeActNum = -1; static bool sFirstCastleGroundsMenu = true; bool isDemoActive = false; -bool inPlayerMenu = false; +bool gInPlayerMenu = false; static u16 gDemoCountdown = 0; int demoNumber = -1; @@ -1194,13 +1194,13 @@ s32 play_mode_normal(void) { } } } else { - if (gDjuiInMainMenu && gCurrDemoInput == NULL && configMenuDemos && !inPlayerMenu) { + if (gDjuiInMainMenu && gCurrDemoInput == NULL && configMenuDemos && !gInPlayerMenu) { if ((++gDemoCountdown) == PRESS_START_DEMO_TIMER && (find_demo_number() && (demoNumber <= 6 || demoNumber > -1))) { start_demo(); } } - if (((gCurrDemoInput != NULL) && (gPlayer1Controller->buttonPressed & END_DEMO || !isDemoActive || !gDjuiInMainMenu || gNetworkType != NT_NONE || inPlayerMenu)) || (gCurrDemoInput == NULL && isDemoActive)) { + if (((gCurrDemoInput != NULL) && (gPlayer1Controller->buttonPressed & END_DEMO || !isDemoActive || !gDjuiInMainMenu || gNetworkType != NT_NONE || gInPlayerMenu)) || (gCurrDemoInput == NULL && isDemoActive)) { gPlayer1Controller->buttonPressed &= ~END_DEMO; stop_demo(NULL); } diff --git a/src/game/level_update.h b/src/game/level_update.h index aedab1128..5df96e7d3 100644 --- a/src/game/level_update.h +++ b/src/game/level_update.h @@ -128,7 +128,7 @@ extern s8 gNeverEnteredCastle; extern u32 gControlTimerStartNat; extern u32 gControlTimerStopNat; -extern bool inPlayerMenu; +extern bool gInPlayerMenu; enum HUDDisplayFlag { HUD_DISPLAY_FLAG_LIVES = 0x0001, diff --git a/src/pc/djui/djui_bind.c b/src/pc/djui/djui_bind.c index 2171de160..1b36752d6 100644 --- a/src/pc/djui/djui_bind.c +++ b/src/pc/djui/djui_bind.c @@ -78,14 +78,13 @@ struct DjuiBind* djui_bind_create(struct DjuiBase* parent, const char* message, for (int i = 0; i < MAX_BINDS; i++) { #if defined(CAPI_SDL1) || defined(CAPI_SDL2) unsigned int key = configKey[i]; - struct DjuiButton* button = djui_button_create(&rect->base, translate_bind_to_name(key)); + struct DjuiButton* button = djui_button_create(&rect->base, translate_bind_to_name(key), DJUI_BUTTON_STYLE_NORMAL, djui_bind_button_on_click); #else - struct DjuiButton* button = djui_button_create(&rect->base, "???"); + struct DjuiButton* button = djui_button_create(&rect->base, "???", DJUI_BUTTON_STYLE_NORMAL, djui_bind_button_on_click); #endif djui_base_set_size_type(&button->base, DJUI_SVT_RELATIVE, DJUI_SVT_RELATIVE); djui_base_set_size(&button->base, 0.33f, 1.0f); button->base.tag = i; - djui_interactable_hook_click(&button->base, djui_bind_button_on_click); djui_interactable_hook_bind(&button->base, djui_bind_button_on_bind); enum DjuiHAlign hAlign = DJUI_HALIGN_LEFT; diff --git a/src/pc/djui/djui_button.c b/src/pc/djui/djui_button.c index d91523dec..6a57711bf 100644 --- a/src/pc/djui/djui_button.c +++ b/src/pc/djui/djui_button.c @@ -25,7 +25,7 @@ static void djui_button_update_style(struct DjuiBase* base) { } } -void djui_button_set_style(struct DjuiButton* button, u8 style) { +void djui_button_set_style(struct DjuiButton* button, enum DjuiButtonStyle style) { button->style = style; djui_button_update_style(&button->base); } @@ -35,7 +35,7 @@ static void djui_button_destroy(struct DjuiBase* base) { free(button); } -struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message) { +struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)) { struct DjuiButton* button = calloc(1, sizeof(struct DjuiButton)); struct DjuiBase* base = &button->base; @@ -58,7 +58,25 @@ struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* messa djui_text_set_drop_shadow(text, 0, 0, 0, 64); button->text = text; + djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(base, 1.0f, 64); + djui_interactable_hook_click(base, on_click); + button->style = style; djui_button_update_style(base); return button; } + +struct DjuiButton* djui_button_left_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)) { + struct DjuiButton* button = djui_button_create(parent, message, style, on_click); + djui_base_set_size(&button->base, 0.485f, 64); + djui_base_set_alignment(&button->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP); + return button; +} + +struct DjuiButton* djui_button_right_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)) { + struct DjuiButton* button = djui_button_create(parent, message, style, on_click); + djui_base_set_size(&button->base, 0.485f, 64); + djui_base_set_alignment(&button->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); + return button; +} \ No newline at end of file diff --git a/src/pc/djui/djui_button.h b/src/pc/djui/djui_button.h index af3aaffab..dfd2d293b 100644 --- a/src/pc/djui/djui_button.h +++ b/src/pc/djui/djui_button.h @@ -8,6 +8,13 @@ struct DjuiButton { u8 style; }; -void djui_button_set_style(struct DjuiButton* button, u8 style); +enum DjuiButtonStyle { + DJUI_BUTTON_STYLE_NORMAL, + DJUI_BUTTON_STYLE_BACK, +}; -struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message); +void djui_button_set_style(struct DjuiButton* button, enum DjuiButtonStyle style); + +struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)); +struct DjuiButton* djui_button_left_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)); +struct DjuiButton* djui_button_right_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)); diff --git a/src/pc/djui/djui_checkbox.c b/src/pc/djui/djui_checkbox.c index 1a3f7c56f..9c58f9531 100644 --- a/src/pc/djui/djui_checkbox.c +++ b/src/pc/djui/djui_checkbox.c @@ -47,7 +47,7 @@ static void djui_checkbox_destroy(struct DjuiBase* base) { free(checkbox); } -struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value) { +struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value, void (*on_value_change)(struct DjuiBase*)) { struct DjuiCheckbox* checkbox = calloc(1, sizeof(struct DjuiCheckbox)); struct DjuiBase* base = &checkbox->base; @@ -83,6 +83,9 @@ struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* m base->get_cursor_hover_location = djui_checkbox_get_cursor_hover_location; djui_checkbox_update_style(base); + djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(base, 1.0f, 32); + djui_interactable_hook_value_change(base, on_value_change); return checkbox; } diff --git a/src/pc/djui/djui_checkbox.h b/src/pc/djui/djui_checkbox.h index 67a1c45c2..66281e1a3 100644 --- a/src/pc/djui/djui_checkbox.h +++ b/src/pc/djui/djui_checkbox.h @@ -9,4 +9,4 @@ struct DjuiCheckbox { bool* value; }; -struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value); +struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value, void (*on_value_change)(struct DjuiBase*)); diff --git a/src/pc/djui/djui_interactable.c b/src/pc/djui/djui_interactable.c index ade992fac..e3cc66b21 100644 --- a/src/pc/djui/djui_interactable.c +++ b/src/pc/djui/djui_interactable.c @@ -495,7 +495,7 @@ void djui_interactable_create(struct DjuiBase* base, void (*update_style)(struct } struct DjuiInteractable* interactable = calloc(1, sizeof(struct DjuiInteractable)); - memset(interactable, 0, sizeof(struct DjuiInteractable)); + interactable->enabled = true; base->interactable = interactable; base->interactable->update_style = update_style; diff --git a/src/pc/djui/djui_paginated.c b/src/pc/djui/djui_paginated.c index d98ce51d4..101395d30 100644 --- a/src/pc/djui/djui_paginated.c +++ b/src/pc/djui/djui_paginated.c @@ -113,16 +113,15 @@ struct DjuiPaginated* djui_paginated_create(struct DjuiBase* parent, u32 showCou } { - struct DjuiButton* button = djui_button_create(&paginated->base, "<"); + struct DjuiButton* button = djui_button_create(&paginated->base, "<", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_prev); djui_base_set_alignment(&button->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_BOTTOM); djui_base_set_size_type(&button->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); djui_base_set_size(&button->base, 128, 32); - djui_interactable_hook_click(&button->base, djui_paginated_prev); paginated->prevButton = button; } { - struct DjuiButton* button = djui_button_create(&paginated->base, ">"); + struct DjuiButton* button = djui_button_create(&paginated->base, ">", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_next); djui_base_set_alignment(&button->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_BOTTOM); djui_base_set_size_type(&button->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE); djui_base_set_size(&button->base, 128, 32); diff --git a/src/pc/djui/djui_panel.c b/src/pc/djui/djui_panel.c index 962cfbd5d..832d9d1db 100644 --- a/src/pc/djui/djui_panel.c +++ b/src/pc/djui/djui_panel.c @@ -4,12 +4,6 @@ #include "audio/external.h" #include "src/game/bettercamera.h" -struct DjuiPanel { - struct DjuiBase* base; - struct DjuiPanel* parent; - struct DjuiBase* defaultElementBase; -}; - static struct DjuiPanel* sPanelList = NULL; static struct DjuiPanel* sPanelRemoving = NULL; static f32 sMoveAmount = 0; @@ -18,8 +12,20 @@ bool djui_panel_is_active(void) { return (sPanelList != NULL); } -void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct DjuiBase* defaultElementBase) { - if (sPanelRemoving != NULL) { return; } +struct DjuiBase* djui_panel_find_first_interactable(struct DjuiBaseChild* child) { + while (child) { + if (child->base->interactable && child->base->interactable->enabled) { + return child->base; + } + struct DjuiBase* check = djui_panel_find_first_interactable(child->base->child); + if (check) { return check; } + child = child->next; + } +} + +struct DjuiPanel* djui_panel_add(struct DjuiBase* caller, struct DjuiThreePanel* threePanel, struct DjuiBase* defaultElementBase) { + if (sPanelRemoving != NULL) { return NULL; } + struct DjuiBase* panelBase = &threePanel->base; bool firstPanel = (sPanelList == NULL); gDjuiPanelJoinMessageVisible = false; @@ -33,13 +39,23 @@ void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct djui_base_set_visible(sPanelList->parent->base, false); } + // calculate 3panel body height + djui_three_panel_recalculate_body_size(threePanel); + + // allocate panel struct DjuiPanel* panel = calloc(1, sizeof(struct DjuiPanel)); panel->parent = sPanelList; panel->base = panelBase; panel->defaultElementBase = defaultElementBase; + panel->on_panel_destroy = NULL; sPanelList = panel; + // find better defaultElementBase + if (panel->defaultElementBase == NULL) { + panel->defaultElementBase = djui_panel_find_first_interactable(panel->base->child); + } + // deselect cursor input djui_cursor_input_controlled_center(NULL); @@ -63,6 +79,8 @@ void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct } else { play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource); } + + return panel; } void djui_panel_back(void) { @@ -126,6 +144,9 @@ void djui_panel_update(void) { djui_cursor_input_controlled_center(sPanelList->defaultElementBase); if (removingBase != NULL) { + if (sPanelRemoving->on_panel_destroy) { + sPanelRemoving->on_panel_destroy(NULL); + } djui_base_destroy(removingBase); free(sPanelRemoving); sPanelRemoving = NULL; @@ -147,12 +168,18 @@ void djui_panel_shutdown(void) { struct DjuiPanel* panel = sPanelList; while (panel != NULL) { struct DjuiPanel* next = panel->parent; + if (panel->on_panel_destroy) { + panel->on_panel_destroy(NULL); + } djui_base_destroy(panel->base); free(panel); panel = next; } if (sPanelRemoving != NULL) { + if (sPanelRemoving->on_panel_destroy) { + sPanelRemoving->on_panel_destroy(NULL); + } djui_base_destroy(sPanelRemoving->base); free(sPanelRemoving); } diff --git a/src/pc/djui/djui_panel.h b/src/pc/djui/djui_panel.h index 4e3672cd3..a81455702 100644 --- a/src/pc/djui/djui_panel.h +++ b/src/pc/djui/djui_panel.h @@ -4,8 +4,15 @@ #define DJUI_DEFAULT_PANEL_WIDTH (410.0f + (16 * 2.0f)) #define DJUI_PANEL_HEADER_OFFSET (-8) +struct DjuiPanel { + struct DjuiBase* base; + struct DjuiPanel* parent; + struct DjuiBase* defaultElementBase; + void (*on_panel_destroy)(struct DjuiBase*); +}; + bool djui_panel_is_active(void); -void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct DjuiBase* defaultElementBase); +struct DjuiPanel* djui_panel_add(struct DjuiBase* caller, struct DjuiThreePanel* threePanel, struct DjuiBase* defaultElementBase); void djui_panel_back(void); void djui_panel_update(void); void djui_panel_shutdown(void); diff --git a/src/pc/djui/djui_panel_camera.c b/src/pc/djui/djui_panel_camera.c index 95b13d210..925adfa42 100644 --- a/src/pc/djui/djui_panel_camera.c +++ b/src/pc/djui/djui_panel_camera.c @@ -8,72 +8,24 @@ void djui_panel_camera_value_changed(UNUSED struct DjuiBase* caller) { } void djui_panel_camera_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 10 + 64 * 1 + 16 * 10; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\A\\#00b3ff\\M\\#ffef00\\E\\#ff0800\\R\\#1be700\\A"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\A\\#00b3ff\\M\\#ffef00\\E\\#ff0800\\R\\#1be700\\A"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); - { - struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Free Camera", &configEnableCamera); - djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox1->base, 1.0f, 32); - djui_interactable_hook_value_change(&checkbox1->base, djui_panel_camera_value_changed); - defaultBase = &checkbox1->base; - - struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Analog Camera", &configCameraAnalog); - djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&checkbox2->base, djui_panel_camera_value_changed); - djui_base_set_size(&checkbox2->base, 1.0f, 32); - + djui_checkbox_create(&body->base, "Free Camera", &configEnableCamera, djui_panel_camera_value_changed); + djui_checkbox_create(&body->base, "Analog Camera", &configCameraAnalog, djui_panel_camera_value_changed); #ifdef BETTERCAMERA - struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Mouse Look", &configCameraMouse); - djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&checkbox3->base, djui_panel_camera_value_changed); - djui_base_set_size(&checkbox3->base, 1.0f, 32); + djui_checkbox_create(&body->base, "Mouse Look", &configCameraMouse, djui_panel_camera_value_changed); #endif + djui_checkbox_create(&body->base, "Invert X", &configCameraInvertX, djui_panel_camera_value_changed); + djui_checkbox_create(&body->base, "Invert Y", &configCameraInvertY, djui_panel_camera_value_changed); + djui_slider_create(&body->base, "X Sensitivity", &configCameraXSens, 1, 100, djui_panel_camera_value_changed); + djui_slider_create(&body->base, "Y Sensitivity", &configCameraYSens, 1, 100, djui_panel_camera_value_changed); + djui_slider_create(&body->base, "Aggression", &configCameraAggr, 0, 100, djui_panel_camera_value_changed); + djui_slider_create(&body->base, "Pan Level", &configCameraPan, 0, 100, djui_panel_camera_value_changed); + djui_slider_create(&body->base, "Deceleration", &configCameraDegrade, 0, 100, djui_panel_camera_value_changed); - struct DjuiCheckbox* checkbox4 = djui_checkbox_create(&body->base, "Invert X", &configCameraInvertX); - djui_base_set_size_type(&checkbox4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&checkbox4->base, djui_panel_camera_value_changed); - djui_base_set_size(&checkbox4->base, 1.0f, 32); - - struct DjuiCheckbox* checkbox5 = djui_checkbox_create(&body->base, "Invert Y", &configCameraInvertY); - djui_base_set_size_type(&checkbox5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&checkbox5->base, djui_panel_camera_value_changed); - djui_base_set_size(&checkbox5->base, 1.0f, 32); - - struct DjuiSlider* slider1 = djui_slider_create(&body->base, "X Sensitivity", &configCameraXSens, 1, 100); - djui_base_set_size_type(&slider1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&slider1->base, djui_panel_camera_value_changed); - djui_base_set_size(&slider1->base, 1.0f, 32); - - struct DjuiSlider* slider2 = djui_slider_create(&body->base, "Y Sensitivity", &configCameraYSens, 1, 100); - djui_base_set_size_type(&slider2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&slider2->base, djui_panel_camera_value_changed); - djui_base_set_size(&slider2->base, 1.0f, 32); - - struct DjuiSlider* slider3 = djui_slider_create(&body->base, "Aggression", &configCameraAggr, 0, 100); - djui_base_set_size_type(&slider3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&slider3->base, djui_panel_camera_value_changed); - djui_base_set_size(&slider3->base, 1.0f, 32); - - struct DjuiSlider* slider4 = djui_slider_create(&body->base, "Pan Level", &configCameraPan, 0, 100); - djui_base_set_size_type(&slider4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&slider4->base, djui_panel_camera_value_changed); - djui_base_set_size(&slider4->base, 1.0f, 32); - - struct DjuiSlider* slider5 = djui_slider_create(&body->base, "Deceleration", &configCameraDegrade, 0, 100); - djui_base_set_size_type(&slider5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&slider5->base, djui_panel_camera_value_changed); - djui_base_set_size(&slider5->base, 1.0f, 32); - - struct DjuiButton* button6 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_button_set_style(button6, 1); - djui_interactable_hook_click(&button6->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_cheats.c b/src/pc/djui/djui_panel_cheats.c index 01136dbe9..1dd7c366a 100644 --- a/src/pc/djui/djui_panel_cheats.c +++ b/src/pc/djui/djui_panel_cheats.c @@ -2,61 +2,20 @@ #include "pc/cheats.h" void djui_panel_cheats_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 8 + 64 * 1 + 16 * 9; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\H\\#00b3ff\\E\\#ffef00\\A\\#ff0800\\T\\#1be700\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\H\\#00b3ff\\E\\#ffef00\\A\\#ff0800\\T\\#1be700\\S"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); - { - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Moon Jump", &gCheats.moonJump); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - defaultBase = &checkbox->base; - } - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "God Mode", &gCheats.godMode); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - } - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Infinite Lives", &gCheats.infiniteLives); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - } - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Super Speed", &gCheats.superSpeed); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - } - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Responsive Controls", &gCheats.responsiveControls); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - } - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Rapid Fire (A)", &gCheats.rapidFireA); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - } - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "BLJ Anywhere", &gCheats.bljAnywhere); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - } - { - struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Always Triple Jump", &gCheats.alwaysTripleJump); - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); - } + djui_checkbox_create(&body->base, "Moon Jump", &gCheats.moonJump, NULL); + djui_checkbox_create(&body->base, "God Mode", &gCheats.godMode, NULL); + djui_checkbox_create(&body->base, "Infinite Lives", &gCheats.infiniteLives, NULL); + djui_checkbox_create(&body->base, "Super Speed", &gCheats.superSpeed, NULL); + djui_checkbox_create(&body->base, "Responsive Controls", &gCheats.responsiveControls, NULL); + djui_checkbox_create(&body->base, "Rapid Fire (A)", &gCheats.rapidFireA, NULL); + djui_checkbox_create(&body->base, "BLJ Anywhere", &gCheats.bljAnywhere, NULL); + djui_checkbox_create(&body->base, "Always Triple Jump", &gCheats.alwaysTripleJump, NULL); - struct DjuiButton* button1 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_confirm.c b/src/pc/djui/djui_panel_confirm.c index 26107856b..7d20c2be6 100644 --- a/src/pc/djui/djui_panel_confirm.c +++ b/src/pc/djui/djui_panel_confirm.c @@ -2,10 +2,7 @@ #include "src/pc/utils/misc.h" void djui_panel_confirm_create(struct DjuiBase* caller, char* title, char* message, void (*on_yes_click)(struct DjuiBase*)) { - f32 bodyHeight = 64 * 2 + 16 * 1; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, title); + struct DjuiThreePanel* panel = djui_panel_menu_create(title); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { struct DjuiText* text = djui_text_create(&body->base, message); @@ -14,25 +11,12 @@ void djui_panel_confirm_create(struct DjuiBase* caller, char* title, char* messa djui_base_set_color(&text->base, 200, 200, 200, 255); djui_text_set_alignment(text, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER); - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 64); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 64); { - struct DjuiButton* button1 = djui_button_create(&rect1->base, "No"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 0.485f, 64); - djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); - defaultBase = &button1->base; - - struct DjuiButton* button2 = djui_button_create(&rect1->base, "Yes"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 0.485f, 64); - djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, on_yes_click); + djui_button_left_create(&rect1->base, "No", DJUI_BUTTON_STYLE_NORMAL, djui_panel_menu_back); + djui_button_right_create(&rect1->base, "Yes", DJUI_BUTTON_STYLE_NORMAL, on_yes_click); } } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_controls.c b/src/pc/djui/djui_panel_controls.c index f0e23d8e6..fc9fc5613 100644 --- a/src/pc/djui/djui_panel_controls.c +++ b/src/pc/djui/djui_panel_controls.c @@ -9,26 +9,12 @@ void djui_panel_controls_value_change(UNUSED struct DjuiBase* caller) { } void djui_panel_controls_create(struct DjuiBase* caller) { - f32 bodyHeight = 16 * 6 + 32 * 2 + 64 * 4; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiButton* button1 = djui_button_create(&body->base, "N64 Binds"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_interactable_hook_click(&button1->base, djui_panel_controls_n64_create); - defaultBase = &button1->base; - - struct DjuiButton* button2 = djui_button_create(&body->base, "Extra Binds"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 1.0f, 64); - djui_interactable_hook_click(&button2->base, djui_panel_controls_extra_create); - - struct DjuiCheckbox* checkboxGB = djui_checkbox_create(&body->base, "Background Gamepad (must restart)", &configBackgroundGamepad); - djui_base_set_size_type(&checkboxGB->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkboxGB->base, 1.0f, 32); + djui_button_create(&body->base, "N64 Binds", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_n64_create); + djui_button_create(&body->base, "Extra Binds", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_extra_create); + djui_checkbox_create(&body->base, "Background Gamepad (must restart)", &configBackgroundGamepad, NULL); #ifdef HAVE_SDL2 int numJoys = SDL_NumJoysticks(); @@ -45,27 +31,14 @@ void djui_panel_controls_create(struct DjuiBase* caller) { sprintf(&gamepadChoicesLong[index], "%d", i); gamepadChoices[i] = &gamepadChoicesLong[index]; } - struct DjuiSelectionbox* selectionboxGamepad = djui_selectionbox_create(&body->base, "Gamepad", gamepadChoices, numJoys, &configGamepadNumber); - djui_base_set_size_type(&selectionboxGamepad->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionboxGamepad->base, 1.0f, 32); + djui_selectionbox_create(&body->base, "Gamepad", gamepadChoices, numJoys, &configGamepadNumber, NULL); #endif - struct DjuiSlider* slider1 = djui_slider_create(&body->base, "Deadzone", &configStickDeadzone, 0, 100); - djui_base_set_size_type(&slider1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&slider1->base, 1.0f, 32); - djui_interactable_hook_value_change(&slider1->base, djui_panel_controls_value_change); + djui_slider_create(&body->base, "Deadzone", &configStickDeadzone, 0, 100, djui_panel_controls_value_change); + djui_slider_create(&body->base, "Rumble Strength", &configRumbleStrength, 0, 100, djui_panel_controls_value_change); - struct DjuiSlider* slider2 = djui_slider_create(&body->base, "Rumble Strength", &configRumbleStrength, 0, 100); - djui_base_set_size_type(&slider2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&slider2->base, 1.0f, 32); - djui_interactable_hook_value_change(&slider2->base, djui_panel_controls_value_change); - - struct DjuiButton* button6 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_button_set_style(button6, 1); - djui_interactable_hook_click(&button6->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_controls_extra.c b/src/pc/djui/djui_panel_controls_extra.c index a24613f7f..71b3bbae6 100644 --- a/src/pc/djui/djui_panel_controls_extra.c +++ b/src/pc/djui/djui_panel_controls_extra.c @@ -3,10 +3,8 @@ void djui_panel_controls_extra_create(struct DjuiBase* caller) { f32 bindBodyHeight = 28 * 8 + 1 * 7; - f32 bodyHeight = bindBodyHeight + 16 + 64; - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { struct DjuiFlowLayout* bindBody = djui_flow_layout_create(&body->base); @@ -25,13 +23,8 @@ void djui_panel_controls_extra_create(struct DjuiBase* caller) { djui_bind_create(&bindBody->base, "Y", configKeyY); } - struct DjuiButton* buttonBack = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&buttonBack->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&buttonBack->base, 1.0f, 64); - djui_button_set_style(buttonBack, 1); - djui_interactable_hook_click(&buttonBack->base, djui_panel_menu_back); - defaultBase = &buttonBack->base; + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_controls_n64.c b/src/pc/djui/djui_panel_controls_n64.c index 6188e7306..94b026e6e 100644 --- a/src/pc/djui/djui_panel_controls_n64.c +++ b/src/pc/djui/djui_panel_controls_n64.c @@ -3,10 +3,8 @@ void djui_panel_controls_n64_create(struct DjuiBase* caller) { f32 bindBodyHeight = 28 * 14 + 1 * 13; - f32 bodyHeight = bindBodyHeight + 16 + 64; - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { struct DjuiFlowLayout* bindBody = djui_flow_layout_create(&body->base); @@ -31,13 +29,8 @@ void djui_panel_controls_n64_create(struct DjuiBase* caller) { djui_bind_create(&bindBody->base, "C Right", configKeyCRight); } - struct DjuiButton* buttonBack = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&buttonBack->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&buttonBack->base, 1.0f, 64); - djui_button_set_style(buttonBack, 1); - djui_interactable_hook_click(&buttonBack->base, djui_panel_menu_back); - defaultBase = &buttonBack->base; + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_display.c b/src/pc/djui/djui_panel_display.c index 2d98ce5d0..3894bd13d 100644 --- a/src/pc/djui/djui_panel_display.c +++ b/src/pc/djui/djui_panel_display.c @@ -2,26 +2,6 @@ #include "src/pc/utils/misc.h" #include "src/pc/configfile.h" -// The checkbox size is determined by the base size they all have and the amount. -#define CHECKBOXES_SIZE 32 * 5 -// The checkbox pad size is determined by half the base size they all have and the amount plus one. -#define CHECKBOXES_PAD_SIZE 16 * 7 -// The accumulative size of both the padding size and normal size for the checkboxes. -#define CHECKBOXES_FULL_SIZE CHECKBOXES_SIZE + CHECKBOXES_PAD_SIZE - -// The selection box size is determined by the base size they all have and the amount. -#define SELECTION_BOXES_SIZE 32 * 3 -// The selection box pad size is determined by half the base size they all have and the amount plus one. -#define SELECTION_BOXES_PAD_SIZE 16 * 4 -// The accumulative size of both the padding size and normal size for the selection boxes. -#define SELECTION_BOXES_FULL_SIZE SELECTION_BOXES_SIZE + SELECTION_BOXES_PAD_SIZE - -// The button size is determined by the base size they all have and the amount. -#define BUTTON_SIZES 64 * 2 - -// The full height for the body. -#define BODY_HEIGHT CHECKBOXES_FULL_SIZE + SELECTION_BOXES_FULL_SIZE + BUTTON_SIZES - static struct DjuiInputbox* sFrameLimitInput = NULL; static struct DjuiSelectionbox* sInterpolationSelectionBox = NULL; @@ -47,39 +27,20 @@ static void djui_panel_display_frame_limit_text_change(struct DjuiBase* caller) } void djui_panel_display_create(struct DjuiBase* caller) { - f32 bodyHeight = BODY_HEIGHT; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\D\\#1be700\\I\\#00b3ff\\S\\#ffef00\\P\\#ff0800\\L\\#1be700\\A\\#00b3ff\\Y"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\D\\#1be700\\I\\#00b3ff\\S\\#ffef00\\P\\#ff0800\\L\\#1be700\\A\\#00b3ff\\Y"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Fullscreen", &configWindow.fullscreen); - djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox1->base, 1.0f, 32); - djui_interactable_hook_value_change(&checkbox1->base, djui_panel_display_apply); - defaultBase = &checkbox1->base; + djui_checkbox_create(&body->base, "Fullscreen", &configWindow.fullscreen, djui_panel_display_apply); #ifdef EXTERNAL_DATA - struct DjuiCheckbox* checkbox7 = djui_checkbox_create(&body->base, "Preload Textures", &configPrecacheRes); - djui_base_set_size_type(&checkbox7->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox7->base, 1.0f, 32); + djui_checkbox_create(&body->base, "Preload Textures", &configPrecacheRes, NULL); #endif - struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "VSync", &configWindow.vsync); - djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox2->base, 1.0f, 32); - djui_interactable_hook_value_change(&checkbox2->base, djui_panel_display_apply); + djui_checkbox_create(&body->base, "VSync", &configWindow.vsync, djui_panel_display_apply); + djui_checkbox_create(&body->base, "Uncapped Framerate", &configUncappedFramerate, djui_panel_display_apply); - struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Uncapped Framerate", &configUncappedFramerate); - djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox3->base, 1.0f, 32); - djui_interactable_hook_value_change(&checkbox3->base, djui_panel_display_uncapped_change); - - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 32); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32); { if (configFrameLimit < 30) { configFrameLimit = 30; } if (configFrameLimit > 3000) { configFrameLimit = 3000; } @@ -102,33 +63,20 @@ void djui_panel_display_create(struct DjuiBase* caller) { } char* interpChoices[2] = { "Fast", "Accurate" }; - struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Interpolation", interpChoices, 2, &configInterpolationMode); - djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox1->base, 1.0f, 32); + struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Interpolation", interpChoices, 2, &configInterpolationMode, NULL); djui_base_set_enabled(&selectionbox1->base, (configFrameLimit > 30 || (configFrameLimit <= 30 && configUncappedFramerate))); sInterpolationSelectionBox = selectionbox1; char* filterChoices[3] = { "Nearest", "Linear", "Tripoint" }; - struct DjuiSelectionbox* selectionbox2 = djui_selectionbox_create(&body->base, "Filtering", filterChoices, 3, &configFiltering); - djui_base_set_size_type(&selectionbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox2->base, 1.0f, 32); + djui_selectionbox_create(&body->base, "Filtering", filterChoices, 3, &configFiltering, NULL); char* drawDistanceChoices[6] = { "0.5x", "1x", "1.5x", "3x", "10x", "100x" }; - struct DjuiSelectionbox* selectionbox3 = djui_selectionbox_create(&body->base, "Draw Distance", drawDistanceChoices, 6, &configDrawDistance); - djui_base_set_size_type(&selectionbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox3->base, 1.0f, 32); + djui_selectionbox_create(&body->base, "Draw Distance", drawDistanceChoices, 6, &configDrawDistance, NULL); - struct DjuiButton* button1 = djui_button_create(&body->base, "DynOS Packs"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_interactable_hook_click(&button1->base, djui_panel_dynos_create); + djui_button_create(&body->base, "DynOS Packs", DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create); - struct DjuiButton* button2 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 1.0f, 64); - djui_button_set_style(button2, 1); - djui_interactable_hook_click(&button2->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_dynos.c b/src/pc/djui/djui_panel_dynos.c index 63e5a51b4..8f336e20e 100644 --- a/src/pc/djui/djui_panel_dynos.c +++ b/src/pc/djui/djui_panel_dynos.c @@ -9,10 +9,7 @@ static void djui_panel_dynos_apply(struct DjuiBase* caller) { void djui_panel_dynos_create(struct DjuiBase* caller) { int packCount = dynos_pack_get_count(); - f32 bodyHeight = (416) + 64 * 1 + 16 * 1; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\D\\#1be700\\Y\\#00b3ff\\N\\#ffef00\\O\\#ff0800\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\D\\#1be700\\Y\\#00b3ff\\N\\#ffef00\\O\\#ff0800\\S"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { @@ -22,27 +19,17 @@ void djui_panel_dynos_create(struct DjuiBase* caller) { bool tmp = dynos_pack_get_enabled(i); const char* pack = dynos_pack_get_name(i); - struct DjuiCheckbox* checkbox1 = djui_checkbox_create(layoutBase, pack, &tmp); + struct DjuiCheckbox* checkbox1 = djui_checkbox_create(layoutBase, pack, &tmp, djui_panel_dynos_apply); checkbox1->base.tag = i; checkbox1->base.bTag = tmp; checkbox1->value = &checkbox1->base.bTag; - - djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox1->base, 1.0f, 32); - djui_interactable_hook_value_change(&checkbox1->base, djui_panel_dynos_apply); - if (i == 0) { defaultBase = &checkbox1->base; } } djui_paginated_calculate_height(paginated); - struct DjuiButton* button6 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_button_set_style(button6, 1); - djui_interactable_hook_click(&button6->base, djui_panel_menu_back); - if (defaultBase == NULL) { defaultBase = &button6->base; } + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); panel->bodySize.value = paginated->base.height.value + 16 + 64; } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_host.c b/src/pc/djui/djui_panel_host.c index 65f96e33f..30c886fc6 100644 --- a/src/pc/djui/djui_panel_host.c +++ b/src/pc/djui/djui_panel_host.c @@ -65,31 +65,22 @@ static void djui_panel_host_do_host(struct DjuiBase* caller) { } void djui_panel_host_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 4 + 64 * 4 + 16 * 5; - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, - (gNetworkType == NT_SERVER) + struct DjuiThreePanel* panel = djui_panel_menu_create((gNetworkType == NT_SERVER) ? "\\#ff0800\\S\\#1be700\\E\\#00b3ff\\R\\#ffef00\\V\\#ff0800\\E\\#1be700\\R" : "\\#ff0800\\H\\#1be700\\O\\#00b3ff\\S\\#ffef00\\T"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { #ifdef DISCORD_SDK char* nChoices[2] = { "Discord", "Direct Connection" }; - struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Network system", nChoices, 2, &configNetworkSystem); - djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox1->base, 1.0f, 32); - djui_interactable_hook_value_change(&selectionbox1->base, djui_panel_host_network_system_change); + struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Network system", nChoices, 2, &configNetworkSystem, djui_panel_host_network_system_change); if (gNetworkType == NT_SERVER) { djui_base_set_enabled(&selectionbox1->base, false); } #endif - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 32); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32); { struct DjuiText* text1 = djui_text_create(&rect1->base, "Port"); djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); @@ -118,10 +109,7 @@ void djui_panel_host_create(struct DjuiBase* caller) { sInputboxPort = inputbox1; } - struct DjuiRect* rect2 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect2->base, 1.0f, 32); - djui_base_set_color(&rect2->base, 0, 0, 0, 0); + struct DjuiRect* rect2 = djui_rect_container_create(&body->base, 32); { struct DjuiText* text1 = djui_text_create(&rect2->base, "Save Slot"); djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); @@ -131,50 +119,28 @@ void djui_panel_host_create(struct DjuiBase* caller) { char starString[32] = { 0 }; snprintf(starString, 32, "%c x%d", '~' + 1, save_file_get_total_star_count(configHostSaveSlot - 1, 0, 24)); - struct DjuiButton* button1 = djui_button_create(&rect2->base, starString); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + struct DjuiButton* button1 = djui_button_create(&rect2->base, starString, DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_create); djui_base_set_size(&button1->base, 0.5f, 32); djui_base_set_alignment(&button1->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button1->base, djui_panel_host_save_create); } - struct DjuiButton* button1 = djui_button_create(&body->base, "Settings"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_base_set_alignment(&button1->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button1->base, djui_panel_host_settings_create); + djui_button_create(&body->base, "Settings", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_settings_create); - struct DjuiButton* button2 = djui_button_create(&body->base, "Mods"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 1.0f, 64); - djui_base_set_alignment(&button2->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_host_mods_create); + struct DjuiButton* button2 = djui_button_create(&body->base, "Mods", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create); button2->base.tag = 0; - struct DjuiButton* button3 = djui_button_create(&body->base, "Rom-Hacks"); - djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button3->base, 1.0f, 64); - djui_base_set_alignment(&button3->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button3->base, djui_panel_host_mods_create); + struct DjuiButton* button3 = djui_button_create(&body->base, "Rom-Hacks", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create); button3->base.tag = 1; - struct DjuiRect* rect3 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect3->base, 1.0f, 64); - djui_base_set_color(&rect3->base, 0, 0, 0, 0); + struct DjuiRect* rect3 = djui_rect_container_create(&body->base, 64); { - struct DjuiButton* button1 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Cancel" : "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + struct DjuiButton* button1 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Cancel" : "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); djui_base_set_size(&button1->base, 0.485f, 64); djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); - struct DjuiButton* button2 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Apply" : "Host"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + struct DjuiButton* button2 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Apply" : "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_do_host); djui_base_set_size(&button2->base, 0.485f, 64); djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_host_do_host); defaultBase = (gNetworkType == NT_SERVER) ? &button1->base @@ -182,5 +148,5 @@ void djui_panel_host_create(struct DjuiBase* caller) { } } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, defaultBase); } diff --git a/src/pc/djui/djui_panel_host_message.c b/src/pc/djui/djui_panel_host_message.c index 52e0c0954..7358d840f 100644 --- a/src/pc/djui/djui_panel_host_message.c +++ b/src/pc/djui/djui_panel_host_message.c @@ -83,10 +83,8 @@ void djui_panel_host_message_create(struct DjuiBase* caller) { } f32 textHeight = 32 * 0.8125f * warningLines + 8; - f32 bodyHeight = textHeight + 16 + 64; - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\I\\#1be700\\N\\#00b3ff\\F\\#ffef00\\O"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\I\\#1be700\\N\\#00b3ff\\F\\#ffef00\\O"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { struct DjuiText* text1 = djui_text_create(&body->base, warningMessage); @@ -94,36 +92,20 @@ void djui_panel_host_message_create(struct DjuiBase* caller) { djui_base_set_size(&text1->base, 1.0f, textHeight); djui_base_set_color(&text1->base, 200, 200, 200, 255); - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 64); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 64); { - struct DjuiButton* button1 = djui_button_create(&rect1->base, "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 0.485f, 64); - djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); - - struct DjuiButton* button2 = djui_button_create(&rect1->base, "Host"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 0.485f, 64); - djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_host_message_do_host); - defaultBase = &button2->base; + struct DjuiButton* btnHost = djui_button_right_create(&rect1->base, "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_message_do_host); + struct DjuiButton* btnBack = djui_button_left_create(&rect1->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); if (hideHostButton) { - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - defaultBase = &button1->base; - djui_base_set_visible(&button2->base, false); - djui_base_set_enabled(&button2->base, false); + djui_base_set_size(&btnBack->base, 1.0f, 64); + djui_base_set_visible(&btnHost->base, false); + djui_base_set_enabled(&btnHost->base, false); } } } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); #ifdef DISCORD_SDK if (configNetworkSystem) #endif diff --git a/src/pc/djui/djui_panel_host_mods.c b/src/pc/djui/djui_panel_host_mods.c index df1564dcc..bdd29f30e 100644 --- a/src/pc/djui/djui_panel_host_mods.c +++ b/src/pc/djui/djui_panel_host_mods.c @@ -69,7 +69,7 @@ static void djui_mod_checkbox_on_value_change(UNUSED struct DjuiBase* base) { struct Mod* mod = gLocalMods.entries[index]; djui_base_set_enabled(node->base, mod->selectable); - + // iterate node = node->next; } @@ -86,13 +86,11 @@ static void djui_panel_host_mods_destroy(struct DjuiBase* base) { } void djui_panel_host_mods_create(struct DjuiBase* caller) { - f32 bodyHeight = (416) + 64 * 1 + 16 * 1; bool isRomHacks = (caller->tag == 1); mods_update_selectable(); - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, isRomHacks ? + struct DjuiThreePanel* panel = djui_panel_menu_create(isRomHacks ? "\\#ff0800\\R\\#1be700\\O\\#00b3ff\\M \\#ffef00\\H\\#ff0800\\A\\#1be700\\C\\#00b3ff\\K\\#ffef00\\S" : "\\#ff0800\\M\\#1be700\\O\\#00b3ff\\D\\#ffef00\\S" ); @@ -106,29 +104,20 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) { if (isRomHacks != (mod->incompatible && strstr(mod->incompatible, "romhack"))) { continue; } - struct DjuiCheckbox* checkbox = djui_checkbox_create(layoutBase, mod->name, &mod->enabled); + struct DjuiCheckbox* checkbox = djui_checkbox_create(layoutBase, mod->name, &mod->enabled, djui_mod_checkbox_on_value_change); checkbox->base.tag = i; - djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox->base, 1.0f, 32); djui_base_set_enabled(&checkbox->base, mod->selectable); djui_interactable_hook_hover(&checkbox->base, djui_mod_checkbox_on_hover, djui_mod_checkbox_on_hover_end); - djui_interactable_hook_value_change(&checkbox->base, djui_mod_checkbox_on_value_change); - if (i == 0) { defaultBase = &checkbox->base; } } djui_paginated_calculate_height(paginated); - struct DjuiButton* button1 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); - if (defaultBase == NULL) { defaultBase = &button1->base; } + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); panel->bodySize.value = paginated->base.height.value + 16 + 64; } panel->base.destroy = djui_panel_host_mods_destroy; - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); djui_panel_host_mods_description_create(); } diff --git a/src/pc/djui/djui_panel_host_save.c b/src/pc/djui/djui_panel_host_save.c index 0cfe93497..c5cdd875f 100644 --- a/src/pc/djui/djui_panel_host_save.c +++ b/src/pc/djui/djui_panel_host_save.c @@ -34,37 +34,27 @@ static void djui_panel_host_save_erase(struct DjuiBase* caller) { } void djui_panel_host_save_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 4 + 64 * 1 + 16 * 5; sSaveButtonCaller = caller; - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\S\\#1be700\\A\\#00b3ff\\V\\#ffef00\\E"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\S\\#1be700\\A\\#00b3ff\\V\\#ffef00\\E"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { for (int i = 0; i < 4; i++) { - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 32); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32); { - struct DjuiButton* button1 = djui_button_create(&rect1->base, ""); + struct DjuiButton* button1 = djui_button_create(&rect1->base, "", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_button_click); djui_panel_host_save_update_button(button1, i); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); djui_base_set_size(&button1->base, 0.74f, 32); - djui_interactable_hook_click(&button1->base, djui_panel_host_save_button_click); button1->base.tag = i; - if (i == (int)(configHostSaveSlot - 1)) { defaultBase = &button1->base; } sSaveButtons[i] = button1; - struct DjuiButton* button2 = djui_button_create(&rect1->base, "erase"); + struct DjuiButton* button2 = djui_button_create(&rect1->base, "erase", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_erase); button2->base.tag = i; - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); djui_base_set_size(&button2->base, 0.24f, 32); djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_host_save_erase); } } } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_host_settings.c b/src/pc/djui/djui_panel_host_settings.c index d155ec549..306f6f191 100644 --- a/src/pc/djui/djui_panel_host_settings.c +++ b/src/pc/djui/djui_panel_host_settings.c @@ -43,51 +43,27 @@ static void djui_panel_host_player_text_change(struct DjuiBase* caller) { } void djui_panel_host_settings_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 8 + 64 * 1 + 16 * 8; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\S\\#1be700\\E\\#00b3ff\\T\\#ffef00\\T\\#ff0800\\I\\#1be700\\N\\#00b3ff\\G\\#ffef00\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\S\\#1be700\\E\\#00b3ff\\T\\#ffef00\\T\\#ff0800\\I\\#1be700\\N\\#00b3ff\\G\\#ffef00\\S"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { char* iChoices[3] = { "Non-solid", "Solid", "Friendly Fire" }; - struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Player interaction", iChoices, 3, &configPlayerInteraction); - djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox1->base, 1.0f, 32); + djui_selectionbox_create(&body->base, "Player interaction", iChoices, 3, &configPlayerInteraction, NULL); - char* kChoices[3] = { "Weak", "Normal", "Too much" }; sKnockbackIndex = (configPlayerKnockbackStrength <= 20) ? 0 : ((configPlayerKnockbackStrength <= 40) ? 1 : 2); - struct DjuiSelectionbox* selectionbox2 = djui_selectionbox_create(&body->base, "Knockback strength", kChoices, 3, &sKnockbackIndex); - djui_base_set_size_type(&selectionbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox2->base, 1.0f, 32); - djui_interactable_hook_value_change(&selectionbox2->base, djui_panel_host_settings_knockback_change); + char* kChoices[3] = { "Weak", "Normal", "Too much" }; + djui_selectionbox_create(&body->base, "Knockback strength", kChoices, 3, &sKnockbackIndex, djui_panel_host_settings_knockback_change); char* lChoices[3] = { "Leave level", "Stay in level", "Non-stop" }; - struct DjuiSelectionbox* selectionbox3 = djui_selectionbox_create(&body->base, "On star collection", lChoices, 3, &configStayInLevelAfterStar); - djui_base_set_size_type(&selectionbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox3->base, 1.0f, 32); + djui_selectionbox_create(&body->base, "On star collection", lChoices, 3, &configStayInLevelAfterStar, NULL); - struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Skip intro cutscene", &configSkipIntro); - djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox2->base, 1.0f, 32); + djui_checkbox_create(&body->base, "Skip intro cutscene", &configSkipIntro, NULL); + djui_checkbox_create(&body->base, "Share lives", &configShareLives, NULL); + djui_checkbox_create(&body->base, "Enable cheats", &configEnableCheats, NULL); + djui_checkbox_create(&body->base, "Bubble on death", &configBubbleDeath, NULL); - struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Share lives", &configShareLives); - djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox3->base, 1.0f, 32); - - struct DjuiCheckbox* checkbox4 = djui_checkbox_create(&body->base, "Enable cheats", &configEnableCheats); - djui_base_set_size_type(&checkbox4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox4->base, 1.0f, 32); - - struct DjuiCheckbox* checkbox5 = djui_checkbox_create(&body->base, "Bubble on death", &configBubbleDeath); - djui_base_set_size_type(&checkbox5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox5->base, 1.0f, 32); - - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 32); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32); { struct DjuiText* text1 = djui_text_create(&rect1->base, "Amount of players"); djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); @@ -106,11 +82,7 @@ void djui_panel_host_settings_create(struct DjuiBase* caller) { sPlayerAmount = inputbox1; } - struct DjuiButton* button1 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_join.c b/src/pc/djui/djui_panel_join.c index a67b73155..aa4813c0b 100644 --- a/src/pc/djui/djui_panel_join.c +++ b/src/pc/djui/djui_panel_join.c @@ -157,20 +157,16 @@ void djui_panel_join_do_join(struct DjuiBase* caller) { } void djui_panel_join_create(struct DjuiBase* caller) { - f32 bodyHeight = 2 + 32 + 16 * 2 + 64; - u16 directLines = 1; f32 directTextHeight = 32 * 0.8125f * directLines + 8; - bodyHeight += directTextHeight + 16; #ifdef DISCORD_SDK u16 discordLines = 8; f32 discordTextHeight = 32 * 0.8125f * discordLines + 8; - bodyHeight += discordTextHeight + 16; #endif struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { #ifdef DISCORD_SDK @@ -196,26 +192,18 @@ void djui_panel_join_create(struct DjuiBase* caller) { sInputboxIp = inputbox1; djui_panel_join_ip_text_set(inputbox1); - struct DjuiRect* rect2 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect2->base, 1.0f, 64); - djui_base_set_color(&rect2->base, 0, 0, 0, 0); + struct DjuiRect* rect2 = djui_rect_container_create(&body->base, 64); { - struct DjuiButton* button1 = djui_button_create(&rect2->base, "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + struct DjuiButton* button1 = djui_button_create(&rect2->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); djui_base_set_size(&button1->base, 0.485f, 64); djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); - struct DjuiButton* button2 = djui_button_create(&rect2->base, "Join"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + struct DjuiButton* button2 = djui_button_create(&rect2->base, "Join", DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_do_join); djui_base_set_size(&button2->base, 0.485f, 64); djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_join_do_join); defaultBase = &button2->base; } } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, defaultBase); } diff --git a/src/pc/djui/djui_panel_join_message.c b/src/pc/djui/djui_panel_join_message.c index 123fd5ea2..cddec9e05 100644 --- a/src/pc/djui/djui_panel_join_message.c +++ b/src/pc/djui/djui_panel_join_message.c @@ -44,14 +44,10 @@ void djui_panel_join_message_create(struct DjuiBase* caller) { // don't recreate panel if it's already visible if (gDjuiPanelJoinMessageVisible) { return; } - f32 bodyHeight = 64 + 16 + 16; - u16 directLines = 8; f32 directTextHeight = 32 * 0.8125f * directLines + 8; - bodyHeight += directTextHeight + 16; - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N\\#1be700\\I\\#00b3ff\\N\\#ffef00\\G"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N\\#1be700\\I\\#00b3ff\\N\\#ffef00\\G"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { struct DjuiText* text1 = djui_text_create(&body->base, "..."); @@ -66,16 +62,10 @@ void djui_panel_join_message_create(struct DjuiBase* caller) { gDownloadProgress = 0; djui_progress_bar_create(&body->base, &gDownloadProgress, 0.0f, 1.0f); - struct DjuiButton* button1 = djui_button_create(&body->base, "Cancel"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_join_message_cancel); - defaultBase = &button1->base; + djui_button_create(&body->base, "Cancel", DJUI_BUTTON_STYLE_BACK, djui_panel_join_message_cancel); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); gDjuiPanelJoinMessageVisible = true; sDisplayingError = false; } diff --git a/src/pc/djui/djui_panel_main.c b/src/pc/djui/djui_panel_main.c index 4edb8a87e..e5073d27d 100644 --- a/src/pc/djui/djui_panel_main.c +++ b/src/pc/djui/djui_panel_main.c @@ -16,35 +16,16 @@ static void djui_panel_main_quit(struct DjuiBase* caller) { } void djui_panel_main_create(struct DjuiBase* caller) { - f32 bodyHeight = 64 * 4 + 16 * 3; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\SM\\#1be700\\64\\#00b3ff\\EX\n\\#ffef00\\COOP"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\SM\\#1be700\\64\\#00b3ff\\EX\n\\#ffef00\\COOP"); { struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiButton* button1 = djui_button_create(&body->base, "Host"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); + struct DjuiButton* button1 = djui_button_create(&body->base, "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create); djui_cursor_input_controlled_center(&button1->base); - djui_interactable_hook_click(&button1->base, djui_panel_host_create); - defaultBase = &button1->base; - struct DjuiButton* button2 = djui_button_create(&body->base, "Join"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 1.0f, 64); - djui_interactable_hook_click(&button2->base, djui_panel_join_create); - - struct DjuiButton* button3 = djui_button_create(&body->base, "Options"); - djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button3->base, 1.0f, 64); - djui_interactable_hook_click(&button3->base, djui_panel_options_create); - - struct DjuiButton* button4 = djui_button_create(&body->base, "Quit"); - djui_base_set_size_type(&button4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button4->base, 1.0f, 64); - djui_button_set_style(button4, 1); - djui_interactable_hook_click(&button4->base, djui_panel_main_quit); + djui_button_create(&body->base, "Join", DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_create); + djui_button_create(&body->base, "Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create); + djui_button_create(&body->base, "Quit", DJUI_BUTTON_STYLE_BACK, djui_panel_main_quit); } char* version = get_version_local(); @@ -55,7 +36,7 @@ void djui_panel_main_create(struct DjuiBase* caller) { djui_text_set_alignment(footer, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); gInteractableOverridePad = true; gDjuiPanelMainCreated = true; } diff --git a/src/pc/djui/djui_panel_menu.c b/src/pc/djui/djui_panel_menu.c index fe39f93ee..424698c0e 100644 --- a/src/pc/djui/djui_panel_menu.c +++ b/src/pc/djui/djui_panel_menu.c @@ -6,8 +6,8 @@ void djui_panel_menu_back(UNUSED struct DjuiBase* base) { djui_panel_back(); } -struct DjuiThreePanel* djui_panel_menu_create(f32 bodyHeight, char* headerText) { - struct DjuiThreePanel* panel = djui_three_panel_create(&gDjuiRoot->base, 64, bodyHeight, 0); +struct DjuiThreePanel* djui_panel_menu_create(char* headerText) { + struct DjuiThreePanel* panel = djui_three_panel_create(&gDjuiRoot->base, 64, 0, 0); djui_base_set_size_type(&panel->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_RELATIVE); djui_base_set_size(&panel->base, DJUI_DEFAULT_PANEL_WIDTH, 1.0f); djui_base_set_color(&panel->base, 0, 0, 0, 240); @@ -27,7 +27,7 @@ struct DjuiThreePanel* djui_panel_menu_create(f32 bodyHeight, char* headerText) struct DjuiFlowLayout* body = djui_flow_layout_create(&panel->base); djui_base_set_alignment(&body->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER); djui_base_set_size_type(&body->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&body->base, 1.0f, bodyHeight); + djui_base_set_size(&body->base, 1.0f, 0); djui_base_set_color(&body->base, 0, 0, 0, 0); djui_flow_layout_set_margin(body, 16); djui_flow_layout_set_flow_direction(body, DJUI_FLOW_DIR_DOWN); diff --git a/src/pc/djui/djui_panel_menu.h b/src/pc/djui/djui_panel_menu.h index ac9ea52a8..4c8f731d4 100644 --- a/src/pc/djui/djui_panel_menu.h +++ b/src/pc/djui/djui_panel_menu.h @@ -2,4 +2,4 @@ #include "djui.h" void djui_panel_menu_back(struct DjuiBase* base); -struct DjuiThreePanel* djui_panel_menu_create(f32 bodyHeight, char* headerText); +struct DjuiThreePanel* djui_panel_menu_create(char* headerText); diff --git a/src/pc/djui/djui_panel_menu_options.c b/src/pc/djui/djui_panel_menu_options.c index a0423e337..053fad26e 100644 --- a/src/pc/djui/djui_panel_menu_options.c +++ b/src/pc/djui/djui_panel_menu_options.c @@ -10,10 +10,7 @@ static void djui_panel_random_menu(UNUSED struct DjuiBase* caller) { } void djui_panel_main_menu_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 4 + 64 * 1 + 16 * 4; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\M\\#1be700\\A\\#00b3ff\\I\\#ffef00\\N \\#ff0800\\M\\#ff0800\\E\\#1be700\\N\\#ffef00\\U\\#ff0800\\"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\M\\#1be700\\A\\#00b3ff\\I\\#ffef00\\N \\#ff0800\\M\\#ff0800\\E\\#1be700\\N\\#ffef00\\U\\#ff0800\\"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { @@ -36,33 +33,16 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) { "PSS", "TTC", }; - struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Level", levelChoices, 17, &configMenuLevel); - djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox1->base, 1.0f, 32); + struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Level", levelChoices, 17, &configMenuLevel, NULL); djui_base_set_enabled(&selectionbox1->base, !configMenuRandom); sLevelBox = selectionbox1; - defaultBase = &selectionbox1->base; - struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Use Stage Music", &configMenuSound); - djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox1->base, 1.0f, 32); - - struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Random Stage", &configMenuRandom); - djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox2->base, 1.0f, 32); - djui_interactable_hook_value_change(&checkbox2->base, djui_panel_random_menu); + djui_checkbox_create(&body->base, "Use Stage Music", &configMenuSound, NULL); + djui_checkbox_create(&body->base, "Random Stage", &configMenuRandom, djui_panel_random_menu); + djui_checkbox_create(&body->base, "Play Vanilla Demos", &configMenuDemos, stop_demo); - struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Play Vanilla Demos", &configMenuDemos); - djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox3->base, 1.0f, 32); - djui_interactable_hook_value_change(&checkbox3->base, stop_demo); - - struct DjuiButton* button1 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_misc.c b/src/pc/djui/djui_panel_misc.c index c69a20dfd..44079afa6 100644 --- a/src/pc/djui/djui_panel_misc.c +++ b/src/pc/djui/djui_panel_misc.c @@ -5,88 +5,39 @@ #ifdef DEVELOPMENT void djui_panel_options_debug_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 7 + 64 * 1 + 16 * 1; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\D\\#1be700\\E\\#00b3ff\\B\\#ffef00\\U\\#ff0800\\G"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\D\\#1be700\\E\\#00b3ff\\B\\#ffef00\\U\\#ff0800\\G"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Fixed Collisions", (bool*)&gLevelValues.fixCollisionBugs); - djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox1->base, 1.0f, 32); - defaultBase = &checkbox1->base; + djui_checkbox_create(&body->base, "Fixed Collisions", (bool*)&gLevelValues.fixCollisionBugs, NULL); + djui_checkbox_create(&body->base, "Lua Profiler", &configLuaProfiler, NULL); + djui_checkbox_create(&body->base, "Debug Print", &configDebugPrint, NULL); + djui_checkbox_create(&body->base, "Debug Info", &configDebugInfo, NULL); + djui_checkbox_create(&body->base, "Debug Errors", &configDebugError, NULL); - struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Lua Profiler", &configLuaProfiler); - djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox2->base, 1.0f, 32); - defaultBase = &checkbox2->base; - - struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Debug Print", &configDebugPrint); - djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox3->base, 1.0f, 32); - defaultBase = &checkbox3->base; - - struct DjuiCheckbox* checkbox4 = djui_checkbox_create(&body->base, "Debug Info", &configDebugInfo); - djui_base_set_size_type(&checkbox4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox4->base, 1.0f, 32); - defaultBase = &checkbox4->base; - - struct DjuiCheckbox* checkbox5 = djui_checkbox_create(&body->base, "Debug Errors", &configDebugError); - djui_base_set_size_type(&checkbox5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox5->base, 1.0f, 32); - defaultBase = &checkbox5->base; - - struct DjuiButton* button1 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_button_set_style(button1, 1); - djui_interactable_hook_click(&button1->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } #endif void djui_panel_misc_create(struct DjuiBase* caller) { -#ifdef DEVELOPMENT - f32 bodyHeight = 64 * 5 + 16 * 4; -#else - f32 bodyHeight = 64 * 4 + 16 * 3; -#endif - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\M\\#1be700\\I\\#00b3ff\\S\\#ffef00\\C"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\M\\#1be700\\I\\#00b3ff\\S\\#ffef00\\C"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Pause In Singleplayer", &configSingleplayerPause); - djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox1->base, 1.0f, 32); - defaultBase = &checkbox1->base; + djui_checkbox_create(&body->base, "Pause In Singleplayer", &configSingleplayerPause, NULL); + djui_checkbox_create(&body->base, "Disable Popups", &configDisablePopups, NULL); - struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Disable Popups", &configDisablePopups); - djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&checkbox2->base, 1.0f, 32); - - struct DjuiButton* button1 = djui_button_create(&body->base, "Menu Options"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_interactable_hook_click(&button1->base, djui_panel_main_menu_create); + djui_button_create(&body->base, "Menu Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_main_menu_create); #ifdef DEVELOPMENT - struct DjuiButton* button2 = djui_button_create(&body->base, "Debug"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 1.0f, 64); - djui_interactable_hook_click(&button2->base, djui_panel_options_debug_create); + djui_button_create(&body->base, "Debug", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_debug_create); #endif - struct DjuiButton* button3 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button3->base, 1.0f, 64); - djui_button_set_style(button3, 1); - djui_interactable_hook_click(&button3->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_modlist.c b/src/pc/djui/djui_panel_modlist.c index 5b98e6f51..7431139e1 100644 --- a/src/pc/djui/djui_panel_modlist.c +++ b/src/pc/djui/djui_panel_modlist.c @@ -20,7 +20,8 @@ void djui_panel_modlist_create(UNUSED struct DjuiBase* caller) { if (gActiveMods.entryCount == 0) { return; } f32 bodyHeight = (gActiveMods.entryCount * 32) + (gActiveMods.entryCount - 1) * 4; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\M\\#1be700\\O\\#00b3ff\\D\\#ffef00\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\M\\#1be700\\O\\#00b3ff\\D\\#ffef00\\S"); + djui_three_panel_set_body_size(panel, bodyHeight); gDjuiModList = panel; djui_base_set_alignment(&panel->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER); diff --git a/src/pc/djui/djui_panel_options.c b/src/pc/djui/djui_panel_options.c index dbd6faac9..8c597958d 100644 --- a/src/pc/djui/djui_panel_options.c +++ b/src/pc/djui/djui_panel_options.c @@ -8,52 +8,17 @@ void djui_panel_options_back(struct DjuiBase* caller) { } void djui_panel_options_create(struct DjuiBase* caller) { - f32 bodyHeight = 64 * 7 + 16 * 6; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\O\\#1be700\\P\\#00b3ff\\T\\#ffef00\\I\\#ff0800\\O\\#1be700\\N\\#00b3ff\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\O\\#1be700\\P\\#00b3ff\\T\\#ffef00\\I\\#ff0800\\O\\#1be700\\N\\#00b3ff\\S"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiButton* button1 = djui_button_create(&body->base, "Player"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 1.0f, 64); - djui_interactable_hook_click(&button1->base, djui_panel_player_create); - defaultBase = &button1->base; - - struct DjuiButton* button2 = djui_button_create(&body->base, "Camera"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 1.0f, 64); - djui_interactable_hook_click(&button2->base, djui_panel_camera_create); - if (defaultBase == NULL) { - defaultBase = &button2->base; - } - - struct DjuiButton* button3 = djui_button_create(&body->base, "Controls"); - djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button3->base, 1.0f, 64); - djui_interactable_hook_click(&button3->base, djui_panel_controls_create); - - struct DjuiButton* button4 = djui_button_create(&body->base, "Display"); - djui_base_set_size_type(&button4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button4->base, 1.0f, 64); - djui_interactable_hook_click(&button4->base, djui_panel_display_create); - - struct DjuiButton* button5 = djui_button_create(&body->base, "Sound"); - djui_base_set_size_type(&button5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button5->base, 1.0f, 64); - djui_interactable_hook_click(&button5->base, djui_panel_sound_create); - - struct DjuiButton* button6 = djui_button_create(&body->base, "Misc"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_interactable_hook_click(&button6->base, djui_panel_misc_create); - - struct DjuiButton* button7 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button7->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button7->base, 1.0f, 64); - djui_button_set_style(button7, 1); - djui_interactable_hook_click(&button7->base, djui_panel_options_back); + djui_button_create(&body->base, "Player", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create); + djui_button_create(&body->base, "Camera", DJUI_BUTTON_STYLE_NORMAL, djui_panel_camera_create); + djui_button_create(&body->base, "Controls", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_create); + djui_button_create(&body->base, "Display", DJUI_BUTTON_STYLE_NORMAL, djui_panel_display_create); + djui_button_create(&body->base, "Sound", DJUI_BUTTON_STYLE_NORMAL, djui_panel_sound_create); + djui_button_create(&body->base, "Misc", DJUI_BUTTON_STYLE_NORMAL, djui_panel_misc_create); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_options_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_panel_pause.c b/src/pc/djui/djui_panel_pause.c index cec860c01..a2b025851 100644 --- a/src/pc/djui/djui_panel_pause.c +++ b/src/pc/djui/djui_panel_pause.c @@ -36,69 +36,38 @@ static void djui_panel_pause_quit(struct DjuiBase* caller) { void djui_panel_pause_create(struct DjuiBase* caller) { if (gDjuiChatBoxFocus) { djui_chat_box_toggle(); } - f32 bodyHeight = 64 * 4 + 16 * 3; - if (gServerSettings.enableCheats) { bodyHeight += 64 + 16; } - if (gNetworkType == NT_SERVER) { bodyHeight += 64 + 16; } - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\A\\#00b3ff\\U\\#ffef00\\S\\#ff0800\\E"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\A\\#00b3ff\\U\\#ffef00\\S\\#ff0800\\E"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 64); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 64); + { + djui_button_left_create(&rect1->base, "Player", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create); + djui_button_right_create(&rect1->base, "DynOS Packs", DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create); + } - struct DjuiButton* button1 = djui_button_create(&rect1->base, "Player"); - djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button1->base, 0.47f, 64); - djui_interactable_hook_click(&button1->base, djui_panel_player_create); - - struct DjuiButton* button2 = djui_button_create(&rect1->base, "DynOS Packs"); - djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button2->base, 0.5f, 64); - djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP); - djui_interactable_hook_click(&button2->base, djui_panel_dynos_create); - - struct DjuiButton* button3 = djui_button_create(&body->base, "Options"); - djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button3->base, 1.0f, 64); - djui_interactable_hook_click(&button3->base, djui_panel_options_create); + struct DjuiButton* button3 = djui_button_create(&body->base, "Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create); defaultBase = &button3->base; if (gServerSettings.enableCheats) { - struct DjuiButton* button4 = djui_button_create(&body->base, "Cheats"); - djui_base_set_size_type(&button4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button4->base, 1.0f, 64); - djui_interactable_hook_click(&button4->base, djui_panel_cheats_create); + djui_button_create(&body->base, "Cheats", DJUI_BUTTON_STYLE_NORMAL, djui_panel_cheats_create); } - struct DjuiButton* button5 = djui_button_create(&body->base, "Resume"); - djui_base_set_size_type(&button5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button5->base, 1.0f, 64); - djui_interactable_hook_click(&button5->base, djui_panel_pause_resume); - if (gNetworkType == NT_SERVER) { - struct DjuiButton* button6 = djui_button_create(&body->base, "Server Settings"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_interactable_hook_click(&button6->base, djui_panel_host_create); + djui_button_create(&body->base, "Server Settings", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create); } - struct DjuiButton* button7; + djui_button_create(&body->base, "Resume", DJUI_BUTTON_STYLE_NORMAL, djui_panel_pause_resume); + if (gNetworkType == NT_SERVER) { - button7 = djui_button_create(&body->base, "Stop Hosting"); + djui_button_create(&body->base, "Stop Hosting", DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit); } else { - button7 = djui_button_create(&body->base, "Disconnect"); + djui_button_create(&body->base, "Disconnect", DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit); } - djui_base_set_size_type(&button7->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button7->base, 1.0f, 64); - djui_interactable_hook_click(&button7->base, djui_panel_pause_quit); - djui_button_set_style(button7, 1); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, defaultBase); gInteractableOverridePad = true; gDjuiPanelPauseCreated = true; } diff --git a/src/pc/djui/djui_panel_player.c b/src/pc/djui/djui_panel_player.c index 51a8e310b..d9bd993da 100644 --- a/src/pc/djui/djui_panel_player.c +++ b/src/pc/djui/djui_panel_player.c @@ -14,7 +14,6 @@ static unsigned int sSliderChannels[3] = {0}; static struct DjuiSelectionbox* sPalettePresetSelection; -static struct DjuiSelectionbox* sPartSelection; static struct DjuiInputbox* sHexColorTextBox; static struct DjuiSlider *sSliderR, *sSliderG, *sSliderB; @@ -117,10 +116,7 @@ void djui_panel_player_edit_palette_destroy(struct DjuiBase* caller) { static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) { char* sPartStrings[PLAYER_PART_MAX] = { "Overalls", "Shirt", "Gloves", "Shoes", "Hair", "Skin", "Cap" }; - f32 bodyHeight = 32 * 5 + 64 * 1 + 16 * 5; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\A\\#00b3ff\\L\\#ffef00\\E\\#ff0800\\T\\#1be700\\T\\#00b3ff\\E"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\A\\#00b3ff\\L\\#ffef00\\E\\#ff0800\\T\\#1be700\\T\\#00b3ff\\E"); // Set current palette to custom when clicking on Edit Palette sPalettePresetIndex = PALETTE_CUSTOM; @@ -136,15 +132,9 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) { { sCurrentPlayerPart = SHIRT; - sPartSelection = djui_selectionbox_create(&body->base, "Part", sPartStrings, PLAYER_PART_MAX, &sCurrentPlayerPart); - djui_base_set_size_type(&sPartSelection->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&sPartSelection->base, 1.0f, 32); - djui_interactable_hook_value_change(&sPartSelection->base, djui_panel_player_edit_palette_part_changed); + djui_selectionbox_create(&body->base, "Part", sPartStrings, PLAYER_PART_MAX, &sCurrentPlayerPart, djui_panel_player_edit_palette_part_changed); - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 32); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32); { struct DjuiText* text1 = djui_text_create(&rect1->base, "Hex Code"); djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); @@ -162,29 +152,14 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) { for (int i = 0; i < 3; i++) sSliderChannels[i] = configCustomPalette.parts[SHIRT][i]; - sSliderR = djui_slider_create(&body->base, "Red", &sSliderChannels[0], 0, 255); - djui_base_set_size_type(&sSliderR->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&sSliderR->base, djui_panel_player_edit_palette_red_changed); - djui_base_set_size(&sSliderR->base, 1.0f, 32); + sSliderR = djui_slider_create(&body->base, "Red", &sSliderChannels[0], 0, 255, djui_panel_player_edit_palette_red_changed); + sSliderG = djui_slider_create(&body->base, "Green", &sSliderChannels[1], 0, 255, djui_panel_player_edit_palette_green_changed); + sSliderB = djui_slider_create(&body->base, "Blue", &sSliderChannels[2], 0, 255, djui_panel_player_edit_palette_blue_changed); - sSliderG = djui_slider_create(&body->base, "Green", &sSliderChannels[1], 0, 255); - djui_base_set_size_type(&sSliderG->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&sSliderG->base, djui_panel_player_edit_palette_green_changed); - djui_base_set_size(&sSliderG->base, 1.0f, 32); - - sSliderB = djui_slider_create(&body->base, "Blue", &sSliderChannels[2], 0, 255); - djui_base_set_size_type(&sSliderB->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_interactable_hook_value_change(&sSliderB->base, djui_panel_player_edit_palette_blue_changed); - djui_base_set_size(&sSliderB->base, 1.0f, 32); - - struct DjuiButton* button6 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_button_set_style(button6, 1); - djui_interactable_hook_click(&button6->base, djui_panel_menu_back); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } static bool djui_panel_player_name_valid(char* buffer) { @@ -245,31 +220,22 @@ static void djui_panel_player_prevent_demo(struct DjuiBase* caller) { if (caller != NULL) { djui_panel_menu_back(NULL); } - return; - } - - if (inPlayerMenu) { - inPlayerMenu = false; - djui_panel_menu_back(NULL); - } else { - inPlayerMenu = true; } } +static void djui_panel_player_destroy(UNUSED struct DjuiBase* caller) { + gInPlayerMenu = false; +} + void djui_panel_player_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 3 + 64 * 2 + 16 * 5; - djui_panel_player_prevent_demo(NULL); + gInPlayerMenu = true; - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiRect* rect1 = djui_rect_create(&body->base); - djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&rect1->base, 1.0f, 32); - djui_base_set_color(&rect1->base, 0, 0, 0, 0); + struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32); { struct DjuiText* text1 = djui_text_create(&rect1->base, "Name"); djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); @@ -294,10 +260,7 @@ void djui_panel_player_create(struct DjuiBase* caller) { for (int i = 0; i < CT_MAX; i++) { modelChoices[i] = gCharacters[i].name; } - struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Model", modelChoices, CT_MAX, &configPlayerModel); - djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&selectionbox1->base, 1.0f, 32); - djui_interactable_hook_value_change(&selectionbox1->base, djui_panel_player_value_changed); + djui_selectionbox_create(&body->base, "Model", modelChoices, CT_MAX, &configPlayerModel, djui_panel_player_value_changed); char* paletteChoices[PALETTE_PRESET_MAX+1] = { "Mario", @@ -342,22 +305,12 @@ void djui_panel_player_create(struct DjuiBase* caller) { } } - sPalettePresetSelection = djui_selectionbox_create(&body->base, "Palette Preset", paletteChoices, PALETTE_PRESET_MAX+1, &sPalettePresetIndex); - djui_base_set_size_type(&sPalettePresetSelection->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&sPalettePresetSelection->base, 1.0f, 32); - djui_interactable_hook_value_change(&sPalettePresetSelection->base, djui_panel_player_value_changed); + sPalettePresetSelection = djui_selectionbox_create(&body->base, "Palette Preset", paletteChoices, PALETTE_PRESET_MAX+1, &sPalettePresetIndex, djui_panel_player_value_changed); - struct DjuiButton* editPaletteButton = djui_button_create(&body->base, "Edit Palette"); - djui_base_set_size_type(&editPaletteButton->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&editPaletteButton->base, 1.0f, 64); - djui_interactable_hook_click(&editPaletteButton->base, djui_panel_player_edit_palette_create); - - struct DjuiButton* button6 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_button_set_style(button6, 1); - djui_interactable_hook_click(&button6->base, djui_panel_player_prevent_demo); + djui_button_create(&body->base, "Edit Palette", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_edit_palette_create); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + struct DjuiPanel* p = djui_panel_add(caller, panel, NULL); + p->on_panel_destroy = djui_panel_player_destroy; } diff --git a/src/pc/djui/djui_panel_playerlist.c b/src/pc/djui/djui_panel_playerlist.c index fa13edfe6..a815d5867 100644 --- a/src/pc/djui/djui_panel_playerlist.c +++ b/src/pc/djui/djui_panel_playerlist.c @@ -66,7 +66,8 @@ void djui_panel_playerlist_on_render_pre(UNUSED struct DjuiBase* base, UNUSED bo void djui_panel_playerlist_create(UNUSED struct DjuiBase* caller) { f32 bodyHeight = (MAX_PLAYERS * 32) + (MAX_PLAYERS - 1) * 4; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R\\#00b3ff\\S"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R\\#00b3ff\\S"); + djui_three_panel_set_body_size(panel, bodyHeight); gDjuiPlayerList = panel; panel->base.on_render_pre = djui_panel_playerlist_on_render_pre; djui_base_set_alignment(&panel->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER); diff --git a/src/pc/djui/djui_panel_sound.c b/src/pc/djui/djui_panel_sound.c index 0e9f23e11..edc595ab6 100644 --- a/src/pc/djui/djui_panel_sound.c +++ b/src/pc/djui/djui_panel_sound.c @@ -3,36 +3,16 @@ #include "src/pc/configfile.h" void djui_panel_sound_create(struct DjuiBase* caller) { - f32 bodyHeight = 32 * 4 + 64 * 1 + 16 * 4; - - struct DjuiBase* defaultBase = NULL; - struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\S\\#1be700\\O\\#00b3ff\\U\\#ffef00\\N\\#ff0800\\D"); + struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\S\\#1be700\\O\\#00b3ff\\U\\#ffef00\\N\\#ff0800\\D"); struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel); { - struct DjuiSlider* slider1 = djui_slider_create(&body->base, "Master Volume", &configMasterVolume, 0, 127); - djui_base_set_size_type(&slider1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&slider1->base, 1.0f, 32); - defaultBase = &slider1->base; - - struct DjuiSlider* slider2 = djui_slider_create(&body->base, "Music Volume", &configMusicVolume, 0, 127); - djui_base_set_size_type(&slider2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&slider2->base, 1.0f, 32); - - struct DjuiSlider* slider3 = djui_slider_create(&body->base, "Sfx Volume", &configSfxVolume, 0, 127); - djui_base_set_size_type(&slider3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&slider3->base, 1.0f, 32); - - struct DjuiSlider* slider4 = djui_slider_create(&body->base, "Env Volume", &configEnvVolume, 0, 127); - djui_base_set_size_type(&slider4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&slider4->base, 1.0f, 32); - - struct DjuiButton* button6 = djui_button_create(&body->base, "Back"); - djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); - djui_base_set_size(&button6->base, 1.0f, 64); - djui_button_set_style(button6, 1); - djui_interactable_hook_click(&button6->base, djui_panel_menu_back); + djui_slider_create(&body->base, "Master Volume", &configMasterVolume, 0, 127, NULL); + djui_slider_create(&body->base, "Music Volume", &configMusicVolume, 0, 127, NULL); + djui_slider_create(&body->base, "Sfx Volume", &configSfxVolume, 0, 127, NULL); + djui_slider_create(&body->base, "Env Volume", &configEnvVolume, 0, 127, NULL); + djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } - djui_panel_add(caller, &panel->base, defaultBase); + djui_panel_add(caller, panel, NULL); } diff --git a/src/pc/djui/djui_rect.c b/src/pc/djui/djui_rect.c index 33592f493..c6fb7f061 100644 --- a/src/pc/djui/djui_rect.c +++ b/src/pc/djui/djui_rect.c @@ -40,3 +40,11 @@ struct DjuiRect* djui_rect_create(struct DjuiBase* parent) { return rect; } + +struct DjuiRect* djui_rect_container_create(struct DjuiBase* parent, f32 height) { + struct DjuiRect* rect = djui_rect_create(parent); + djui_base_set_size_type(&rect->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(&rect->base, 1.0f, height); + djui_base_set_color(&rect->base, 0, 0, 0, 0); + return rect; +} diff --git a/src/pc/djui/djui_rect.h b/src/pc/djui/djui_rect.h index 30fdd1958..3fb15d082 100644 --- a/src/pc/djui/djui_rect.h +++ b/src/pc/djui/djui_rect.h @@ -7,3 +7,4 @@ struct DjuiRect { bool djui_rect_render(struct DjuiBase* base); struct DjuiRect* djui_rect_create(struct DjuiBase* parent); +struct DjuiRect* djui_rect_container_create(struct DjuiBase* parent, f32 height); diff --git a/src/pc/djui/djui_selectionbox.c b/src/pc/djui/djui_selectionbox.c index 1991400f1..4f4782d43 100644 --- a/src/pc/djui/djui_selectionbox.c +++ b/src/pc/djui/djui_selectionbox.c @@ -72,7 +72,7 @@ static void djui_selectionbox_destroy(struct DjuiBase* base) { free(selectionbox); } -struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value) { +struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value, void (*on_value_change)(struct DjuiBase*)) { struct DjuiSelectionbox* selectionbox = calloc(1, sizeof(struct DjuiSelectionbox)); struct DjuiBase* base = &selectionbox->base; @@ -124,5 +124,9 @@ struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const base->get_cursor_hover_location = djui_selectionbox_get_cursor_hover_location; + djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_base_set_size(base, 1.0f, 32); + djui_interactable_hook_value_change(base, on_value_change); + return selectionbox; } diff --git a/src/pc/djui/djui_selectionbox.h b/src/pc/djui/djui_selectionbox.h index 56fdcc7b6..a0e28ff54 100644 --- a/src/pc/djui/djui_selectionbox.h +++ b/src/pc/djui/djui_selectionbox.h @@ -12,5 +12,5 @@ struct DjuiSelectionbox { u8 choiceCount; }; -struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value); +struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value, void (*on_value_change)(struct DjuiBase*)); void djui_selectionbox_update_value(struct DjuiBase* base); \ No newline at end of file diff --git a/src/pc/djui/djui_slider.c b/src/pc/djui/djui_slider.c index d9b8a653d..4afde31ac 100644 --- a/src/pc/djui/djui_slider.c +++ b/src/pc/djui/djui_slider.c @@ -98,7 +98,7 @@ static void djui_slider_destroy(struct DjuiBase* base) { free(slider); } -struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max) { +struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max, void (*on_value_change)(struct DjuiBase*)) { struct DjuiSlider* slider = calloc(1, sizeof(struct DjuiSlider)); struct DjuiBase* base = &slider->base; @@ -136,5 +136,9 @@ struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* messa base->get_cursor_hover_location = djui_slider_get_cursor_hover_location; + djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE); + djui_interactable_hook_value_change(base, on_value_change); + djui_base_set_size(base, 1.0f, 32); + return slider; } diff --git a/src/pc/djui/djui_slider.h b/src/pc/djui/djui_slider.h index f5da27996..69704b767 100644 --- a/src/pc/djui/djui_slider.h +++ b/src/pc/djui/djui_slider.h @@ -11,5 +11,5 @@ struct DjuiSlider { unsigned int max; }; -struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max); +struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max, void (*on_value_change)(struct DjuiBase*)); void djui_slider_update_value(struct DjuiBase* base); diff --git a/src/pc/djui/djui_three_panel.c b/src/pc/djui/djui_three_panel.c index 0200a823b..b3a41ee57 100644 --- a/src/pc/djui/djui_three_panel.c +++ b/src/pc/djui/djui_three_panel.c @@ -57,6 +57,29 @@ void djui_three_panel_set_min_footer_size(struct DjuiThreePanel* threePanel, f32 threePanel->minFooterSize.value = minFooterSize; } +void djui_three_panel_recalculate_body_size(struct DjuiThreePanel* threePanel) { + struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(threePanel); + struct DjuiBaseChild* child = body->base.child; + + if (threePanel->bodySize.value != 0) { return; } + + if (body->margin.type != DJUI_SVT_ABSOLUTE) { + return; + } + + f32 bodyHeight = body->margin.value; + while (child != NULL) { + bodyHeight += body->margin.value; + bodyHeight += child->base->height.value; + if (child->base->height.type != DJUI_SVT_ABSOLUTE) { + return; + } + child = child->next; + } + if (bodyHeight < 0) { bodyHeight = 0; } + djui_three_panel_set_body_size(threePanel, bodyHeight); +} + //////////// // events // //////////// diff --git a/src/pc/djui/djui_three_panel.h b/src/pc/djui/djui_three_panel.h index fb76c84d2..0d12f66ea 100644 --- a/src/pc/djui/djui_three_panel.h +++ b/src/pc/djui/djui_three_panel.h @@ -18,5 +18,6 @@ void djui_three_panel_set_body_size_type(struct DjuiThreePanel* threePanel, enum void djui_three_panel_set_body_size(struct DjuiThreePanel* threePanel, f32 bodySize); void djui_three_panel_set_min_footer_size_type(struct DjuiThreePanel* threePanel, enum DjuiScreenValueType minFooterSizeType); void djui_three_panel_set_min_footer_size(struct DjuiThreePanel* threePanel, f32 minFooterSize); +void djui_three_panel_recalculate_body_size(struct DjuiThreePanel* threePanel); struct DjuiThreePanel* djui_three_panel_create(struct DjuiBase* parent, f32 minHeaderSize, f32 bodySize, f32 minFooterSize);