From 55d2a48ff2443c8d7630df0724e1817188793e64 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 30 Apr 2022 16:52:23 +0300 Subject: [PATCH] Support retrieving item y-range from ui::selector --- libs/ui/include/psemek/ui/selector.hpp | 2 ++ libs/ui/source/selector.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/libs/ui/include/psemek/ui/selector.hpp b/libs/ui/include/psemek/ui/selector.hpp index 5c753c5b..6dd8a8e1 100644 --- a/libs/ui/include/psemek/ui/selector.hpp +++ b/libs/ui/include/psemek/ui/selector.hpp @@ -31,6 +31,8 @@ namespace psemek::ui virtual bool submenu(std::size_t index) const; virtual void clear(); + virtual geom::interval y_range(std::size_t index) const; + virtual std::optional selected() const { return selected_; } virtual void on_selected(std::function callback); diff --git a/libs/ui/source/selector.cpp b/libs/ui/source/selector.cpp index 5926142b..76ede261 100644 --- a/libs/ui/source/selector.cpp +++ b/libs/ui/source/selector.cpp @@ -125,13 +125,17 @@ namespace psemek::ui { container_.resize(size); submenu_.resize(size); + child_boxes_.resize(size); } void selector::add(std::shared_ptr child, bool submenu) { std::size_t index = container_.add(child); if (index >= submenu_.size()) + { submenu_.resize(index + 1); + child_boxes_.resize(submenu_.size()); + } submenu_[index] = submenu; } @@ -149,6 +153,12 @@ namespace psemek::ui { container_.clear(); submenu_.clear(); + child_boxes_.clear(); + } + + geom::interval selector::y_range(std::size_t index) const + { + return child_boxes_[index][1]; } void selector::on_selected(std::function callback)