Permalink
Browse files

Various fixes to fix rendering of text. There will always be 3 lines …

…of log shown. The menu can have long items in it now, rather than being truncated. The log text will be bottom aligned.

Change-Id: I09289e053c8ab673814318da55302efaab0404de

derp

Change-Id: I3fc31f5ea311c73c0ec999aa77d3fa0d01238001
  • Loading branch information...
1 parent ccc1fdb commit 3cdfd138fa7008182c713de8ac3dc86685f9e46e @koush koush committed Jan 27, 2012
Showing with 28 additions and 6 deletions.
  1. +28 −6 ui.c
View
34 ui.c
@@ -33,6 +33,8 @@
#include "minui/minui.h"
#include "recovery_ui.h"
+#include "touch.h"
+
extern int __system(const char *command);
#ifdef BOARD_HAS_NO_SELECT_BUTTON
@@ -47,6 +49,8 @@ static int gShowBackButton = 0;
#define MENU_MAX_COLS 64
#define MENU_MAX_ROWS 250
+#define MIN_LOG_ROWS 3
+
#define CHAR_WIDTH BOARD_RECOVERY_CHAR_WIDTH
#define CHAR_HEIGHT BOARD_RECOVERY_CHAR_HEIGHT
@@ -106,6 +110,7 @@ static char menu[MENU_MAX_ROWS][MENU_MAX_COLS];
static int show_menu = 0;
static int menu_top = 0, menu_items = 0, menu_sel = 0;
static int menu_show_start = 0; // this is line which menu display is starting at
+static int max_menu_rows;
// Key event input queue
static pthread_mutex_t key_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -219,6 +224,7 @@ static void draw_screen_locked(void)
gr_color(0, 0, 0, 160);
gr_fill(0, 0, gr_fb_width(), gr_fb_height());
+ int total_rows = gr_fb_height() / CHAR_HEIGHT;
int i = 0;
int j = 0;
int offset = 0; // offset of separating bar under menus
@@ -250,6 +256,8 @@ static void draw_screen_locked(void)
draw_text_line(i - menu_show_start, menu[i]);
}
row++;
+ if (row == max_menu_rows)
+ break;
}
if (menu_items <= MAX_ROWS)
@@ -260,8 +268,17 @@ static void draw_screen_locked(void)
}
gr_color(NORMAL_TEXT_COLOR);
- for (; row < text_rows; ++row) {
- draw_text_line(row, text[(row+text_top) % text_rows]);
+ int cur_row = text_row;
+ int available_rows = total_rows - row - 1;
+ int start_row = row + 1;
+ if (available_rows < MAX_ROWS)
+ cur_row = (cur_row + (MAX_ROWS - available_rows)) % MAX_ROWS;
+ else
+ start_row = total_rows - MAX_ROWS;
+
+ int r;
+ for (r = 0; r < (available_rows < MAX_ROWS ? available_rows : MAX_ROWS); r++) {
+ draw_text_line(start_row + r, text[(cur_row + r) % MAX_ROWS]);
}
}
}
@@ -351,6 +368,9 @@ static int input_callback(int fd, short revents, void *data)
if (ret)
return -1;
+ if (touch_handle_input(ev))
+ return 0;
+
if (ev.type == EV_SYN) {
return 0;
} else if (ev.type == EV_REL) {
@@ -425,9 +445,11 @@ void ui_init(void)
ui_has_initialized = 1;
gr_init();
ev_init(input_callback, NULL);
+ touch_init(gr_fb_width(), gr_fb_height(), key_pressed, key_queue, &key_queue_len, &key_queue_mutex, &key_queue_cond);
text_col = text_row = 0;
text_rows = gr_fb_height() / CHAR_HEIGHT;
+ max_menu_rows = text_rows - MIN_LOG_ROWS;
if (text_rows > MAX_ROWS) text_rows = MAX_ROWS;
text_top = 1;
@@ -637,8 +659,8 @@ int ui_start_menu(char** headers, char** items, int initial_selection) {
for (; i < MENU_MAX_ROWS; ++i) {
if (items[i-menu_top] == NULL) break;
strcpy(menu[i], MENU_ITEM_HEADER);
- strncpy(menu[i] + MENU_ITEM_HEADER_LENGTH, items[i-menu_top], text_cols-1 - MENU_ITEM_HEADER_LENGTH);
- menu[i][text_cols-1] = '\0';
+ strncpy(menu[i] + MENU_ITEM_HEADER_LENGTH, items[i-menu_top], MENU_MAX_COLS - 1 - MENU_ITEM_HEADER_LENGTH);
+ menu[i][MENU_MAX_COLS-1] = '\0';
}
if (gShowBackButton && ui_menu_level > 0) {
@@ -676,8 +698,8 @@ int ui_menu_select(int sel) {
menu_show_start = menu_sel;
}
- if (menu_sel - menu_show_start + menu_top >= text_rows) {
- menu_show_start = menu_sel + menu_top - text_rows + 1;
+ if (menu_sel - menu_show_start + menu_top >= max_menu_rows) {
+ menu_show_start = menu_sel + menu_top - max_menu_rows + 1;
}
sel = menu_sel;

5 comments on commit 3cdfd13

touch.h is missing!

Member

chirayudesai replied Jan 27, 2012

yea xD

I believe this commit is still causing trouble. On the Galaxy Tab 8.9 which have an 800x1280 display (not to be confused with a 1280x800 that the 10.1 version has) the "cursor" now moves further down than the lines being drawn so if want to flash something that is far down you will have to resort to guessing.

The problem is visualized here: http://i.imgur.com/bwYjG.jpg

Increasing MAX_ROWS seems to fix the above issue. I suppose 1280pixels in height aren't that common.

I settled for:

define MAX_ROWS 68

Please sign in to comment.