VSF Documented
vsf_tgui_sv_color.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_TINY_GUI_COLOR_H__
19#define __VSF_TINY_GUI_COLOR_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "../../vsf_tgui_cfg.h"
24
25#if VSF_USE_TINY_GUI == ENABLED
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31/*============================ MACROS ========================================*/
32
33#ifndef VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA
34# define VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA ENABLED
35#endif
36
37#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
38# undef VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA
39# define VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA ENABLED
40#endif
41
42#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
43# define __VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) ((vsf_tgui_v_color_t){.red = __R, .green = __G, .blue = __B, .alpha = __A})
44#else
45# define __VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) ((vsf_tgui_v_color_t){.red = __R, .green = __G, .blue = __B,})
46#endif
47
48#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
49# define VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) __VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A)
50#elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB16_565
51# define VSF_TGUI_COLOR_RGBA(__R, __G, __B, __A) __VSF_TGUI_COLOR_RGBA(__R >> 3, __G >> 2, __B >> 3, __A)
52#else
53# error "TODO: add more color support"
54#endif
55#define VSF_TGUI_COLOR_RGB(__R, __G, __B) VSF_TGUI_COLOR_RGBA(__R, __G, __B, 0xFF)
56
57#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
58# define VSF_TGUI_COLOR_TRANSPARENT VSF_TGUI_COLOR_RGBA(0, 0, 0, 0)
59#endif
60#define VSF_TGUI_COLOR_WHITE VSF_TGUI_COLOR_RGB(0xFF, 0xFF, 0xFF) // Red:100% Green:100% Blue:100%
61#define VSF_TGUI_COLOR_SILVER VSF_TGUI_COLOR_RGB(0xC0, 0xC0, 0xC0) // Red: 75% Green: 75% Blue: 75%
62#define VSF_TGUI_COLOR_GRAY VSF_TGUI_COLOR_RGB(0x80, 0x80, 0x80) // Red: 50% Green: 50% Blue: 50%
63#define VSF_TGUI_COLOR_BLACK VSF_TGUI_COLOR_RGB(0x00, 0x00, 0x00) // Red: 0% Green: 0% Blue: 0%
64#define VSF_TGUI_COLOR_RED VSF_TGUI_COLOR_RGB(0xFF, 0x00, 0x00) // Red:100% Green: 0% Blue: 0%
65#define VSF_TGUI_COLOR_MAROON VSF_TGUI_COLOR_RGB(0x80, 0x00, 0x00) // Red: 50% Green: 0% Blue: 0%
66#define VSF_TGUI_COLOR_YELLOW VSF_TGUI_COLOR_RGB(0xFF, 0xFF, 0x00) // Red:100% Green:100% Blue: 0%
67#define VSF_TGUI_COLOR_OLIVE VSF_TGUI_COLOR_RGB(0x80, 0x80, 0x00) // Red: 50% Green: 50% Blue: 0%
68#define VSF_TGUI_COLOR_LIME VSF_TGUI_COLOR_RGB(0x00, 0xFF, 0x00) // Red: 0% Green:100% Blue: 0%
69#define VSF_TGUI_COLOR_GREEN VSF_TGUI_COLOR_RGB(0x00, 0x80, 0x00) // Red: 0% Green: 50% Blue: 0%
70#define VSF_TGUI_COLOR_AQUA VSF_TGUI_COLOR_RGB(0x00, 0xFF, 0xFF) // Red: 0% Green:100% Blue:100%
71#define VSF_TGUI_COLOR_TEAL VSF_TGUI_COLOR_RGB(0x00, 0x80, 0x80) // Red: 0% Green: 50% Blue: 50%
72#define VSF_TGUI_COLOR_BLUE VSF_TGUI_COLOR_RGB(0x00, 0x00, 0xFF) // Red: 0% Green: 0% Blue:100%
73#define VSF_TGUI_COLOR_NAVY VSF_TGUI_COLOR_RGB(0x00, 0x00, 0x80) // Red: 0% Green: 0% Blue: 50%
74#define VSF_TGUI_COLOR_FUCHSIA VSF_TGUI_COLOR_RGB(0xFF, 0x00, 0xFF) // Red:100% Green: 0% Blue:100%
75#define VSF_TGUI_COLOR_PURPLE VSF_TGUI_COLOR_RGB(0x80, 0x00, 0x80) // Red: 50% Green: 0% Blue: 50%
76
77/*============================ MACROFIED FUNCTIONS ===========================*/
78/*============================ TYPES =========================================*/
80 union {
82 struct {
86 };
87 };
88#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
90#endif
92
94 union {
96 struct {
100 };
101 };
102#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
104#endif
106
109 struct {
114 };
116
117#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_BGR_565
119#elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
121#elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
123#else
124typedef VSF_TGUI_CFG_COLOR_TYPE vsf_tgui_v_color_t;
125#endif
126
127/*============================ GLOBAL VARIABLES ==============================*/
128/*============================ PROTOTYPES ====================================*/
129
130#if VSF_TGUI_SV_CFG_MIX_AS_FUNCTION == ENABLED
132#else
133# if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
134# define __vsf_tgui_sv_color_mix_alpha() \
135 __vsf_tgui_sv_color_mix_result__.alpha = 0xFF;
136# else
137# define __vsf_tgui_sv_color_mix_alpha()
138# endif
139
140# if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
141# define vsf_tgui_sv_color_mix(__color_0, __color_1, __mix) ({ \
142 uint_fast8_t __vsf_tgui_sv_color_mix__ = (__mix); \
143 vsf_tgui_v_color_t __vsf_tgui_sv_color_mix_result__; \
144 __vsf_tgui_sv_color_mix_result__.value = \
145 (((((__color_0).value >> 8) & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) & 0xFF00FF00)\
146 + (((((__color_0).value & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) >> 8) & 0x00FF00FF);\
147 __vsf_tgui_sv_color_mix__ = __vsf_tgui_sv_color_mix__ ^ 0xFF; \
148 __vsf_tgui_sv_color_mix_result__.value += \
149 (((((__color_1).value >> 8) & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) & 0xFF00FF00) \
150 + (((((__color_1).value & 0x00FF00FF) * __vsf_tgui_sv_color_mix__) >> 8) & 0x00FF00FF); \
151 __vsf_tgui_sv_color_mix_alpha(); \
152 __vsf_tgui_sv_color_mix_result__; \
153 })
154# elif VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
155# define vsf_tgui_sv_color_mix(__color_0, __color_1, __mix) ({ \
156 vsf_tgui_v_color_t __vsf_tgui_sv_color_mix_result__; \
157 uint32_t __vsf_tgui_sv_color_mix0__ = (__color_1).value & 0xF81F; \
158 __vsf_tgui_sv_color_mix0__ += ((((__color_0).value & 0xF81F) - __vsf_tgui_sv_color_mix0__) * (__mix >> 2)) >> 6;\
159 uint32_t __vsf_tgui_sv_color_mix1__ = (__color_1).value & 0x07E0; \
160 __vsf_tgui_sv_color_mix1__ += ((((__color_0).value & 0x07E0) - __vsf_tgui_sv_color_mix1__) * (__mix)) >> 8;\
161 __vsf_tgui_sv_color_mix_result__.value = (__vsf_tgui_sv_color_mix0__ & 0xF81F) | (__vsf_tgui_sv_color_mix1__ & 0x07E0);\
162 __vsf_tgui_sv_color_mix_alpha(); \
163 __vsf_tgui_sv_color_mix_result__; \
164 })
165# else
166# define vsf_tgui_sv_color_mix(__color_0, __color_1, __mix) ({ \
167 vsf_tgui_v_color_t __vsf_tgui_sv_color_mix_result__; \
168 uint_fast8_t __vsf_tgui_sv_color_rmix__ = (__mix) ^ 0xFF; \
169 __vsf_tgui_sv_color_mix_result__.red = ((uint32_t)(__color_0).red * (__mix) + (uint32_t)(__color_1).red * __vsf_tgui_sv_color_rmix__) / 255;\
170 __vsf_tgui_sv_color_mix_result__.green = ((uint32_t)(__color_0).green * (__mix) + (uint32_t)(__color_1).green * __vsf_tgui_sv_color_rmix__) / 255;\
171 __vsf_tgui_sv_color_mix_result__.blue = ((uint32_t)(__color_0).blue * (__mix) + (uint32_t)(__color_1).blue * __vsf_tgui_sv_color_rmix__) / 255;\
172 __vsf_tgui_sv_color_mix_alpha(); \
173 __vsf_tgui_sv_color_mix_result__; \
174 })
175# endif
176#endif
177
178#if VSF_TGUI_SV_CFG_COLOR_HAS_ALPHA == ENABLED
179# define vsf_tgui_sv_color_get_trans_rate(__color) ((__color).alpha)
180# define vsf_tgui_sv_color_set_trans_rate(__color_ptr, __alpha) do { (__color_ptr)->alpha = (__alpha); } while (0)
181# define vsf_tgui_sv_color_is_opaque(__color) ((__color).alpha == 0xFF)
182#else
183# define vsf_tgui_sv_color_get_trans_rate(__color) 0xFF
184# define vsf_tgui_sv_color_set_trans_rate(__color_ptr, __alpha)
185# define vsf_tgui_sv_color_is_opaque(__color) true
186#endif
187
188#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
189# define vsf_tgui_sv_argb8888_to_color(__color) (__color)
190#else
192#endif
193#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
194# define vsf_tgui_sv_rgb565_to_color(__color) (__color)
195#else
197#endif
198#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_BGR_565
199# define vsf_tgui_sv_bgr565_to_color(__color) (__color)
200#else
202#endif
203
204#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_ARGB_8888
205# define vsf_tgui_sv_color_to_argb8888(__color) (__color)
206#else
208#endif
209#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_RGB_565
210# define vsf_tgui_sv_color_to_rgb565(__color) (__color)
211#else
213#endif
214#if VSF_TGUI_CFG_COLOR_MODE == VSF_TGUI_COLOR_BGR_565
215# define vsf_tgui_sv_color_to_bgr565(__color) (__color)
216#else
218#endif
219
220#ifdef __cplusplus
221}
222#endif
223
224#endif
225#endif
226/* EOF */
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:93
uint16_t blue
Definition vsf_tgui_sv_color.h:99
uint16_t value
Definition vsf_tgui_sv_color.h:95
uint16_t red
Definition vsf_tgui_sv_color.h:97
uint8_t alpha
Definition vsf_tgui_sv_color.h:103
uint16_t green
Definition vsf_tgui_sv_color.h:98
Definition vsf_tgui_sv_color.h:79
uint16_t blue
Definition vsf_tgui_sv_color.h:83
uint8_t alpha
Definition vsf_tgui_sv_color.h:89
uint16_t value
Definition vsf_tgui_sv_color.h:81
uint16_t red
Definition vsf_tgui_sv_color.h:85
uint16_t green
Definition vsf_tgui_sv_color.h:84
Definition vsf_tgui_sv_color.h:107
uint8_t red
Definition vsf_tgui_sv_color.h:112
uint8_t green
Definition vsf_tgui_sv_color.h:111
uint8_t blue
Definition vsf_tgui_sv_color.h:110
uint32_t value
Definition vsf_tgui_sv_color.h:108
uint8_t alpha
Definition vsf_tgui_sv_color.h:113
uint32_t color
Definition vsf_sdl2_pixelformat.c:31
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:215
#define vsf_tgui_sv_bgr565_to_color(__color)
Definition vsf_tgui_sv_color.h:199
#define vsf_tgui_sv_rgb565_to_color(__color)
Definition vsf_tgui_sv_color.h:194
vsf_tgui_sv_color_bgr565_t vsf_tgui_v_color_t
Definition vsf_tgui_sv_color.h:118
#define vsf_tgui_sv_argb8888_to_color(__color)
Definition vsf_tgui_sv_color.h:189
#define vsf_tgui_sv_color_to_rgb565(__color)
Definition vsf_tgui_sv_color.h:210
#define vsf_tgui_sv_color_to_argb8888(__color)
Definition vsf_tgui_sv_color.h:205