1
0
Fork 0
forked from len0rd/rockbox

Introduce put_line().

This function is a fully-fletched, high-level pixel-based line printer, that
combines functionality of several firmware and list functions. It can
draw spacing, icons and text in a single call, in any order and each multiple
times. It can also apply line decorations at the same time.

It features printf-like semantics by accepting a format string that contain
format tags as well as inline text.

It's accessible directly, but also through the multi-screen api for plugins.

Change-Id: I70f5a77bbf4b0252521f2e47ead377b9d6d29b54
This commit is contained in:
Thomas Martitz 2013-12-20 23:34:28 +01:00
parent 5752d029fd
commit 5d6974641b
6 changed files with 490 additions and 0 deletions

View file

@ -100,6 +100,15 @@ static void screen_helper_set_drawmode(int mode)
#endif
}
static void screen_helper_put_line(int x, int y, struct line_desc *line,
const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vput_line(&screens[0], x, y, line, fmt, ap);
va_end(ap);
}
#if NB_SCREENS == 2
static int screen_helper_remote_getcharwidth(void)
{
@ -156,6 +165,15 @@ static void screen_helper_remote_setuifont(int font)
#endif
}
static void screen_helper_remote_put_line(int x, int y, struct line_desc *line,
const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vput_line(&screens[0], x, y, line, fmt, ap);
va_end(ap);
}
#endif
struct screen screens[NB_SCREENS] =
@ -280,6 +298,7 @@ struct screen screens[NB_SCREENS] =
.gradient_fillrect_part = lcd_gradient_fillrect_part,
#endif
#endif
.put_line = screen_helper_put_line,
},
#if NB_SCREENS == 2
{
@ -380,6 +399,7 @@ struct screen screens[NB_SCREENS] =
#if defined(HAVE_LCD_BITMAP)
.set_framebuffer = (void*)lcd_remote_set_framebuffer,
#endif
.put_line = screen_helper_remote_put_line,
}
#endif /* NB_SCREENS == 2 */
};