Fix mismatch in strings length compute in filebrowser, leading to annoying '...' in longest filename.
We must take kerning into account everywhere! Note this will disappear in upcomming filebrowser refactor anyway. Reported through IRC by Pablo (venomgfx), thanks.
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user