don't include generated math into build_file, use cache, ui
This commit is contained in:
@@ -66,8 +66,8 @@ fn void ui_push_box(ui_box_t *parent, ui_box_t *box) {
|
||||
parent->node_count += 1;
|
||||
}
|
||||
|
||||
fn r2f32_t ui_next_rect(ui_op_t layout_op, r2f32_t *rect, v2f32_t required_size) {
|
||||
switch (layout_op) {
|
||||
fn r2f32_t ui_next_rect(ui_op_t op, r2f32_t *rect, v2f32_t required_size) {
|
||||
switch (op) {
|
||||
case ui_op_cut_top: return r2f32_cut_top_no_squash(rect, required_size.y); break;
|
||||
case ui_op_cut_bottom: return r2f32_cut_bottom_no_squash(rect, required_size.y); break;
|
||||
case ui_op_cut_left: return r2f32_cut_left_no_squash(rect, required_size.x); break;
|
||||
@@ -95,8 +95,6 @@ fn ui_box_t *ui_build_box_from_id(ui_code_loc_t loc, ui_box_flags_t flags, ui_id
|
||||
box->id = id;
|
||||
box->flags = flags;
|
||||
ui_push_box(ui->top, box);
|
||||
r2f32_t rect = ui_next_rect(ui->top->layout_op, &ui->top->rect, rn_measure_string(&rn_state.main_font, box->string));
|
||||
ui_set_rect(box, rect);
|
||||
return box;
|
||||
}
|
||||
|
||||
@@ -104,6 +102,10 @@ fn ui_box_t *ui_build_box_from_string(ui_code_loc_t loc, ui_box_flags_t flags, s
|
||||
ui_id_t id = ui_id_from_string(ui_get_hash_string(string));
|
||||
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);
|
||||
string_size.x += 50;
|
||||
r2f32_t rect = ui_next_rect(ui->top->op, &ui->top->rect, string_size);
|
||||
ui_set_rect(box, rect);
|
||||
return box;
|
||||
}
|
||||
|
||||
@@ -146,7 +148,7 @@ fn ui_signal_t ui_signal_from_box(ui_box_t *box) {
|
||||
#define ui_button(...) ui__button(UILOC, __VA_ARGS__)
|
||||
fn ui_signal_t ui__button(ui_code_loc_t loc, char *str, ...) {
|
||||
S8_FMT(tcx.temp, str, string);
|
||||
ui_box_t *box = ui_build_box_from_string(loc, (ui_box_flags_t){ .draw_rect = true, .draw_text = true }, string);
|
||||
ui_box_t *box = ui_build_box_from_string(loc, (ui_box_flags_t){ .draw_rect = true, .draw_text = true, .fully_center_text = true }, string);
|
||||
ui_signal_t signal = ui_signal_from_box(box);
|
||||
return signal;
|
||||
}
|
||||
@@ -217,6 +219,7 @@ fn void ui_draw(app_frame_t *frame) {
|
||||
for (ui_preorder_iter_t it = ui_iterate_preorder(&ui->root); ui_preorder_iter_is_valid(it); ui_iter_advance_preorder(&it)) {
|
||||
ui_box_t *box = it.box;
|
||||
box->final_rect = box->full_rect;
|
||||
r2f32_t rect = box->final_rect;
|
||||
|
||||
v4f32_t rect_color = primary_color_global;
|
||||
v4f32_t text_color = black_color_global;
|
||||
@@ -230,18 +233,21 @@ fn void ui_draw(app_frame_t *frame) {
|
||||
}
|
||||
|
||||
if (box->flags.draw_rect) {
|
||||
rn_draw_rect(box->full_rect, rect_color);
|
||||
rn_draw_rect(rect, rect_color);
|
||||
}
|
||||
if (box->flags.draw_border) {
|
||||
rn_draw_rect_border(box->full_rect, accent2_color_global);
|
||||
rn_draw_rect_border(rect, accent2_color_global);
|
||||
}
|
||||
if (box->flags.draw_text) {
|
||||
v2f32_t string_size = rn_measure_string(&rn_state.main_font, box->string);
|
||||
v2f32_t rect_size = r2f32_get_size(box->full_rect);
|
||||
v2f32_t rect_size = r2f32_get_size(rect);
|
||||
v2f32_t rect_string_diff = v2f32_sub(rect_size, string_size);
|
||||
v2f32_t center_pos = v2f32_divs(rect_string_diff, 2);
|
||||
v2f32_t pos_in_rect = v2f32(box->full_rect.min.x, center_pos.y);
|
||||
v2f32_t pos = v2f32_add(pos_in_rect, box->full_rect.min);
|
||||
v2f32_t pos_in_rect = v2f32(0, center_pos.y);
|
||||
if (box->flags.fully_center_text) {
|
||||
pos_in_rect = center_pos;
|
||||
}
|
||||
v2f32_t pos = v2f32_add(pos_in_rect, rect.min);
|
||||
rn_draw_string(&rn_state.main_font, pos, text_color, box->string);
|
||||
}
|
||||
}
|
||||
@@ -256,13 +262,22 @@ fn void ui_demo_update(app_frame_t *frame) {
|
||||
for (app_event_t *ev = frame->first_event; ev; ev = ev->next) {
|
||||
ui_begin_build(UILOC, ev, window_rect_from_frame(frame));
|
||||
|
||||
ui->top->layout_op = ui_op_idle;
|
||||
ui->top->op = ui_op_idle;
|
||||
ui_box_t *top_box = ui_boxf((ui_box_flags_t){.draw_rect = true, .draw_border = true}, "top_box");
|
||||
ui_set_rect(top_box, r2f32_cut_top(&ui->top->rect, ui_em(1)));
|
||||
defer_block(ui_push_top(top_box), ui_pop_top()) {
|
||||
top_box->op = ui_op_cut_left;
|
||||
ui_button("file");
|
||||
ui_button("edit");
|
||||
}
|
||||
|
||||
ui_box_t *scroller_box = ui_boxf((ui_box_flags_t){.draw_rect = true}, "scroller");
|
||||
ui_set_rect(scroller_box, r2f32_cut_right(&ui->top->rect, ui_em(1)));
|
||||
|
||||
ui_box_t *item_box = ui_boxf((ui_box_flags_t){.draw_rect = true}, "item_box");
|
||||
ui_set_rect(item_box, r2f32_cut_left(&ui->top->rect, ui_max));
|
||||
|
||||
// @todo: now actually fill this out with struct data using type info
|
||||
static f32 scroller_value;
|
||||
defer_block(ui_push_top(item_box), ui_pop_top()) {
|
||||
defer_if (ui_begin_expander("app_event_t").clicked, ui_end_expander()) {
|
||||
@@ -295,7 +310,7 @@ fn void ui_demo_update(app_frame_t *frame) {
|
||||
f32 scroller_percent = scroller_norm * scrollable_space;
|
||||
f32 scroller_second = scrollable_space - scroller_percent;
|
||||
|
||||
scroller_box->layout_op = ui_op_idle;
|
||||
scroller_box->op = ui_op_idle;
|
||||
r2f32_cut_top(&ui->top->rect, scroller_percent * scroller_box_size);
|
||||
ui_box_t *box = ui_build_box_from_id(UILOC, (ui_box_flags_t){.draw_border = true, .draw_rect = true}, ui_id_from_string(s8_lit("slider")));
|
||||
ui_set_rect(box, r2f32_cut_top(&ui->top->rect, scroller_size * scroller_box_size));
|
||||
|
||||
Reference in New Issue
Block a user