From a63bc2eb016cd239c21639b6f0295a6810f7e6f1 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 22 Dec 2022 16:33:46 +0300 Subject: [PATCH] Add submenu arrows to default ui::selector --- libs/ui/source/default_element_factory.cpp | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/libs/ui/source/default_element_factory.cpp b/libs/ui/source/default_element_factory.cpp index 372f04f1..1ff37201 100644 --- a/libs/ui/source/default_element_factory.cpp +++ b/libs/ui/source/default_element_factory.cpp @@ -816,10 +816,41 @@ namespace psemek::ui p.draw_rect(bbox, *st->bg_color); if (auto i = selected()) - { p.draw_rect(item_box(*i), *st->highlight_color); + + for (int i = 0; i < size(); ++i) + { + if (submenu(i)) + { + auto box = item_box(i); + + auto c = box.corner(1.f, 0.5f); + c[0] -= (*st->inner_margin)[0]; + + int w = st->font->size()[1]; + + auto p0 = c; + p0[0] -= w / 2.f; + p0[1] -= w / 2.f; + + auto p1 = c; + p1[0] -= w / 2.f; + p1[1] += w / 2.f; + + auto sh = geom::cast(*st->shadow_offset); + + p.draw_triangle({p0 + sh, p1 + sh, c + sh}, *st->shadow_color); + p.draw_triangle({p0, p1, c}, *st->text_color); + } } } + + protected: + int submenu_extra() const override + { + auto st = merged_own_style(); + return 2 * (*st->inner_margin)[0] + st->font->size()[1] / 2; + } }; struct edit_impl