summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2011-11-08 21:34:46 +0000
committerThomas Martitz <kugel@rockbox.org>2011-11-08 21:34:46 +0000
commit13209604c1512658e729d0bd9f1c54cf3e53568d (patch)
tree2787f9036b5c40cf79cd324f3d215bb9d48dd34a /firmware/drivers
parent6223ad266e556f5b8d749d5f4fe08e27385be66f (diff)
Add new lcd_bmp and lcd_bmp_part APIs.
This new APIs wrap around lcd_[mono|transparent]_bitmap/_part calls and handle all kinds bitmaps. The intended use is to draw bitmaps that come from read_bmp_fd/_file. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30936 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/lcd-16bit-common.c18
-rw-r--r--firmware/drivers/lcd-bitmap-common.c26
2 files changed, 44 insertions, 0 deletions
diff --git a/firmware/drivers/lcd-16bit-common.c b/firmware/drivers/lcd-16bit-common.c
index 1e1548e997..bbac2b295a 100644
--- a/firmware/drivers/lcd-16bit-common.c
+++ b/firmware/drivers/lcd-16bit-common.c
@@ -515,3 +515,21 @@ void ICODE_ATTR lcd_alpha_bitmap_part(const unsigned char *src, int src_x,
#endif
} while (--row);
}
+
+/* Draw a partial bitmap (mono or native) including alpha channel */
+void ICODE_ATTR lcd_bmp_part(const struct bitmap* bm, int src_x, int src_y,
+ int x, int y, int width, int height)
+{
+ int bitmap_stride = STRIDE_MAIN(bm->width, bm->height);
+ if (bm->format == FORMAT_MONO)
+ lcd_mono_bitmap_part(bm->data, src_x, src_y, bitmap_stride, x, y, width, height);
+ else
+ lcd_bitmap_transparent_part((fb_data*)bm->data,
+ src_x, src_y, bitmap_stride, x, y, width, height);
+}
+
+/* Draw a native bitmap with alpha channel */
+void ICODE_ATTR lcd_bmp(const struct bitmap *bmp, int x, int y)
+{
+ lcd_bmp_part(bmp, 0, 0, x, y, bmp->width, bmp->height);
+}
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c
index 878c08863b..3aa833d6a1 100644
--- a/firmware/drivers/lcd-bitmap-common.c
+++ b/firmware/drivers/lcd-bitmap-common.c
@@ -501,3 +501,29 @@ void LCDFN(puts_scroll_style_offset)(int x, int y, const unsigned char *string,
{
LCDFN(puts_scroll_style_xyoffset)(x, y, string, style, x_offset, 0);
}
+
+#if !defined(HAVE_LCD_COLOR) || !defined(MAIN_LCD)
+/* see lcd-16bit-common.c for others */
+#ifdef MAIN_LCD
+#define THIS_STRIDE STRIDE_MAIN
+#else
+#define THIS_STRIDE STRIDE_REMOTE
+#endif
+
+void LCDFN(bmp_part)(const struct bitmap* bm, int src_x, int src_y,
+ int x, int y, int width, int height)
+{
+ if (bm->format == FORMAT_MONO)
+ LCDFN(mono_bitmap_part)((FBFN(data)*)(bm->data),
+ src_x, src_y, THIS_STRIDE(bm->width, bm->height), x, y, width, height);
+ else
+ LCDFN(bitmap_part)((FBFN(data)*)(bm->data),
+ src_x, src_y, THIS_STRIDE(bm->width, bm->height), x, y, width, height);
+}
+
+void LCDFN(bmp)(const struct bitmap* bm, int x, int y)
+{
+ LCDFN(bmp_part)(bm, 0, 0, x, y, bm->width, bm->height);
+}
+
+#endif