fix scroll bar
This commit is contained in:
65
src/ui/ui.c
65
src/ui/ui.c
@@ -204,7 +204,7 @@ fn ui_box_t *ui_build_box_from_string(ui_code_loc_t loc, ui_box_flags_t flags, s
|
||||
}
|
||||
if (box->flags.dont_compute_rect == false) {
|
||||
r2f32_t rect = ui_next_rect(ui_top_lop(), &ui->top->rect, string_size);
|
||||
ui_set_rect(box, rect, ui_top_lop());
|
||||
ui_set_rect(box, rect);
|
||||
}
|
||||
box->string_pos_offset = ui_top_string_pos_offset();
|
||||
return box;
|
||||
@@ -503,7 +503,7 @@ fn ui_signal_t ui__label_button(ui_code_loc_t loc, char *str, ...) {
|
||||
#define ui_label(...) ui__label(UILOC, __VA_ARGS__)
|
||||
fn ui_box_t *ui__label(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_text = true }, string);
|
||||
ui_box_t *box = ui_build_box_from_string(loc, (ui_box_flags_t){ .draw_text = true, .draw_rect = true }, string);
|
||||
return box;
|
||||
}
|
||||
|
||||
@@ -915,7 +915,7 @@ fn void ui_demo_update(app_frame_t *frame, mt_tweak_t *tweak_table, i32 tweak_co
|
||||
ui_begin_build(UILOC, ev, window_rect_from_frame(frame));
|
||||
|
||||
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_lop_cut_top);
|
||||
ui_set_rect(top_box, r2f32_cut_top(&ui->top->rect, ui_em(1.5f)));
|
||||
ui_set_padding(ui_em(3))
|
||||
ui_set_text_align(ui_text_align_center)
|
||||
ui_set_lop(ui_lop_cut_left)
|
||||
@@ -928,10 +928,10 @@ fn void ui_demo_update(app_frame_t *frame, mt_tweak_t *tweak_table, i32 tweak_co
|
||||
|
||||
if (ui_g_panel == 1) {
|
||||
ui_box_t *scroller_box = ui_boxf((ui_box_flags_t){.draw_rect = true, .clip_rect = true}, "scrollbar");
|
||||
ui_set_rect(scroller_box, r2f32_cut_right(&ui->top->rect, 10 * frame->dpr), ui_lop_cut_right);
|
||||
ui_set_rect(scroller_box, r2f32_cut_right(&ui->top->rect, 10 * frame->dpr));
|
||||
|
||||
ui_box_t *item_box = ui_boxf((ui_box_flags_t){.draw_rect = true, .clip_rect = true}, "item_box");
|
||||
ui_set_rect(item_box, r2f32_cut_left(&ui->top->rect, ui_max), ui_lop_cut_left);
|
||||
ui_set_rect(item_box, r2f32_cut_left(&ui->top->rect, ui_max));
|
||||
item_box->rect = r2f32_shrinks(item_box->rect, ui_em(1));
|
||||
|
||||
|
||||
@@ -970,8 +970,7 @@ fn void ui_demo_update(app_frame_t *frame, mt_tweak_t *tweak_table, i32 tweak_co
|
||||
ui_label("allocated boxes: %d", ui->allocated_boxes);
|
||||
ui_serial_type(&ui_test_event, type(app_event_t));
|
||||
ui_set_id(ui_idf("a")) {
|
||||
ui_serial_type(&ui_test_event, type(app_event_t));
|
||||
|
||||
ui_serial_type(&ui_test_event, type(app_event_t));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -985,23 +984,34 @@ fn void ui_demo_update(app_frame_t *frame, mt_tweak_t *tweak_table, i32 tweak_co
|
||||
f32 scrollable_space = (1 - scroller_size);
|
||||
f32 scroller_norm = scroller_value / (all_items_size);
|
||||
f32 scroller_percent = scroller_norm * scrollable_space;
|
||||
f32 slider_box_size = scroller_size * scroller_box_size;
|
||||
// f32 scroller_second = scrollable_space - scroller_percent;
|
||||
|
||||
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_rect = true}, ui_idf("slider"));
|
||||
box->background_color = ui_color_table[ui_color_scroller];
|
||||
box->bg_hot_color = ui_color_table[ui_color_scroller_hot];
|
||||
box->bg_active_color = ui_color_table[ui_color_scroller_active];
|
||||
ui_set_rect(box, r2f32_cut_top(&ui->top->rect, scroller_size * scroller_box_size), ui_lop_cut_top);
|
||||
ui_signal_t signal = ui_signal_from_box(box);
|
||||
ui_box_t *upper_box = ui_boxf((ui_box_flags_t){.draw_rect = true}, "upper_box");
|
||||
ui_box_t *slider_box = ui_boxf((ui_box_flags_t){.draw_rect = true}, "slider_box");
|
||||
ui_box_t *down_box = ui_boxf((ui_box_flags_t){.draw_rect = true}, "down_box");
|
||||
ui_set_rect(upper_box, r2f32_cut_top(&ui->top->rect, scroller_percent * scroller_box_size));
|
||||
ui_set_rect(slider_box, r2f32_cut_top(&ui->top->rect, slider_box_size));
|
||||
ui_set_rect(down_box, r2f32_cut_top(&ui->top->rect, ui_max));
|
||||
slider_box->background_color = ui_color_table[ui_color_scroller];
|
||||
slider_box->bg_hot_color = ui_color_table[ui_color_scroller_hot];
|
||||
slider_box->bg_active_color = ui_color_table[ui_color_scroller_active];
|
||||
ui_signal_t signal = ui_signal_from_box(slider_box);
|
||||
ui_signal_t upper_box_signal = ui_signal_from_box(upper_box);
|
||||
ui_signal_t down_box_signal = ui_signal_from_box(down_box);
|
||||
f32 drag = ev->mouse_delta.y;
|
||||
f32 coef = (all_items_size / item_box_size) / scrollable_space;
|
||||
if (signal.dragging) {
|
||||
scroller_value += signal.drag.y;
|
||||
scroller_value = CLAMP(scroller_value, 0, all_items_size);
|
||||
scroller_value += drag * coef;
|
||||
}
|
||||
if (upper_box_signal.clicked || down_box_signal.dragging) {
|
||||
scroller_value = (ev->mouse_pos.y - upper_box->final_rect.min.y) * coef;
|
||||
scroller_value -= (slider_box_size / 2) * coef;
|
||||
}
|
||||
if (ev->kind == app_event_kind_mouse_wheel) {
|
||||
scroller_value -= ev->mouse_wheel_delta.y;
|
||||
scroller_value = CLAMP(scroller_value, 0, all_items_size);
|
||||
}
|
||||
scroller_value = CLAMP(scroller_value, 0, all_items_size);
|
||||
|
||||
for (ui_box_t *it = item_box->first; it; it = it->next) {
|
||||
ui_offset_box(it, v2f32(0, scroller_value));
|
||||
@@ -1011,6 +1021,27 @@ fn void ui_demo_update(app_frame_t *frame, mt_tweak_t *tweak_table, i32 tweak_co
|
||||
|
||||
}
|
||||
|
||||
// ui_box_t *lister = ui_box0((ui_box_flags_t){.draw_rect = true, .clip_rect = true});
|
||||
// ui_set_top(lister)
|
||||
// ui_set_lop(ui_lop_cut_top) {
|
||||
// v2f32_t max_size = v2f32_sub(frame->window_size, v2f32(ui_em(2), ui_em(2)));
|
||||
// v2f32_t _lister_size = v2f32(ui_em(20), ui_em(40));
|
||||
// v2f32_t lister_size = v2f32_clamp(_lister_size, v2f32_null, max_size);
|
||||
// v2f32_t pos = v2f32_divs(v2f32_sub(frame->window_size, lister_size), 2.0);
|
||||
// r2f32_t rect = r2f32_min_dim(pos, lister_size);
|
||||
// ui_set_rect(lister, rect);
|
||||
// lister->background_color.g += 100;
|
||||
|
||||
// locl char buff[128];
|
||||
// locl ui_text_input_t text_input;
|
||||
// if (text_input.str == NULL) {
|
||||
// text_input.str = buff;
|
||||
// text_input.cap = lengthof(buff);
|
||||
// }
|
||||
// ui_text_input(UILOC, &text_input);
|
||||
|
||||
// }
|
||||
|
||||
ui_end_build();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user