summaryrefslogtreecommitdiff
path: root/uisimulator/lcd-x11.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2002-04-27 23:41:41 +0000
committerDaniel Stenberg <daniel@haxx.se>2002-04-27 23:41:41 +0000
commitc1543511b342162b2b537485c6646186037d8845 (patch)
treed39dbce2583c366001b3fe96f7bde40b07716925 /uisimulator/lcd-x11.c
parentebc68a9442f7ca838945068fe8f8ab7a5dcaffac (diff)
downloadrockbox-c1543511b342162b2b537485c6646186037d8845.tar.gz
rockbox-c1543511b342162b2b537485c6646186037d8845.zip
runs the app now, improved the lcd simulation a bit
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@281 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/lcd-x11.c')
-rw-r--r--uisimulator/lcd-x11.c42
1 files changed, 40 insertions, 2 deletions
diff --git a/uisimulator/lcd-x11.c b/uisimulator/lcd-x11.c
index cd2b22b354..9659426f02 100644
--- a/uisimulator/lcd-x11.c
+++ b/uisimulator/lcd-x11.c
@@ -42,13 +42,18 @@ extern unsigned char display[LCD_WIDTH][LCD_HEIGHT/8];
42extern void screen_resized(int width, int height); 42extern void screen_resized(int width, int height);
43extern Display *dpy; 43extern Display *dpy;
44 44
45unsigned char display_copy[LCD_WIDTH][LCD_HEIGHT/8];
46
45void lcd_update (void) 47void lcd_update (void)
46{ 48{
47 int x, y; 49 int x, y;
48 int p=0; 50 int p=0;
49 int bit; 51 int bit;
50 XPoint points[LCD_WIDTH * LCD_HEIGHT]; 52 XPoint points[LCD_WIDTH * LCD_HEIGHT];
53 int cp=0;
54 XPoint clearpoints[LCD_WIDTH * LCD_HEIGHT];
51 55
56#if 0
52 screen_resized(LCD_WIDTH, LCD_HEIGHT); 57 screen_resized(LCD_WIDTH, LCD_HEIGHT);
53 58
54 for(y=0; y<LCD_HEIGHT; y+=8) { 59 for(y=0; y<LCD_HEIGHT; y+=8) {
@@ -65,7 +70,40 @@ void lcd_update (void)
65 } 70 }
66 } 71 }
67 } 72 }
68 drawdots(&points[0], p); 73#else
69 fprintf(stderr, "lcd_update: Draws %d pixels\n", p); 74 for(y=0; y<LCD_HEIGHT; y+=8) {
75 for(x=0; x<LCD_WIDTH; x++) {
76 if(display[x][y/8] || display_copy[x][y/8]) {
77 /* one or more bits/pixels are changed */
78 unsigned char diff =
79 display[x][y/8] ^ display_copy[x][y/8];
80
81 for(bit=0; bit<8; bit++) {
82 if(display[x][y/8]&(1<<bit)) {
83 /* set a dot */
84 points[p].x = x + MARGIN_X;
85 points[p].y = y+bit + MARGIN_Y;
86 p++; /* increase the point counter */
87 }
88 else if(diff &(1<<bit)) {
89 /* clear a dot */
90 clearpoints[cp].x = x + MARGIN_X;
91 clearpoints[cp].y = y+bit + MARGIN_Y;
92 cp++; /* increase the point counter */
93 }
94 }
95 }
96 }
97 }
98
99 /* copy a huge block */
100 memcpy(display_copy, display, sizeof(display));
101
102#endif
103
104
105 drawdots(1, &points[0], p);
106 drawdots(0, &clearpoints[0], cp);
107 fprintf(stderr, "lcd_update: Draws %d pixels, clears %d pixels\n", p, cp);
70 XSync(dpy,False); 108 XSync(dpy,False);
71} 109}