aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2015-10-06 12:02:58 +1000
committerinmarket <andrewh@inmarket.com.au>2015-10-06 12:02:58 +1000
commit53cb1af757a2d0b2a18276cdbbeb0bf826a8540c (patch)
tree61c8051341972d3c135525cbb2aa042e21bcc748
parentb9c3ddf839eba4c227dae2eeca59827719fc2876 (diff)
downloaduGFX-53cb1af757a2d0b2a18276cdbbeb0bf826a8540c.tar.gz
uGFX-53cb1af757a2d0b2a18276cdbbeb0bf826a8540c.tar.bz2
uGFX-53cb1af757a2d0b2a18276cdbbeb0bf826a8540c.zip
Add extra font metrics
-rw-r--r--src/gdisp/gdisp.c16
-rw-r--r--src/gdisp/gdisp.h21
2 files changed, 32 insertions, 5 deletions
diff --git a/src/gdisp/gdisp.c b/src/gdisp/gdisp.c
index 377ccddb..0ddee1f6 100644
--- a/src/gdisp/gdisp.c
+++ b/src/gdisp/gdisp.c
@@ -3313,6 +3313,8 @@ void gdispGDrawBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, co
case fontCharPadding: return 0;
case fontMinWidth: return font->min_x_advance;
case fontMaxWidth: return font->max_x_advance;
+ case fontBaselineX: return font->baseline_x;
+ case fontBaselineY: return font->baseline_y;
}
return 0;
}
@@ -3322,12 +3324,20 @@ void gdispGDrawBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, co
return mf_character_width(font, c);
}
- coord_t gdispGetStringWidth(const char* str, font_t font) {
+ coord_t gdispGetStringWidthCount(const char* str, font_t font, uint16_t count) {
if (!str)
return 0;
- /* No mutex required as we only read static data */
- return mf_get_string_width(font, str, 0, 0);
+ // No mutex required as we only read static data
+ #if GDISP_NEED_TEXT_KERNING
+ return mf_get_string_width(font, str, count, TRUE);
+ #else
+ return mf_get_string_width(font, str, count, FALSE);
+ #endif
+ }
+
+ coord_t gdispGetStringWidth(const char* str, font_t font) {
+ return gdispGetStringWidthCount(str, font, 0);
}
#endif
diff --git a/src/gdisp/gdisp.h b/src/gdisp/gdisp.h
index 4513f3f7..d51ab917 100644
--- a/src/gdisp/gdisp.h
+++ b/src/gdisp/gdisp.h
@@ -72,7 +72,9 @@ typedef enum fontmetric {
fontLineSpacing, /**< The line spacing */
fontCharPadding, /**< The char padding */
fontMinWidth, /**< The minimum width */
- fontMaxWidth /**< The maximum width */
+ fontMaxWidth, /**< The maximum width */
+ fontBaselineX, /**< The base line in x direction */
+ fontBaselineY /**< The base line in y direction */
} fontmetric_t;
/**
@@ -976,7 +978,22 @@ void gdispGDrawBox(GDisplay *g, coord_t x, coord_t y, coord_t cx, coord_t cy, co
coord_t gdispGetCharWidth(char c, font_t font);
/**
- * @brief Get the pixel width of a string.
+ * @brief Get the pixel width of a string of a given character length.
+ * @return The width of the string in pixels.
+ * @pre GDISP_NEED_TEXT must be TRUE in your gfxconf.h
+ *
+ * @note Passing 0 to count has the same effect as calling gdispGetStringWidt()
+ *
+ * @param[in] str The string to measure
+ * @param[in] font The font to use
+ * @param[in] count The number of characters to take into account
+ *
+ * @api
+ */
+ coord_t gdispGetStringWidthCount(const char* str, font_t font, uint16_t count);
+
+ /**
+ * @brief Get the pixel width of an entire string.
* @return The width of the string in pixels.
* @pre GDISP_NEED_TEXT must be TRUE in your gfxconf.h
*