summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2013-04-16 23:50:43 +0200
committerThomas Martitz <kugel@rockbox.org>2014-01-07 14:13:48 +0100
commitdeb6ac3693a6fb5c47abd0c32f966f5e38b6a68a (patch)
tree08cb6563035e9aca18618548c86b10a9d39a5cbe
parent36e469db8bb7789c89ff642b51c1471669b830f5 (diff)
downloadrockbox-deb6ac3693a6fb5c47abd0c32f966f5e38b6a68a.zip
rockbox-deb6ac3693a6fb5c47abd0c32f966f5e38b6a68a.tar.gz
rockbox-deb6ac3693a6fb5c47abd0c32f966f5e38b6a68a.tar.bz2
rockbox-deb6ac3693a6fb5c47abd0c32f966f5e38b6a68a.tar.xz
lcd-16bit: Move lcd_gradient_fillrect/_part() to lcd-16bit-common.c.
Change-Id: I6b2d2ba73464610556cfd9ecec52fc62adb007c7
-rw-r--r--firmware/drivers/lcd-16bit-common.c66
-rw-r--r--firmware/drivers/lcd-bitmap-common.c70
2 files changed, 66 insertions, 70 deletions
diff --git a/firmware/drivers/lcd-16bit-common.c b/firmware/drivers/lcd-16bit-common.c
index 99cbe48..9d36499 100644
--- a/firmware/drivers/lcd-16bit-common.c
+++ b/firmware/drivers/lcd-16bit-common.c
@@ -1362,3 +1362,69 @@ void lcd_blit_yuv(unsigned char * const src[3],
lcd_update_rect(LCD_WIDTH - y - height, x, height, width);
#endif
}
+
+/* Fill a rectangle with a gradient. This function draws only the partial
+ * gradient. It assumes the original gradient is src_height high and skips
+ * the first few rows. This is useful for drawing only the bottom half of
+ * a full gradient.
+ *
+ * height == src_height and row_skip == 0 will draw the full gradient
+ *
+ * x, y, width, height - dimensions describing the rectangle
+ * start_rgb - beginning color of the gradient
+ * end_rgb - end color of the gradient
+ * src_height - assumed original height (only height rows will be drawn)
+ * row_skip - how many rows of the original gradient to skip
+ */
+void lcd_gradient_fillrect_part(int x, int y, int width, int height,
+ unsigned start_rgb, unsigned end_rgb, int src_height, int row_skip)
+{
+ int old_pattern = current_vp->fg_pattern;
+ int step_mul, i;
+ int x1, x2;
+ x1 = x;
+ x2 = x + width;
+
+ if (height == 0) return;
+
+ step_mul = (1 << 16) / src_height;
+ int h_r = RGB_UNPACK_RED(start_rgb);
+ int h_g = RGB_UNPACK_GREEN(start_rgb);
+ int h_b = RGB_UNPACK_BLUE(start_rgb);
+ int rstep = (h_r - RGB_UNPACK_RED(end_rgb)) * step_mul;
+ int gstep = (h_g - RGB_UNPACK_GREEN(end_rgb)) * step_mul;
+ int bstep = (h_b - RGB_UNPACK_BLUE(end_rgb)) * step_mul;
+ h_r = (h_r << 16) + (1 << 15);
+ h_g = (h_g << 16) + (1 << 15);
+ h_b = (h_b << 16) + (1 << 15);
+
+ if (row_skip > 0)
+ {
+ h_r -= rstep * row_skip;
+ h_g -= gstep * row_skip;
+ h_b -= bstep * row_skip;
+ }
+
+ for(i = y; i < y + height; i++) {
+ current_vp->fg_pattern = LCD_RGBPACK(h_r >> 16, h_g >> 16, h_b >> 16);
+ lcd_hline(x1, x2, i);
+ h_r -= rstep;
+ h_g -= gstep;
+ h_b -= bstep;
+ }
+
+ current_vp->fg_pattern = old_pattern;
+}
+
+/* Fill a rectangle with a gradient. The gradient's color will fade from
+ * start_rgb to end_rgb over the height of the rectangle
+ *
+ * x, y, width, height - dimensions describing the rectangle
+ * start_rgb - beginning color of the gradient
+ * end_rgb - end color of the gradient
+ */
+void lcd_gradient_fillrect(int x, int y, int width, int height,
+ unsigned start_rgb, unsigned end_rgb)
+{
+ lcd_gradient_fillrect_part(x, y, width, height, start_rgb, end_rgb, height, 0);
+}
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c
index e37da51..81decad 100644
--- a/firmware/drivers/lcd-bitmap-common.c
+++ b/firmware/drivers/lcd-bitmap-common.c
@@ -40,76 +40,6 @@
#define MAIN_LCD
#endif
-#if defined(MAIN_LCD) && defined(HAVE_LCD_COLOR)
-
-/* Fill a rectangle with a gradient. This function draws only the partial
- * gradient. It assumes the original gradient is src_height high and skips
- * the first few rows. This is useful for drawing only the bottom half of
- * a full gradient.
- *
- * height == src_height and row_skip == 0 will draw the full gradient
- *
- * x, y, width, height - dimensions describing the rectangle
- * start_rgb - beginning color of the gradient
- * end_rgb - end color of the gradient
- * src_height - assumed original height (only height rows will be drawn)
- * row_skip - how many rows of the original gradient to skip
- */
-void lcd_gradient_fillrect_part(int x, int y, int width, int height,
- unsigned start_rgb, unsigned end_rgb, int src_height, int row_skip)
-{
- int old_pattern = current_vp->fg_pattern;
- int step_mul, i;
- int x1, x2;
- x1 = x;
- x2 = x + width;
-
- if (height == 0) return;
-
- step_mul = (1 << 16) / src_height;
- int h_r = RGB_UNPACK_RED(start_rgb);
- int h_g = RGB_UNPACK_GREEN(start_rgb);
- int h_b = RGB_UNPACK_BLUE(start_rgb);
- int rstep = (h_r - RGB_UNPACK_RED(end_rgb)) * step_mul;
- int gstep = (h_g - RGB_UNPACK_GREEN(end_rgb)) * step_mul;
- int bstep = (h_b - RGB_UNPACK_BLUE(end_rgb)) * step_mul;
- h_r = (h_r << 16) + (1 << 15);
- h_g = (h_g << 16) + (1 << 15);
- h_b = (h_b << 16) + (1 << 15);
-
- if (row_skip > 0)
- {
- h_r -= rstep * row_skip;
- h_g -= gstep * row_skip;
- h_b -= bstep * row_skip;
- }
-
- for(i = y; i < y + height; i++) {
- current_vp->fg_pattern = LCD_RGBPACK(h_r >> 16, h_g >> 16, h_b >> 16);
- lcd_hline(x1, x2, i);
- h_r -= rstep;
- h_g -= gstep;
- h_b -= bstep;
- }
-
- current_vp->fg_pattern = old_pattern;
-}
-
-/* Fill a rectangle with a gradient. The gradient's color will fade from
- * start_rgb to end_rgb over the height of the rectangle
- *
- * x, y, width, height - dimensions describing the rectangle
- * start_rgb - beginning color of the gradient
- * end_rgb - end color of the gradient
- */
-void lcd_gradient_fillrect(int x, int y, int width, int height,
- unsigned start_rgb, unsigned end_rgb)
-{
- lcd_gradient_fillrect_part(x, y, width, height, start_rgb, end_rgb, height, 0);
-}
-
-#endif
-
void LCDFN(set_framebuffer)(FBFN(data) *fb)
{
if (fb)