summaryrefslogtreecommitdiff
path: root/uisimulator/sdl/lcd-remote-bitmap.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2009-02-09 00:32:59 +0000
committerJens Arnold <amiconn@rockbox.org>2009-02-09 00:32:59 +0000
commit0d935ce75e1408dfd9832ae7dbb7d84df50a645d (patch)
tree9ddcc5d21dcd0e576d0fa824e74c58755fa9d1a0 /uisimulator/sdl/lcd-remote-bitmap.c
parent94537f954e67d44fdd9703c062c4ee53599e0e74 (diff)
downloadrockbox-0d935ce75e1408dfd9832ae7dbb7d84df50a645d.tar.gz
rockbox-0d935ce75e1408dfd9832ae7dbb7d84df50a645d.zip
Put the display colours for monochrome and greyscale targets into the target config files, and use them both for the simulator UI and screendumps. The Clip now shows the split display properly in screendumps and simulator. A side effect is that screendumps of ordinary monochrome targets are now 4-bit BMP files (saves an alternate code path, and might be more compatible with some gfx programs). * Simplify the simulation of split display, and also simplify greylib simulation. The simulator now always calculates 129 shades (2*128 for a Clip sim), and just uses 2 (or 4) of those for native display simulation. * Centralised the simulator LCD dimension definition.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19950 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/sdl/lcd-remote-bitmap.c')
-rw-r--r--uisimulator/sdl/lcd-remote-bitmap.c47
1 files changed, 33 insertions, 14 deletions
diff --git a/uisimulator/sdl/lcd-remote-bitmap.c b/uisimulator/sdl/lcd-remote-bitmap.c
index d165534e00..f5c2225ab2 100644
--- a/uisimulator/sdl/lcd-remote-bitmap.c
+++ b/uisimulator/sdl/lcd-remote-bitmap.c
@@ -22,20 +22,38 @@
22#include "uisdl.h" 22#include "uisdl.h"
23#include "lcd-sdl.h" 23#include "lcd-sdl.h"
24#include "lcd-remote-bitmap.h" 24#include "lcd-remote-bitmap.h"
25#include "misc.h"
25 26
26SDL_Surface *remote_surface; 27SDL_Surface *remote_surface;
27 28
28SDL_Color remote_color_zero = {UI_REMOTE_BGCOLOR, 0}; 29SDL_Color remote_bl_color_dark = {RED_CMP(LCD_REMOTE_BL_DARKCOLOR),
29SDL_Color remote_backlight_color_zero = {UI_REMOTE_BGCOLORLIGHT, 0}; 30 GREEN_CMP(LCD_REMOTE_BL_DARKCOLOR),
30SDL_Color remote_color_max = {0, 0, 0, 0}; 31 BLUE_CMP(LCD_REMOTE_BL_DARKCOLOR), 0};
32SDL_Color remote_bl_color_bright = {RED_CMP(LCD_REMOTE_BL_BRIGHTCOLOR),
33 GREEN_CMP(LCD_REMOTE_BL_BRIGHTCOLOR),
34 BLUE_CMP(LCD_REMOTE_BL_BRIGHTCOLOR), 0};
35SDL_Color remote_color_dark = {RED_CMP(LCD_REMOTE_DARKCOLOR),
36 GREEN_CMP(LCD_REMOTE_DARKCOLOR),
37 BLUE_CMP(LCD_REMOTE_DARKCOLOR), 0};
38SDL_Color remote_color_bright = {RED_CMP(LCD_REMOTE_BRIGHTCOLOR),
39 GREEN_CMP(LCD_REMOTE_BRIGHTCOLOR),
40 BLUE_CMP(LCD_REMOTE_BRIGHTCOLOR), 0};
31 41
32static unsigned long get_lcd_remote_pixel(int x, int y) { 42#define GRADIENT_MAX 128
43
44#if LCD_REMOTE_DEPTH == 2
45/* Only defined for positive, non-split LCD for now */
46static const unsigned char colorindex[4] = {128, 85, 43, 0};
47#endif
48
49static unsigned long get_lcd_remote_pixel(int x, int y)
50{
33#if LCD_REMOTE_DEPTH == 1 51#if LCD_REMOTE_DEPTH == 1
34 return (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 1; 52 return lcd_remote_framebuffer[y/8][x] & (1 << (y & 7)) ? 0 : GRADIENT_MAX;
35#elif LCD_REMOTE_DEPTH == 2 53#elif LCD_REMOTE_DEPTH == 2
36#if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED 54#if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED
37 unsigned bits = (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 0x0101; 55 unsigned bits = (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 0x0101;
38 return (bits | (bits >> 7)) & 3; 56 return colorindex[(bits | (bits >> 7)) & 3];
39#endif 57#endif
40#endif 58#endif
41} 59}
@@ -57,11 +75,11 @@ void lcd_remote_update_rect(int x_start, int y_start, int width, int height)
57void sim_remote_backlight(int value) 75void sim_remote_backlight(int value)
58{ 76{
59 if (value > 0) { 77 if (value > 0) {
60 sdl_set_gradient(remote_surface, &remote_backlight_color_zero, 78 sdl_set_gradient(remote_surface, &remote_bl_color_dark,
61 &remote_color_max, 0, (1<<LCD_REMOTE_DEPTH)); 79 &remote_bl_color_bright, 0, GRADIENT_MAX+1);
62 } else { 80 } else {
63 sdl_set_gradient(remote_surface, &remote_color_zero, &remote_color_max, 81 sdl_set_gradient(remote_surface, &remote_color_dark,
64 0, (1<<LCD_REMOTE_DEPTH)); 82 &remote_color_bright, 0, GRADIENT_MAX+1);
65 } 83 }
66 84
67 sdl_gui_update(remote_surface, 0, 0, LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT, 85 sdl_gui_update(remote_surface, 0, 0, LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT,
@@ -74,10 +92,11 @@ void sim_remote_backlight(int value)
74void sim_lcd_remote_init(void) 92void sim_lcd_remote_init(void)
75{ 93{
76 remote_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, 94 remote_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
77 LCD_REMOTE_WIDTH * display_zoom, LCD_REMOTE_HEIGHT * display_zoom, 95 LCD_REMOTE_WIDTH * display_zoom,
78 8, 0, 0, 0, 0); 96 LCD_REMOTE_HEIGHT * display_zoom,
97 8, 0, 0, 0, 0);
79 98
80 sdl_set_gradient(remote_surface, &remote_backlight_color_zero, 99 sdl_set_gradient(remote_surface, &remote_bl_color_dark,
81 &remote_color_max, 0, (1<<LCD_REMOTE_DEPTH)); 100 &remote_bl_color_bright, 0, GRADIENT_MAX+1);
82} 101}
83 102