forked from bartvdbraak/blender
Cleanup: deduplicate code.
FileBrowser had its own 'shorten_string' func, when we have a full fledge one in interface_widget code...
This commit is contained in:
parent
e10ecb6494
commit
cc81b58277
@ -319,6 +319,11 @@ void UI_draw_safe_areas(
|
||||
#define UI_SCROLL_NO_OUTLINE (1 << 2)
|
||||
void UI_draw_widget_scroll(struct uiWidgetColors *wcol, const struct rcti *rect, const struct rcti *slider, int state);
|
||||
|
||||
/* Shortening string helper. */
|
||||
float UI_text_clip_middle_ex(
|
||||
struct uiFontStyle *fstyle, char *str, float okwidth, const float minwidth,
|
||||
const size_t max_len, const char *rpart_sep);
|
||||
|
||||
/* Callbacks
|
||||
*
|
||||
* UI_block_func_handle_set/ButmFunc are for handling events through a callback.
|
||||
|
@ -965,7 +965,8 @@ static void ui_text_clip_right_ex(uiFontStyle *fstyle, char *str, const size_t m
|
||||
* If rpart_sep is not Null, the part of str starting to first occurrence of rpart_sep is preserved at all cost (useful
|
||||
* for strings with shortcuts, like 'AVeryLongFooBarLabelForMenuEntry|Ctrl O' -> 'AVeryLong...MenuEntry|Ctrl O').
|
||||
*/
|
||||
static float ui_text_clip_middle_ex(uiFontStyle *fstyle, char *str, float okwidth, const float minwidth,
|
||||
float UI_text_clip_middle_ex(
|
||||
uiFontStyle *fstyle, char *str, float okwidth, const float minwidth,
|
||||
const size_t max_len, const char *rpart_sep)
|
||||
{
|
||||
float strwidth;
|
||||
@ -1066,7 +1067,7 @@ static float ui_text_clip_middle_ex(uiFontStyle *fstyle, char *str, float okwidt
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper around ui_text_clip_middle_ex.
|
||||
* Wrapper around UI_text_clip_middle_ex.
|
||||
*/
|
||||
static void ui_text_clip_middle(uiFontStyle *fstyle, uiBut *but, const rcti *rect)
|
||||
{
|
||||
@ -1077,7 +1078,7 @@ static void ui_text_clip_middle(uiFontStyle *fstyle, uiBut *but, const rcti *rec
|
||||
const float minwidth = (float)(UI_DPI_ICON_SIZE) / but->block->aspect * 2.0f;
|
||||
|
||||
but->ofs = 0;
|
||||
but->strwidth = ui_text_clip_middle_ex(fstyle, but->drawstr, okwidth, minwidth, max_len, NULL);
|
||||
but->strwidth = UI_text_clip_middle_ex(fstyle, but->drawstr, okwidth, minwidth, max_len, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1093,7 +1094,7 @@ static void ui_text_clip_middle_protect_right(uiFontStyle *fstyle, uiBut *but, c
|
||||
const float minwidth = (float)(UI_DPI_ICON_SIZE) / but->block->aspect * 2.0f;
|
||||
|
||||
but->ofs = 0;
|
||||
but->strwidth = ui_text_clip_middle_ex(fstyle, but->drawstr, okwidth, minwidth, max_len, rsep);
|
||||
but->strwidth = UI_text_clip_middle_ex(fstyle, but->drawstr, okwidth, minwidth, max_len, rsep);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -4065,7 +4066,7 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, const char *name, int ic
|
||||
const float minwidth = (float)(UI_DPI_ICON_SIZE);
|
||||
|
||||
BLI_strncpy(drawstr, name, sizeof(drawstr));
|
||||
ui_text_clip_middle_ex(fstyle, drawstr, okwidth, minwidth, max_len, NULL);
|
||||
UI_text_clip_middle_ex(fstyle, drawstr, okwidth, minwidth, max_len, NULL);
|
||||
|
||||
glColor4ubv((unsigned char *)wt->wcol.text);
|
||||
UI_fontstyle_draw(fstyle, rect, drawstr);
|
||||
@ -4140,7 +4141,7 @@ void ui_draw_preview_item(uiFontStyle *fstyle, rcti *rect, const char *name, int
|
||||
const float minwidth = (float)(UI_DPI_ICON_SIZE);
|
||||
|
||||
BLI_strncpy(drawstr, name, sizeof(drawstr));
|
||||
ui_text_clip_middle_ex(fstyle, drawstr, okwidth, minwidth, max_len, NULL);
|
||||
UI_text_clip_middle_ex(fstyle, drawstr, okwidth, minwidth, max_len, NULL);
|
||||
|
||||
glColor4ubv((unsigned char *)wt->wcol.text);
|
||||
UI_fontstyle_draw(fstyle, &trect, drawstr);
|
||||
|
@ -303,7 +303,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);
|
||||
file_shorten_string(fname, width + 1.0f, 0);
|
||||
UI_text_clip_middle_ex(&fs, fname, width + 1.0f, 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;
|
||||
|
@ -101,7 +101,6 @@ void file_operator_to_sfile(struct SpaceFile *sfile, struct wmOperator *op);
|
||||
|
||||
|
||||
/* filesel.c */
|
||||
float file_shorten_string(char *string, float w, int front);
|
||||
float file_string_width(const char *str);
|
||||
|
||||
float file_font_pointsize(void);
|
||||
|
@ -398,58 +398,6 @@ void ED_fileselect_layout_tilepos(FileLayout *layout, int tile, int *x, int *y)
|
||||
}
|
||||
}
|
||||
|
||||
/* Shorten a string to a given width w.
|
||||
* If front is set, shorten from the front,
|
||||
* otherwise shorten from the end. */
|
||||
float file_shorten_string(char *string, float w, int front)
|
||||
{
|
||||
char temp[FILE_MAX];
|
||||
short shortened = 0;
|
||||
float sw = 0;
|
||||
float pad = 0;
|
||||
|
||||
if (w <= 0) {
|
||||
*string = '\0';
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
sw = file_string_width(string);
|
||||
if (front == 1) {
|
||||
const char *s = string;
|
||||
BLI_strncpy(temp, "...", 4);
|
||||
pad = file_string_width(temp);
|
||||
while ((*s) && (sw + pad > w)) {
|
||||
s++;
|
||||
sw = file_string_width(s);
|
||||
shortened = 1;
|
||||
}
|
||||
if (shortened) {
|
||||
int slen = strlen(s);
|
||||
BLI_strncpy(temp + 3, s, slen + 1);
|
||||
temp[slen + 4] = '\0';
|
||||
BLI_strncpy(string, temp, slen + 4);
|
||||
}
|
||||
}
|
||||
else {
|
||||
const char *s = string;
|
||||
while (sw > w) {
|
||||
int slen = strlen(string);
|
||||
string[slen - 1] = '\0';
|
||||
sw = file_string_width(s);
|
||||
shortened = 1;
|
||||
}
|
||||
|
||||
if (shortened) {
|
||||
int slen = strlen(string);
|
||||
if (slen > 3) {
|
||||
BLI_strncpy(string + slen - 3, "...", 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sw;
|
||||
}
|
||||
|
||||
float file_string_width(const char *str)
|
||||
{
|
||||
uiStyle *style = UI_style_get();
|
||||
|
Loading…
Reference in New Issue
Block a user