1
0
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:
github-actions[bot] 2021-02-19 12:51:16 +00:00 committed by GitHub
commit 4452106cce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 1 deletions

View File

@ -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

View File

@ -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);
}
}
/**