mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-11-26 14:46:23 -05:00
Touch for MenuView and Freqlist (#2829)
* freqman add touch support. solves #1919 * menuview touch support
This commit is contained in:
parent
e88ab44f49
commit
cbbd8103d3
5 changed files with 42 additions and 1 deletions
|
|
@ -65,7 +65,7 @@ class FreqManBaseView : public View {
|
|||
|
||||
OptionsField options_category{
|
||||
{3 * 8, 2},
|
||||
20 /* length */,
|
||||
19 /* length */,
|
||||
{}};
|
||||
|
||||
FreqManUIList freqlist_view{
|
||||
|
|
|
|||
|
|
@ -93,6 +93,33 @@ void FreqManUIList::on_blur() {
|
|||
set_dirty();
|
||||
}
|
||||
|
||||
bool FreqManUIList::on_touch(const TouchEvent event) {
|
||||
if (!db_ || db_->empty())
|
||||
return false;
|
||||
if (event.type == TouchEvent::Type::Start) {
|
||||
focus();
|
||||
set_dirty();
|
||||
int16_t rel_y = event.point.y() - screen_rect().top();
|
||||
size_t new_selected = rel_y / char_height;
|
||||
if (new_selected + start_index_ >= db_->entry_count()) {
|
||||
return true; // clicked, where there is no entry, skip it
|
||||
}
|
||||
// selected_index_ is the current
|
||||
if (selected_index_ == new_selected) {
|
||||
// already selected, trigger on_select
|
||||
if (on_select) {
|
||||
// on_select(new_selected); //causes strange behavior, not so confident to use it
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
// just change selection
|
||||
selected_index_ = new_selected;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FreqManUIList::on_keyboard(const KeyboardEvent key) {
|
||||
if (!db_ || db_->empty())
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ class FreqManUIList : public Widget {
|
|||
bool on_key(const KeyEvent key) override;
|
||||
bool on_encoder(EncoderEvent delta) override;
|
||||
bool on_keyboard(const KeyboardEvent event) override;
|
||||
bool on_touch(const TouchEvent event) override;
|
||||
|
||||
void set_parent_rect(Rect new_parent_rect) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -243,6 +243,18 @@ void MenuView::on_blur() {
|
|||
item_view(highlighted_item - offset)->unhighlight();
|
||||
}
|
||||
|
||||
bool MenuView::on_touch(const TouchEvent event) {
|
||||
size_t i = 0;
|
||||
for (const auto child : children_) {
|
||||
if (i >= menu_item_views.size()) break;
|
||||
if (child->screen_rect().contains(event.point)) {
|
||||
return set_highlighted(i + offset);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MenuView::on_key(const KeyEvent key) {
|
||||
switch (key) {
|
||||
case KeyEvent::Up:
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ class MenuView : public View {
|
|||
bool on_key(const KeyEvent event) override;
|
||||
bool on_encoder(const EncoderEvent event) override;
|
||||
bool on_keyboard(const KeyboardEvent event) override;
|
||||
bool on_touch(const TouchEvent event) override;
|
||||
|
||||
private:
|
||||
void update_items();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue