Now using lcd margins instead of a line offset for displaying status bar.

Needed to support fonts smaller than 8 pixels.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1823 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Markus Braun 2002-08-20 19:39:55 +00:00
parent 5e4c1d2ad8
commit c41dcb9ae9
3 changed files with 65 additions and 60 deletions

View File

@ -30,12 +30,10 @@
#include "settings.h"
#include "status.h"
#include "applimits.h"
#ifdef HAVE_LCD_BITMAP
#define LINE_Y (global_settings.statusbar&&statusbar_enabled?1:0) /* Y position the entry-list starts at */
#else /* HAVE_LCD_BITMAP */
#define LINE_Y 0 /* Y position the entry-list starts at */
#endif /* HAVE_LCD_BITMAP */
#include "icons.h"
#include "widgets.h"
#endif
playlist_info_t playlist;
@ -183,10 +181,17 @@ void play_list(char *dir, /* "current directory" */
playlist.index = start_index;
#ifdef HAVE_LCD_BITMAP
if(global_settings.statusbar)
lcd_setmargins(0, STATUSBAR_HEIGHT);
else
lcd_setmargins(0, 0);
#endif
/* If file is NULL, the list is in RAM */
if(file) {
lcd_clear_display();
lcd_puts(0,LINE_Y,"Loading...");
lcd_puts(0,0,"Loading...");
status_draw();
lcd_update();
playlist.in_ram = false;
@ -216,7 +221,7 @@ void play_list(char *dir, /* "current directory" */
if(global_settings.playlist_shuffle) {
if(!playlist.in_ram) {
lcd_puts(0,LINE_Y,"Shuffling...");
lcd_puts(0,0,"Shuffling...");
status_draw();
lcd_update();
randomise_playlist( random_seed );
@ -247,7 +252,7 @@ void play_list(char *dir, /* "current directory" */
}
if(!playlist.in_ram) {
lcd_puts(0,LINE_Y,"Playing... ");
lcd_puts(0,0,"Playing... ");
status_draw();
lcd_update();
}
@ -342,7 +347,7 @@ void add_indices_to_playlist(void)
next_tick = current_tick + HZ;
snprintf(line, sizeof line, "%d files",
playlist.amount);
lcd_puts(0,LINE_Y+1,line);
lcd_puts(0,1,line);
status_draw();
lcd_update();
}
@ -357,7 +362,7 @@ void add_indices_to_playlist(void)
}
if(!playlist.in_ram) {
snprintf(line, sizeof line, "%d files", playlist.amount);
lcd_puts(0,LINE_Y+1,line);
lcd_puts(0,1,line);
status_draw();
lcd_update();
close(fd);

View File

@ -69,10 +69,10 @@ void browse_root(void)
#ifdef HAVE_LCD_BITMAP
#define TREE_MAX_ON_SCREEN ((LCD_HEIGHT-MARGIN_Y)/LINE_HEIGTH-LINE_Y)
#define TREE_MAX_ON_SCREEN ((LCD_HEIGHT-MARGIN_Y)/LINE_HEIGTH)
#define TREE_MAX_LEN_DISPLAY 16 /* max length that fits on screen */
#define MARGIN_Y 0 /* Y pixel margin */
#define MARGIN_Y (global_settings.statusbar ? STATUSBAR_HEIGHT : 0) /* Y pixel margin */
#define MARGIN_X 10 /* X pixel margin */
#define LINE_Y (global_settings.statusbar ? 1 : 0) /* Y position the entry-list starts at */
#define LINE_X 0 /* X position the entry-list starts at */
@ -167,7 +167,7 @@ static int showdir(char *path, int start)
int fh;
unsigned char *font = lcd_getcurrentldfont();
fh = ajf_get_fontheight(font);
tree_max_on_screen = ((LCD_HEIGHT-MARGIN_Y)/fh)-LINE_Y;
tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
line_height = fh;
#else
tree_max_on_screen = TREE_MAX_ON_SCREEN;
@ -273,7 +273,7 @@ static int showdir(char *path, int start)
icon_type = File;
}
lcd_bitmap(bitmap_icons_6x8[icon_type],
4, MARGIN_Y+(LINE_Y+i-start)*line_height, 6, 8, true);
4, MARGIN_Y+(i-start)*line_height, 6, 8, true);
#endif
@ -283,11 +283,11 @@ static int showdir(char *path, int start)
{
char temp = dircache[i].name[len-4];
dircache[i].name[len-4] = 0;
lcd_puts(LINE_X, LINE_Y+i-start, dircache[i].name);
lcd_puts(LINE_X, i-start, dircache[i].name);
dircache[i].name[len-4] = temp;
}
else
lcd_puts(LINE_X, LINE_Y+i-start, dircache[i].name);
lcd_puts(LINE_X, i-start, dircache[i].name);
}
status_draw();
@ -411,7 +411,7 @@ bool dirbrowse(char *root)
int fh;
unsigned char *font = lcd_getcurrentldfont();
fh = ajf_get_fontheight(font);
tree_max_on_screen = ((LCD_HEIGHT-MARGIN_Y)/fh)-LINE_Y;
tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
#else
tree_max_on_screen = TREE_MAX_ON_SCREEN;
#endif
@ -424,7 +424,7 @@ bool dirbrowse(char *root)
if (numentries == -1)
return -1; /* root is not a directory */
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
while(1) {
bool restore = false;
@ -545,29 +545,29 @@ bool dirbrowse(char *root)
case BUTTON_VOL_UP:
if(filesindir) {
if(dircursor) {
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, false);
put_cursorxy(0, CURSOR_Y + dircursor, false);
dircursor--;
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
}
else {
if (start) {
start--;
numentries = showdir(currdir, start);
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
}
else {
if (numentries < tree_max_on_screen) {
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
put_cursorxy(0, CURSOR_Y + dircursor,
false);
dircursor = numentries - 1;
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
put_cursorxy(0, CURSOR_Y + dircursor,
true);
}
else {
start = numentries - tree_max_on_screen;
dircursor = tree_max_on_screen - 1;
numentries = showdir(currdir, start);
put_cursorxy(0, CURSOR_Y + LINE_Y +
put_cursorxy(0, CURSOR_Y +
tree_max_on_screen - 1, true);
}
}
@ -583,28 +583,28 @@ bool dirbrowse(char *root)
{
if (dircursor + start + 1 < numentries ) {
if(dircursor+1 < tree_max_on_screen) {
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
put_cursorxy(0, CURSOR_Y + dircursor,
false);
dircursor++;
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
}
else {
start++;
numentries = showdir(currdir, start);
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
}
}
else {
if(numentries < tree_max_on_screen) {
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor,
put_cursorxy(0, CURSOR_Y + dircursor,
false);
start = dircursor = 0;
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
}
else {
start = dircursor = 0;
numentries = showdir(currdir, start);
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
}
}
lcd_update();
@ -614,14 +614,8 @@ bool dirbrowse(char *root)
case TREE_MENU: {
bool lastfilter = global_settings.mp3filter;
bool lastsortcase = global_settings.sort_case;
#ifdef HAVE_LCD_BITMAP
bool laststate=statusbar(false);
#endif
lcd_stop_scroll();
main_menu();
#ifdef HAVE_LCD_BITMAP
statusbar(laststate);
#endif
/* do we need to rescan dir? */
if ( lastfilter != global_settings.mp3filter ||
lastsortcase != global_settings.sort_case)
@ -650,13 +644,18 @@ bool dirbrowse(char *root)
#ifdef HAVE_RECORDER_KEYPAD
case BUTTON_F3:
#endif
#ifdef HAVE_LCD_BITMAP
global_settings.statusbar = !global_settings.statusbar;
settings_save();
#ifdef LOADABLE_FONTS
tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
#else
tree_max_on_screen = TREE_MAX_ON_SCREEN;
#endif
restore = true;
#endif
break;
#endif
#ifndef SIMULATOR
case SYS_USB_CONNECTED: {
@ -694,7 +693,7 @@ bool dirbrowse(char *root)
dircursor--;
}
numentries = showdir(currdir, start);
put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true);
put_cursorxy(0, CURSOR_Y + dircursor, true);
}
if ( numentries ) {
@ -711,12 +710,12 @@ bool dirbrowse(char *root)
int len = strlen(dircache[i].name);
char temp = dircache[i].name[len-4];
dircache[i].name[len-4] = 0;
lcd_puts_scroll(LINE_X, LINE_Y+dircursor,
lcd_puts_scroll(LINE_X, dircursor,
dircache[i].name);
dircache[i].name[len-4] = temp;
}
else
lcd_puts_scroll(LINE_X, LINE_Y+dircursor,
lcd_puts_scroll(LINE_X, dircursor,
dircache[i].name);
}
}

View File

@ -44,12 +44,6 @@
#include "ajf.h"
#endif
#ifdef HAVE_LCD_BITMAP
#define LINE_Y (global_settings.statusbar ? 1 : 0) /* Y position the entry-list starts at */
#else /* HAVE_LCD_BITMAP */
#define LINE_Y 0 /* Y position the entry-list starts at */
#endif /* HAVE_LCD_BITMAP */
#ifdef HAVE_LCD_BITMAP
#define PLAY_DISPLAY_2LINEID3 0
#define PLAY_DISPLAY_FILENAME_SCROLL 1
@ -82,7 +76,6 @@ static void draw_screen(struct mp3entry* id3)
font_height = 8;
#endif
lcd_clear_display();
if(!id3)
{
@ -117,14 +110,14 @@ static void draw_screen(struct mp3entry* id3)
strncpy(szArtist,szTok,sizeof(szArtist));
szArtist[sizeof(szArtist)-1] = 0;
szDelimit = strrchr(id3->path, ch);
lcd_puts(0,LINE_Y, szArtist?szArtist:"<nothing>");
lcd_puts(0, 0, szArtist?szArtist:"<nothing>");
// removes the .mp3 from the end of the display buffer
szPeriod = strrchr(szDelimit, '.');
if (szPeriod != NULL)
*szPeriod = 0;
lcd_puts_scroll(0,LINE_Y+1,(++szDelimit));
lcd_puts_scroll(0, 1, (++szDelimit));
break;
}
case PLAY_DISPLAY_FILENAME_SCROLL:
@ -147,12 +140,12 @@ static void draw_screen(struct mp3entry* id3)
playlist.amount,
id3->path);
}
lcd_puts_scroll(0,LINE_Y, buffer);
lcd_puts_scroll(0, 0, buffer);
break;
}
case PLAY_DISPLAY_2LINEID3:
{
int l = LINE_Y;
int l = 0;
#ifdef HAVE_LCD_BITMAP
char buffer[64];
@ -161,7 +154,7 @@ static void draw_screen(struct mp3entry* id3)
lcd_puts(0, l++, id3->album?id3->album:"");
lcd_puts(0, l++, id3->artist?id3->artist:"");
if(LINE_Y==0&&font_height<=8) {
if(!global_settings.statusbar && font_height <= 8) {
if(id3->vbr)
snprintf(buffer, sizeof(buffer), "%d kbit (avg)",
id3->bitrate);
@ -345,6 +338,11 @@ static void display_file_time(unsigned int elapsed, unsigned int length)
char buffer[32];
#ifdef HAVE_LCD_BITMAP
int line;
if(global_settings.statusbar)
line = 5;
else
line = 6;
snprintf(buffer,sizeof(buffer),
"Time:%3d:%02d/%d:%02d",
elapsed / 60000,
@ -352,7 +350,7 @@ static void display_file_time(unsigned int elapsed, unsigned int length)
length / 60000,
length % 60000 / 1000 );
lcd_puts(0, 6, buffer);
lcd_puts(0, line, buffer);
slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, elapsed*100/length, Grow_Right);
lcd_update();
#else
@ -410,6 +408,7 @@ void display_keylock_text(bool locked)
{
lcd_puts(2, 3, "Key lock is OFF");
}
status_draw();
lcd_update();
#endif
@ -435,6 +434,7 @@ void display_mute_text(bool muted)
{
lcd_puts(2, 3, "Mute is OFF");
}
status_draw();
lcd_update();
#endif
@ -464,7 +464,10 @@ int wps_show(void)
lcd_icon(ICON_AUDIO, true);
lcd_icon(ICON_PARAM, false);
#else
lcd_setmargins(0,0);
if(global_settings.statusbar)
lcd_setmargins(0, STATUSBAR_HEIGHT);
else
lcd_setmargins(0, 0);
#endif
ff_rewind = false;
@ -876,15 +879,9 @@ int wps_show(void)
#endif
if(!keys_locked && !dont_go_to_menu && menu_button_is_down)
{
#ifdef HAVE_LCD_BITMAP
bool laststate=statusbar(false);
#endif
lcd_stop_scroll();
button_set_release(old_release_mask);
main_menu();
#ifdef HAVE_LCD_BITMAP
statusbar(laststate);
#endif
old_release_mask = button_set_release(RELEASE_MASK);
ignore_keyup = true;
id3 = mpeg_current_track();
@ -905,6 +902,10 @@ int wps_show(void)
#ifdef HAVE_LCD_BITMAP
global_settings.statusbar = !global_settings.statusbar;
settings_save();
if(global_settings.statusbar)
lcd_setmargins(0, STATUSBAR_HEIGHT);
else
lcd_setmargins(0, 0);
draw_screen(id3);
#endif
break;