29 std::string icon_path;
30 std::vector<OnKeyCallback> on_key_cbs;
31 std::vector<u64> on_key_cb_keys;
41 inline void SetName(
const std::string &name) {
46 return this->items_clr;
50 this->items_clr = items_clr;
56 return this->on_key_cbs.size();
60 if(idx < this->on_key_cbs.size()) {
61 return this->on_key_cbs.at(idx);
69 if(idx < this->on_key_cb_keys.size()) {
70 return this->on_key_cb_keys.at(idx);
78 return this->icon_path;
81 void SetIcon(
const std::string &icon_path);
84 return !this->icon_path.empty();
114 i32 selected_item_idx;
115 i32 selected_item_alpha;
116 i32 prev_selected_item_idx;
117 i32 prev_selected_item_alpha;
118 i32 advanced_item_count;
121 Color items_focus_clr;
122 bool cooldown_enabled;
125 std::chrono::time_point<std::chrono::steady_clock> move_start_time;
127 std::vector<MenuItem::Ref> items;
128 std::string font_name;
129 std::vector<sdl2::Texture> loaded_name_texs;
130 std::vector<sdl2::Texture> loaded_icon_texs;
132 void ReloadItemRenders();
134 inline Color MakeItemsFocusColor(
const u8 alpha) {
135 return { this->items_focus_clr.
r, this->items_focus_clr.
g, this->items_focus_clr.
b, alpha };
138 inline constexpr Color MakeLighterScrollbarColor() {
152 return {
static_cast<u8
>(base_r),
static_cast<u8
>(base_g),
static_cast<u8
>(base_b), this->scrollbar_clr.
a };
155 inline void HandleOnSelectionChanged() {
156 if(this->on_selection_changed_cb) {
157 (this->on_selection_changed_cb)();
161 inline void RunSelectedItemCallback(
const u64 keys) {
162 auto item = this->items.at(this->selected_item_idx);
163 const auto cb_count = item->GetOnKeyCallbackCount();
164 for(
i32 i = 0; i < cb_count; i++) {
165 if(keys & item->GetOnKeyCallbackKey(i)) {
166 if(!this->cooldown_enabled) {
167 auto cb = item->GetOnKeyCallback(i);
174 this->cooldown_enabled =
false;
206 return this->items_h * this->items_to_show;
210 return this->items_h;
214 this->items_h = items_height;
218 return this->items_to_show;
222 this->items_to_show = items_to_show;
226 return this->items_clr;
230 this->items_clr = items_clr;
234 return this->items_focus_clr;
238 this->items_focus_clr = items_focus_clr;
242 return this->scrollbar_clr;
246 this->scrollbar_clr = scrollbar_clr;
250 this->on_selection_changed_cb = on_selection_changed_cb;
254 this->items.push_back(item);
262 this->cooldown_enabled = enabled;
266 return this->items.at(this->selected_item_idx);
274 return this->selected_item_idx;
280 void OnInput(
const u64 keys_down,
const u64 keys_up,
const u64 keys_held,
const TouchPoint touch_pos)
override;
Definition: elm_Element.hpp:37
Definition: elm_Button.hpp:18
s32 i32
Definition: pu_Include.hpp:28
#define PU_SMART_CTOR(type)
Definition: pu_Include.hpp:19
Definition: ui_Types.hpp:44
u8 g
Definition: ui_Types.hpp:46
u8 a
Definition: ui_Types.hpp:48
u8 r
Definition: ui_Types.hpp:45
u8 b
Definition: ui_Types.hpp:47
Definition: ui_Types.hpp:62