aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2018-01-09 17:53:30 +1000
committerinmarket <andrewh@inmarket.com.au>2018-01-09 17:53:30 +1000
commit013bac84cefa14d333a59e16c3fca1b85f05a090 (patch)
tree172f956eb7cc2b88efc842d45687538d46ccb367
parentc41cbd05e9fb340b5b3c0dcb42a7b41462765ecd (diff)
downloaduGFX-013bac84cefa14d333a59e16c3fca1b85f05a090.tar.gz
uGFX-013bac84cefa14d333a59e16c3fca1b85f05a090.tar.bz2
uGFX-013bac84cefa14d333a59e16c3fca1b85f05a090.zip
Support negative baseline_x in a font.
-rw-r--r--src/gdisp/mcufont/mf_font.h28
-rw-r--r--src/gdisp/mcufont/mf_wordwrap.c8
2 files changed, 17 insertions, 19 deletions
diff --git a/src/gdisp/mcufont/mf_font.h b/src/gdisp/mcufont/mf_font.h
index ff8840c8..c7929cdf 100644
--- a/src/gdisp/mcufont/mf_font.h
+++ b/src/gdisp/mcufont/mf_font.h
@@ -30,35 +30,35 @@ struct mf_font_s
{
/* Full name of the font, comes from the original font file. */
const char *full_name;
-
+
/* Short name of the font, comes from file name. */
const char *short_name;
-
+
/* Width and height of the character bounding box. */
uint8_t width;
uint8_t height;
-
+
/* Minimum and maximum tracking width of characters. */
uint8_t min_x_advance;
uint8_t max_x_advance;
-
+
/* Location of the text baseline relative to character. */
- uint8_t baseline_x;
+ int8_t baseline_x;
uint8_t baseline_y;
-
+
/* Line height of the font (vertical advance). */
uint8_t line_height;
-
+
/* Flags identifying various aspects of the font. */
uint8_t flags;
-
+
/* Fallback character to use for missing glyphs. */
uint16_t fallback_character;
-
+
/* Function to get character width. Should return 0 if character is
* not found. */
uint8_t (*character_width)(const struct mf_font_s *font, uint16_t character);
-
+
/* Function to render a character. Returns the character width or 0 if
* character is not found. */
uint8_t (*render_character)(const struct mf_font_s *font,
@@ -80,14 +80,14 @@ struct mf_font_list_s
};
-/* Function to decode and render a single character.
- *
+/* Function to decode and render a single character.
+ *
* font: Pointer to the font definition.
* x0, y0: Upper left corner of the target area.
* character: The character code (unicode) to render.
* callback: Callback function to write out the pixels.
* state: Free variable for caller to use (can be NULL).
- *
+ *
* Returns width of the character.
*/
MF_EXTERN uint8_t mf_render_character(const struct mf_font_s *font,
@@ -102,7 +102,7 @@ MF_EXTERN uint8_t mf_render_character(const struct mf_font_s *font,
*
* font: Pointer to the font definition.
* character: The character code (unicode) to render.
- *
+ *
* Returns width of the character in pixels.
*/
MF_EXTERN uint8_t mf_character_width(const struct mf_font_s *font,
diff --git a/src/gdisp/mcufont/mf_wordwrap.c b/src/gdisp/mcufont/mf_wordwrap.c
index 6402ae8d..6403722d 100644
--- a/src/gdisp/mcufont/mf_wordwrap.c
+++ b/src/gdisp/mcufont/mf_wordwrap.c
@@ -32,11 +32,11 @@ static bool get_wordlen(const struct mf_font_s *font, mf_str *text,
{
mf_char c;
mf_str prev = *text;
-
+
result->word = 0;
result->space = 0;
result->chars = 0;
-
+
c = mf_getchar(text);
while (c && !is_wrap_space(c))
{
@@ -51,10 +51,8 @@ static bool get_wordlen(const struct mf_font_s *font, mf_str *text,
{
result->chars++;
- if (c == ' ')
+ if (c == ' ' || c == '-')
result->space += mf_character_width(font, c);
- else if (c == '-')
- result->space += mf_character_width(font, '-');
else if (c == '\t')
result->space += mf_character_width(font, 'm') * MF_TABSIZE;
else if (c == '\n') {