diff options
-rw-r--r-- | source/blender/editors/interface/interface_widgets.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_file/file_draw.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 14 |
3 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index deb238061dc..fb7b319b720 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -973,6 +973,10 @@ float UI_text_clip_middle_ex( { float strwidth; + /* Add some epsilon to OK width, avoids 'ellipsing' text that nearly fits! + * Better to have a small piece of the last char cut out, than two remaining chars replaced by an allipsis... */ + okwidth += 1.0f + UI_DPI_FAC; + BLI_assert(str[0]); /* need to set this first */ diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 2bd92b1e207..0a9a12efc0b 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -310,7 +310,7 @@ static void file_draw_string(int sx, int sy, const char *string, float width, in fs.align = align; BLI_strncpy(fname, string, FILE_MAXFILE); - UI_text_clip_middle_ex(&fs, fname, width + 1.0f, UI_DPI_ICON_SIZE, sizeof(fname), NULL); + UI_text_clip_middle_ex(&fs, fname, width, UI_DPI_ICON_SIZE, sizeof(fname), NULL); /* no text clipping needed, UI_fontstyle_draw does it but is a bit too strict (for buttons it works) */ rect.xmin = sx; diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 29a8a06fa23..62b4bfaf179 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -401,8 +401,20 @@ void ED_fileselect_layout_tilepos(FileLayout *layout, int tile, int *x, int *y) float file_string_width(const char *str) { uiStyle *style = UI_style_get(); + float width; + UI_fontstyle_set(&style->widget); - return BLF_width(style->widget.uifont_id, str, BLF_DRAW_STR_DUMMY_MAX); + if (style->widget.kerning == 1) { /* for BLF_width */ + BLF_enable(style->widget.uifont_id, BLF_KERNING_DEFAULT); + } + + width = BLF_width(style->widget.uifont_id, str, BLF_DRAW_STR_DUMMY_MAX); + + if (style->widget.kerning == 1) { + BLF_disable(style->widget.uifont_id, BLF_KERNING_DEFAULT); + } + + return width; } float file_font_pointsize(void) |