Adding word-wrap support for gdispDrawStringBox() and gdispFillStringBox()
Thanks to Koryagin Dmitry for this contribution
This commit is contained in:
parent
1c7948b926
commit
ee2b82271d
@ -73,6 +73,7 @@
|
||||
//#define GDISP_NEED_MULTITHREAD FALSE
|
||||
//#define GDISP_NEED_STREAMING FALSE
|
||||
//#define GDISP_NEED_TEXT FALSE
|
||||
// #define GDISP_NEED_TEXT_WORDWRAP FALSE
|
||||
// #define GDISP_NEED_ANTIALIAS FALSE
|
||||
// #define GDISP_NEED_UTF8 FALSE
|
||||
// #define GDISP_NEED_TEXT_KERNING FALSE
|
||||
|
@ -20,6 +20,17 @@
|
||||
#define GDISP_STARTUP_LOGO_TIMEOUT 0
|
||||
#endif
|
||||
|
||||
// For internal use only.
|
||||
#if GDISP_NEED_TEXT_WORDWRAP
|
||||
typedef struct wrapParameters {
|
||||
GDisplay* g;
|
||||
coord_t x;
|
||||
coord_t y;
|
||||
font_t font;
|
||||
justify_t justify;
|
||||
} wrapParameters_t;
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
@ -3156,6 +3167,19 @@ void gdispGDrawBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, co
|
||||
#undef GD
|
||||
}
|
||||
|
||||
/* Callback to render string boxes with word wrap. */
|
||||
#if GDISP_NEED_TEXT_WORDWRAP
|
||||
static bool mf_line_callback(mf_str line, uint16_t count, void *state) {
|
||||
wrapParameters_t* wrapParameters = (wrapParameters_t*)state;
|
||||
|
||||
mf_render_aligned(wrapParameters->font, wrapParameters->x, wrapParameters->y, wrapParameters->justify, line, count, fillcharglyph, wrapParameters->g);
|
||||
|
||||
wrapParameters->y += wrapParameters->font->baseline_y;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
void gdispGDrawChar(GDisplay *g, coord_t x, coord_t y, uint16_t c, font_t font, color_t color) {
|
||||
MUTEX_ENTER(g);
|
||||
g->t.font = font;
|
||||
@ -3247,7 +3271,19 @@ void gdispGDrawBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, co
|
||||
}
|
||||
y += (cy+1 - font->height)/2;
|
||||
|
||||
mf_render_aligned(font, x, y, justify, str, 0, drawcharglyph, g);
|
||||
/* Render */
|
||||
#if GDISP_NEED_TEXT_WORDWRAP
|
||||
wrapParameters_t wrapParameters;
|
||||
wrapParameters.x = x;
|
||||
wrapParameters.y = y;
|
||||
wrapParameters.font = font;
|
||||
wrapParameters.justify = justify;
|
||||
wrapParameters.g = g;
|
||||
|
||||
mf_wordwrap(font, cx, str, mf_line_callback, &wrapParameters);
|
||||
#else
|
||||
mf_render_aligned(font, x, y, justify, str, 0, fillcharglyph, g);
|
||||
#endif
|
||||
|
||||
autoflush(g);
|
||||
MUTEX_EXIT(g);
|
||||
@ -3285,7 +3321,18 @@ void gdispGDrawBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, co
|
||||
y += (cy+1 - font->height)/2;
|
||||
|
||||
/* Render */
|
||||
#if GDISP_NEED_TEXT_WORDWRAP
|
||||
wrapParameters_t wrapParameters;
|
||||
wrapParameters.x = x;
|
||||
wrapParameters.y = y;
|
||||
wrapParameters.font = font;
|
||||
wrapParameters.justify = justify;
|
||||
wrapParameters.g = g;
|
||||
|
||||
mf_wordwrap(font, cx, str, mf_line_callback, &wrapParameters);
|
||||
#else
|
||||
mf_render_aligned(font, x, y, justify, str, 0, fillcharglyph, g);
|
||||
#endif
|
||||
}
|
||||
|
||||
autoflush(g);
|
||||
|
@ -386,6 +386,14 @@
|
||||
* @name GDISP Text Rendering Options
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Enable advanced word-wrapping.
|
||||
* @details Only has an effect with @p gdispGDrawStringBox() and @p gdispGFillStringBox()
|
||||
* @details Defaults to FALSE
|
||||
*/
|
||||
#ifndef GDISP_NEED_TEXT_WORDWRAP
|
||||
#define GDISP_NEED_TEXT_WORDWRAP FALSE
|
||||
#endif
|
||||
/**
|
||||
* @brief Enable UTF-8 support for text rendering.
|
||||
* @details Defaults to FALSE
|
||||
|
@ -25,16 +25,21 @@
|
||||
|
||||
/* Mapping from uGFX settings to mcufont settings */
|
||||
#if GDISP_NEED_UTF8
|
||||
#define MF_ENCODING MF_ENCODING_UTF8
|
||||
#define MF_ENCODING MF_ENCODING_UTF8
|
||||
#else
|
||||
#define MF_ENCODING MF_ENCODING_ASCII
|
||||
#define MF_ENCODING MF_ENCODING_ASCII
|
||||
#endif
|
||||
|
||||
#if GDISP_NEED_TEXT_WORDWRAP
|
||||
#define MF_USE_ADVANCED_WORDWRAP 1
|
||||
#else
|
||||
#define MF_USE_ADVANCED_WORDWRAP 0
|
||||
#endif
|
||||
|
||||
#define MF_USE_KERNING GDISP_NEED_TEXT_KERNING
|
||||
#define MF_FONT_FILE_NAME "src/gdisp/fonts/fonts.h"
|
||||
|
||||
/* These are not used for now */
|
||||
#define MF_USE_ADVANCED_WORDWRAP 0
|
||||
#define MF_USE_JUSTIFY 0
|
||||
|
||||
/*******************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user