[FL-1472] Infrared: long names fix (#679)
* Infrared app: fix long button names * Ble: fix missing icon on start without config. * Gui: slow but nice string fitting. * Gui: fit header string in button menu Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
420c03bb58
commit
ae08c88bd6
@ -48,11 +48,11 @@ int32_t bt_srv() {
|
||||
furi_record_create("bt", bt);
|
||||
furi_hal_bt_init();
|
||||
|
||||
if(bt->bt_settings.enabled) {
|
||||
if(!furi_hal_bt_wait_startup()) {
|
||||
FURI_LOG_E(BT_SERVICE_TAG, "Core2 startup failed");
|
||||
} else {
|
||||
view_port_enabled_set(bt->statusbar_view_port, true);
|
||||
if(!furi_hal_bt_wait_startup()) {
|
||||
FURI_LOG_E(BT_SERVICE_TAG, "Core2 startup failed");
|
||||
} else {
|
||||
view_port_enabled_set(bt->statusbar_view_port, true);
|
||||
if(bt->bt_settings.enabled) {
|
||||
bool bt_app_started = furi_hal_bt_start_app();
|
||||
if(!bt_app_started) {
|
||||
FURI_LOG_E(BT_SERVICE_TAG, "BT App start failed");
|
||||
|
@ -332,12 +332,12 @@ void elements_string_fit_width(Canvas* canvas, string_t string, uint8_t width) {
|
||||
furi_assert(string);
|
||||
|
||||
uint16_t len_px = canvas_string_width(canvas, string_get_cstr(string));
|
||||
|
||||
if(len_px > width) {
|
||||
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);
|
||||
width -= canvas_string_width(canvas, "...");
|
||||
do {
|
||||
string_left(string, string_size(string) - 1);
|
||||
len_px = canvas_string_width(canvas, string_get_cstr(string));
|
||||
} while(len_px > width);
|
||||
string_cat(string, "...");
|
||||
}
|
||||
}
|
||||
|
@ -78,13 +78,20 @@ static void button_menu_draw_common_button(
|
||||
} else {
|
||||
canvas_draw_rframe(canvas, item_x, item_y, ITEM_WIDTH, ITEM_HEIGHT, 5);
|
||||
}
|
||||
|
||||
string_t disp_str;
|
||||
string_init_set_str(disp_str, text);
|
||||
elements_string_fit_width(canvas, disp_str, ITEM_WIDTH - 6);
|
||||
|
||||
canvas_draw_str_aligned(
|
||||
canvas,
|
||||
item_x + (ITEM_WIDTH / 2),
|
||||
item_y + (ITEM_HEIGHT / 2),
|
||||
AlignCenter,
|
||||
AlignCenter,
|
||||
text);
|
||||
string_get_cstr(disp_str));
|
||||
|
||||
string_clear(disp_str);
|
||||
}
|
||||
|
||||
static void button_menu_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
@ -110,7 +117,11 @@ static void button_menu_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
canvas_draw_icon(canvas, 28, 123, &I_IrdaArrowDown_4x8);
|
||||
}
|
||||
|
||||
canvas_draw_str_aligned(canvas, 32, 10, AlignCenter, AlignCenter, model->header);
|
||||
string_t disp_str;
|
||||
string_init_set_str(disp_str, model->header);
|
||||
elements_string_fit_width(canvas, disp_str, ITEM_WIDTH - 6);
|
||||
canvas_draw_str_aligned(canvas, 32, 10, AlignCenter, AlignCenter, string_get_cstr(disp_str));
|
||||
string_clear(disp_str);
|
||||
|
||||
for(ButtonMenuItemArray_it(it, model->items); !ButtonMenuItemArray_end_p(it);
|
||||
ButtonMenuItemArray_next(it), ++item_position) {
|
||||
|
@ -65,11 +65,18 @@ static void submenu_view_draw_callback(Canvas* canvas, void* _model) {
|
||||
} else {
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
}
|
||||
|
||||
string_t disp_str;
|
||||
string_init_set_str(disp_str, SubmenuItemArray_cref(it)->label);
|
||||
elements_string_fit_width(canvas, disp_str, item_width - 20);
|
||||
|
||||
canvas_draw_str(
|
||||
canvas,
|
||||
6,
|
||||
y_offset + (item_position * item_height) + item_height - 4,
|
||||
SubmenuItemArray_cref(it)->label);
|
||||
string_get_cstr(disp_str));
|
||||
|
||||
string_clear(disp_str);
|
||||
}
|
||||
|
||||
position++;
|
||||
|
@ -47,8 +47,8 @@ class IrdaAppRemoteManager {
|
||||
std::string make_remote_name(const std::string& full_name) const;
|
||||
|
||||
public:
|
||||
static inline const uint32_t max_button_name_length = 31;
|
||||
static inline const uint32_t max_remote_name_length = 31;
|
||||
static inline const uint32_t max_button_name_length = 22;
|
||||
static inline const uint32_t max_remote_name_length = 22;
|
||||
bool add_remote_with_button(const char* button_name, const IrdaAppSignal& signal);
|
||||
bool add_button(const char* button_name, const IrdaAppSignal& signal);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user