[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