18#ifndef __VSF_TINY_GUI_COLOR_H__
19#define __VSF_TINY_GUI_COLOR_H__
22#include "../../vsf_tgui_cfg.h"
24#if VSF_USE_TINY_GUI == ENABLED
27#ifndef VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA
28# define VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA ENABLED
31#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
32# undef VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA
33# define VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA ENABLED
36#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
37# define __VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) ((vsf_tgui_v_color_t){.red = __R, .green = __G, .blue = __B, .alpha = __A})
39# define __VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) ((vsf_tgui_v_color_t){.red = __R, .green = __G, .blue = __B,})
42#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
43# define VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) __VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A)
44#elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB16_565
45# define VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) __VSF_TGUI_COLOR_RGBA(__R >> 3, __G >> 2, __B >> 3, __A)
47# error "TODO: add more color support"
49#define VSF_TGUI_COLOR_RGB(__R, __G, __B) VSF_TGUI_COLOR_RGBA(__R, __G, __B, 0xFF)
51#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
52# define VSF_TGUI_COLOR_TRANSPARENT VSF_TGUI_COLOR_RGBA(0, 0, 0, 0)
54#define VSF_TGUI_COLOR_WHITE VSF_TGUI_COLOR_RGB(0xFF, 0xFF, 0xFF)
55#define VSF_TGUI_COLOR_SILVER VSF_TGUI_COLOR_RGB(0xC0, 0xC0, 0xC0)
56#define VSF_TGUI_COLOR_GRAY VSF_TGUI_COLOR_RGB(0x80, 0x80, 0x80)
57#define VSF_TGUI_COLOR_BLACK VSF_TGUI_COLOR_RGB(0x00, 0x00, 0x00)
58#define VSF_TGUI_COLOR_RED VSF_TGUI_COLOR_RGB(0xFF, 0x00, 0x00)
59#define VSF_TGUI_COLOR_MAROON VSF_TGUI_COLOR_RGB(0x80, 0x00, 0x00)
60#define VSF_TGUI_COLOR_YELLOW VSF_TGUI_COLOR_RGB(0xFF, 0xFF, 0x00)
61#define VSF_TGUI_COLOR_OLIVE VSF_TGUI_COLOR_RGB(0x80, 0x80, 0x00)
62#define VSF_TGUI_COLOR_LIME VSF_TGUI_COLOR_RGB(0x00, 0xFF, 0x00)
63#define VSF_TGUI_COLOR_GREEN VSF_TGUI_COLOR_RGB(0x00, 0x80, 0x00)
64#define VSF_TGUI_COLOR_AQUA VSF_TGUI_COLOR_RGB(0x00, 0xFF, 0xFF)
65#define VSF_TGUI_COLOR_TEAL VSF_TGUI_COLOR_RGB(0x00, 0x80, 0x80)
66#define VSF_TGUI_COLOR_BLUE VSF_TGUI_COLOR_RGB(0x00, 0x00, 0xFF)
67#define VSF_TGUI_COLOR_NAVY VSF_TGUI_COLOR_RGB(0x00, 0x00, 0x80)
68#define VSF_TGUI_COLOR_FUCHSIA VSF_TGUI_COLOR_RGB(0xFF, 0x00, 0xFF)
69#define VSF_TGUI_COLOR_PURPLE VSF_TGUI_COLOR_RGB(0x80, 0x00, 0x80)
82#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
96#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
111#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_BGR_565
113#elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
115#elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
124#if VSF_TGUI_SV_CFG_MIX_AS_FUNCTION == ENABLED
127# if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
128# define __vsf_tgui_sv_color_mix_alpha() \
129 __vsf_tgui_sv_color_mix_result__.alpha = 0xFF;
131# define __vsf_tgui_sv_color_mix_alpha()
134# if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
135# define vsf_tgui_sv_color_mix(__color_0, __color_1, __mix) ({ \
136 uint_fast8_t __vsf_tgui_sv_color_mix__ = (__mix); \
137 vsf_tgui_v_color_t __vsf_tgui_sv_color_mix_result__; \
138 __vsf_tgui_sv_color_mix_result__.value = \
139 (((((__color_0).value >> 8) & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) & 0xFF00FF00)\
140 + (((((__color_0).value & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) >> 8) & 0x00FF00FF);\
141 __vsf_tgui_sv_color_mix__ = __vsf_tgui_sv_color_mix__ ^ 0xFF; \
142 __vsf_tgui_sv_color_mix_result__.value += \
143 (((((__color_1).value >> 8) & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) & 0xFF00FF00) \
144 + (((((__color_1).value & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) >> 8) & 0x00FF00FF); \
145 __vsf_tgui_sv_color_mix_alpha(); \
146 __vsf_tgui_sv_color_mix_result__; \
148# elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
149# define vsf_tgui_sv_color_mix(__color_0, __color_1, __mix) ({ \
150 vsf_tgui_v_color_t __vsf_tgui_sv_color_mix_result__; \
151 uint32_t __vsf_tgui_sv_color_mix0__ = (__color_1).value & 0xF81F; \
152 __vsf_tgui_sv_color_mix0__ += ((((__color_0).value & 0xF81F) - __vsf_tgui_sv_color_mix0__) * (__mix >> 2)) >> 6;\
153 uint32_t __vsf_tgui_sv_color_mix1__ = (__color_1).value & 0x07E0; \
154 __vsf_tgui_sv_color_mix1__ += ((((__color_0).value & 0x07E0) - __vsf_tgui_sv_color_mix1__) * (__mix)) >> 8;\
155 __vsf_tgui_sv_color_mix_result__.value = (__vsf_tgui_sv_color_mix0__ & 0xF81F) | (__vsf_tgui_sv_color_mix1__ & 0x07E0);\
156 __vsf_tgui_sv_color_mix_alpha(); \
157 __vsf_tgui_sv_color_mix_result__; \
160# define vsf_tgui_sv_color_mix(__color_0, __color_1, __mix) ({ \
161 vsf_tgui_v_color_t __vsf_tgui_sv_color_mix_result__; \
162 uint_fast8_t __vsf_tgui_sv_color_rmix__ = (__mix) ^ 0xFF; \
163 __vsf_tgui_sv_color_mix_result__.red = ((uint32_t)(__color_0).red * (__mix) + (uint32_t)(__color_1).red * __vsf_tgui_sv_color_rmix__) / 255;\
164 __vsf_tgui_sv_color_mix_result__.green = ((uint32_t)(__color_0).green * (__mix) + (uint32_t)(__color_1).green * __vsf_tgui_sv_color_rmix__) / 255;\
165 __vsf_tgui_sv_color_mix_result__.blue = ((uint32_t)(__color_0).blue * (__mix) + (uint32_t)(__color_1).blue * __vsf_tgui_sv_color_rmix__) / 255;\
166 __vsf_tgui_sv_color_mix_alpha(); \
167 __vsf_tgui_sv_color_mix_result__; \
172#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
173# define vsf_tgui_sv_color_get_trans_rate(__color) ((__color).alpha)
174# define vsf_tgui_sv_color_set_trans_rate(__color_ptr, __alpha) do { (__color_ptr)->alpha = (__alpha); } while (0)
175# define vsf_tgui_sv_color_is_opaque(__color) ((__color).alpha == 0xFF)
177# define vsf_tgui_sv_color_get_trans_rate(__color) 0xFF
178# define vsf_tgui_sv_color_set_trans_rate(__color_ptr, __alpha)
179# define vsf_tgui_sv_color_is_opaque(__color) true
182#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
183# define vsf_tgui_sv_argb8888_to_color(__color) (__color)
187#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
188# define vsf_tgui_sv_rgb565_to_color(__color) (__color)
192#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_BGR_565
193# define vsf_tgui_sv_bgr565_to_color(__color) (__color)
198#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
199# define vsf_tgui_sv_color_to_argb8888(__color) (__color)
203#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
204# define vsf_tgui_sv_color_to_rgb565(__color) (__color)
208#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_BGR_565
209# define vsf_tgui_sv_color_to_bgr565(__color) (__color)
unsigned short uint16_t
Definition lvgl.h:41
unsigned int uint32_t
Definition lvgl.h:43
unsigned char uint8_t
Definition lvgl.h:40
unsigned char uint_fast8_t
Definition stdint.h:23
Definition vsf_tgui_sv_color.h:87
uint16_t blue
Definition vsf_tgui_sv_color.h:93
uint16_t value
Definition vsf_tgui_sv_color.h:89
uint16_t red
Definition vsf_tgui_sv_color.h:91
uint8_t alpha
Definition vsf_tgui_sv_color.h:97
uint16_t green
Definition vsf_tgui_sv_color.h:92
Definition vsf_tgui_sv_color.h:73
uint16_t blue
Definition vsf_tgui_sv_color.h:77
uint8_t alpha
Definition vsf_tgui_sv_color.h:83
uint16_t value
Definition vsf_tgui_sv_color.h:75
uint16_t red
Definition vsf_tgui_sv_color.h:79
uint16_t green
Definition vsf_tgui_sv_color.h:78
Definition vsf_tgui_sv_color.h:101
uint8_t red
Definition vsf_tgui_sv_color.h:106
uint8_t green
Definition vsf_tgui_sv_color.h:105
uint8_t blue
Definition vsf_tgui_sv_color.h:104
uint32_t value
Definition vsf_tgui_sv_color.h:102
uint8_t alpha
Definition vsf_tgui_sv_color.h:107
vsf_tgui_v_color_t vsf_tgui_sv_color_mix(vsf_tgui_v_color_t color_0, vsf_tgui_v_color_t color_1, uint_fast8_t mix)
#define vsf_tgui_sv_color_to_bgr565(__color)
Definition vsf_tgui_sv_color.h:209
#define vsf_tgui_sv_bgr565_to_color(__color)
Definition vsf_tgui_sv_color.h:193
#define vsf_tgui_sv_rgb565_to_color(__color)
Definition vsf_tgui_sv_color.h:188
vsf_tgui_sv_color_bgr565_t vsf_tgui_v_color_t
Definition vsf_tgui_sv_color.h:112
#define vsf_tgui_sv_argb8888_to_color(__color)
Definition vsf_tgui_sv_color.h:183
#define vsf_tgui_sv_color_to_rgb565(__color)
Definition vsf_tgui_sv_color.h:204
#define vsf_tgui_sv_color_to_argb8888(__color)
Definition vsf_tgui_sv_color.h:199