Commit: d0856d1d546a07acf29e3a2ac873fe7dc1d7c61b
Author: Bastien Montagne
Date:   Sun Jun 24 17:47:40 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBd0856d1d546a07acf29e3a2ac873fe7dc1d7c61b

Fix most of 'disappearing' first letter in right-aligned labels.

BLF' blf_font_width_to_strlen() could easily generate strings with up to
nearly two pixels length over requested limit!

Note that the fiddling between floats and ints values make things really
confusing here... :/

There is still a few limit cases where, even though computed str length
is now always below reauested limit, we still get first letter
disappearing, no idea why currently.

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

M       source/blender/blenfont/intern/blf_font.c
M       source/blender/editors/interface/interface_widgets.c

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

diff --git a/source/blender/blenfont/intern/blf_font.c 
b/source/blender/blenfont/intern/blf_font.c
index 13c857b0d4b..b3ab36f7bcc 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -652,7 +652,7 @@ size_t blf_font_width_to_strlen(FontBLF *font, const char 
*str, size_t len, floa
        int pen_x = 0;
        size_t i = 0, i_prev;
        GlyphBLF **glyph_ascii_table = font->glyph_cache->glyph_ascii_table;
-       const int width_i = (int)width + 1;
+       const int width_i = (int)width;
        int width_new;
 
        BLF_KERNING_VARS(font, has_kerning, kern_mode);
@@ -674,7 +674,7 @@ size_t blf_font_width_to_strlen(FontBLF *font, const char 
*str, size_t len, floa
 
                pen_x += g->advance_i;
 
-               if (width_i < pen_x) {
+               if (width_i <= pen_x) {
                        break;
                }
 
diff --git a/source/blender/editors/interface/interface_widgets.c 
b/source/blender/editors/interface/interface_widgets.c
index 3b7ccb68fd4..a6f58fc056a 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -1500,6 +1500,8 @@ float UI_text_clip_middle_ex(
                BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
        }
 
+       BLI_assert(strwidth <= okwidth);
+
        return strwidth;
 }

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

Reply via email to