[Bf-blender-cvs] [1c3efb2] temp-blf-wordwrap: BLF: Set width for single line ascii drawing BLF_draw_ascii_ex and all wrapped text drawing
Campbell Barton
noreply at git.blender.org
Sun Aug 30 04:34:50 CEST 2015
Commit: 1c3efb29e3bec43f8bee6fed1525259a230b40ae
Author: Campbell Barton
Date: Sun Aug 30 11:54:35 2015 +1000
Branches: temp-blf-wordwrap
https://developer.blender.org/rB1c3efb29e3bec43f8bee6fed1525259a230b40ae
BLF: Set width for single line ascii drawing BLF_draw_ascii_ex and all wrapped text drawing
===================================================================
M source/blender/blenfont/intern/blf.c
M source/blender/blenfont/intern/blf_font.c
M source/blender/blenfont/intern/blf_internal.h
===================================================================
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index 975dcea..0a02395 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -600,7 +600,7 @@ void BLF_draw_ascii_ex(
blf_font_draw__wrap(font, str, len, r_info);
}
else {
- blf_font_draw_ascii(font, str, len);
+ blf_font_draw_ascii(font, str, len, r_info);
}
blf_draw__end(mode, param);
}
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index d926b38..d0f478f 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -207,6 +207,7 @@ static void blf_font_draw_ex(
}
if (r_info) {
+ r_info->lines_wrap = 1;
r_info->width = pen_x;
}
}
@@ -216,7 +217,9 @@ void blf_font_draw(FontBLF *font, const char *str, size_t len, struct ResultBLF
}
/* faster version of blf_font_draw, ascii only for view dimensions */
-static void blf_font_draw_ascii_ex(FontBLF *font, const char *str, size_t len, int pen_y)
+static void blf_font_draw_ascii_ex(
+ FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info,
+ int pen_y)
{
unsigned char c;
GlyphBLF *g, *g_prev = NULL;
@@ -241,10 +244,15 @@ static void blf_font_draw_ascii_ex(FontBLF *font, const char *str, size_t len, i
pen_x += g->advance_i;
g_prev = g;
}
+
+ if (r_info) {
+ r_info->lines_wrap = 1;
+ r_info->width = pen_x;
+ }
}
-void blf_font_draw_ascii(FontBLF *font, const char *str, size_t len)
+void blf_font_draw_ascii(FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info)
{
- blf_font_draw_ascii_ex(font, str, len, 0);
+ blf_font_draw_ascii_ex(font, str, len, r_info, 0);
}
/* use fixed column width, but an utf8 character may occupy multiple columns */
@@ -627,6 +635,7 @@ static void blf_font_boundbox_ex(
}
if (r_info) {
+ r_info->lines_wrap = 1;
r_info->width = pen_x;
}
}
@@ -653,8 +662,8 @@ struct WordWrapVars {
*
* \return number of lines.
*/
-static int blf_font_wrap_apply(
- FontBLF *font, const char *str, size_t len,
+static void blf_font_wrap_apply(
+ FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info,
void (*callback)(FontBLF *font, const char *str, size_t len, int pen_y, void *userdata),
void *userdata)
{
@@ -720,7 +729,11 @@ static int blf_font_wrap_apply(
// printf("done! %d lines\n", lines);
- return lines;
+ if (r_info) {
+ r_info->lines_wrap = lines;
+ /* width of last line only (with wrapped lines) */
+ r_info->width = pen_x;
+ }
}
/* blf_font_draw__wrap */
@@ -730,13 +743,7 @@ static void blf_font_draw__wrap_cb(FontBLF *font, const char *str, size_t len, i
}
void blf_font_draw__wrap(FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info)
{
- int lines;
-
- lines = blf_font_wrap_apply(font, str, len, blf_font_draw__wrap_cb, NULL);
-
- if (r_info) {
- r_info->lines_wrap = lines;
- }
+ blf_font_wrap_apply(font, str, len, r_info, blf_font_draw__wrap_cb, NULL);
}
/* blf_font_boundbox__wrap */
@@ -750,18 +757,12 @@ static void blf_font_boundbox_wrap_cb(FontBLF *font, const char *str, size_t len
}
void blf_font_boundbox__wrap(FontBLF *font, const char *str, size_t len, rctf *box, struct ResultBLF *r_info)
{
- int lines;
-
box->xmin = 32000.0f;
box->xmax = -32000.0f;
box->ymin = 32000.0f;
box->ymax = -32000.0f;
- lines = blf_font_wrap_apply(font, str, len, blf_font_boundbox_wrap_cb, box);
-
- if (r_info) {
- r_info->lines_wrap = lines;
- }
+ blf_font_wrap_apply(font, str, len, r_info, blf_font_boundbox_wrap_cb, box);
}
/** \} */
diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h
index 0745315..6bd620d 100644
--- a/source/blender/blenfont/intern/blf_internal.h
+++ b/source/blender/blenfont/intern/blf_internal.h
@@ -54,7 +54,7 @@ void blf_font_attach_from_mem(struct FontBLF *font, const unsigned char *mem, in
void blf_font_size(struct FontBLF *font, unsigned int size, unsigned int dpi);
void blf_font_draw(struct FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info);
void blf_font_draw__wrap(struct FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info);
-void blf_font_draw_ascii(struct FontBLF *font, const char *str, size_t len);
+void blf_font_draw_ascii(struct FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info);
int blf_font_draw_mono(struct FontBLF *font, const char *str, size_t len, int cwidth);
void blf_font_buffer(struct FontBLF *font, const char *str);
size_t blf_font_width_to_strlen(struct FontBLF *font, const char *str, size_t len, float width, float *r_width);
More information about the Bf-blender-cvs
mailing list