[Bf-blender-cvs] [e9268ab] blender2.8: fix narrow text entry fields

Mike Erwin noreply at git.blender.org
Tue Oct 18 23:35:00 CEST 2016


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




More information about the Bf-blender-cvs mailing list