[ui] draw drop-down button with correct roundness

This commit is contained in:
Martin Fouilleul 2023-03-13 10:53:21 +01:00
parent 5455c2a52b
commit 716bdc53d4
1 changed files with 26 additions and 8 deletions

View File

@ -1942,7 +1942,6 @@ void ui_panel_end(void)
ui_sig ui_tooltip_begin(const char* name) ui_sig ui_tooltip_begin(const char* name)
{ {
ui_context* ui = ui_get_context(); ui_context* ui = ui_get_context();
ui_box_push(ui->overlay);
vec2 p = ui_mouse_position(); vec2 p = ui_mouse_position();
@ -1955,7 +1954,8 @@ ui_sig ui_tooltip_begin(const char* name)
ui_style_next(&style, mask); ui_style_next(&style, mask);
ui_flags flags = UI_FLAG_DRAW_BACKGROUND ui_flags flags = UI_FLAG_OVERLAY
| UI_FLAG_DRAW_BACKGROUND
| UI_FLAG_DRAW_BORDER; | UI_FLAG_DRAW_BORDER;
ui_box* tooltip = ui_box_make(name, flags); ui_box* tooltip = ui_box_make(name, flags);
@ -1967,7 +1967,6 @@ ui_sig ui_tooltip_begin(const char* name)
void ui_tooltip_end(void) void ui_tooltip_end(void)
{ {
ui_box_pop(); // tooltip ui_box_pop(); // tooltip
ui_box_pop(); // ui->overlay
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -2102,9 +2101,26 @@ ui_sig ui_menu_button(const char* name)
void ui_select_popup_draw_arrow(ui_box* box, void* data) void ui_select_popup_draw_arrow(ui_box* box, void* data)
{ {
mg_move_to(box->rect.x + 0.2*box->rect.w, box->rect.y + 0.4*box->rect.h); f32 r = minimum(box->parent->style.roundness, box->rect.w);
mg_line_to(box->rect.x + 0.5*box->rect.w, box->rect.y + 0.8*box->rect.h); f32 cr = r*4*(sqrt(2)-1)/3;
mg_line_to(box->rect.x + 0.8*box->rect.w, box->rect.y + 0.4*box->rect.h);
mg_move_to(box->rect.x, box->rect.y);
mg_line_to(box->rect.x + box->rect.w - r, box->rect.y);
mg_cubic_to(box->rect.x + box->rect.w - cr, box->rect.y,
box->rect.x + box->rect.w, box->rect.y + cr,
box->rect.x + box->rect.w, box->rect.y + r);
mg_line_to(box->rect.x + box->rect.w, box->rect.y + box->rect.h - r);
mg_cubic_to(box->rect.x + box->rect.w, box->rect.y + box->rect.h - cr,
box->rect.x + box->rect.w - cr, box->rect.y + box->rect.h,
box->rect.x + box->rect.w - r, box->rect.y + box->rect.h);
mg_line_to(box->rect.x, box->rect.y + box->rect.h);
mg_set_color(box->style.bgColor);
mg_fill();
mg_move_to(box->rect.x + 0.25*box->rect.w, box->rect.y + 0.45*box->rect.h);
mg_line_to(box->rect.x + 0.5*box->rect.w, box->rect.y + 0.75*box->rect.h);
mg_line_to(box->rect.x + 0.75*box->rect.w, box->rect.y + 0.45*box->rect.h);
mg_set_color(box->style.color); mg_set_color(box->style.color);
mg_fill(); mg_fill();
@ -2140,12 +2156,14 @@ ui_select_popup_info ui_select_popup(const char* name, ui_select_popup_info* inf
&(ui_style){.size.width = {UI_SIZE_PIXELS, buttonWidth}, &(ui_style){.size.width = {UI_SIZE_PIXELS, buttonWidth},
.size.height = {UI_SIZE_CHILDREN}, .size.height = {UI_SIZE_CHILDREN},
.layout.margin.x = 5, .layout.margin.x = 5,
.layout.margin.y = 2, .layout.margin.y = 1,
.roundness = 5,
.borderSize = 1, .borderSize = 1,
.borderColor = {0.3, 0.3, 0.3, 1}}, .borderColor = {0.3, 0.3, 0.3, 1}},
UI_STYLE_SIZE UI_STYLE_SIZE
|UI_STYLE_LAYOUT_MARGIN_X |UI_STYLE_LAYOUT_MARGIN_X
|UI_STYLE_LAYOUT_MARGIN_Y |UI_STYLE_LAYOUT_MARGIN_Y
|UI_STYLE_ROUNDNESS
|UI_STYLE_BORDER_SIZE |UI_STYLE_BORDER_SIZE
|UI_STYLE_BORDER_COLOR); |UI_STYLE_BORDER_COLOR);
ui_box_push(button); ui_box_push(button);
@ -2164,7 +2182,7 @@ ui_select_popup_info ui_select_popup(const char* name, ui_select_popup_info* inf
|UI_STYLE_COLOR |UI_STYLE_COLOR
|UI_STYLE_BG_COLOR); |UI_STYLE_BG_COLOR);
ui_box* arrow = ui_box_make("arrow", UI_FLAG_DRAW_BACKGROUND|UI_FLAG_DRAW_PROC); ui_box* arrow = ui_box_make("arrow", UI_FLAG_DRAW_PROC);
ui_box_set_draw_proc(arrow, ui_select_popup_draw_arrow, 0); ui_box_set_draw_proc(arrow, ui_select_popup_draw_arrow, 0);
} ui_box_pop(); } ui_box_pop();