diff --git a/src/lv_draw/lv_draw_basic.c b/src/lv_draw/lv_draw_basic.c index df37b8677..144fc4733 100644 --- a/src/lv_draw/lv_draw_basic.c +++ b/src/lv_draw/lv_draw_basic.c @@ -157,16 +157,12 @@ void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_ /*Not opaque fill*/ else if(opa == LV_OPA_COVER) { /*Use hw fill if present*/ - if(disp->driver.mem_fill) { - lv_coord_t row; - for(row = vdb_rel_a.y1; row <= vdb_rel_a.y2; row++) { - disp->driver.mem_fill(&vdb_buf_tmp[vdb_rel_a.x1], w, color); - vdb_buf_tmp += vdb_width; - } + if(disp->driver.mem_fill_cb) { + disp->driver.mem_fill_cb(vdb->buf_act, &vdb->area, &vdb_rel_a, color); } /*Use hw blend if present and the area is not too small*/ else if(lv_area_get_height(&vdb_rel_a) > VFILL_HW_ACC_SIZE_LIMIT && - disp->driver.mem_blend) { + disp->driver.mem_blend_cb) { /*Fill a one line sized buffer with a color and blend this later*/ if(color_array_tmp[0].full != color.full || last_width != w) { uint16_t i; @@ -179,7 +175,7 @@ void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_ /*Blend the filled line to every line VDB line-by-line*/ lv_coord_t row; for(row = vdb_rel_a.y1; row <= vdb_rel_a.y2; row++) { - disp->driver.mem_blend(&vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa); + disp->driver.mem_blend_cb(&vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa); vdb_buf_tmp += vdb_width; } @@ -193,7 +189,7 @@ void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_ /*Fill with opacity*/ else { /*Use hw blend if present*/ - if(disp->driver.mem_blend) { + if(disp->driver.mem_blend_cb) { if(color_array_tmp[0].full != color.full || last_width != w) { uint16_t i; for(i = 0; i < w; i++) { @@ -204,7 +200,7 @@ void lv_draw_fill(const lv_area_t * cords_p, const lv_area_t * mask_p, lv_color_ } lv_coord_t row; for(row = vdb_rel_a.y1; row <= vdb_rel_a.y2; row++) { - disp->driver.mem_blend(&vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa); + disp->driver.mem_blend_cb(&vdb_buf_tmp[vdb_rel_a.x1], color_array_tmp, w, opa); vdb_buf_tmp += vdb_width; } @@ -442,10 +438,10 @@ void lv_draw_map(const lv_area_t * cords_p, const lv_area_t * mask_p, const uint else { for(row = masked_a.y1; row <= masked_a.y2; row++) { #if LV_USE_GPU - if(disp->driver.mem_blend == false) { + if(disp->driver.mem_blend_cb == false) { sw_mem_blend(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa); } else { - disp->driver.mem_blend(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa); + disp->driver.mem_blend_cb(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa); } #else sw_mem_blend(vdb_buf_tmp, (lv_color_t *)map_p, map_useful_w, opa); diff --git a/src/lv_hal/lv_hal_disp.c b/src/lv_hal/lv_hal_disp.c index 892bfac09..5ec49d1a7 100644 --- a/src/lv_hal/lv_hal_disp.c +++ b/src/lv_hal/lv_hal_disp.c @@ -67,8 +67,8 @@ void lv_disp_drv_init(lv_disp_drv_t * driver) #endif #if LV_USE_GPU - driver->mem_blend = NULL; - driver->mem_fill = NULL; + driver->mem_blend_cb = NULL; + driver->mem_fill_cb = NULL; #endif driver->set_px_cb = NULL; diff --git a/src/lv_hal/lv_hal_disp.h b/src/lv_hal/lv_hal_disp.h index 5a138cceb..5ffde953c 100644 --- a/src/lv_hal/lv_hal_disp.h +++ b/src/lv_hal/lv_hal_disp.h @@ -90,6 +90,15 @@ typedef struct _disp_drv_t * number of flushed pixels */ void (*monitor_cb)(struct _disp_drv_t * disp_drv, uint32_t time, uint32_t px); + +#if LV_USE_GPU + /*OPTIONAL: Blend two memories using opacity (GPU only)*/ + void (*mem_blend_cb)(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa); + + /*OPTIONAL: Fill a memory with a color (GPU only)*/ + void (*mem_fill_cb)(lv_color_t * dest_buf, const lv_area_t * dest_area, const lv_area_t * fill_area, lv_color_t color); +#endif + #if LV_USE_USER_DATA_SINGLE lv_disp_drv_user_data_t user_data; #endif @@ -101,13 +110,6 @@ typedef struct _disp_drv_t lv_disp_drv_user_data_t monitor_user_data; #endif -#if LV_USE_GPU - /*OPTIONAL: Blend two memories using opacity (GPU only)*/ - void (*mem_blend)(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa); - - /*OPTIONAL: Fill a memory with a color (GPU only)*/ - void (*mem_fill)(lv_color_t * dest, uint32_t length, lv_color_t color); -#endif } lv_disp_drv_t; diff --git a/src/lv_misc/lv_symbol_def.h b/src/lv_misc/lv_symbol_def.h index 8e432d9a7..4c79f8405 100644 --- a/src/lv_misc/lv_symbol_def.h +++ b/src/lv_misc/lv_symbol_def.h @@ -11,129 +11,129 @@ extern "C" { #include "../../../lv_conf.h" #endif -#define LV_SYMBOL_GLYPH_FIRST 0xF800 -#define LV_SYMBOL_AUDIO _LV_SYMBOL_VALUE3(EF,A0,80) -#define LV_SYMBOL_VIDEO _LV_SYMBOL_VALUE3(EF,A0,81) -#define LV_SYMBOL_LIST _LV_SYMBOL_VALUE3(EF,A0,82) -#define LV_SYMBOL_OK _LV_SYMBOL_VALUE3(EF,A0,83) -#define LV_SYMBOL_CLOSE _LV_SYMBOL_VALUE3(EF,A0,84) -#define LV_SYMBOL_POWER _LV_SYMBOL_VALUE3(EF,A0,85) -#define LV_SYMBOL_SETTINGS _LV_SYMBOL_VALUE3(EF,A0,86) -#define LV_SYMBOL_TRASH _LV_SYMBOL_VALUE3(EF,A0,87) -#define LV_SYMBOL_HOME _LV_SYMBOL_VALUE3(EF,A0,88) -#define LV_SYMBOL_DOWNLOAD _LV_SYMBOL_VALUE3(EF,A0,89) -#define LV_SYMBOL_DRIVE _LV_SYMBOL_VALUE3(EF,A0,8A) -#define LV_SYMBOL_REFRESH _LV_SYMBOL_VALUE3(EF,A0,8B) -#define LV_SYMBOL_MUTE _LV_SYMBOL_VALUE3(EF,A0,8C) -#define LV_SYMBOL_VOLUME_MID _LV_SYMBOL_VALUE3(EF,A0,8D) -#define LV_SYMBOL_VOLUME_MAX _LV_SYMBOL_VALUE3(EF,A0,8E) -#define LV_SYMBOL_IMAGE _LV_SYMBOL_VALUE3(EF,A0,8F) -#define LV_SYMBOL_EDIT _LV_SYMBOL_VALUE3(EF,A0,90) -#define LV_SYMBOL_PREV _LV_SYMBOL_VALUE3(EF,A0,91) -#define LV_SYMBOL_PLAY _LV_SYMBOL_VALUE3(EF,A0,92) -#define LV_SYMBOL_PAUSE _LV_SYMBOL_VALUE3(EF,A0,93) -#define LV_SYMBOL_STOP _LV_SYMBOL_VALUE3(EF,A0,94) -#define LV_SYMBOL_NEXT _LV_SYMBOL_VALUE3(EF,A0,95) -#define LV_SYMBOL_EJECT _LV_SYMBOL_VALUE3(EF,A0,96) -#define LV_SYMBOL_LEFT _LV_SYMBOL_VALUE3(EF,A0,97) -#define LV_SYMBOL_RIGHT _LV_SYMBOL_VALUE3(EF,A0,98) -#define LV_SYMBOL_PLUS _LV_SYMBOL_VALUE3(EF,A0,99) -#define LV_SYMBOL_MINUS _LV_SYMBOL_VALUE3(EF,A0,9A) -#define LV_SYMBOL_WARNING _LV_SYMBOL_VALUE3(EF,A0,9B) -#define LV_SYMBOL_SHUFFLE _LV_SYMBOL_VALUE3(EF,A0,9C) -#define LV_SYMBOL_UP _LV_SYMBOL_VALUE3(EF,A0,9D) -#define LV_SYMBOL_DOWN _LV_SYMBOL_VALUE3(EF,A0,9E) -#define LV_SYMBOL_LOOP _LV_SYMBOL_VALUE3(EF,A0,9F) -#define LV_SYMBOL_DIRECTORY _LV_SYMBOL_VALUE3(EF,A0,A0) -#define LV_SYMBOL_UPLOAD _LV_SYMBOL_VALUE3(EF,A0,A1) -#define LV_SYMBOL_CALL _LV_SYMBOL_VALUE3(EF,A0,A2) -#define LV_SYMBOL_CUT _LV_SYMBOL_VALUE3(EF,A0,A3) -#define LV_SYMBOL_COPY _LV_SYMBOL_VALUE3(EF,A0,A4) -#define LV_SYMBOL_SAVE _LV_SYMBOL_VALUE3(EF,A0,A5) -#define LV_SYMBOL_CHARGE _LV_SYMBOL_VALUE3(EF,A0,A6) -#define LV_SYMBOL_BELL _LV_SYMBOL_VALUE3(EF,A0,A7) -#define LV_SYMBOL_KEYBOARD _LV_SYMBOL_VALUE3(EF,A0,A8) -#define LV_SYMBOL_GPS _LV_SYMBOL_VALUE3(EF,A0,A9) -#define LV_SYMBOL_FILE _LV_SYMBOL_VALUE3(EF,A0,AA) -#define LV_SYMBOL_WIFI _LV_SYMBOL_VALUE3(EF,A0,AB) -#define LV_SYMBOL_BATTERY_FULL _LV_SYMBOL_VALUE3(EF,A0,AC) -#define LV_SYMBOL_BATTERY_3 _LV_SYMBOL_VALUE3(EF,A0,AD) -#define LV_SYMBOL_BATTERY_2 _LV_SYMBOL_VALUE3(EF,A0,AE) -#define LV_SYMBOL_BATTERY_1 _LV_SYMBOL_VALUE3(EF,A0,AF) -#define LV_SYMBOL_BATTERY_EMPTY _LV_SYMBOL_VALUE3(EF,A0,B0) -#define LV_SYMBOL_BLUETOOTH _LV_SYMBOL_VALUE3(EF,A0,B1) -#define LV_SYMBOL_GLYPH_LAST 0xF831 -#define LV_SYMBOL_DUMMY _LV_SYMBOL_VALUE3(EF,A3,BF) /*Invalid symbol at (U+F831). If written before a string then `lv_img` will show it as a label*/ -#define _LV_SYMBOL_VALUE3(x, y, z) (0x ## z ## y ## x) -#define _LV_SYMBOL_NUMSTR(sym) LV_ ## sym ## _NUMSTR = sym +#define LV_SYMBOL_GLYPH_FIRST 0xF800 +#define LV_SYMBOL_AUDIO "\xEF\xA0\x80" +#define LV_SYMBOL_VIDEO "\xEF\xA0\x81" +#define LV_SYMBOL_LIST "\xEF\xA0\x82" +#define LV_SYMBOL_OK "\xEF\xA0\x83" +#define LV_SYMBOL_CLOSE "\xEF\xA0\x84" +#define LV_SYMBOL_POWER "\xEF\xA0\x85" +#define LV_SYMBOL_SETTINGS "\xEF\xA0\x86" +#define LV_SYMBOL_TRASH "\xEF\xA0\x87" +#define LV_SYMBOL_HOME "\xEF\xA0\x88" +#define LV_SYMBOL_DOWNLOAD "\xEF\xA0\x89" +#define LV_SYMBOL_DRIVE "\xEF\xA0\x8A" +#define LV_SYMBOL_REFRESH "\xEF\xA0\x8B" +#define LV_SYMBOL_MUTE "\xEF\xA0\x8C" +#define LV_SYMBOL_VOLUME_MID "\xEF\xA0\x8D" +#define LV_SYMBOL_VOLUME_MAX "\xEF\xA0\x8E" +#define LV_SYMBOL_IMAGE "\xEF\xA0\x8F" +#define LV_SYMBOL_EDIT "\xEF\xA0\x90" +#define LV_SYMBOL_PREV "\xEF\xA0\x91" +#define LV_SYMBOL_PLAY "\xEF\xA0\x92" +#define LV_SYMBOL_PAUSE "\xEF\xA0\x93" +#define LV_SYMBOL_STOP "\xEF\xA0\x94" +#define LV_SYMBOL_NEXT "\xEF\xA0\x95" +#define LV_SYMBOL_EJECT "\xEF\xA0\x96" +#define LV_SYMBOL_LEFT "\xEF\xA0\x97" +#define LV_SYMBOL_RIGHT "\xEF\xA0\x98" +#define LV_SYMBOL_PLUS "\xEF\xA0\x99" +#define LV_SYMBOL_MINUS "\xEF\xA0\x9A" +#define LV_SYMBOL_WARNING "\xEF\xA0\x9B" +#define LV_SYMBOL_SHUFFLE "\xEF\xA0\x9C" +#define LV_SYMBOL_UP "\xEF\xA0\x9D" +#define LV_SYMBOL_DOWN "\xEF\xA0\x9E" +#define LV_SYMBOL_LOOP "\xEF\xA0\x9F" +#define LV_SYMBOL_DIRECTORY "\xEF\xA0\xA0" +#define LV_SYMBOL_UPLOAD "\xEF\xA0\xA1" +#define LV_SYMBOL_CALL "\xEF\xA0\xA2" +#define LV_SYMBOL_CUT "\xEF\xA0\xA3" +#define LV_SYMBOL_COPY "\xEF\xA0\xA4" +#define LV_SYMBOL_SAVE "\xEF\xA0\xA5" +#define LV_SYMBOL_CHARGE "\xEF\xA0\xA6" +#define LV_SYMBOL_BELL "\xEF\xA0\xA7" +#define LV_SYMBOL_KEYBOARD "\xEF\xA0\xA8" +#define LV_SYMBOL_GPS "\xEF\xA0\xA9" +#define LV_SYMBOL_FILE "\xEF\xA0\xAA" +#define LV_SYMBOL_WIFI "\xEF\xA0\xAB" +#define LV_SYMBOL_BATTERY_FULL "\xEF\xA0\xAC" +#define LV_SYMBOL_BATTERY_3 "\xEF\xA0\xAD" +#define LV_SYMBOL_BATTERY_2 "\xEF\xA0\xAE" +#define LV_SYMBOL_BATTERY_1 "\xEF\xA0\xAF" +#define LV_SYMBOL_BATTERY_EMPTY "\xEF\xA0\xB0" +#define LV_SYMBOL_BLUETOOTH "\xEF\xA0\xB1" +#define LV_SYMBOL_GLYPH_LAST 0xF831 -enum -{ - _LV_SYMBOL_NUMSTR(LV_SYMBOL_AUDIO), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_VIDEO), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_LIST), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_OK), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_CLOSE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_POWER), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_SETTINGS), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_TRASH), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_HOME), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_DOWNLOAD), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_DRIVE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_REFRESH), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_MUTE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_VOLUME_MID), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_VOLUME_MAX), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_IMAGE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_EDIT), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_PREV), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_PLAY), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_PAUSE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_STOP), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_NEXT), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_EJECT), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_LEFT), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_RIGHT), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_PLUS), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_MINUS), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_WARNING), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_SHUFFLE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_UP), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_DOWN), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_LOOP), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_DIRECTORY), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_UPLOAD), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_CALL), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_CUT), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_COPY), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_SAVE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_CHARGE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_BELL), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_KEYBOARD), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_GPS), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_FILE), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_WIFI), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_BATTERY_FULL), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_BATTERY_3), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_BATTERY_2), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_BATTERY_1), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_BATTERY_EMPTY), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_BLUETOOTH), - _LV_SYMBOL_NUMSTR(LV_SYMBOL_DUMMY), +/*Invalid symbol at (U+F831). If written before a string then `lv_img` will show it as a label*/ +#define LV_SYMBOL_DUMMY "\xEF\xA3\xBF" + +/* + * following list is generated using + * cat lv_symbol_def.h | sed -E -n 's/^#define\s+(SYMBOL_\w+).*$/ _LV_STR_\1,/p' + */ +enum { + _LV_STR_SYMBOL_AUDIO, + _LV_STR_SYMBOL_VIDEO, + _LV_STR_SYMBOL_LIST, + _LV_STR_SYMBOL_OK, + _LV_STR_SYMBOL_CLOSE, + _LV_STR_SYMBOL_POWER, + _LV_STR_SYMBOL_SETTINGS, + _LV_STR_SYMBOL_TRASH, + _LV_STR_SYMBOL_HOME, + _LV_STR_SYMBOL_DOWNLOAD, + _LV_STR_SYMBOL_DRIVE, + _LV_STR_SYMBOL_REFRESH, + _LV_STR_SYMBOL_MUTE, + _LV_STR_SYMBOL_VOLUME_MID, + _LV_STR_SYMBOL_VOLUME_MAX, + _LV_STR_SYMBOL_IMAGE, + _LV_STR_SYMBOL_EDIT, + _LV_STR_SYMBOL_PREV, + _LV_STR_SYMBOL_PLAY, + _LV_STR_SYMBOL_PAUSE, + _LV_STR_SYMBOL_STOP, + _LV_STR_SYMBOL_NEXT, + _LV_STR_SYMBOL_EJECT, + _LV_STR_SYMBOL_LEFT, + _LV_STR_SYMBOL_RIGHT, + _LV_STR_SYMBOL_PLUS, + _LV_STR_SYMBOL_MINUS, + _LV_STR_SYMBOL_WARNING, + _LV_STR_SYMBOL_SHUFFLE, + _LV_STR_SYMBOL_UP, + _LV_STR_SYMBOL_DOWN, + _LV_STR_SYMBOL_LOOP, + _LV_STR_SYMBOL_DIRECTORY, + _LV_STR_SYMBOL_UPLOAD, + _LV_STR_SYMBOL_CALL, + _LV_STR_SYMBOL_CUT, + _LV_STR_SYMBOL_COPY, + _LV_STR_SYMBOL_SAVE, + _LV_STR_SYMBOL_CHARGE, + _LV_STR_SYMBOL_BELL, + _LV_STR_SYMBOL_KEYBOARD, + _LV_STR_SYMBOL_GPS, + _LV_STR_SYMBOL_FILE, + _LV_STR_SYMBOL_WIFI, + _LV_STR_SYMBOL_BATTERY_FULL, + _LV_STR_SYMBOL_BATTERY_3, + _LV_STR_SYMBOL_BATTERY_2, + _LV_STR_SYMBOL_BATTERY_1, + _LV_STR_SYMBOL_BATTERY_EMPTY, + _LV_STR_SYMBOL_BLUETOOTH, + _LV_STR_SYMBOL_DUMMY, }; -#undef _LV_SYMBOL_VALUE3 - -#define _LV_SYMBOL_STR_(x) #x -#define _LV_SYMBOL_STR(x) _LV_SYMBOL_STR_(x) -#define _LV_SYMBOL_CHAR(c) \x ## c -#define _LV_SYMBOL_VALUE1(x) _LV_SYMBOL_STR(_LV_SYMBOL_CHAR(x)) -#define _LV_SYMBOL_VALUE3(x, y, z) _LV_SYMBOL_STR(_LV_SYMBOL_CHAR(x)_LV_SYMBOL_CHAR(y)_LV_SYMBOL_CHAR(z)) - #ifdef __cplusplus } /* extern "C" */ #endif -#endif /*LV_LV_SYMBOL_DEF_H*/ +#endif /*LV_SYMBOL_DEF_H*/ + + + + + diff --git a/src/lv_objx/lv_calendar.c b/src/lv_objx/lv_calendar.c index 35585defc..428377e0c 100644 --- a/src/lv_objx/lv_calendar.c +++ b/src/lv_objx/lv_calendar.c @@ -706,7 +706,7 @@ static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask) uint32_t i; for(i = 0; i < 7; i++) { label_area.x1 = calendar->coords.x1 + (w * i) / 7 + l_pad; - label_area.x2 = label_area.x1 + box_w; + label_area.x2 = label_area.x1 + box_w - 1; lv_draw_label(&label_area, mask, ext->style_day_names, opa_scale, get_day_name(calendar, i), LV_TXT_FLAG_CENTER, NULL, -1, -1); } @@ -805,7 +805,7 @@ static void draw_days(lv_obj_t * calendar, const lv_area_t * mask) label_area.x1 = calendar->coords.x1 + (w * day) / 7 + style_bg->body.padding.left + style_bg->body.padding.right; - label_area.x2 = label_area.x1 + box_w; + label_area.x2 = label_area.x1 + box_w - 1; /*Draw the "today box"*/ if(draw_state == DAY_DRAW_ACT_MONTH && month_of_today_shown &&