diff options
Diffstat (limited to 'source/blender/blenfont/intern/blf.c')
-rw-r--r-- | source/blender/blenfont/intern/blf.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index 520456653d1..394704e1c20 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -682,6 +682,42 @@ int BLF_draw_mono(int fontid, const char *str, size_t len, int cwidth) return columns; } +/** + * Run \a user_fn for each character, with the bound-box that would be used for drawing. + * + * \param user_fn: Callback that runs on each glyph, returning false early exits. + * \param user_data: User argument passed to \a user_fn. + * + * \note The font position, clipping, matrix and rotation are not applied. + */ +void BLF_boundbox_foreach_glyph_ex(int fontid, + const char *str, + size_t len, + BLF_GlyphBoundsFn user_fn, + void *user_data, + struct ResultBLF *r_info) +{ + FontBLF *font = blf_get(fontid); + + BLF_RESULT_CHECK_INIT(r_info); + + if (font) { + if (font->flags & BLF_WORD_WRAP) { + /* TODO: word-wrap support. */ + BLI_assert(0); + } + else { + blf_font_boundbox_foreach_glyph(font, str, len, user_fn, user_data, r_info); + } + } +} + +void BLF_boundbox_foreach_glyph( + int fontid, const char *str, size_t len, BLF_GlyphBoundsFn user_fn, void *user_data) +{ + BLF_boundbox_foreach_glyph_ex(fontid, str, len, user_fn, user_data, NULL); +} + size_t BLF_width_to_strlen(int fontid, const char *str, size_t len, float width, float *r_width) { FontBLF *font = blf_get(fontid); |