Commit: e9268abf4a4b1a2ca72dad6088a0847b13cf381c
Author: Mike Erwin
Date:   Tue Oct 18 17:34:29 2016 -0400
Branches: blender2.8
https://developer.blender.org/rBe9268abf4a4b1a2ca72dad6088a0847b13cf381c

fix narrow text entry fields

widget_draw_text was calculating wrong display length when field is too narrow 
to show entire input string. Gawain assert caught this 11 function calls away!

Thanks to @ianwill for reporting.

===================================================================

M       source/blender/editors/interface/interface_widgets.c

===================================================================

diff --git a/source/blender/editors/interface/interface_widgets.c 
b/source/blender/editors/interface/interface_widgets.c
index 62e676d..80fc47e 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -1461,37 +1461,40 @@ static void widget_draw_text(uiFontStyle *fstyle, 
uiWidgetColors *wcol, uiBut *b
                /* for underline drawing */
                float font_xofs, font_yofs;
 
-               UI_fontstyle_draw_ex(fstyle, rect, drawstr + but->ofs,
-                                  drawstr_left_len - but->ofs, &font_xofs, 
&font_yofs);
+               int drawlen = (drawstr_left_len == INT_MAX) ? strlen(drawstr + 
but->ofs) : (drawstr_left_len - but->ofs);
 
-               if (but->menu_key != '\0') {
-                       char fixedbuf[128];
-                       const char *str;
+               if (drawlen > 0) {
+                       UI_fontstyle_draw_ex(fstyle, rect, drawstr + but->ofs, 
drawlen, &font_xofs, &font_yofs);
 
-                       BLI_strncpy(fixedbuf, drawstr + but->ofs, 
min_ii(sizeof(fixedbuf), drawstr_left_len));
+                       if (but->menu_key != '\0') {
+                               char fixedbuf[128];
+                               const char *str;
 
-                       str = strchr(fixedbuf, but->menu_key - 32); /* upper 
case */
-                       if (str == NULL)
-                               str = strchr(fixedbuf, but->menu_key);
+                               BLI_strncpy(fixedbuf, drawstr + but->ofs, 
min_ii(sizeof(fixedbuf), drawlen));
 
-                       if (str) {
-                               int ul_index = -1;
-                               float ul_advance;
+                               str = strchr(fixedbuf, but->menu_key - 32); /* 
upper case */
+                               if (str == NULL)
+                                       str = strchr(fixedbuf, but->menu_key);
 
-                               ul_index = (int)(str - fixedbuf);
+                               if (str) {
+                                       int ul_index = -1;
+                                       float ul_advance;
 
-                               if (fstyle->kerning == 1) {
-                                       BLF_enable(fstyle->uifont_id, 
BLF_KERNING_DEFAULT);
-                               }
+                                       ul_index = (int)(str - fixedbuf);
+
+                                       if (fstyle->kerning == 1) {
+                                               BLF_enable(fstyle->uifont_id, 
BLF_KERNING_DEFAULT);
+                                       }
 
-                               fixedbuf[ul_index] = '\0';
-                               ul_advance = BLF_width(fstyle->uifont_id, 
fixedbuf, ul_index);
+                                       fixedbuf[ul_index] = '\0';
+                                       ul_advance = 
BLF_width(fstyle->uifont_id, fixedbuf, ul_index);
 
-                               BLF_position(fstyle->uifont_id, rect->xmin + 
font_xofs + ul_advance, rect->ymin + font_yofs, 0.0f);
-                               BLF_draw(fstyle->uifont_id, "_", 2);
+                                       BLF_position(fstyle->uifont_id, 
rect->xmin + font_xofs + ul_advance, rect->ymin + font_yofs, 0.0f);
+                                       BLF_draw(fstyle->uifont_id, "_", 2);
 
-                               if (fstyle->kerning == 1) {
-                                       BLF_disable(fstyle->uifont_id, 
BLF_KERNING_DEFAULT);
+                                       if (fstyle->kerning == 1) {
+                                               BLF_disable(fstyle->uifont_id, 
BLF_KERNING_DEFAULT);
+                                       }
                                }
                        }
                }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to