1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

img rotate auto set ext draw pad

This commit is contained in:
Gabor Kiss-Vamosi 2019-11-02 21:30:51 +01:00
parent 2b955ac8b6
commit abfe2f63a1
2 changed files with 32 additions and 1 deletions

View File

@ -525,7 +525,12 @@ static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p)
#if MASK_AREA_DEBUG
static lv_color_t debug_color = LV_COLOR_RED;
lv_draw_fill(&obj_ext_mask, &obj_ext_mask, debug_color, LV_OPA_50);
LV_STYLE_CREATE(style_debug, &lv_style_plain);
style_debug.body.main_color = debug_color;
style_debug.body.grad_color = debug_color;
style_debug.body.border.width = 2;
style_debug.body.border.color.full = (debug_color.full + 0x13) * 9;
lv_draw_rect(&obj_ext_mask, &obj_ext_mask, &style_debug, LV_OPA_50);
debug_color.full *= 17;
debug_color.full += 0xA1;
#endif

View File

@ -19,6 +19,7 @@
#include "../lv_draw/lv_img_decoder.h"
#include "../lv_misc/lv_fs.h"
#include "../lv_misc/lv_txt.h"
#include "../lv_misc/lv_math.h"
#include "../lv_misc/lv_log.h"
/*********************
@ -200,6 +201,9 @@ void lv_img_set_src(lv_obj_t * img, const void * src_img)
lv_obj_set_size(img, ext->w, ext->h);
}
/*Provide enough room for the rotated corners*/
if(ext->angle) lv_obj_refresh_ext_draw_pad(img);
lv_obj_invalidate(img);
}
@ -254,6 +258,17 @@ void lv_img_set_offset_y(lv_obj_t * img, lv_coord_t y)
}
}
void lv_img_set_angle(lv_obj_t * img, int16_t angle)
{
if(angle < 0 || angle >= 360) angle = angle % 360;
lv_img_ext_t * ext = lv_obj_get_ext_attr(img);
ext->angle = angle;
lv_obj_refresh_ext_draw_pad(img);
lv_obj_invalidate(img);
}
/*=====================
* Getter functions
*====================*/
@ -427,6 +442,17 @@ static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * param)
if(ext->src_type == LV_IMG_SRC_SYMBOL) {
lv_img_set_src(img, ext->src);
}
} else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
/*If the image has angle provide enough room for the rotated corners */
if(ext->angle) {
lv_sqrt_res_t ds;
lv_sqrt(ext->w * ext->w + ext->h * ext->h, &ds);
printf("%d %d %d\n", ext->w, ext->h, ds.i);
lv_coord_t d = (ds.i - LV_MATH_MIN(ext->w, ext->h)) / 2;
img->ext_draw_pad = LV_MATH_MAX(img->ext_draw_pad, d);
}
}
return res;