diff --git a/lv_conf_templ.h b/lv_conf_templ.h index f28bd76a2..f49e2812f 100644 --- a/lv_conf_templ.h +++ b/lv_conf_templ.h @@ -67,10 +67,10 @@ #define LV_INDEV_LONG_PRESS_REP_TIME 100 /*Repeated trigger period in long press [ms] */ /*Color settings*/ -#define LV_COLOR_DEPTH 16 /*Color depth: 1/8/16/24*/ +#define LV_COLOR_DEPTH 16 /*Color depth: 1/8/16/32*/ #define LV_COLOR_16_SWAP 0 /*Swap the 2 bytes of RGB565 color. Useful if the display has a 8 bit interface (e.g. SPI)*/ -#define LV_COLOR_TRANSP LV_COLOR_LIME /*Images pixels with this color will not be drawn (with chroma keying)*/ #define LV_COLOR_SCREEN_TRANSP 0 /*1: Enable screen transparency. Useful for OSD or other overlapping GUIs. Requires ARGB8888 colors*/ +#define LV_COLOR_TRANSP LV_COLOR_LIME /*Images pixels with this color will not be drawn (with chroma keying)*/ /*Text settings*/ #define LV_TXT_UTF8 1 /*Enable UTF-8 coded Unicode character usage */ diff --git a/lv_draw/lv_draw.h b/lv_draw/lv_draw.h index 689d68e29..0efe8d54f 100644 --- a/lv_draw/lv_draw.h +++ b/lv_draw/lv_draw.h @@ -30,7 +30,7 @@ extern "C" { # define LV_IMG_PX_SIZE_ALPHA_BYTE 2 #elif LV_COLOR_DEPTH == 16 # define LV_IMG_PX_SIZE_ALPHA_BYTE 3 -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 # define LV_IMG_PX_SIZE_ALPHA_BYTE 4 #endif diff --git a/lv_draw/lv_draw_img.c b/lv_draw/lv_draw_img.c index 774f8ac7f..2d48dcc80 100644 --- a/lv_draw/lv_draw_img.c +++ b/lv_draw/lv_draw_img.c @@ -151,11 +151,8 @@ uint8_t lv_img_color_format_get_px_size(lv_img_cf_t cf) case LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED: return LV_COLOR_SIZE; case LV_IMG_CF_TRUE_COLOR_ALPHA: -#if LV_COLOR_DEPTH != 24 - return LV_COLOR_SIZE; -#else - return LV_COLOR_SIZE + 1; -#endif + return LV_IMG_PX_SIZE_ALPHA_BYTE; + case LV_IMG_CF_INDEXED_1BIT: case LV_IMG_CF_ALPHA_1BIT: return 1; @@ -396,15 +393,15 @@ static const uint8_t * lv_img_decoder_open(const void * src, const lv_style_t * cf == LV_IMG_CF_INDEXED_2BIT || cf == LV_IMG_CF_INDEXED_4BIT || cf == LV_IMG_CF_INDEXED_8BIT) { - lv_color24_t palette_file[256]; - lv_color24_t * palette_p = NULL; + lv_color32_t palette_file[256]; + lv_color32_t * palette_p = NULL; uint8_t px_size = lv_img_color_format_get_px_size(cf); uint32_t palette_size = 1 << px_size; if(decoder_src_type == LV_IMG_SRC_FILE) { #if USE_LV_FILESYSTEM lv_fs_seek(&decoder_file, 4); /*Skip the header*/ - lv_fs_read(&decoder_file, palette_file, palette_size * sizeof(lv_color24_t), NULL); + lv_fs_read(&decoder_file, palette_file, palette_size * sizeof(lv_color32_t), NULL); palette_p = palette_file; #else palette_file[0] = 0; /*Just to solve warnings*/ @@ -545,7 +542,7 @@ static lv_res_t lv_img_built_in_decoder_line_alpha(lv_coord_t x, lv_coord_t y, l /*Because of Alpha byte 16 bit color can start on odd address which can cause crash*/ buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE] = bg_color.full & 0xFF; buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE + 1] = (bg_color.full >> 8) & 0xFF; -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 *((uint32_t *)&buf[i * LV_IMG_PX_SIZE_ALPHA_BYTE]) = bg_color.full; #endif } diff --git a/lv_draw/lv_draw_vbasic.c b/lv_draw/lv_draw_vbasic.c index 4efeab68f..02381d84f 100644 --- a/lv_draw/lv_draw_vbasic.c +++ b/lv_draw/lv_draw_vbasic.c @@ -488,7 +488,7 @@ void lv_vmap(const lv_area_t * cords_p, const lv_area_t * mask_p, #elif LV_COLOR_DEPTH == 16 /*Because of Alpha byte 16 bit color can start on odd address which can cause crash*/ px_color.full = px_color_p[0] + (px_color_p[1] << 8); -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 px_color = *((lv_color_t *)px_color_p); #endif lv_opa_t px_opa = *(px_color_p + LV_IMG_PX_SIZE_ALPHA_BYTE - 1); diff --git a/lv_misc/lv_color.h b/lv_misc/lv_color.h index 26a00506e..b4c1b5569 100644 --- a/lv_misc/lv_color.h +++ b/lv_misc/lv_color.h @@ -19,6 +19,18 @@ extern "C" { #include "../../lv_conf.h" #endif +/*Error checking*/ +#if LV_COLOR_DEPTH != 32 && LV_COLOR_SCREEN_TRANSP != 0 +#error "LV_COLOR_SCREEN_TRANSP requires LV_COLOR_DEPTH == 32. Set it in lv_conf.h" +#endif + + +#if LV_COLOR_DEPTH != 16 && LV_COLOR_16_SWAP != 0 +#error "LV_COLOR_16_SWAP requires LV_COLOR_DEPTH == 16. Set it in lv_conf.h" +#endif + + + #include /********************* @@ -66,10 +78,10 @@ extern "C" { #define LV_COLOR_SIZE 8 #elif LV_COLOR_DEPTH == 16 #define LV_COLOR_SIZE 16 -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 #define LV_COLOR_SIZE 32 #else -#error "Invalid color depth (LV_COLOR_DEPTH in lv_conf.h)" +#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!" #endif /********************** @@ -123,7 +135,7 @@ typedef union uint8_t alpha; }; uint32_t full; -} lv_color24_t; +} lv_color32_t; #if LV_COLOR_DEPTH == 1 typedef uint8_t lv_color_int_t; @@ -134,11 +146,11 @@ typedef lv_color8_t lv_color_t; #elif LV_COLOR_DEPTH == 16 typedef uint16_t lv_color_int_t; typedef lv_color16_t lv_color_t; -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 typedef uint32_t lv_color_int_t; -typedef lv_color24_t lv_color_t; +typedef lv_color32_t lv_color_t; #else -#error "Invalid LV_COLOR_DEPTH in misc_conf.h! Set it to 1, 8, 16 or 24!" +#error "Invalid LV_COLOR_DEPTH in lv_conf.h! Set it to 1, 8, 16 or 32!" #endif typedef uint8_t lv_opa_t; @@ -195,7 +207,7 @@ static inline uint8_t lv_color_to1(lv_color_t color) } else { return 0; } -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 if((color.red & 0x80) || (color.green & 0x80) || (color.blue & 0x80)) { @@ -228,7 +240,7 @@ static inline uint8_t lv_color_to8(lv_color_t color) ret.blue = color.blue >> 3; /* 5 - 2 = 3*/ return ret.full; # endif -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 lv_color8_t ret; ret.red = color.red >> 5; /* 8 - 3 = 5*/ ret.green = color.green >> 5; /* 8 - 3 = 5*/ @@ -258,7 +270,7 @@ static inline uint16_t lv_color_to16(lv_color_t color) return ret.full; #elif LV_COLOR_DEPTH == 16 return color.full; -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 lv_color16_t ret; # if LV_COLOR_16_SWAP == 0 ret.red = color.red >> 3; /* 8 - 5 = 3*/ @@ -274,13 +286,13 @@ static inline uint16_t lv_color_to16(lv_color_t color) #endif } -static inline uint32_t lv_color_to24(lv_color_t color) +static inline uint32_t lv_color_to32(lv_color_t color) { #if LV_COLOR_DEPTH == 1 if(color.full == 0) return 0; else return 0xFFFFFFFF; #elif LV_COLOR_DEPTH == 8 - lv_color24_t ret; + lv_color32_t ret; ret.red = color.red * 36; /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/ ret.green = color.green * 36; /*(2^8 - 1)/(2^3 - 1) = 255/7 = 36*/ ret.blue = color.blue * 85; /*(2^8 - 1)/(2^2 - 1) = 255/3 = 85*/ @@ -288,21 +300,21 @@ static inline uint32_t lv_color_to24(lv_color_t color) return ret.full; #elif LV_COLOR_DEPTH == 16 # if LV_COLOR_16_SWAP == 0 - lv_color24_t ret; + lv_color32_t ret; ret.red = color.red * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/ ret.green = color.green * 4; /*(2^8 - 1)/(2^6 - 1) = 255/63 = 4*/ ret.blue = color.blue * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/ ret.alpha = 0xFF; return ret.full; # else - lv_color24_t ret; + lv_color32_t ret; ret.red = color.red * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/ ret.green = ((color.green_h << 3) + color.green_l) * 4; /*(2^8 - 1)/(2^6 - 1) = 255/63 = 4*/ ret.blue = color.blue * 8; /*(2^8 - 1)/(2^5 - 1) = 255/31 = 8*/ ret.alpha = 0xFF; return ret.full; # endif -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 return color.full; #endif } @@ -311,8 +323,10 @@ static inline lv_color_t lv_color_mix(lv_color_t c1, lv_color_t c2, uint8_t mix) { lv_color_t ret; #if LV_COLOR_DEPTH != 1 + /*LV_COLOR_DEPTH == 8, 16 or 32*/ ret.red = (uint16_t)((uint16_t) c1.red * mix + (c2.red * (255 - mix))) >> 8; # if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP + /*If swapped Green is in 2 parts*/ uint16_t g_1 = (c1.green_h << 3) + c1.green_l; uint16_t g_2 = (c2.green_h << 3) + c2.green_l; uint16_t g_out = (uint16_t)((uint16_t) g_1 * mix + (g_2 * (255 - mix))) >> 8; @@ -322,10 +336,11 @@ static inline lv_color_t lv_color_mix(lv_color_t c1, lv_color_t c2, uint8_t mix) ret.green = (uint16_t)((uint16_t) c1.green * mix + (c2.green * (255 - mix))) >> 8; # endif ret.blue = (uint16_t)((uint16_t) c1.blue * mix + (c2.blue * (255 - mix))) >> 8; -# if LV_COLOR_DEPTH == 24 +# if LV_COLOR_DEPTH == 32 ret.alpha = 0xFF; # endif #else + /*LV_COLOR_DEPTH == 1*/ ret.full = mix > LV_OPA_50 ? c1.full : c2.full; #endif @@ -339,9 +354,9 @@ static inline lv_color_t lv_color_mix(lv_color_t c1, lv_color_t c2, uint8_t mix) */ static inline uint8_t lv_color_brightness(lv_color_t color) { - lv_color24_t c24; - c24.full = lv_color_to24(color); - uint16_t bright = 3 * c24.red + c24.blue + 4 * c24.green; + lv_color32_t c32; + c32.full = lv_color_to32(color); + uint16_t bright = 3 * c32.red + c32.blue + 4 * c32.green; return (uint16_t) bright >> 3; } @@ -358,7 +373,7 @@ static inline uint8_t lv_color_brightness(lv_color_t color) # else # define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{g8 >> 5, r8 >> 3, b8 >> 3, (g8 >> 2) & 0x7}}) # endif -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 #define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{b8, g8, r8, 0xff}}) /*Fix 0xff alpha*/ #endif #else @@ -368,7 +383,7 @@ static inline uint8_t lv_color_brightness(lv_color_t color) #define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{r8 >> 6, g8 >> 5, b8 >> 5}}) #elif LV_COLOR_DEPTH == 16 #define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{r8 >> 3, g8 >> 2, b8 >> 3}}) -#elif LV_COLOR_DEPTH == 24 +#elif LV_COLOR_DEPTH == 32 #define LV_COLOR_MAKE(r8, g8, b8) ((lv_color_t){{0xff, r8, g8, b8}}) /*Fix 0xff alpha*/ #endif #endif diff --git a/lv_objx/lv_imgbtn.h b/lv_objx/lv_imgbtn.h index 78af47de7..64183301e 100644 --- a/lv_objx/lv_imgbtn.h +++ b/lv_objx/lv_imgbtn.h @@ -41,7 +41,7 @@ extern "C" { typedef struct { lv_btn_ext_t btn; /*Ext. of ancestor*/ /*New data for this type */ - void * img_src[LV_BTN_STATE_NUM]; /*Store images to each state*/ + const void * img_src[LV_BTN_STATE_NUM]; /*Store images to each state*/ lv_img_cf_t act_cf; /*Color format of the currently active image*/ } lv_imgbtn_ext_t;