refactor padding, required size. Working on colors
This commit is contained in:
51
src/ui/ui.c
51
src/ui/ui.c
@@ -92,6 +92,18 @@ fn void ui_push_box(ui_box_t *parent, ui_box_t *box) {
|
||||
parent->node_count += 1;
|
||||
}
|
||||
|
||||
fn ui_axis2_t ui_axis_from_lop(ui_lop_t op) {
|
||||
switch (op) {
|
||||
case ui_lop_cut_top: return ui_axis2_y; break;
|
||||
case ui_lop_cut_bottom: return ui_axis2_y; break;
|
||||
case ui_lop_cut_left: return ui_axis2_x; break;
|
||||
case ui_lop_cut_right: return ui_axis2_x; break;
|
||||
case ui_lop_idle: return ui_axis2_invalid; break;
|
||||
default_is_invalid;
|
||||
}
|
||||
return ui_axis2_invalid;
|
||||
}
|
||||
|
||||
fn r2f32_t ui_next_rect(ui_lop_t op, r2f32_t *rect, v2f32_t required_size) {
|
||||
switch (op) {
|
||||
case ui_lop_cut_top: return r2f32_cut_top_no_squash(rect, required_size.y); break;
|
||||
@@ -127,9 +139,7 @@ fn ui_box_t *ui_build_box_from_id(ui_code_loc_t loc, ui_box_flags_t flags, ui_id
|
||||
box->flags = flags;
|
||||
box->text_align = ui_top_text_align();
|
||||
box->border_thickness = ui_top_border_thickness();
|
||||
box->background_color = ui_top_background_color();
|
||||
box->text_color = ui_top_text_color();
|
||||
box->border_color = ui_top_border_color();
|
||||
ui_box_fill_with_colors(box);
|
||||
ui_push_box(ui->top, box);
|
||||
return box;
|
||||
}
|
||||
@@ -139,10 +149,13 @@ fn ui_box_t *ui_build_box_from_string(ui_code_loc_t loc, ui_box_flags_t flags, s
|
||||
ui_box_t *box = ui_build_box_from_id(loc, flags, id);
|
||||
box->string = ui_get_display_string(string);
|
||||
v2f32_t string_size = rn_measure_string(rn_state.main_font, box->string);
|
||||
// @todo: this is un0intuitive
|
||||
if (ui->required_width_stack) string_size.x = ui->required_width_stack->value;
|
||||
if (ui->required_height_stack) string_size.y = ui->required_height_stack->value;
|
||||
if (ui->padding_stack) string_size = v2f32_add(string_size, ui->padding_stack->value);
|
||||
ui_axis2_t axis = ui_axis_from_lop(ui_top_lop());
|
||||
if (ui->required_size_stack && (axis == ui_axis2_x || axis == ui_axis2_y)) {
|
||||
string_size.e[axis] = ui_top_required_size();
|
||||
}
|
||||
if (ui->padding_stack && (axis == ui_axis2_x || axis == ui_axis2_y)) {
|
||||
string_size.e[axis] += ui_top_padding();
|
||||
}
|
||||
r2f32_t rect = ui_next_rect(ui->lop_stack->value, &ui->top->rect, string_size);
|
||||
ui_set_rect(box, rect);
|
||||
return box;
|
||||
@@ -205,7 +218,8 @@ fn ui_signal_t ui__radio_button(ui_code_loc_t loc, i32 *value, i32 value_clicked
|
||||
ui_box_t *box = ui_build_box_from_string(loc, (ui_box_flags_t){ .draw_border = true, .draw_rect = true, .draw_text = true }, string);
|
||||
ui_signal_t signal = ui_signal_from_box(box);
|
||||
if (signal.clicked) *value = value_clicked;
|
||||
if (*value == value_clicked) box->background_color = ui_top_radio_color();
|
||||
// @todo?
|
||||
if (*value == value_clicked) box->background_color = ui_top_bg_active_color();
|
||||
return signal;
|
||||
}
|
||||
|
||||
@@ -294,18 +308,15 @@ fn void ui__draw_box(app_frame_t *frame, ui_box_t *box) {
|
||||
v4f32_t border_color = box->border_color;
|
||||
|
||||
if (ui_is_active_box(box)) {
|
||||
f32 active_t = f32_clamp01(f32_ease_out_n(box->active_t, 50.f));
|
||||
// background_color = v4f32_lerp(background_color, v4f32(1,1,1,1), 1.0);
|
||||
text_color = v4f32_lerp(text_color, v4f32(1,1,1,1), active_t);
|
||||
f32 active_t = f32_ease_out_n(box->active_t, 50.f);
|
||||
active_t = f32_clamp01(active_t);
|
||||
background_color = v4f32_lerp(background_color, box->bg_active_color, 1.0);
|
||||
text_color = v4f32_lerp(text_color, box->text_active_color, active_t);
|
||||
} else if (ui_is_hot_box(box)) {
|
||||
f32 hot_t = f32_ease_out_n(box->hot_t, 25.f);
|
||||
v4f32_t hsla_rect = v4f32_rgba_to_hsla(background_color);
|
||||
hsla_rect.s = f32_lerp(hsla_rect.s, 1.0f, hot_t);
|
||||
background_color = v4f32_hsla_to_rgba(hsla_rect);
|
||||
|
||||
v4f32_t hsla_text = v4f32_rgba_to_hsla(text_color);
|
||||
hsla_text = v4f32_lerp(hsla_text, v4f32(0.2f, 0.3f, 0.3f, 1.0f), hot_t);
|
||||
text_color = v4f32_hsla_to_rgba(hsla_text);
|
||||
f32 hot_t = f32_ease_out_n(box->hot_t, 3.f);
|
||||
hot_t = f32_clamp01(hot_t);
|
||||
background_color = v4f32_lerp(background_color, box->bg_hot_color, hot_t);
|
||||
text_color = v4f32_lerp(background_color, box->text_hot_color, hot_t);
|
||||
}
|
||||
|
||||
|
||||
@@ -583,7 +594,7 @@ fn void ui_demo_update(app_frame_t *frame, mt_tweak_t *tweak_table, i32 tweak_co
|
||||
ui_box_t *top_box = ui_box0((ui_box_flags_t){.draw_rect = true, .clip_rect = true});
|
||||
ui_set_rect(top_box, r2f32_cut_top(&ui->top->rect, ui_em(1.5f)));
|
||||
|
||||
ui_set_padding(v2f32(ui_em(3), 0))
|
||||
ui_set_padding(ui_em(3))
|
||||
ui_set_text_align(ui_text_align_center)
|
||||
ui_set_lop(ui_lop_cut_left)
|
||||
ui_set_top(top_box) {
|
||||
|
||||
Reference in New Issue
Block a user