mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
Merge 2edc95d7cd1c5083aebb6cfd60fcfec5f322c9d1 into dev
This commit is contained in:
commit
4452106cce
@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## v7.11.0 (Planned for 19.02.2021)
|
||||
|
||||
### New features
|
||||
- Add better screen oriantetaion management with sowftware rotation support
|
||||
|
||||
### Bugfixes
|
||||
- fix(gauge) fix needle invalidation
|
||||
|
||||
|
||||
## v7.10.1
|
||||
|
||||
### Bugfixes
|
||||
|
@ -199,7 +199,7 @@ void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int32_t value)
|
||||
|
||||
lv_coord_t r = lv_obj_get_width(gauge) / 2;
|
||||
lv_coord_t x_ofs = gauge->coords.x1 + r;
|
||||
lv_coord_t y_ofs = gauge->coords.y1 + r;
|
||||
lv_coord_t y_ofs = gauge->coords.y1 + r + lv_obj_get_style_pad_top(gauge, LV_GAUGE_PART_MAIN);
|
||||
uint16_t angle = lv_linemeter_get_scale_angle(gauge);
|
||||
int16_t angle_ofs = 90 + (360 - angle) / 2 + lv_gauge_get_angle_offset(gauge);
|
||||
lv_point_t p_mid;
|
||||
@ -240,6 +240,33 @@ void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int32_t value)
|
||||
a.y2 = LV_MATH_MAX(p_mid.y, p_end.y) + needle_w;
|
||||
lv_obj_invalidate_area(gauge, &a);
|
||||
|
||||
/*The image might have long "end" on the opposite side ant it also needs to be invalidated*/
|
||||
if(ext->needle_img) {
|
||||
needle_angle = (old_value - min) * angle / (max - min) + angle_ofs;
|
||||
needle_angle += 180;
|
||||
r = LV_MATH_MAX(ext->needle_img_pivot.x, ext->needle_img_pivot.y);
|
||||
|
||||
p_end.y = (_lv_trigo_sin(needle_angle) * r) / LV_TRIGO_SIN_MAX + y_ofs;
|
||||
p_end.x = (_lv_trigo_sin(needle_angle + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
|
||||
|
||||
a.x1 = LV_MATH_MIN(p_mid.x, p_end.x) - needle_w;
|
||||
a.y1 = LV_MATH_MIN(p_mid.y, p_end.y) - needle_w;
|
||||
a.x2 = LV_MATH_MAX(p_mid.x, p_end.x) + needle_w;
|
||||
a.y2 = LV_MATH_MAX(p_mid.y, p_end.y) + needle_w;
|
||||
lv_obj_invalidate_area(gauge, &a);
|
||||
|
||||
needle_angle = (value - min) * angle / (max - min) + angle_ofs;
|
||||
needle_angle += 180;
|
||||
p_end.y = (_lv_trigo_sin(needle_angle) * r) / LV_TRIGO_SIN_MAX + y_ofs;
|
||||
p_end.x = (_lv_trigo_sin(needle_angle + 90) * r) / LV_TRIGO_SIN_MAX + x_ofs;
|
||||
|
||||
a.x1 = LV_MATH_MIN(p_mid.x, p_end.x) - needle_w;
|
||||
a.y1 = LV_MATH_MIN(p_mid.y, p_end.y) - needle_w;
|
||||
a.x2 = LV_MATH_MAX(p_mid.x, p_end.x) + needle_w;
|
||||
a.y2 = LV_MATH_MAX(p_mid.y, p_end.y) + needle_w;
|
||||
lv_obj_invalidate_area(gauge, &a);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user