From 27ece8c366b89fab05a47c342edc3edc18a6c5e3 Mon Sep 17 00:00:00 2001 From: Torne Wuff Date: Fri, 16 Oct 2009 20:15:12 +0000 Subject: Pluginlib: make scroll functions clear screen if scrolled by >= screen size (from FS#10330) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23211 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/lib/grey_scroll.c | 24 ++++++++++++++++++++++++ apps/plugins/lib/xlcd_scroll.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/apps/plugins/lib/grey_scroll.c b/apps/plugins/lib/grey_scroll.c index adecd3bc43..35f73b70c4 100644 --- a/apps/plugins/lib/grey_scroll.c +++ b/apps/plugins/lib/grey_scroll.c @@ -37,7 +37,10 @@ void grey_scroll_left(int count) int length, blank; if ((unsigned)count >= (unsigned)_grey_info.width) + { + grey_clear_display(); return; + } data = _grey_info.buffer; data_end = data + _GREY_MULUQ(_grey_info.width, _grey_info.height); @@ -62,7 +65,10 @@ void grey_scroll_right(int count) int length, blank; if ((unsigned)count >= (unsigned)_grey_info.width) + { + grey_clear_display(); return; + } data = _grey_info.buffer; data_end = data + _GREY_MULUQ(_grey_info.width, _grey_info.height); @@ -86,7 +92,10 @@ void grey_scroll_up(int count) int blank; if ((unsigned)count >= (unsigned)_grey_info.height) + { + grey_clear_display(); return; + } shift = _GREY_MULUQ(_grey_info.width, count); length = _GREY_MULUQ(_grey_info.width, _grey_info.height - count); @@ -105,7 +114,10 @@ void grey_scroll_down(int count) int blank; if ((unsigned)count >= (unsigned)_grey_info.height) + { + grey_clear_display(); return; + } shift = _GREY_MULUQ(_grey_info.width, count); length = _GREY_MULUQ(_grey_info.width, _grey_info.height - count); @@ -126,7 +138,10 @@ void grey_ub_scroll_left(int count) int blank, length; if ((unsigned)count >= (unsigned)_grey_info.width) + { + grey_ub_clear_display(); return; + } data = _grey_info.values; data_end = data + _GREY_MULUQ(_grey_info.width, _grey_info.height); @@ -156,7 +171,10 @@ void grey_ub_scroll_right(int count) int blank, length; if ((unsigned)count >= (unsigned)_grey_info.width) + { + grey_ub_clear_display(); return; + } data = _grey_info.values; data_end = data + _GREY_MULUQ(_grey_info.width, _grey_info.height); @@ -185,7 +203,10 @@ void grey_ub_scroll_up(int count) int blank; if ((unsigned)count >= (unsigned)_grey_info.height) + { + grey_ub_clear_display(); return; + } dst = _grey_info.values; end = dst + _GREY_MULUQ(_grey_info.height, _grey_info.width); @@ -257,7 +278,10 @@ void grey_ub_scroll_down(int count) int blank; if ((unsigned)count >= (unsigned)_grey_info.height) + { + grey_ub_clear_display(); return; + } start = _grey_info.values; dst = start + _GREY_MULUQ(_grey_info.height, _grey_info.width); diff --git a/apps/plugins/lib/xlcd_scroll.c b/apps/plugins/lib/xlcd_scroll.c index 96e0715894..f8eac1d4b9 100644 --- a/apps/plugins/lib/xlcd_scroll.c +++ b/apps/plugins/lib/xlcd_scroll.c @@ -37,7 +37,10 @@ void xlcd_scroll_left(int count) int length, oldmode; if ((unsigned)count >= LCD_WIDTH) + { + rb->lcd_clear_display(); return; + } length = (LCD_WIDTH-count)*LCD_FBHEIGHT; @@ -56,7 +59,10 @@ void xlcd_scroll_right(int count) int length, oldmode; if ((unsigned)count >= LCD_WIDTH) + { + rb->lcd_clear_display(); return; + } length = (LCD_WIDTH-count)*LCD_FBHEIGHT; @@ -77,7 +83,10 @@ void xlcd_scroll_up(int count) fb_data *data; if ((unsigned)count >= LCD_HEIGHT) + { + rb->lcd_clear_display(); return; + } length = LCD_HEIGHT - count; @@ -103,7 +112,10 @@ void xlcd_scroll_down(int count) fb_data *data; if ((unsigned)count >= LCD_HEIGHT) + { + rb->lcd_clear_display(); return; + } length = LCD_HEIGHT - count; @@ -131,7 +143,10 @@ void xlcd_scroll_left(int count) int blockcount, blocklen; if ((unsigned) count >= LCD_WIDTH) + { + rb->lcd_clear_display(); return; + } #if LCD_DEPTH == 2 blockcount = count >> 2; @@ -186,7 +201,10 @@ void xlcd_scroll_right(int count) int blockcount, blocklen; if ((unsigned) count >= LCD_WIDTH) + { + rb->lcd_clear_display(); return; + } #if LCD_DEPTH == 2 blockcount = count >> 2; @@ -243,7 +261,10 @@ void xlcd_scroll_left(int count) int length, oldmode; if ((unsigned)count >= LCD_WIDTH) + { + rb->lcd_clear_display(); return; + } data = rb->lcd_framebuffer; data_end = data + LCD_WIDTH*LCD_FBHEIGHT; @@ -269,7 +290,10 @@ void xlcd_scroll_right(int count) int length, oldmode; if ((unsigned)count >= LCD_WIDTH) + { + rb->lcd_clear_display(); return; + } data = rb->lcd_framebuffer; data_end = data + LCD_WIDTH*LCD_FBHEIGHT; @@ -298,7 +322,10 @@ void xlcd_scroll_up(int count) int length, oldmode; if ((unsigned)count >= LCD_HEIGHT) + { + rb->lcd_clear_display(); return; + } length = LCD_HEIGHT - count; @@ -318,7 +345,10 @@ void xlcd_scroll_down(int count) int length, oldmode; if ((unsigned)count >= LCD_HEIGHT) + { + rb->lcd_clear_display(); return; + } length = LCD_HEIGHT - count; @@ -342,7 +372,10 @@ void xlcd_scroll_up(int count) int blockcount, blocklen; if ((unsigned) count >= LCD_HEIGHT) + { + rb->lcd_clear_display(); return; + } #if (LCD_DEPTH == 1) \ || (LCD_DEPTH == 2) && (LCD_PIXELFORMAT == VERTICAL_INTERLEAVED) @@ -536,7 +569,10 @@ void xlcd_scroll_down(int count) int blockcount, blocklen; if ((unsigned) count >= LCD_HEIGHT) + { + rb->lcd_clear_display(); return; + } #if (LCD_DEPTH == 1) \ || (LCD_DEPTH == 2) && (LCD_PIXELFORMAT == VERTICAL_INTERLEAVED) -- cgit v1.2.3