BigW Consortium Gitlab

Commit e6dafd61 by Gabor

lv_btnm: with a lot of buttons in row there was a minor position error

parent 446c86a3
......@@ -216,7 +216,8 @@ void lv_btnm_set_map(lv_obj_t * btnm, const char ** map)
/* Count the units and the buttons in a line
* (A button can be 1,2,3... unit wide)*/
uint16_t unit_cnt;
uint16_t unit_cnt; /*Number of units in a row*/
uint16_t unit_act_cnt; /*Number of units currently put in a row*/
uint16_t btn_cnt; /*Number of buttons in a row*/
uint16_t i_tot = 0; /*Act. index in the str map*/
uint16_t btn_i = 0; /*Act. index of button areas*/
......@@ -243,17 +244,22 @@ void lv_btnm_set_map(lv_obj_t * btnm, const char ** map)
uint16_t i;
cord_t act_x = btnms->rects.hpad;
cord_t act_unit_w;
unit_act_cnt = 0;
for(i = 0; i < btn_cnt; i++) {
/* one_unit_w = all_unit_w / unit_cnt
* act_unit_w = one_unit_w * button_width
* do this two operation but the multiplications first to divide a greater number */
* do this two operation but the multiply first to divide a greater number */
act_unit_w = (all_unit_w * lv_btnm_get_width_unit(map_p_tmp[i])) / unit_cnt;
/*Always recalculate act_x because of rounding errors */
act_x = (unit_act_cnt * all_unit_w) / unit_cnt + i * btnms->rects.opad + btnms->rects.hpad;
area_set(&ext->btn_areas[btn_i], act_x,
act_y,
act_x + act_unit_w,
act_y + btn_h);
act_x += act_unit_w + btnms->rects.opad;
unit_act_cnt += lv_btnm_get_width_unit(map_p_tmp[i]);
i_tot ++;
btn_i ++;
......@@ -266,7 +272,6 @@ void lv_btnm_set_map(lv_obj_t * btnm, const char ** map)
}
lv_obj_inv(btnm);
}
/**
......@@ -388,7 +393,7 @@ static bool lv_btnm_design(lv_obj_t * btnm, const area_t * mask, lv_design_mode_
lv_rects_t new_rects;
lv_btn_state_t state;
state = ext->btn_pr == btn_i ? LV_BTN_STATE_PR : LV_BTN_STATE_REL;
memcpy(&new_rects, &style->rects, sizeof(lv_rects_t));
memcpy(&new_rects, &style->btns, sizeof(lv_rects_t));
new_rects.objs.color = style->btns.mcolor[state];
new_rects.gcolor = style->btns.gcolor[state];
new_rects.bcolor = style->btns.bcolor[state];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment