summaryrefslogtreecommitdiff
path: root/uisimulator/sdl/lcd-bitmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'uisimulator/sdl/lcd-bitmap.c')
-rw-r--r--uisimulator/sdl/lcd-bitmap.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/uisimulator/sdl/lcd-bitmap.c b/uisimulator/sdl/lcd-bitmap.c
new file mode 100644
index 0000000000..db4a98d823
--- /dev/null
+++ b/uisimulator/sdl/lcd-bitmap.c
@@ -0,0 +1,79 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 Dan Everton
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "uisdl.h"
21#include "lcd-sdl.h"
22
23SDL_Surface* lcd_surface;
24
25#if LCD_DEPTH <= 8
26SDL_Color lcd_color_zero = {UI_LCD_BGCOLORLIGHT, 0};
27SDL_Color lcd_color_max = {0, 0, 0, 0};
28#endif
29
30static inline Uint32 get_lcd_pixel(int x, int y)
31{
32#if LCD_DEPTH == 1
33 return ((lcd_framebuffer[y/8][x] >> (y & 7)) & 1);
34#elif LCD_DEPTH == 2
35#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
36 return ((lcd_framebuffer[y][x/4] >> (2 * (x & 3))) & 3);
37#else
38 return ((lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3);
39#endif
40#elif LCD_DEPTH == 16
41#if LCD_PIXELFORMAT == RGB565SWAPPED
42 unsigned bits = lcd_framebuffer[y][x];
43 return (bits >> 8) | (bits << 8);
44#else
45 return lcd_framebuffer[y][x];
46#endif
47#endif
48}
49
50void lcd_update(void)
51{
52 /* update a full screen rect */
53 lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
54}
55
56void lcd_update_rect(int x_start, int y_start, int width, int height)
57{
58 sdl_update_rect(lcd_surface, x_start, y_start, width, height, LCD_WIDTH, LCD_HEIGHT,
59 background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0,
60 get_lcd_pixel);
61}
62
63
64/* initialise simulator lcd driver */
65void sim_lcd_init(void)
66{
67#if LCD_DEPTH == 16
68 lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, LCD_WIDTH * display_zoom,
69 LCD_HEIGHT * display_zoom, LCD_DEPTH, 0, 0, 0, 0);
70#else
71 lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, LCD_WIDTH * display_zoom,
72 LCD_HEIGHT * display_zoom, 8, 0, 0, 0, 0);
73#endif
74
75#if LCD_DEPTH <= 8
76 sdl_set_gradient(lcd_surface, &lcd_color_zero, &lcd_color_max, (1<<LCD_DEPTH));
77#endif
78}
79