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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to