summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2013-12-20 23:34:28 +0100
committerThomas Martitz <kugel@rockbox.org>2014-01-07 11:36:00 +0100
commit6630958533d02d66dca8cc79897fda2cb744c076 (patch)
tree598f20a9ebd1248dd4fdbfdf3875ab928f80980a /firmware
parentb8505222c02a7a5a19571c3d4577f3b473cb8558 (diff)
downloadrockbox-6630958533d02d66dca8cc79897fda2cb744c076.tar.gz
rockbox-6630958533d02d66dca8cc79897fda2cb744c076.zip
lcd-common/scroll_engine: Introduce lcd_putsxy_scroll_func().
This function supports installing a custom scroll callback. This will be called when the scrollengine redraws the line. It allows to draw extended styles (or anything your can possible imagine) along with the text. It is also strictly pixel-based, the first pixel-based function that supports scrolling. Change-Id: I57f81ac7b3d08b877aea4cb8afa882f175ebcdfc
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/lcd-bitmap-common.c11
-rw-r--r--firmware/drivers/lcd-charcell.c10
-rw-r--r--firmware/export/lcd-remote.h3
-rw-r--r--firmware/export/lcd.h5
4 files changed, 29 insertions, 0 deletions
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c
index d8417e13e2..5961bba7a5 100644
--- a/firmware/drivers/lcd-bitmap-common.c
+++ b/firmware/drivers/lcd-bitmap-common.c
@@ -572,6 +572,17 @@ void LCDFN(puts_scroll_style_xyoffset)(int x, int y, const unsigned char *string
572 true, LCDFN(scroll_fn), NULL); 572 true, LCDFN(scroll_fn), NULL);
573} 573}
574 574
575void LCDFN(putsxy_scroll_func)(int x, int y, const unsigned char *string,
576 void (*scroll_func)(struct scrollinfo *),
577 void *data, int x_offset)
578{
579 if (!scroll_func)
580 LCDFN(putsxyofs)(x, y, x_offset, string);
581 else
582 LCDFN(puts_scroll_worker)(x, y, string, STYLE_NONE, x_offset, 0,
583 false, scroll_func, data);
584}
585
575void LCDFN(puts_scroll)(int x, int y, const unsigned char *string) 586void LCDFN(puts_scroll)(int x, int y, const unsigned char *string)
576{ 587{
577 LCDFN(puts_scroll_style)(x, y, string, STYLE_DEFAULT); 588 LCDFN(puts_scroll_style)(x, y, string, STYLE_DEFAULT);
diff --git a/firmware/drivers/lcd-charcell.c b/firmware/drivers/lcd-charcell.c
index db867cdb0a..54159519a3 100644
--- a/firmware/drivers/lcd-charcell.c
+++ b/firmware/drivers/lcd-charcell.c
@@ -563,6 +563,16 @@ void lcd_puts_scroll_worker(int x, int y, const unsigned char *string,
563 lcd_scroll_info.lines++; 563 lcd_scroll_info.lines++;
564} 564}
565 565
566void lcd_putsxy_scroll_func(int x, int y, const unsigned char *string,
567 void (*scroll_func)(struct scrollinfo *),
568 void *data, int x_offset)
569{
570 if (!scroll_func)
571 lcd_putsxyofs(x, y, x_offset, string);
572 else
573 lcd_puts_scroll_worker(x, y, string, x_offset, scroll_func, data);
574}
575
566void lcd_scroll_fn(struct scrollinfo* s) 576void lcd_scroll_fn(struct scrollinfo* s)
567{ 577{
568 lcd_putsxyofs(s->x, s->y, s->offset, s->line); 578 lcd_putsxyofs(s->x, s->y, s->offset, s->line);
diff --git a/firmware/export/lcd-remote.h b/firmware/export/lcd-remote.h
index be6816cd7e..f209e6b47d 100644
--- a/firmware/export/lcd-remote.h
+++ b/firmware/export/lcd-remote.h
@@ -196,6 +196,9 @@ extern void lcd_remote_puts_scroll_style_xyoffset(int x, int y,
196 const unsigned char *string, 196 const unsigned char *string,
197 int style, int x_offset, 197 int style, int x_offset,
198 int y_offset); 198 int y_offset);
199extern void lcd_remote_putsxy_scroll_func(int x, int y, const unsigned char *string,
200 void (*scroll_func)(struct scrollinfo *),
201 void *data, int x_offset);
199 202
200extern void lcd_remote_update(void); 203extern void lcd_remote_update(void);
201extern void lcd_remote_update_rect(int x, int y, int width, int height); 204extern void lcd_remote_update_rect(int x, int y, int width, int height);
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h
index 7842ce59f2..745c445dda 100644
--- a/firmware/export/lcd.h
+++ b/firmware/export/lcd.h
@@ -108,6 +108,8 @@ enum screen_type {
108#endif 108#endif
109}; 109};
110 110
111struct scrollinfo;
112
111#if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE 113#if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE
112#define STRIDE_MAIN(w, h) (h) 114#define STRIDE_MAIN(w, h) (h)
113#else 115#else
@@ -212,6 +214,9 @@ extern void lcd_putc(int x, int y, unsigned long ucs);
212extern void lcd_puts_scroll(int x, int y, const unsigned char* string); 214extern void lcd_puts_scroll(int x, int y, const unsigned char* string);
213extern void lcd_puts_scroll_style(int x, int y, const unsigned char* string, 215extern void lcd_puts_scroll_style(int x, int y, const unsigned char* string,
214 int style); 216 int style);
217extern void lcd_putsxy_scroll_func(int x, int y, const unsigned char *string,
218 void (*scroll_func)(struct scrollinfo *),
219 void *data, int x_offset);
215 220
216#ifdef HAVE_LCD_BITMAP 221#ifdef HAVE_LCD_BITMAP
217 222