summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjell Ericson <kjell@haxx.se>2003-06-05 08:29:21 +0000
committerKjell Ericson <kjell@haxx.se>2003-06-05 08:29:21 +0000
commitffefc5d5e1f8d1e0cc5fa895200b57ac0595300a (patch)
tree09fb0409a50f8e4d3b2851055912ae707d8e6b99
parent7add54f0f8e86fad97836646da6472a5959e7113 (diff)
downloadrockbox-ffefc5d5e1f8d1e0cc5fa895200b57ac0595300a.zip
rockbox-ffefc5d5e1f8d1e0cc5fa895200b57ac0595300a.tar.gz
rockbox-ffefc5d5e1f8d1e0cc5fa895200b57ac0595300a.tar.bz2
rockbox-ffefc5d5e1f8d1e0cc5fa895200b57ac0595300a.tar.xz
A bit faster update of Player simulator.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3730 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/lcd-player.c1
-rw-r--r--uisimulator/common/lcd-playersim.c70
2 files changed, 39 insertions, 32 deletions
diff --git a/firmware/drivers/lcd-player.c b/firmware/drivers/lcd-player.c
index 6e62358..6f58f8e 100644
--- a/firmware/drivers/lcd-player.c
+++ b/firmware/drivers/lcd-player.c
@@ -271,7 +271,6 @@ bool lcdx_putc(int x, int y, unsigned short ch)
buffer_lcd_mirror[x][y]=lcd_char;
#ifdef SIMULATOR
hardware_buffer_lcd[x][y]=lcd_char;
- lcd_update();
#else
lcd_write(true, LCD_CURSOR(x, y));
lcd_write(false, lcd_char);
diff --git a/uisimulator/common/lcd-playersim.c b/uisimulator/common/lcd-playersim.c
index e3cadd4..70a9dd9 100644
--- a/uisimulator/common/lcd-playersim.c
+++ b/uisimulator/common/lcd-playersim.c
@@ -83,8 +83,11 @@ void lcd_print_icon(int x, int icon_line, bool enable, char **icon)
}
row++;
}
- drawdots(0, &clearpoints[0], cp);
- drawdots(1, &points[0], p);
+/* DEBUGF("icon draw %d/%d\n", p, cp);*/
+ if (cp)
+ drawdots(0, &clearpoints[0], cp);
+ if (p)
+ drawdots(1, &points[0], p);
}
void lcd_print_char(int x, int y)
@@ -96,46 +99,51 @@ void lcd_print_char(int x, int y)
struct rectangle points[CHAR_HEIGHT*CHAR_WIDTH];
struct rectangle clearpoints[CHAR_HEIGHT*CHAR_WIDTH];
unsigned char ch=hardware_buffer_lcd[x][y];
+ static char bitmap_content[11*8][2*8];
if (double_height == 2 && y == 1)
return; /* Second row can't be printed in double height. ??*/
- /* Clear all char
- clearpoints[cp].x = xpos +BORDER_MARGIN;
- clearpoints[cp].y = ypos +BORDER_MARGIN;
- clearpoints[cp].width=CHAR_WIDTH*CHAR_PIXEL;
- clearpoints[cp].height=7*CHAR_PIXEL*double_height;
- cp++;
- */
for (col=0; col<5; col++) {
+ unsigned char fontbitmap=(*font_player)[ch][col];
for (row=0; row<7; row++) {
- char fontbit=(*font_player)[ch][col]&(1<<row);
+ char fontbit=fontbitmap&(1<<row);
int height=CHAR_PIXEL*double_height;
+ int ypixel;
+ if (bitmap_content[x*8+col][y*8+row*double_height]!=fontbit ||
+ bitmap_content[x*8+col][y*8+row*double_height+double_height-1]!=
+ fontbit) {
+ bitmap_content[x*8+col][y*8+row*double_height]=fontbit;
+ bitmap_content[x*8+col][y*8+row*double_height+double_height-1]=fontbit;
+
+ ypixel=CHAR_PIXEL*(double_height*row)+ypos;
+ if (double_height==2) {
+ if (row == 3) /* Adjust for blank row in the middle */
+ height=CHAR_PIXEL;
+ }
- y=CHAR_PIXEL*(double_height*row)+ypos;
- if (double_height==2) {
- if (row == 3) /* Adjust for blank row in the middle */
- height=CHAR_PIXEL;
- }
-
- if (fontbit) {
- /* set a dot */
- points[p].x = xpos + col*CHAR_PIXEL +BORDER_MARGIN;
- points[p].y = y +BORDER_MARGIN;
- points[p].width=CHAR_PIXEL;
- points[p].height=height;
- p++; /* increase the point counter */
- } else {
- clearpoints[cp].x = xpos + col*CHAR_PIXEL +BORDER_MARGIN;
- clearpoints[cp].y = y +BORDER_MARGIN;
- clearpoints[cp].width=CHAR_PIXEL;
- clearpoints[cp].height=height;
- cp++;
+ if (fontbit) {
+ /* set a dot */
+ points[p].x = xpos + col*CHAR_PIXEL +BORDER_MARGIN;
+ points[p].y = ypixel +BORDER_MARGIN;
+ points[p].width=CHAR_PIXEL;
+ points[p].height=height;
+ p++; /* increase the point counter */
+ } else {
+ clearpoints[cp].x = xpos + col*CHAR_PIXEL +BORDER_MARGIN;
+ clearpoints[cp].y = ypixel +BORDER_MARGIN;
+ clearpoints[cp].width=CHAR_PIXEL;
+ clearpoints[cp].height=height;
+ cp++;
+ }
}
}
}
- drawrectangles(0, &clearpoints[0], cp);
- drawrectangles(1, &points[0], p);
+/* DEBUGF("print_char %d/%d\n", p, cp);*/
+ if (cp)
+ drawrectangles(0, &clearpoints[0], cp);
+ if (p)
+ drawrectangles(1, &points[0], p);
}