Deallocate menu buttons to save memory (#1971)

* Deallocate hidden menu buttons
* Added Copyright
* Added comments
This commit is contained in:
Mark Thompson
2024-03-10 14:49:36 -05:00
committed by GitHub
parent 986e37a3c9
commit e9b9ba4602
8 changed files with 149 additions and 66 deletions

View File

@@ -3,6 +3,7 @@
* Copyright (C) 2016 Furrtek
* Copyright (C) 2019 Elia Yehuda (z4ziggy)
* Copyright (C) 2023 Mark Thompson
* Copyright (C) 2024 u-foka
*
* This file is part of PortaPack.
*
@@ -106,7 +107,12 @@ void BtnGridView::on_tick_second() {
}
void BtnGridView::clear() {
menu_items.clear();
std::vector<GridItem>().swap(menu_items); // clear vector and release memory
for (auto& item : menu_item_views)
remove_child(item.get());
std::vector<std::unique_ptr<NewButton>>().swap(menu_item_views); // clear vector and release memory
}
void BtnGridView::add_items(std::initializer_list<GridItem> new_items) {
@@ -207,11 +213,23 @@ void BtnGridView::on_focus() {
void BtnGridView::on_blur() {
#if 0
if (!keep_highlight)
item_view(highlighted_item - offset)->unhighlight();
if (!keep_highlight)
item_view(highlighted_item - offset)->unhighlight();
#endif
}
void BtnGridView::on_show() {
on_populate();
View::on_show();
}
void BtnGridView::on_hide() {
View::on_hide();
clear();
}
bool BtnGridView::on_key(const KeyEvent key) {
switch (key) {
case KeyEvent::Up:

View File

@@ -2,6 +2,7 @@
* Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc.
* Copyright (C) 2016 Furrtek
* Copyright (C) 2019 Elia Yehuda (z4ziggy)
* Copyright (C) 2024 u-foka
*
* This file is part of PortaPack.
*
@@ -73,10 +74,15 @@ class BtnGridView : public View {
void set_arrow_enabled(bool enabled);
void on_focus() override;
void on_blur() override;
void on_show() override;
void on_hide() override;
bool on_key(const KeyEvent event) override;
bool on_encoder(const EncoderEvent event) override;
bool blacklisted_app(GridItem new_item);
protected:
virtual void on_populate() = 0;
private:
int rows_{3};
void update_items();