efl
59 строк · 1.1 Кб
1#include "draw_private.h"2
3/** default op: d = d*(1-sa) + s */
4static void5_alpha_func_blend(uint8_t *dst, const uint8_t *src, int len)6{
7int k;8
9EINA_SAFETY_ON_NULL_RETURN(src);10EINA_SAFETY_ON_NULL_RETURN(dst);11
12for (k = len; k; k--)13{14int val = (*dst * (255 - *src)) / 255 + *src;15*dst++ = val;16src++;17}18}
19
20/** d = s */
21static void22_alpha_func_copy(uint8_t *dst, const uint8_t *src, int len)23{
24EINA_SAFETY_ON_NULL_RETURN(src);25EINA_SAFETY_ON_NULL_RETURN(dst);26
27memcpy(dst, src, len);28}
29
30/** d = d*s */
31static void32_alpha_func_mul(uint8_t *dst, const uint8_t *src, int len)33{
34int k;35
36EINA_SAFETY_ON_NULL_RETURN(src);37EINA_SAFETY_ON_NULL_RETURN(dst);38
39for (k = len; k; k--)40{41int val = (*dst * *src) / 255;42*dst++ = val;43src++;44}45}
46
47Draw_Func_Alpha
48efl_draw_alpha_func_get(Efl_Gfx_Render_Op op, Eina_Bool has_mask)49{
50if (!has_mask)51{52if (op == EFL_GFX_RENDER_OP_BLEND)53return _alpha_func_blend;54else55return _alpha_func_copy;56}57else58return _alpha_func_mul;59}
60