fix(snapshot) snapshot is affected by parent's style because of wrong coords (#2579)
* fix(snapshot) image is affected by parent's style because of wrong coordinates Signed-off-by: Neo Xu <neo.xu1990@gmail.com> * fix(snapshot): take ext_draw_size into account and set disp res to obj size. Signed-off-by: Neo Xu <neo.xu1990@gmail.com> Change-Id: Iae0d37fa1b2cdf20220087ced51857a36e83bb6d
This commit is contained in:
@@ -33,6 +33,7 @@
|
|||||||
- feat(msgbox): omit title label unless needed
|
- feat(msgbox): omit title label unless needed
|
||||||
- feat(msgbox): add function to get selected button index
|
- feat(msgbox): add function to get selected button index
|
||||||
- fix(btnmatrix): make ORed values work correctly with lv_btnmatrix_has_btn_ctrl
|
- fix(btnmatrix): make ORed values work correctly with lv_btnmatrix_has_btn_ctrl
|
||||||
|
- fix(snapshot): snapshot is affected by parent's style because of wrong coordinates.
|
||||||
|
|
||||||
## v8.0.2 (16.07.2021)
|
## v8.0.2 (16.07.2021)
|
||||||
- fix(theme) improve button focus of keyboard
|
- fix(theme) improve button focus of keyboard
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ uint32_t lv_snapshot_buf_size_needed(lv_obj_t * obj, lv_img_cf_t cf)
|
|||||||
/*Width and height determine snapshot image size.*/
|
/*Width and height determine snapshot image size.*/
|
||||||
lv_coord_t w = lv_obj_get_width(obj);
|
lv_coord_t w = lv_obj_get_width(obj);
|
||||||
lv_coord_t h = lv_obj_get_height(obj);
|
lv_coord_t h = lv_obj_get_height(obj);
|
||||||
|
lv_coord_t ext_size = _lv_obj_get_ext_draw_size(obj);
|
||||||
|
w += ext_size * 2;
|
||||||
|
h += ext_size * 2;
|
||||||
|
|
||||||
uint8_t px_size = lv_img_cf_get_px_size(cf);
|
uint8_t px_size = lv_img_cf_get_px_size(cf);
|
||||||
return w * h * ((px_size + 7) >> 3);
|
return w * h * ((px_size + 7) >> 3);
|
||||||
@@ -98,10 +101,14 @@ lv_res_t lv_snapshot_take_to_buf(lv_obj_t * obj, lv_img_cf_t cf, lv_img_dsc_t *
|
|||||||
/*Width and height determine snapshot image size.*/
|
/*Width and height determine snapshot image size.*/
|
||||||
lv_coord_t w = lv_obj_get_width(obj);
|
lv_coord_t w = lv_obj_get_width(obj);
|
||||||
lv_coord_t h = lv_obj_get_height(obj);
|
lv_coord_t h = lv_obj_get_height(obj);
|
||||||
|
lv_coord_t ext_size = _lv_obj_get_ext_draw_size(obj);
|
||||||
|
w += ext_size * 2;
|
||||||
|
h += ext_size * 2;
|
||||||
|
|
||||||
/*Backup obj original info.*/
|
/*Backup obj original info.*/
|
||||||
lv_disp_t * disp_old = lv_obj_get_disp(obj);
|
|
||||||
lv_obj_t * parent_old = lv_obj_get_parent(obj);
|
lv_obj_t * parent_old = lv_obj_get_parent(obj);
|
||||||
|
lv_area_t coords_bkp;
|
||||||
|
lv_area_copy(&coords_bkp, &obj->coords);
|
||||||
|
|
||||||
lv_memset(buf, 0x00, buff_size);
|
lv_memset(buf, 0x00, buff_size);
|
||||||
lv_memset_00(dsc, sizeof(lv_img_dsc_t));
|
lv_memset_00(dsc, sizeof(lv_img_dsc_t));
|
||||||
@@ -116,8 +123,8 @@ lv_res_t lv_snapshot_take_to_buf(lv_obj_t * obj, lv_img_cf_t cf, lv_img_dsc_t *
|
|||||||
|
|
||||||
lv_disp_drv_init(&driver);
|
lv_disp_drv_init(&driver);
|
||||||
driver.draw_buf = &draw_buf;
|
driver.draw_buf = &draw_buf;
|
||||||
driver.hor_res = lv_disp_get_hor_res(disp_old);
|
driver.hor_res = w;
|
||||||
driver.ver_res = lv_disp_get_ver_res(disp_old);
|
driver.ver_res = h;
|
||||||
lv_disp_drv_use_generic_set_px_cb(&driver, cf);
|
lv_disp_drv_use_generic_set_px_cb(&driver, cf);
|
||||||
|
|
||||||
disp = lv_disp_drv_register(&driver);
|
disp = lv_disp_drv_register(&driver);
|
||||||
@@ -138,6 +145,12 @@ lv_res_t lv_snapshot_take_to_buf(lv_obj_t * obj, lv_img_cf_t cf, lv_img_dsc_t *
|
|||||||
obj->parent = screen;
|
obj->parent = screen;
|
||||||
|
|
||||||
disp->inv_p = 0;
|
disp->inv_p = 0;
|
||||||
|
|
||||||
|
obj->coords.x2 = w - ext_size - 1;
|
||||||
|
obj->coords.x1 = ext_size;
|
||||||
|
obj->coords.y2 = h - ext_size - 1;
|
||||||
|
obj->coords.y1 = ext_size;
|
||||||
|
|
||||||
lv_obj_invalidate(obj);
|
lv_obj_invalidate(obj);
|
||||||
|
|
||||||
/*Don't call lv_refr_now to avoid animation disruption */
|
/*Don't call lv_refr_now to avoid animation disruption */
|
||||||
@@ -150,9 +163,11 @@ lv_res_t lv_snapshot_take_to_buf(lv_obj_t * obj, lv_img_cf_t cf, lv_img_dsc_t *
|
|||||||
|
|
||||||
lv_disp_remove(disp);
|
lv_disp_remove(disp);
|
||||||
|
|
||||||
|
lv_area_copy(&obj->coords, &coords_bkp);
|
||||||
|
|
||||||
dsc->data = buf;
|
dsc->data = buf;
|
||||||
dsc->header.w = w;
|
dsc->header.w = lv_area_get_width(&draw_buf.area);
|
||||||
dsc->header.h = h;
|
dsc->header.h = lv_area_get_height(&draw_buf.area);
|
||||||
dsc->header.cf = cf;
|
dsc->header.cf = cf;
|
||||||
return LV_RES_OK;
|
return LV_RES_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user