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:
Bastien Montagne 2015-05-04 21:12:28 +02:00
parent e10ecb6494
commit cc81b58277
5 changed files with 14 additions and 61 deletions

@ -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,8 +965,9 @@ 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,
const size_t max_len, const char *rpart_sep)
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();