[FL-1404] iButton long names fix (#528)

* ibutton: long names partial fix\
* ibutton: limit max filename length to 22 chars
* elwrapping long names to a new line
* Proper m-string size usage

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
its your bedtime
2021-06-22 12:56:57 +03:00
committed by GitHub
parent 8605f53c28
commit 6ec9c6cc49
10 changed files with 44 additions and 20 deletions

View File

@@ -184,11 +184,35 @@ void elements_multiline_text_aligned(
do {
end = strchr(start, '\n');
if(end) {
string_set_strn(str, start, end - start);
} else {
string_set_str(str, start);
}
uint16_t len_px = canvas_string_width(canvas, string_get_cstr(str));
uint8_t px_left =
canvas_width(canvas) - (x - (horizontal == AlignCenter ? len_px / 2 : 0));
// hacky
if(len_px > px_left) {
string_t buff;
string_init_set(buff, str);
size_t s_len = string_size(str);
uint8_t end_pos = s_len - ((len_px - px_left) / (len_px / s_len) + 2);
string_left(buff, end_pos);
string_cat(buff, "-");
string_right(str, end_pos);
canvas_draw_str_aligned(canvas, x, y, horizontal, vertical, string_get_cstr(buff));
string_clear(buff);
start = end + 1;
y += font_height;
}
canvas_draw_str_aligned(canvas, x, y, horizontal, vertical, string_get_cstr(str));
start = end + 1;
y += font_height;
@@ -271,7 +295,7 @@ void elements_string_fit_width(Canvas* canvas, string_t string, uint8_t width) {
uint16_t len_px = canvas_string_width(canvas, string_get_cstr(string));
if(len_px > width) {
size_t s_len = strlen(string_get_cstr(string));
size_t s_len = string_size(string);
uint8_t end_pos = s_len - ((len_px - width) / ((len_px / s_len) + 2) + 2);
string_mid(string, 0, end_pos);

View File

@@ -40,7 +40,7 @@ static void file_select_draw_callback(Canvas* canvas, void* _model) {
string_t string_buff;
const uint8_t item_height = 16;
const uint8_t item_width = 123;
const uint8_t max_width = 100;
const uint8_t text_max_width = 115;
canvas_clear(canvas);
canvas_set_font(canvas, FontSecondary);
@@ -61,7 +61,7 @@ static void file_select_draw_callback(Canvas* canvas, void* _model) {
}
string_init_set(string_buff, model->filename[i]);
elements_string_fit_width(canvas, string_buff, max_width);
elements_string_fit_width(canvas, string_buff, text_max_width);
canvas_draw_str(
canvas, 6, (i * item_height) + item_height - 4, string_get_cstr(string_buff));