diff options
author | Karl Kurbjun <kkurbjun@gmail.com> | 2009-09-12 16:42:11 +0000 |
---|---|---|
committer | Karl Kurbjun <kkurbjun@gmail.com> | 2009-09-12 16:42:11 +0000 |
commit | 2544b001b8d3e1cd34791ec492fca4104bc2b440 (patch) | |
tree | 60a779c7654f176fdb7b14d41774816e91e05e79 /apps/plugins | |
parent | ced32dfc48ea06c672d33aaa82a12b522efe51e1 (diff) | |
download | rockbox-2544b001b8d3e1cd34791ec492fca4104bc2b440.tar.gz rockbox-2544b001b8d3e1cd34791ec492fca4104bc2b440.zip |
Add Vertical stride support to LCD scrolling functions.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22683 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/lib/xlcd_scroll.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/apps/plugins/lib/xlcd_scroll.c b/apps/plugins/lib/xlcd_scroll.c index 6b70e2cfd2..499dbf13a9 100644 --- a/apps/plugins/lib/xlcd_scroll.c +++ b/apps/plugins/lib/xlcd_scroll.c | |||
@@ -31,6 +31,97 @@ | |||
31 | static const unsigned short patterns[4] = {0xFFFF, 0xFF00, 0x00FF, 0x0000}; | 31 | static const unsigned short patterns[4] = {0xFFFF, 0xFF00, 0x00FF, 0x0000}; |
32 | #endif | 32 | #endif |
33 | 33 | ||
34 | #if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE | ||
35 | void xlcd_scroll_left(int count) | ||
36 | { | ||
37 | int length, oldmode; | ||
38 | |||
39 | if ((unsigned)count >= LCD_WIDTH) | ||
40 | return; | ||
41 | |||
42 | length = (LCD_WIDTH-count)*LCD_FBHEIGHT; | ||
43 | |||
44 | rb->memmove(rb->lcd_framebuffer, rb->lcd_framebuffer + LCD_HEIGHT*count, | ||
45 | length * sizeof(fb_data)); | ||
46 | |||
47 | oldmode = rb->lcd_get_drawmode(); | ||
48 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
49 | rb->lcd_fillrect(LCD_WIDTH-count, 0, count, LCD_HEIGHT); | ||
50 | rb->lcd_set_drawmode(oldmode); | ||
51 | } | ||
52 | |||
53 | /* Scroll right */ | ||
54 | void xlcd_scroll_right(int count) | ||
55 | { | ||
56 | int length, oldmode; | ||
57 | |||
58 | if ((unsigned)count >= LCD_WIDTH) | ||
59 | return; | ||
60 | |||
61 | length = (LCD_WIDTH-count)*LCD_FBHEIGHT; | ||
62 | |||
63 | rb->memmove(rb->lcd_framebuffer + LCD_HEIGHT*count, | ||
64 | rb->lcd_framebuffer, length * sizeof(fb_data)); | ||
65 | |||
66 | oldmode = rb->lcd_get_drawmode(); | ||
67 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
68 | rb->lcd_fillrect(0, 0, count, LCD_HEIGHT); | ||
69 | rb->lcd_set_drawmode(oldmode); | ||
70 | } | ||
71 | |||
72 | /* Scroll up */ | ||
73 | void xlcd_scroll_up(int count) | ||
74 | { | ||
75 | int width, length, oldmode; | ||
76 | |||
77 | fb_data *data; | ||
78 | |||
79 | if ((unsigned)count >= LCD_HEIGHT) | ||
80 | return; | ||
81 | |||
82 | length = LCD_HEIGHT - count; | ||
83 | |||
84 | width = LCD_WIDTH; | ||
85 | data = rb->lcd_framebuffer; | ||
86 | |||
87 | do { | ||
88 | rb->memmove(data,data + count,length * sizeof(fb_data)); | ||
89 | data += LCD_HEIGHT; | ||
90 | } while(width--); | ||
91 | |||
92 | oldmode = rb->lcd_get_drawmode(); | ||
93 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
94 | rb->lcd_fillrect(0, length, LCD_WIDTH, count); | ||
95 | rb->lcd_set_drawmode(oldmode); | ||
96 | } | ||
97 | |||
98 | /* Scroll down */ | ||
99 | void xlcd_scroll_down(int count) | ||
100 | { | ||
101 | int width, length, oldmode; | ||
102 | |||
103 | fb_data *data; | ||
104 | |||
105 | if ((unsigned)count >= LCD_HEIGHT) | ||
106 | return; | ||
107 | |||
108 | length = LCD_HEIGHT - count; | ||
109 | |||
110 | width = LCD_WIDTH; | ||
111 | data = rb->lcd_framebuffer; | ||
112 | |||
113 | do { | ||
114 | rb->memmove(data + count, data, length * sizeof(fb_data)); | ||
115 | data += LCD_HEIGHT; | ||
116 | } while(width--); | ||
117 | |||
118 | oldmode = rb->lcd_get_drawmode(); | ||
119 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
120 | rb->lcd_fillrect(0, 0, LCD_WIDTH, count); | ||
121 | rb->lcd_set_drawmode(oldmode); | ||
122 | } | ||
123 | #else | ||
124 | |||
34 | #if (LCD_PIXELFORMAT == HORIZONTAL_PACKING) && (LCD_DEPTH < 8) | 125 | #if (LCD_PIXELFORMAT == HORIZONTAL_PACKING) && (LCD_DEPTH < 8) |
35 | 126 | ||
36 | /* Scroll left */ | 127 | /* Scroll left */ |
@@ -629,5 +720,6 @@ void xlcd_scroll_down(int count) | |||
629 | } | 720 | } |
630 | 721 | ||
631 | #endif /* LCD_PIXELFORMAT, LCD_DEPTH */ | 722 | #endif /* LCD_PIXELFORMAT, LCD_DEPTH */ |
723 | #endif /* defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE */ | ||
632 | 724 | ||
633 | #endif /* HAVE_LCD_BITMAP */ | 725 | #endif /* HAVE_LCD_BITMAP */ |