mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
Refactored interactable djui elements
This commit is contained in:
parent
809dfd6373
commit
880afd79c3
9 changed files with 243 additions and 277 deletions
|
|
@ -14,6 +14,9 @@ void djui_base_set_enabled(struct DjuiBase* base, bool enabled) {
|
|||
if (base->interactable != NULL && base->interactable->on_enabled_change != NULL) {
|
||||
base->interactable->on_enabled_change(base);
|
||||
}
|
||||
if (base->interactable != NULL && base->interactable->update_style != NULL) {
|
||||
base->interactable->update_style(base);
|
||||
}
|
||||
}
|
||||
|
||||
void djui_base_set_location(struct DjuiBase* base, f32 x, f32 y) {
|
||||
|
|
|
|||
|
|
@ -1,39 +1,33 @@
|
|||
#include "djui.h"
|
||||
|
||||
static void djui_button_set_default_style(struct DjuiBase* base) {
|
||||
static void djui_button_update_style(struct DjuiBase* base) {
|
||||
struct DjuiButton* button = (struct DjuiButton*)base;
|
||||
u8 borderBrightness = button->style ? 100 : 150;
|
||||
u8 rectBrightness = button->style ? 150 : 222;
|
||||
djui_base_set_border_color(base, borderBrightness, borderBrightness, borderBrightness, 255);
|
||||
djui_base_set_color(&button->rect->base, rectBrightness, rectBrightness, rectBrightness, 255);
|
||||
djui_base_set_location(&button->text->base, 0.0f, 0.0f);
|
||||
if (!button->base.enabled) {
|
||||
u8 borderBrightness = button->style ? 50 : 75;
|
||||
u8 rectBrightness = button->style ? 75 : 111;
|
||||
djui_base_set_border_color(base, borderBrightness, borderBrightness, borderBrightness, 255);
|
||||
djui_base_set_color(&button->rect->base, rectBrightness, rectBrightness, rectBrightness, 255);
|
||||
djui_base_set_location(&button->text->base, 0.0f, 0.0f);
|
||||
} else if (gDjuiCursorDownOn == base) {
|
||||
djui_base_set_border_color(base, 0, 84, 153, 255);
|
||||
djui_base_set_color(&button->rect->base, 204, 228, 247, 255);
|
||||
djui_base_set_location(&button->text->base, 0.5f, 0.5f);
|
||||
} else if (gDjuiHovered == base) {
|
||||
djui_base_set_border_color(base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&button->rect->base, 229, 241, 251, 255);
|
||||
djui_base_set_location(&button->text->base, -0.5f, -1.0f);
|
||||
} else {
|
||||
u8 borderBrightness = button->style ? 100 : 150;
|
||||
u8 rectBrightness = button->style ? 150 : 222;
|
||||
djui_base_set_border_color(base, borderBrightness, borderBrightness, borderBrightness, 255);
|
||||
djui_base_set_color(&button->rect->base, rectBrightness, rectBrightness, rectBrightness, 255);
|
||||
djui_base_set_location(&button->text->base, 0.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void djui_button_set_style(struct DjuiButton* button, u8 style) {
|
||||
button->style = style;
|
||||
djui_button_set_default_style(&button->base);
|
||||
}
|
||||
|
||||
static void djui_button_on_hover(struct DjuiBase* base) {
|
||||
struct DjuiButton* button = (struct DjuiButton*)base;
|
||||
djui_base_set_border_color(base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&button->rect->base, 229, 241, 251, 255);
|
||||
djui_base_set_location(&button->text->base, -0.5f, -1.0f);
|
||||
}
|
||||
|
||||
static void djui_button_on_hover_end(struct DjuiBase* base) {
|
||||
djui_button_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_button_on_cursor_down_begin(struct DjuiBase* base, UNUSED bool inputCursor) {
|
||||
struct DjuiButton* button = (struct DjuiButton*)base;
|
||||
djui_base_set_border_color(base, 0, 84, 153, 255);
|
||||
djui_base_set_color(&button->rect->base, 204, 228, 247, 255);
|
||||
djui_base_set_location(&button->text->base, 0.5f, 0.5f);
|
||||
}
|
||||
|
||||
static void djui_button_on_cursor_down_end(struct DjuiBase* base) {
|
||||
djui_button_set_default_style(base);
|
||||
djui_button_update_style(&button->base);
|
||||
}
|
||||
|
||||
static void djui_button_destroy(struct DjuiBase* base) {
|
||||
|
|
@ -48,9 +42,7 @@ struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* messa
|
|||
djui_base_init(parent, base, NULL, djui_button_destroy);
|
||||
djui_base_set_size(base, 200, 64);
|
||||
djui_base_set_border_width(base, 2);
|
||||
djui_interactable_create(base);
|
||||
djui_interactable_hook_hover(base, djui_button_on_hover, djui_button_on_hover_end);
|
||||
djui_interactable_hook_cursor_down(base, djui_button_on_cursor_down_begin, NULL, djui_button_on_cursor_down_end);
|
||||
djui_interactable_create(base, djui_button_update_style);
|
||||
button->style = 0;
|
||||
|
||||
struct DjuiRect* rect = djui_rect_create(&button->base);
|
||||
|
|
@ -66,7 +58,7 @@ 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_button_set_default_style(base);
|
||||
djui_button_update_style(base);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +1,27 @@
|
|||
#include "djui.h"
|
||||
|
||||
static void djui_checkbox_set_default_style(struct DjuiBase* base) {
|
||||
static void djui_checkbox_update_style(struct DjuiBase* base) {
|
||||
struct DjuiCheckbox* checkbox = (struct DjuiCheckbox*)base;
|
||||
djui_base_set_border_color(&checkbox->rect->base, 173, 173, 173, 255);
|
||||
djui_base_set_color(&checkbox->rect->base, 0, 0, 0, 0);
|
||||
djui_base_set_color(&checkbox->text->base, 200, 200, 200, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 200, 200, 200, 255);
|
||||
}
|
||||
|
||||
static void djui_checkbox_on_hover(struct DjuiBase* base) {
|
||||
struct DjuiCheckbox* checkbox = (struct DjuiCheckbox*)base;
|
||||
djui_base_set_border_color(&checkbox->rect->base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&checkbox->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 229, 241, 251, 255);
|
||||
if (!checkbox->base.enabled) {
|
||||
djui_base_set_border_color(&checkbox->rect->base, 93, 93, 93, 255);
|
||||
djui_base_set_color(&checkbox->rect->base, 0, 0, 0, 0);
|
||||
djui_base_set_color(&checkbox->text->base, 100, 100, 100, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 100, 100, 100, 255);
|
||||
} else if (gDjuiCursorDownOn == base) {
|
||||
djui_base_set_border_color(&checkbox->rect->base, 20, 170, 255, 255);
|
||||
djui_base_set_color(&checkbox->rect->base, 255, 255, 255, 32);
|
||||
djui_base_set_color(&checkbox->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 255, 255, 255, 255);
|
||||
} else if (gDjuiHovered == base) {
|
||||
djui_base_set_border_color(&checkbox->rect->base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&checkbox->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 229, 241, 251, 255);
|
||||
} else {
|
||||
djui_base_set_border_color(&checkbox->rect->base, 173, 173, 173, 255);
|
||||
djui_base_set_color(&checkbox->rect->base, 0, 0, 0, 0);
|
||||
djui_base_set_color(&checkbox->text->base, 200, 200, 200, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 200, 200, 200, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_checkbox_get_cursor_hover_location(struct DjuiBase* base, f32* x, f32* y) {
|
||||
|
|
@ -22,16 +31,8 @@ static void djui_checkbox_get_cursor_hover_location(struct DjuiBase* base, f32*
|
|||
*y = (rectBase->elem.y + rectBase->elem.height * 3.0f / 4.0f);
|
||||
}
|
||||
|
||||
static void djui_checkbox_on_hover_end(struct DjuiBase* base) {
|
||||
djui_checkbox_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_checkbox_on_cursor_down_begin(struct DjuiBase* base, UNUSED bool inputCursor) {
|
||||
struct DjuiCheckbox* checkbox = (struct DjuiCheckbox*)base;
|
||||
djui_base_set_border_color(&checkbox->rect->base, 20, 170, 255, 255);
|
||||
djui_base_set_color(&checkbox->rect->base, 255, 255, 255, 32);
|
||||
djui_base_set_color(&checkbox->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 255, 255, 255, 255);
|
||||
*checkbox->value = !(*checkbox->value);
|
||||
djui_base_set_visible(&checkbox->rectValue->base, *checkbox->value);
|
||||
if (base != NULL && base->interactable != NULL && base->interactable->on_value_change != NULL) {
|
||||
|
|
@ -39,10 +40,6 @@ static void djui_checkbox_on_cursor_down_begin(struct DjuiBase* base, UNUSED boo
|
|||
}
|
||||
}
|
||||
|
||||
static void djui_checkbox_on_cursor_down_end(struct DjuiBase* base) {
|
||||
djui_checkbox_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_checkbox_destroy(struct DjuiBase* base) {
|
||||
struct DjuiCheckbox* checkbox = (struct DjuiCheckbox*)base;
|
||||
free(checkbox);
|
||||
|
|
@ -55,9 +52,8 @@ struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* m
|
|||
checkbox->value = value;
|
||||
|
||||
djui_base_init(parent, base, NULL, djui_checkbox_destroy);
|
||||
djui_interactable_create(base);
|
||||
djui_interactable_hook_hover(base, djui_checkbox_on_hover, djui_checkbox_on_hover_end);
|
||||
djui_interactable_hook_cursor_down(base, djui_checkbox_on_cursor_down_begin, NULL, djui_checkbox_on_cursor_down_end);
|
||||
djui_interactable_create(base, djui_checkbox_update_style);
|
||||
djui_interactable_hook_cursor_down(base, djui_checkbox_on_cursor_down_begin, NULL, NULL);
|
||||
|
||||
struct DjuiText* text = djui_text_create(&checkbox->base, message);
|
||||
djui_base_set_alignment(&text->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_CENTER);
|
||||
|
|
@ -82,9 +78,9 @@ struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* m
|
|||
djui_base_set_visible(&rectValue->base, *value);
|
||||
checkbox->rectValue = rectValue;
|
||||
|
||||
djui_checkbox_set_default_style(base);
|
||||
|
||||
base->get_cursor_hover_location = djui_checkbox_get_cursor_hover_location;
|
||||
|
||||
djui_checkbox_update_style(base);
|
||||
|
||||
return checkbox;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,21 @@ static u8 sHeldShift = 0;
|
|||
static u8 sHeldControl = 0;
|
||||
static u8 sCursorBlink = 0;
|
||||
|
||||
static void djui_inputbox_update_style(struct DjuiBase* base) {
|
||||
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
||||
if (!inputbox->base.enabled) {
|
||||
djui_base_set_border_color(base, 90, 90, 90, 255);
|
||||
djui_base_set_color(&inputbox->base, 140, 140, 140, 255);
|
||||
} else if (gDjuiCursorDownOn == base) {
|
||||
} else if (gDjuiHovered == base) {
|
||||
djui_base_set_border_color(base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&inputbox->base, 255, 255, 255, 255);
|
||||
} else {
|
||||
djui_base_set_border_color(base, 150, 150, 150, 255);
|
||||
djui_base_set_color(&inputbox->base, 240, 240, 240, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_inputbox_on_change(struct DjuiInputbox* inputbox) {
|
||||
struct DjuiBase* base = &inputbox->base;
|
||||
if (base != NULL && base->interactable != NULL && base->interactable->on_value_change != NULL) {
|
||||
|
|
@ -46,27 +61,6 @@ void djui_inputbox_hook_escape_press(struct DjuiInputbox* inputbox, void (*on_es
|
|||
inputbox->on_escape_press = on_escape_press;
|
||||
}
|
||||
|
||||
static void djui_inputbox_set_default_style(struct DjuiBase* base) {
|
||||
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
||||
if (inputbox->base.enabled) {
|
||||
djui_base_set_border_color(base, 150, 150, 150, 255);
|
||||
djui_base_set_color(&inputbox->base, 240, 240, 240, 255);
|
||||
} else {
|
||||
djui_base_set_border_color(base, 90, 90, 90, 255);
|
||||
djui_base_set_color(&inputbox->base, 140, 140, 140, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_inputbox_on_hover(struct DjuiBase* base) {
|
||||
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
||||
djui_base_set_border_color(base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&inputbox->base, 255, 255, 255, 255);
|
||||
}
|
||||
|
||||
static void djui_inputbox_on_hover_end(struct DjuiBase* base) {
|
||||
djui_inputbox_set_default_style(base);
|
||||
}
|
||||
|
||||
static u16 djui_inputbox_get_cursor_index(struct DjuiInputbox* inputbox) {
|
||||
struct DjuiBaseRect* comp = &inputbox->base.comp;
|
||||
const struct DjuiFont* font = gDjuiFonts[0];
|
||||
|
|
@ -92,10 +86,6 @@ static void djui_inputbox_on_cursor_down(struct DjuiBase* base) {
|
|||
inputbox->selection[0] = index;
|
||||
}
|
||||
|
||||
static void djui_inputbox_on_cursor_down_end(struct DjuiBase* base) {
|
||||
djui_inputbox_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_inputbox_on_cursor_down_begin(struct DjuiBase* base, UNUSED bool inputCursor) {
|
||||
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
||||
u16 index = djui_inputbox_get_cursor_index(inputbox);
|
||||
|
|
@ -103,9 +93,9 @@ static void djui_inputbox_on_cursor_down_begin(struct DjuiBase* base, UNUSED boo
|
|||
if (selLength != strlen(inputbox->buffer) || djui_interactable_is_input_focus(base)) {
|
||||
inputbox->selection[0] = index;
|
||||
inputbox->selection[1] = index;
|
||||
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, djui_inputbox_on_cursor_down, djui_inputbox_on_cursor_down_end);
|
||||
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, djui_inputbox_on_cursor_down, NULL);
|
||||
} else {
|
||||
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, NULL, djui_inputbox_on_cursor_down_end);
|
||||
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, NULL, NULL);
|
||||
}
|
||||
sCursorBlink = 0;
|
||||
djui_interactable_set_input_focus(base);
|
||||
|
|
@ -543,14 +533,13 @@ struct DjuiInputbox* djui_inputbox_create(struct DjuiBase* parent, u16 bufferSiz
|
|||
djui_base_set_size(base, 200, 32);
|
||||
djui_base_set_border_width(base, 2);
|
||||
djui_inputbox_set_text_color(inputbox, 0, 0, 0, 255);
|
||||
djui_interactable_create(base);
|
||||
djui_interactable_hook_hover(base, djui_inputbox_on_hover, djui_inputbox_on_hover_end);
|
||||
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, djui_inputbox_on_cursor_down, djui_inputbox_on_cursor_down_end);
|
||||
djui_interactable_create(base, djui_inputbox_update_style);
|
||||
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, djui_inputbox_on_cursor_down, NULL);
|
||||
djui_interactable_hook_key(base, djui_inputbox_on_key_down, djui_inputbox_on_key_up);
|
||||
djui_interactable_hook_focus(base, djui_inputbox_on_focus_begin, NULL, djui_inputbox_on_focus_end);
|
||||
djui_interactable_hook_text_input(base, djui_inputbox_on_text_input);
|
||||
djui_interactable_hook_enabled_change(base, djui_inputbox_set_default_style);
|
||||
djui_inputbox_set_default_style(base);
|
||||
|
||||
djui_inputbox_update_style(base);
|
||||
|
||||
return inputbox;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,9 @@
|
|||
#include "audio_defines.h"
|
||||
#include "audio/external.h"
|
||||
|
||||
#define CALL_CALLBACK(x) if (base->interactable->x != NULL) { base->interactable->x(base); }
|
||||
#define CALL_CALLBACK_PARAM(x, y) if (base->interactable->x != NULL) { base->interactable->x(base, y); }
|
||||
|
||||
enum PadHoldDirection { PAD_HOLD_DIR_NONE, PAD_HOLD_DIR_UP, PAD_HOLD_DIR_DOWN, PAD_HOLD_DIR_LEFT, PAD_HOLD_DIR_RIGHT };
|
||||
static enum PadHoldDirection sKeyboardHoldDirection = PAD_HOLD_DIR_NONE;
|
||||
static u16 sKeyboardButtons = 0;
|
||||
|
|
@ -16,7 +19,8 @@ static u16 sKeyboardButtons = 0;
|
|||
static bool sIgnoreInteractableUntilCursorReleased = false;
|
||||
|
||||
struct DjuiBase* gDjuiHovered = NULL;
|
||||
static struct DjuiBase* sInteractableFocus = NULL;
|
||||
struct DjuiBase* gDjuiCursorDownOn = NULL;
|
||||
struct DjuiBase* gInteractableFocus = NULL;
|
||||
static struct DjuiBase* sInteractableBinding = NULL;
|
||||
static struct DjuiBase* sMouseDown = NULL;
|
||||
bool gInteractableOverridePad = false;
|
||||
|
|
@ -24,53 +28,67 @@ OSContPad gInteractablePad = { 0 };
|
|||
static OSContPad sLastInteractablePad = { 0 };
|
||||
static int sLastMouseButtons = 0;
|
||||
|
||||
static void djui_interactable_on_click(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
static void djui_interactable_update_style(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_click == NULL) { return; }
|
||||
base->interactable->on_click(base);
|
||||
CALL_CALLBACK(update_style);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_click(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_click);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_hover(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_hover == NULL) { return; }
|
||||
base->interactable->on_hover(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_hover);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_hover_end(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_hover == NULL) { return; }
|
||||
base->interactable->on_hover_end(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_hover_end);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_cursor_down_begin(struct DjuiBase* base, bool inputCursor) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_cursor_down_begin == NULL) { return; }
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
if (gDjuiHovered != NULL) {
|
||||
djui_interactable_on_hover_end(gDjuiHovered);
|
||||
gDjuiHovered = NULL;
|
||||
}
|
||||
|
||||
base->interactable->on_cursor_down_begin(base, inputCursor);
|
||||
gDjuiCursorDownOn = base;
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK_PARAM(on_cursor_down_begin, inputCursor);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_cursor_down(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_cursor_down == NULL) { return; }
|
||||
|
||||
base->interactable->on_cursor_down(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_cursor_down);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_cursor_down_end(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_cursor_down_end == NULL) { return; }
|
||||
base->interactable->on_cursor_down_end(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
if (gDjuiCursorDownOn == base) {
|
||||
gDjuiCursorDownOn = NULL;
|
||||
}
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_cursor_down_end);
|
||||
|
||||
if (djui_cursor_inside_base(base)) {
|
||||
djui_interactable_on_click(base);
|
||||
|
|
@ -78,38 +96,43 @@ static void djui_interactable_on_cursor_down_end(struct DjuiBase* base) {
|
|||
}
|
||||
|
||||
static void djui_interactable_on_focus_begin(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_focus_begin == NULL) { return; }
|
||||
base->interactable->on_focus_begin(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_focus_begin);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_focus(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_focus == NULL) { return; }
|
||||
base->interactable->on_focus(base, &gInteractablePad);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK_PARAM(on_focus, &gInteractablePad);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_focus_end(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_focus_end == NULL) { return; }
|
||||
base->interactable->on_focus_end(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_focus_end);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_value_change(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_value_change == NULL) { return; }
|
||||
base->interactable->on_value_change(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_value_change);
|
||||
}
|
||||
|
||||
static void djui_interactable_on_bind(struct DjuiBase* base) {
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
if (base->interactable->on_bind == NULL) { return; }
|
||||
base->interactable->on_bind(base);
|
||||
if (base == NULL) { return; }
|
||||
if (base->interactable == NULL) { return; }
|
||||
|
||||
djui_interactable_update_style(base);
|
||||
CALL_CALLBACK(on_bind);
|
||||
}
|
||||
|
||||
static void djui_interactable_cursor_update_active(struct DjuiBase* base) {
|
||||
|
|
@ -152,14 +175,14 @@ void djui_interactable_set_binding(struct DjuiBase* base) {
|
|||
}
|
||||
|
||||
void djui_interactable_set_input_focus(struct DjuiBase* base) {
|
||||
djui_interactable_on_focus_end(sInteractableFocus);
|
||||
sInteractableFocus = base;
|
||||
djui_interactable_on_focus_end(gInteractableFocus);
|
||||
gInteractableFocus = base;
|
||||
djui_interactable_on_focus_begin(base);
|
||||
djui_cursor_set_visible(base == NULL);
|
||||
}
|
||||
|
||||
bool djui_interactable_is_input_focus(struct DjuiBase* base) {
|
||||
return sInteractableFocus == base;
|
||||
return gInteractableFocus == base;
|
||||
}
|
||||
|
||||
bool djui_interactable_on_key_down(int scancode) {
|
||||
|
|
@ -167,12 +190,12 @@ bool djui_interactable_on_key_down(int scancode) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool keyFocused = (sInteractableFocus != NULL)
|
||||
&& (sInteractableFocus->interactable != NULL)
|
||||
&& (sInteractableFocus->interactable->on_key_down != NULL);
|
||||
bool keyFocused = (gInteractableFocus != NULL)
|
||||
&& (gInteractableFocus->interactable != NULL)
|
||||
&& (gInteractableFocus->interactable->on_key_down != NULL);
|
||||
|
||||
if (keyFocused) {
|
||||
bool consume = sInteractableFocus->interactable->on_key_down(sInteractableFocus, scancode);
|
||||
bool consume = gInteractableFocus->interactable->on_key_down(gInteractableFocus, scancode);
|
||||
if (consume) {
|
||||
sKeyboardHoldDirection = PAD_HOLD_DIR_NONE;
|
||||
sKeyboardButtons = 0;
|
||||
|
|
@ -222,9 +245,9 @@ bool djui_interactable_on_key_down(int scancode) {
|
|||
|
||||
void djui_interactable_on_key_up(int scancode) {
|
||||
|
||||
bool keyFocused = (sInteractableFocus != NULL)
|
||||
&& (sInteractableFocus->interactable != NULL)
|
||||
&& (sInteractableFocus->interactable->on_key_up != NULL);
|
||||
bool keyFocused = (gInteractableFocus != NULL)
|
||||
&& (gInteractableFocus->interactable != NULL)
|
||||
&& (gInteractableFocus->interactable->on_key_up != NULL);
|
||||
|
||||
if (gDjuiPlayerList != NULL) {
|
||||
for (int i = 0; i < MAX_BINDS; i++) {
|
||||
|
|
@ -236,7 +259,7 @@ void djui_interactable_on_key_up(int scancode) {
|
|||
}
|
||||
|
||||
if (keyFocused) {
|
||||
sInteractableFocus->interactable->on_key_up(sInteractableFocus, scancode);
|
||||
gInteractableFocus->interactable->on_key_up(gInteractableFocus, scancode);
|
||||
sKeyboardHoldDirection = PAD_HOLD_DIR_NONE;
|
||||
sKeyboardButtons = 0;
|
||||
return;
|
||||
|
|
@ -253,10 +276,10 @@ void djui_interactable_on_key_up(int scancode) {
|
|||
}
|
||||
|
||||
void djui_interactable_on_text_input(char* text) {
|
||||
if (sInteractableFocus == NULL) { return; }
|
||||
if (sInteractableFocus->interactable == NULL) { return; }
|
||||
if (sInteractableFocus->interactable->on_text_input == NULL) { return; }
|
||||
sInteractableFocus->interactable->on_text_input(sInteractableFocus, text);
|
||||
if (gInteractableFocus == NULL) { return; }
|
||||
if (gInteractableFocus->interactable == NULL) { return; }
|
||||
if (gInteractableFocus->interactable->on_text_input == NULL) { return; }
|
||||
gInteractableFocus->interactable->on_text_input(gInteractableFocus, text);
|
||||
}
|
||||
|
||||
void djui_interactable_update_pad(void) {
|
||||
|
|
@ -295,7 +318,7 @@ void djui_interactable_update_pad(void) {
|
|||
validPadHold = true;
|
||||
}
|
||||
|
||||
if (validPadHold && sInteractableFocus == NULL) {
|
||||
if (validPadHold && gInteractableFocus == NULL) {
|
||||
switch (padHoldDirection) {
|
||||
case PAD_HOLD_DIR_UP: djui_cursor_move( 0, -1); break;
|
||||
case PAD_HOLD_DIR_DOWN: djui_cursor_move( 0, 1); break;
|
||||
|
|
@ -325,16 +348,16 @@ void djui_interactable_update(void) {
|
|||
}
|
||||
|
||||
// update focused
|
||||
if (sInteractableFocus) {
|
||||
if (gInteractableFocus) {
|
||||
u16 mainButtons = PAD_BUTTON_A | PAD_BUTTON_B;
|
||||
if ((mouseButtons & MOUSE_BUTTON_1) && !(sLastMouseButtons && MOUSE_BUTTON_1) && !djui_cursor_inside_base(sInteractableFocus)) {
|
||||
if ((mouseButtons & MOUSE_BUTTON_1) && !(sLastMouseButtons && MOUSE_BUTTON_1) && !djui_cursor_inside_base(gInteractableFocus)) {
|
||||
// clicked outside of focused
|
||||
djui_interactable_set_input_focus(NULL);
|
||||
} else if ((padButtons & mainButtons) && !(sLastInteractablePad.button & mainButtons)) {
|
||||
// pressed main face button
|
||||
djui_interactable_set_input_focus(NULL);
|
||||
} else {
|
||||
djui_interactable_on_focus(sInteractableFocus);
|
||||
djui_interactable_on_focus(gInteractableFocus);
|
||||
}
|
||||
} else if ((padButtons & PAD_BUTTON_B) && !(sLastInteractablePad.button & PAD_BUTTON_B)) {
|
||||
// pressed back button on controller
|
||||
|
|
@ -442,7 +465,7 @@ void djui_interactable_hook_enabled_change(struct DjuiBase *base,
|
|||
interactable->on_enabled_change = on_enabled_change;
|
||||
}
|
||||
|
||||
void djui_interactable_create(struct DjuiBase* base) {
|
||||
void djui_interactable_create(struct DjuiBase* base, void (*update_style)(struct DjuiBase*)) {
|
||||
|
||||
if (base->interactable != NULL) {
|
||||
free(base->interactable);
|
||||
|
|
@ -451,4 +474,6 @@ void djui_interactable_create(struct DjuiBase* base) {
|
|||
struct DjuiInteractable* interactable = calloc(1, sizeof(struct DjuiInteractable));
|
||||
memset(interactable, 0, sizeof(struct DjuiInteractable));
|
||||
base->interactable = interactable;
|
||||
|
||||
base->interactable->update_style = update_style;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#pragma pack(1)
|
||||
struct DjuiInteractable {
|
||||
bool enabled;
|
||||
void (*update_style)(struct DjuiBase*);
|
||||
void (*on_hover)(struct DjuiBase*);
|
||||
void (*on_hover_end)(struct DjuiBase*);
|
||||
void (*on_cursor_down_begin)(struct DjuiBase*, bool);
|
||||
|
|
@ -43,6 +44,8 @@ struct DjuiInteractable {
|
|||
extern bool gInteractableOverridePad;
|
||||
extern OSContPad gInteractablePad;
|
||||
extern struct DjuiBase* gDjuiHovered;
|
||||
extern struct DjuiBase* gDjuiCursorDownOn;
|
||||
extern struct DjuiBase* gInteractableFocus;
|
||||
|
||||
bool djui_interactable_is_binding(void);
|
||||
void djui_interactable_set_binding(struct DjuiBase* base);
|
||||
|
|
@ -87,4 +90,5 @@ void djui_interactable_hook_text_input(struct DjuiBase* base,
|
|||
void djui_interactable_hook_enabled_change(struct DjuiBase *base,
|
||||
void (*on_enabled_change)(struct DjuiBase*));
|
||||
|
||||
void djui_interactable_create(struct DjuiBase* base);
|
||||
void djui_interactable_create(struct DjuiBase* base,
|
||||
void (*update_style)(struct DjuiBase*));
|
||||
|
|
|
|||
|
|
@ -41,21 +41,7 @@ static void djui_panel_host_mods_description_create() {
|
|||
sDescriptionPanel = panel;
|
||||
}
|
||||
|
||||
static void djui_mod_checkbox_set_style(struct DjuiBase* base) {
|
||||
struct DjuiCheckbox* checkbox = (struct DjuiCheckbox*)base;
|
||||
int val = base->enabled ? 200 : 100;
|
||||
djui_base_set_border_color(&checkbox->rect->base, 173, 173, 173, 255);
|
||||
djui_base_set_color(&checkbox->rect->base, 0, 0, 0, 0);
|
||||
djui_base_set_color(&checkbox->text->base, val, val, val, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, val, val, val, 255);
|
||||
}
|
||||
|
||||
static void djui_mod_checkbox_on_hover(struct DjuiBase* base) {
|
||||
struct DjuiCheckbox* checkbox = (struct DjuiCheckbox*)base;
|
||||
djui_base_set_border_color(&checkbox->rect->base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&checkbox->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 229, 241, 251, 255);
|
||||
|
||||
char* description = "";
|
||||
if (base->tag >= 0 && base->tag < gModTableLocal.entryCount) {
|
||||
char* d = gModTableLocal.entries[base->tag].description;
|
||||
|
|
@ -66,7 +52,11 @@ static void djui_mod_checkbox_on_hover(struct DjuiBase* base) {
|
|||
djui_text_set_text(sTooltip, description);
|
||||
}
|
||||
|
||||
static void djui_mod_checkbox_on_click(UNUSED struct DjuiBase* base) {
|
||||
static void djui_mod_checkbox_on_hover_end(UNUSED struct DjuiBase* base) {
|
||||
djui_text_set_text(sTooltip, "");
|
||||
}
|
||||
|
||||
static void djui_mod_checkbox_on_value_change(UNUSED struct DjuiBase* base) {
|
||||
mod_list_update_selectable();
|
||||
|
||||
u16 index = 0;
|
||||
|
|
@ -76,23 +66,13 @@ static void djui_mod_checkbox_on_click(UNUSED struct DjuiBase* base) {
|
|||
struct ModListEntry* entry = &gModTableLocal.entries[index];
|
||||
|
||||
djui_base_set_enabled(node->base, entry->selectable);
|
||||
djui_mod_checkbox_set_style(node->base);
|
||||
|
||||
|
||||
// iterate
|
||||
index++;
|
||||
node = node->next;
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_mod_checkbox_on_hover_end(struct DjuiBase* base) {
|
||||
struct DjuiCheckbox* checkbox = (struct DjuiCheckbox*)base;
|
||||
djui_base_set_border_color(&checkbox->rect->base, 173, 173, 173, 255);
|
||||
djui_base_set_color(&checkbox->rect->base, 0, 0, 0, 0);
|
||||
djui_base_set_color(&checkbox->text->base, 200, 200, 200, 255);
|
||||
djui_base_set_color(&checkbox->rectValue->base, 200, 200, 200, 255);
|
||||
djui_text_set_text(sTooltip, "");
|
||||
}
|
||||
|
||||
static void djui_panel_host_mods_destroy(struct DjuiBase* base) {
|
||||
struct DjuiThreePanel* threePanel = (struct DjuiThreePanel*)base;
|
||||
free(threePanel);
|
||||
|
|
@ -120,9 +100,8 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) {
|
|||
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, entry->selectable);
|
||||
djui_mod_checkbox_set_style(&checkbox->base);
|
||||
djui_interactable_hook_hover(&checkbox->base, djui_mod_checkbox_on_hover, djui_mod_checkbox_on_hover_end);
|
||||
djui_interactable_hook_click(&checkbox->base, djui_mod_checkbox_on_click);
|
||||
djui_interactable_hook_value_change(&checkbox->base, djui_mod_checkbox_on_value_change);
|
||||
}
|
||||
|
||||
struct DjuiButton* button1 = djui_button_create(&body->base, "Back");
|
||||
|
|
|
|||
|
|
@ -4,14 +4,38 @@
|
|||
|
||||
extern ALIGNED8 u8 texture_selectionbox_icon[];
|
||||
|
||||
static void djui_selectionbox_set_default_style(struct DjuiBase* base) {
|
||||
static void djui_selectionbox_update_style(struct DjuiBase* base) {
|
||||
struct DjuiSelectionbox* selectionbox = (struct DjuiSelectionbox*)base;
|
||||
djui_base_set_border_color(&selectionbox->rect->base, 150, 150, 150, 255);
|
||||
djui_base_set_color(&selectionbox->rect->base, 200, 200, 200, 255);
|
||||
djui_base_set_color(&selectionbox->rectText->base, 11, 11, 11, 255);
|
||||
djui_base_set_location(&selectionbox->rectText->base, 0.0f, 3.0f);
|
||||
djui_base_set_color(&selectionbox->rectImage->base, 0, 0, 0, 255);
|
||||
djui_base_set_color(&selectionbox->text->base, 200, 200, 200, 255);
|
||||
f32 x = selectionbox->rect->base.elem.x;
|
||||
bool activeRegion = (gCursorX >= x);
|
||||
|
||||
if (!selectionbox->base.enabled) {
|
||||
struct DjuiSelectionbox* selectionbox = (struct DjuiSelectionbox*)base;
|
||||
djui_base_set_border_color(&selectionbox->rect->base, 75, 75, 75, 255);
|
||||
djui_base_set_color(&selectionbox->rect->base, 100, 100, 100, 255);
|
||||
djui_base_set_color(&selectionbox->rectText->base, 5, 5, 5, 255);
|
||||
djui_base_set_location(&selectionbox->rectText->base, 0.0f, 3.0f);
|
||||
djui_base_set_color(&selectionbox->rectImage->base, 0, 0, 0, 255);
|
||||
djui_base_set_color(&selectionbox->text->base, 100, 100, 100, 255);
|
||||
} else if (gDjuiCursorDownOn == base && activeRegion) {
|
||||
djui_base_set_border_color(&selectionbox->rect->base, 0, 84, 153, 255);
|
||||
djui_base_set_color(&selectionbox->rect->base, 204, 228, 247, 255);
|
||||
djui_base_set_location(&selectionbox->rectText->base, 0.5f, 3.5f);
|
||||
djui_base_set_color(&selectionbox->text->base, 229, 241, 251, 255);
|
||||
} else if (gDjuiHovered == base && activeRegion) {
|
||||
djui_base_set_border_color(&selectionbox->rect->base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&selectionbox->rect->base, 229, 241, 251, 255);
|
||||
djui_base_set_location(&selectionbox->rectText->base, -1.0f, 2.0f);
|
||||
djui_base_set_color(&selectionbox->text->base, 229, 241, 251, 255);
|
||||
} else {
|
||||
struct DjuiSelectionbox* selectionbox = (struct DjuiSelectionbox*)base;
|
||||
djui_base_set_border_color(&selectionbox->rect->base, 150, 150, 150, 255);
|
||||
djui_base_set_color(&selectionbox->rect->base, 200, 200, 200, 255);
|
||||
djui_base_set_color(&selectionbox->rectText->base, 11, 11, 11, 255);
|
||||
djui_base_set_location(&selectionbox->rectText->base, 0.0f, 3.0f);
|
||||
djui_base_set_color(&selectionbox->rectImage->base, 0, 0, 0, 255);
|
||||
djui_base_set_color(&selectionbox->text->base, 200, 200, 200, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_selectionbox_get_cursor_hover_location(struct DjuiBase* base, f32* x, f32* y) {
|
||||
|
|
@ -21,45 +45,16 @@ static void djui_selectionbox_get_cursor_hover_location(struct DjuiBase* base, f
|
|||
*y = (rectBase->elem.y + rectBase->elem.height * 3.0f / 4.0f);
|
||||
}
|
||||
|
||||
static void djui_selectionbox_on_hover(struct DjuiBase* base) {
|
||||
struct DjuiSelectionbox* selectionbox = (struct DjuiSelectionbox*)base;
|
||||
f32 x = selectionbox->rect->base.elem.x;
|
||||
if (gCursorX >= x) {
|
||||
djui_base_set_border_color(&selectionbox->rect->base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&selectionbox->rect->base, 229, 241, 251, 255);
|
||||
djui_base_set_location(&selectionbox->rectText->base, -1.0f, 2.0f);
|
||||
djui_base_set_color(&selectionbox->text->base, 229, 241, 251, 255);
|
||||
} else {
|
||||
djui_selectionbox_set_default_style(base);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_selectionbox_on_hover_end(struct DjuiBase* base) {
|
||||
djui_selectionbox_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_selectionbox_on_cursor_down_begin(struct DjuiBase* base, UNUSED bool inputCursor) {
|
||||
struct DjuiSelectionbox* selectionbox = (struct DjuiSelectionbox*)base;
|
||||
f32 x = selectionbox->rect->base.elem.x;
|
||||
if (gCursorX >= x) {
|
||||
djui_base_set_border_color(&selectionbox->rect->base, 0, 84, 153, 255);
|
||||
djui_base_set_color(&selectionbox->rect->base, 204, 228, 247, 255);
|
||||
djui_base_set_location(&selectionbox->rectText->base, 0.5f, 3.5f);
|
||||
djui_base_set_color(&selectionbox->text->base, 229, 241, 251, 255);
|
||||
|
||||
*selectionbox->value = (*selectionbox->value + 1) % selectionbox->choiceCount;
|
||||
djui_text_set_text(selectionbox->rectText, selectionbox->choices[*selectionbox->value]);
|
||||
if (base != NULL && base->interactable != NULL && base->interactable->on_value_change != NULL) {
|
||||
base->interactable->on_value_change(base);
|
||||
}
|
||||
}
|
||||
else {
|
||||
djui_selectionbox_set_default_style(base);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_selectionbox_on_cursor_down_end(struct DjuiBase* base) {
|
||||
djui_selectionbox_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_selectionbox_destroy(struct DjuiBase* base) {
|
||||
|
|
@ -85,9 +80,8 @@ struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const
|
|||
selectionbox->choiceCount = choiceCount;
|
||||
|
||||
djui_base_init(parent, base, NULL, djui_selectionbox_destroy);
|
||||
djui_interactable_create(base);
|
||||
djui_interactable_hook_hover(base, djui_selectionbox_on_hover, djui_selectionbox_on_hover_end);
|
||||
djui_interactable_hook_cursor_down(base, djui_selectionbox_on_cursor_down_begin, NULL, djui_selectionbox_on_cursor_down_end);
|
||||
djui_interactable_create(base, djui_selectionbox_update_style);
|
||||
djui_interactable_hook_cursor_down(base, djui_selectionbox_on_cursor_down_begin, NULL, NULL);
|
||||
|
||||
struct DjuiText* text = djui_text_create(&selectionbox->base, message);
|
||||
djui_base_set_alignment(&text->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_CENTER);
|
||||
|
|
@ -120,7 +114,7 @@ struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const
|
|||
djui_base_set_alignment(&rectImage->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_CENTER);
|
||||
selectionbox->rectImage = rectImage;
|
||||
|
||||
djui_selectionbox_set_default_style(base);
|
||||
djui_selectionbox_update_style(base);
|
||||
|
||||
base->get_cursor_hover_location = djui_selectionbox_get_cursor_hover_location;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,33 @@
|
|||
#include "djui.h"
|
||||
|
||||
static void djui_slider_update_style(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
f32 x = slider->rect->base.elem.x;
|
||||
bool activeRegion = (gCursorX >= x);
|
||||
|
||||
if (!slider->base.enabled) {
|
||||
} else if (gInteractableFocus == base) {
|
||||
djui_base_set_border_color(&slider->rect->base, 20, 170, 255, 255);
|
||||
djui_base_set_color(&slider->rect->base, 255, 255, 255, 32);
|
||||
djui_base_set_color(&slider->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 255, 255, 255, 255);
|
||||
} else if (gDjuiCursorDownOn == base && activeRegion) {
|
||||
djui_base_set_border_color(&slider->rect->base, 20, 170, 255, 255);
|
||||
djui_base_set_color(&slider->rect->base, 255, 255, 255, 32);
|
||||
djui_base_set_color(&slider->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 255, 255, 255, 255);
|
||||
} else if (gDjuiHovered == base && activeRegion) {
|
||||
djui_base_set_border_color(&slider->rect->base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&slider->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 229, 241, 251, 255);
|
||||
} else {
|
||||
djui_base_set_border_color(&slider->rect->base, 173, 173, 173, 255);
|
||||
djui_base_set_color(&slider->rect->base, 0, 0, 0, 0);
|
||||
djui_base_set_color(&slider->text->base, 200, 200, 200, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 200, 200, 200, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_slider_update_value(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
u32 min = slider->min;
|
||||
|
|
@ -8,14 +36,6 @@ static void djui_slider_update_value(struct DjuiBase* base) {
|
|||
djui_base_set_size(&slider->rectValue->base, ((f32)*value - min) / ((f32)max - min), 1.0f);
|
||||
}
|
||||
|
||||
static void djui_slider_set_default_style(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
djui_base_set_border_color(&slider->rect->base, 173, 173, 173, 255);
|
||||
djui_base_set_color(&slider->rect->base, 0, 0, 0, 0);
|
||||
djui_base_set_color(&slider->text->base, 200, 200, 200, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 200, 200, 200, 255);
|
||||
}
|
||||
|
||||
static void djui_slider_get_cursor_hover_location(struct DjuiBase* base, f32* x, f32* y) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
struct DjuiBase* rectBase = &slider->rect->base;
|
||||
|
|
@ -23,22 +43,6 @@ static void djui_slider_get_cursor_hover_location(struct DjuiBase* base, f32* x,
|
|||
*y = (rectBase->elem.y + rectBase->elem.height * 3.0f / 4.0f);
|
||||
}
|
||||
|
||||
static void djui_slider_on_hover(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
f32 x = slider->rect->base.elem.x;
|
||||
if (gCursorX >= x) {
|
||||
djui_base_set_border_color(&slider->rect->base, 0, 120, 215, 255);
|
||||
djui_base_set_color(&slider->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 229, 241, 251, 255);
|
||||
} else {
|
||||
djui_slider_set_default_style(base);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_slider_on_hover_end(struct DjuiBase* base) {
|
||||
djui_slider_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_slider_on_cursor_down(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
u32 min = slider->min;
|
||||
|
|
@ -60,18 +64,12 @@ static void djui_slider_on_cursor_down_begin(struct DjuiBase* base, bool inputCu
|
|||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
f32 x = slider->rect->base.elem.x;
|
||||
if (gCursorX >= x) {
|
||||
djui_base_set_border_color(&slider->rect->base, 20, 170, 255, 255);
|
||||
djui_base_set_color(&slider->rect->base, 255, 255, 255, 32);
|
||||
djui_base_set_color(&slider->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 255, 255, 255, 255);
|
||||
if (inputCursor) {
|
||||
djui_interactable_set_input_focus(base);
|
||||
} else {
|
||||
slider->base.interactable->on_cursor_down = djui_slider_on_cursor_down;
|
||||
}
|
||||
}
|
||||
else {
|
||||
djui_slider_set_default_style(base);
|
||||
} else {
|
||||
slider->base.interactable->on_cursor_down = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -79,15 +77,6 @@ static void djui_slider_on_cursor_down_begin(struct DjuiBase* base, bool inputCu
|
|||
static void djui_slider_on_cursor_down_end(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
slider->base.interactable->on_cursor_down = NULL;
|
||||
djui_slider_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_slider_on_focus_begin(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
djui_base_set_border_color(&slider->rect->base, 20, 170, 255, 255);
|
||||
djui_base_set_color(&slider->rect->base, 255, 255, 255, 32);
|
||||
djui_base_set_color(&slider->text->base, 229, 241, 251, 255);
|
||||
djui_base_set_color(&slider->rectValue->base, 255, 255, 255, 255);
|
||||
}
|
||||
|
||||
static void djui_slider_on_focus(struct DjuiBase* base, OSContPad* pad) {
|
||||
|
|
@ -104,10 +93,6 @@ static void djui_slider_on_focus(struct DjuiBase* base, OSContPad* pad) {
|
|||
djui_slider_update_value(base);
|
||||
}
|
||||
|
||||
static void djui_slider_on_focus_end(struct DjuiBase* base) {
|
||||
djui_slider_set_default_style(base);
|
||||
}
|
||||
|
||||
static void djui_slider_destroy(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
free(slider);
|
||||
|
|
@ -122,10 +107,9 @@ struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* messa
|
|||
slider->max = max;
|
||||
|
||||
djui_base_init(parent, base, NULL, djui_slider_destroy);
|
||||
djui_interactable_create(base);
|
||||
djui_interactable_hook_hover(base, djui_slider_on_hover, djui_slider_on_hover_end);
|
||||
djui_interactable_create(base, djui_slider_update_style);
|
||||
djui_interactable_hook_cursor_down(base, djui_slider_on_cursor_down_begin, NULL, djui_slider_on_cursor_down_end);
|
||||
djui_interactable_hook_focus(base, djui_slider_on_focus_begin, djui_slider_on_focus, djui_slider_on_focus_end);
|
||||
djui_interactable_hook_focus(base, NULL, djui_slider_on_focus, NULL);
|
||||
|
||||
struct DjuiText* text = djui_text_create(&slider->base, message);
|
||||
djui_base_set_alignment(&text->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_CENTER);
|
||||
|
|
@ -148,7 +132,7 @@ struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* messa
|
|||
slider->rectValue = rectValue;
|
||||
|
||||
djui_slider_update_value(base);
|
||||
djui_slider_set_default_style(base);
|
||||
djui_slider_update_style(base);
|
||||
|
||||
base->get_cursor_hover_location = djui_slider_get_cursor_hover_location;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue