uint8_t m2_el_align_fn(m2_el_fnarg_p fn_arg) { switch(fn_arg->msg) { case M2_EL_MSG_GET_LIST_LEN: return 1; case M2_EL_MSG_IS_AUTO_SKIP: return 1; case M2_EL_MSG_GET_LIST_ELEMENT: *((m2_rom_void_p *)(fn_arg->data)) = m2_el_align_get_element(fn_arg); return 1; case M2_EL_MSG_GET_LIST_BOX: ((m2_pcbox_p)(fn_arg->data))->c.y = m2_align_get_pos(fn_arg, 1, m2_opt_get_val(m2_el_fnfmt_get_fmt(fn_arg), '|')); ((m2_pcbox_p)(fn_arg->data))->c.x = m2_align_get_pos(fn_arg, 0, m2_opt_get_val(m2_el_fnfmt_get_fmt(fn_arg), '-')); ((m2_pcbox_p)(fn_arg->data))->c.y += ((m2_pcbox_p)(fn_arg->data))->p.y; ((m2_pcbox_p)(fn_arg->data))->c.x += ((m2_pcbox_p)(fn_arg->data))->p.x; return 1; /* element is always visible */ case M2_EL_MSG_GET_HEIGHT: return m2_align_get_new_size(fn_arg, 1); case M2_EL_MSG_GET_WIDTH: return m2_align_get_new_size(fn_arg, 0); #ifdef M2_EL_MSG_DBG_SHOW case M2_EL_MSG_DBG_SHOW: { uint8_t h, w; h = m2_align_get_new_size(fn_arg, 1); w = m2_align_get_new_size(fn_arg, 0); printf("align w:%d h:%d arg:%d \n", w, h, fn_arg->arg); } break; #endif /* additional border removed case M2_EL_MSG_SHOW: if ( fn_arg->arg > 0 ) { uint8_t h, w; h = m2_align_get_new_size(fn_arg, 1); w = m2_align_get_new_size(fn_arg, 0); m2_pos_p b = (m2_pos_p)(fn_arg->data); m2_gfx_box(m2_gfx_add_normal_border_x(b->x), m2_gfx_add_normal_border_y(b->y), w, h); } return 1; */ } return m2_el_fnfmt_fn(fn_arg); }
static M2_EL_FN_DEF(m2_el_s8num_sub_fn) { uint8_t digits; uint8_t width; uint8_t font; font = m2_el_fmfmt_get_font(fn_arg); /* maybe the width is needed, precalculate the pixel width */ /* get number of digits to show */ digits = m2_opt_get_val_any_default(m2_el_fnfmt_get_fmt(fn_arg), 'c', 3); /* calculate pixel width */ width = digits; width++; /* add one char for the sign */ width *= m2_gfx_get_num_char_width(font); switch(fn_arg->msg) { case M2_EL_MSG_GET_HEIGHT: return m2_gfx_add_normal_border_height(font, m2_gfx_get_char_height(font)); case M2_EL_MSG_GET_WIDTH: return m2_gfx_add_normal_border_width(font, width); #ifdef M2_EL_MSG_DBG_SHOW case M2_EL_MSG_DBG_SHOW: { m2_pos_p b = (m2_pos_p)(fn_arg->data); printf("u8 w:%d arg:%d x:%d y:%d %u\n", width, (fn_arg->arg), b->x, b->y, (unsigned)m2_el_s8_get_val(fn_arg)); } return 0; #endif case M2_EL_MSG_SHOW: { m2_pos_p b = (m2_pos_p)(fn_arg->data); if ( m2_is_frame_draw_at_end == 0 ) m2_el_s8base_fn(fn_arg); m2_gfx_draw_text_add_normal_border_offset(b->x, b->y, 0, 0, font, m2_utl_s8d(m2_el_s8_get_val(fn_arg), digits, m2_el_fmfmt_opt_get_val_zero_default(fn_arg, '+'))); if ( m2_is_frame_draw_at_end != 0 ) m2_el_s8base_fn(fn_arg); } return 1; } return m2_el_s8base_fn(fn_arg); }