aboutsummaryrefslogtreecommitdiffstats
path: root/screen_ui.cpp
diff options
context:
space:
mode:
authorTom Marshall <tdm@cyngn.com>2016-02-04 13:18:36 -0800
committerGerrit Code Review <gerrit@cyanogenmod.org>2016-02-08 00:28:12 -0800
commite1d7843fdb4340eb89cabac07d716711ff1d6de9 (patch)
tree1ee85064c9aff73e6fb571c2da6d3f12641986d9 /screen_ui.cpp
parent5e36ad0a45f33b688f80fc8ea30ac7e71b5d7724 (diff)
downloadbootable_recovery-e1d7843fdb4340eb89cabac07d716711ff1d6de9.zip
bootable_recovery-e1d7843fdb4340eb89cabac07d716711ff1d6de9.tar.gz
bootable_recovery-e1d7843fdb4340eb89cabac07d716711ff1d6de9.tar.bz2
recovery: Show menu headers
Most headers in recovery aren't very useful and so have historically not been shown in the touch UI. But certain headers, such as those shown by yes_no(), should be shown. Change-Id: I8536c528d3b4b4fd6d506ecef25378149b4e9746
Diffstat (limited to 'screen_ui.cpp')
-rw-r--r--screen_ui.cpp41
1 files changed, 34 insertions, 7 deletions
diff --git a/screen_ui.cpp b/screen_ui.cpp
index b292d37..cae78c8 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -71,6 +71,8 @@ ScreenRecoveryUI::ScreenRecoveryUI() :
dialog_text(nullptr),
dialog_show_log(false),
menu_(nullptr),
+ menu_headers_(nullptr),
+ header_items(0),
show_menu(false),
menu_items(0),
menu_sel(0),
@@ -371,12 +373,31 @@ void ScreenRecoveryUI::draw_screen_locked() {
}
if (show_menu) {
+ int i;
draw_header_icon();
+ int y;
+
+ // Divider
+ y = text_first_row_ * char_height_;
+ SetColor(MENU_SEL_FG);
+ gr_fill(0, y - 1, gr_fb_width(), y);
+
+ if (header_items > 0) {
+ for (i = 0; i < header_items; ++i) {
+ draw_menu_item(text_first_row_ + 3*i,
+ menu_headers_[i], false);
+ }
+ y = (text_first_row_ + 3*header_items) * char_height_;
+ SetColor(MENU_SEL_FG);
+ gr_fill(0, y - 1, gr_fb_width(), y);
+ }
int nr_items = menu_items - menu_show_start_;
- if (nr_items > max_menu_rows_)
- nr_items = max_menu_rows_;
- for (int i = 0; i < nr_items; ++i) {
- draw_menu_item(text_first_row_ + 3*i, menu_[menu_show_start_ + i],
+ if (header_items + nr_items > max_menu_rows_)
+ nr_items = max_menu_rows_ - header_items;
+ for (i = 0; i < nr_items; ++i) {
+ const char* text = menu_[menu_show_start_ + i];
+ draw_menu_item(text_first_row_ + 3 * (header_items + i),
+ menu_[menu_show_start_ + i],
((menu_show_start_ + i) == menu_sel));
}
}
@@ -821,7 +842,13 @@ void ScreenRecoveryUI::StartMenu(const char* const * headers, const char* const
int initial_selection) {
pthread_mutex_lock(&updateMutex);
if (text_rows_ > 0 && text_cols_ > 0) {
+ header_items = 0;
menu_headers_ = headers;
+ if (menu_headers_) {
+ while (menu_headers_[header_items]) {
+ ++header_items;
+ }
+ }
size_t i = 0;
for (; i < text_rows_ && items[i] != nullptr; ++i) {
strncpy(menu_[i], items[i], text_cols_ - 1);
@@ -843,7 +870,7 @@ int ScreenRecoveryUI::SelectMenu(int sel, bool abs /* = false */) {
int wrapped = 0;
pthread_mutex_lock(&updateMutex);
if (abs) {
- sel += menu_show_start_;
+ sel += menu_show_start_ - header_items;
}
if (show_menu) {
int old_sel = menu_sel;
@@ -868,8 +895,8 @@ int ScreenRecoveryUI::SelectMenu(int sel, bool abs /* = false */) {
if (menu_sel < menu_show_start_ && menu_show_start_ > 0) {
menu_show_start_ = menu_sel;
}
- if (menu_sel - menu_show_start_ >= max_menu_rows_) {
- menu_show_start_ = menu_sel - max_menu_rows_ + 1;
+ if (menu_sel - menu_show_start_ >= max_menu_rows_ - header_items) {
+ menu_show_start_ = menu_sel - (max_menu_rows_ - header_items) + 1;
}
sel = menu_sel;
if (wrapped != 0) {