From 920d35350915c373d52b1b89f74e5882ba29e18c Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 6 Apr 2004 03:36:51 +0000 Subject: [PATCH] jose's evas patches are in. SVN revision: 9615 --- legacy/evas/AUTHORS | 1 + .../common/evas_blend_alpha_color_pixel.c | 11 +++--- .../engines/common/evas_blend_color_pixel.c | 4 +- .../src/lib/engines/common/evas_blend_ops.h | 4 +- .../common/evas_blend_pixel_cmod_pixel.c | 23 +++++++---- .../common/evas_blend_pixel_mul_pixel.c | 10 +++-- .../engines/common/evas_blend_pixel_pixel.c | 39 +++++++------------ .../src/lib/engines/common/evas_line_main.c | 16 +++++--- 8 files changed, 60 insertions(+), 48 deletions(-) diff --git a/legacy/evas/AUTHORS b/legacy/evas/AUTHORS index 56dcee1a65..ef9d10a476 100644 --- a/legacy/evas/AUTHORS +++ b/legacy/evas/AUTHORS @@ -7,3 +7,4 @@ Corey Donohoe Yuri Hudobin Nathan Ingersoll Willem Monsuwe +Jose O Gonzalez diff --git a/legacy/evas/src/lib/engines/common/evas_blend_alpha_color_pixel.c b/legacy/evas/src/lib/engines/common/evas_blend_alpha_color_pixel.c index 5bdbcef80b..034748125e 100644 --- a/legacy/evas/src/lib/engines/common/evas_blend_alpha_color_pixel.c +++ b/legacy/evas/src/lib/engines/common/evas_blend_alpha_color_pixel.c @@ -147,12 +147,10 @@ evas_common_blend_alpha_color_rgba_to_rgba_c (DATA8 *src, DATA32 *dst, int len, while (dst_ptr < dst_end_ptr) { DATA32 tmp; - DATA8 a; - DATA8 aa; + DATA8 a, aa; aa = (((*src_ptr) + 1) * A_VAL(&col)) >> 8; - a = _evas_pow_lut[aa][A_VAL(dst_ptr)]; - switch (a) + switch (aa) { case 0: break; @@ -160,6 +158,10 @@ evas_common_blend_alpha_color_rgba_to_rgba_c (DATA8 *src, DATA32 *dst, int len, *dst_ptr = col; break; default: + a = _evas_pow_lut[aa][A_VAL(dst_ptr)]; + BLEND_COLOR(aa, A_VAL(dst_ptr), + 255, A_VAL(dst_ptr), + tmp); BLEND_COLOR(a, R_VAL(dst_ptr), R_VAL(&col), R_VAL(dst_ptr), tmp); @@ -169,7 +171,6 @@ evas_common_blend_alpha_color_rgba_to_rgba_c (DATA8 *src, DATA32 *dst, int len, BLEND_COLOR(a, B_VAL(dst_ptr), B_VAL(&col), B_VAL(dst_ptr), tmp); - A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((aa * (255 - A_VAL(dst_ptr))) / 255); break; } src_ptr++; diff --git a/legacy/evas/src/lib/engines/common/evas_blend_color_pixel.c b/legacy/evas/src/lib/engines/common/evas_blend_color_pixel.c index 6d86ac86e7..d4c81e97fd 100644 --- a/legacy/evas/src/lib/engines/common/evas_blend_color_pixel.c +++ b/legacy/evas/src/lib/engines/common/evas_blend_color_pixel.c @@ -96,6 +96,9 @@ evas_common_blend_color_rgba_to_rgba_c(DATA32 src, DATA32 *dst, int len) a = _evas_pow_lut[A_VAL(&src)][A_VAL(dst_ptr)]; + BLEND_COLOR(A_VAL(&src), A_VAL(dst_ptr), + 255, A_VAL(dst_ptr), + tmp); BLEND_COLOR(a, R_VAL(dst_ptr), R_VAL(&src), R_VAL(dst_ptr), tmp); @@ -105,7 +108,6 @@ evas_common_blend_color_rgba_to_rgba_c(DATA32 src, DATA32 *dst, int len) BLEND_COLOR(a, B_VAL(dst_ptr), B_VAL(&src), B_VAL(dst_ptr), tmp); - A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((A_VAL(&src) * (255 - A_VAL(dst_ptr))) / 255); dst_ptr++; } diff --git a/legacy/evas/src/lib/engines/common/evas_blend_ops.h b/legacy/evas/src/lib/engines/common/evas_blend_ops.h index 62acf0cfa9..fb41836d76 100644 --- a/legacy/evas/src/lib/engines/common/evas_blend_ops.h +++ b/legacy/evas/src/lib/engines/common/evas_blend_ops.h @@ -9,6 +9,9 @@ if (A_VAL(src)) /* hmmm - do we need this? */ \ { \ __a = _evas_pow_lut[A_VAL(src)][A_VAL(dst)]; \ + BLEND_COLOR(A_VAL(src), A_VAL(dst), \ + 255, A_VAL(dst), \ + __tmp); \ BLEND_COLOR(__a, R_VAL(dst), \ R_VAL(src), R_VAL(dst), \ __tmp); \ @@ -18,7 +21,6 @@ BLEND_COLOR(__a, B_VAL(dst), \ B_VAL(src), B_VAL(dst), \ __tmp); \ - A_VAL(dst) = A_VAL(dst) + ((A_VAL(src) * (255 - A_VAL(dst))) / 255);\ } \ } diff --git a/legacy/evas/src/lib/engines/common/evas_blend_pixel_cmod_pixel.c b/legacy/evas/src/lib/engines/common/evas_blend_pixel_cmod_pixel.c index 8f84d8e2ec..9b5cc02705 100644 --- a/legacy/evas/src/lib/engines/common/evas_blend_pixel_cmod_pixel.c +++ b/legacy/evas/src/lib/engines/common/evas_blend_pixel_cmod_pixel.c @@ -27,7 +27,10 @@ evas_common_blend_pixels_cmod_rgba_to_rgb_c(DATA32 *src, DATA32 *dst, int len, D case 0: break; case 255: - *dst_ptr = *src_ptr; + A_VAL(dst_ptr) = 0xff; + R_VAL(dst_ptr) = rmod[R_VAL(src_ptr)]; + G_VAL(dst_ptr) = gmod[G_VAL(src_ptr)]; + B_VAL(dst_ptr) = bmod[B_VAL(src_ptr)]; break; default: BLEND_COLOR(a, R_VAL(dst_ptr), @@ -60,17 +63,23 @@ evas_common_blend_pixels_cmod_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int len, while (dst_ptr < dst_end_ptr) { DATA32 tmp; - DATA8 a; - - a = _evas_pow_lut[amod[A_VAL(src_ptr)]][A_VAL(dst_ptr)]; - switch (a) + DATA8 a, aa; + + aa = amod[A_VAL(src_ptr)]; + switch (aa) { case 0: break; case 255: - *dst_ptr = *src_ptr; + A_VAL(dst_ptr) = 0xff; + R_VAL(dst_ptr) = rmod[R_VAL(src_ptr)]; + G_VAL(dst_ptr) = gmod[G_VAL(src_ptr)]; + B_VAL(dst_ptr) = bmod[B_VAL(src_ptr)]; break; default: + a = _evas_pow_lut[aa][A_VAL(dst_ptr)]; + BLEND_COLOR(aa,A_VAL(dst_ptr), + 255,A_VAL(dst_ptr),tmp); BLEND_COLOR(a, R_VAL(dst_ptr), rmod[R_VAL(src_ptr)], R_VAL(dst_ptr), tmp); @@ -80,8 +89,6 @@ evas_common_blend_pixels_cmod_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int len, BLEND_COLOR(a, B_VAL(dst_ptr), bmod[B_VAL(src_ptr)], B_VAL(dst_ptr), tmp); - BLEND_COLOR(A_VAL(src),A_VAL(dst),255,A_VAL(dst),tmp); -/* A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((amod[A_VAL(src_ptr)] * (255 - A_VAL(dst_ptr))) / 255);*/ break; } src_ptr++; diff --git a/legacy/evas/src/lib/engines/common/evas_blend_pixel_mul_pixel.c b/legacy/evas/src/lib/engines/common/evas_blend_pixel_mul_pixel.c index 677c9e509d..6c31b300eb 100644 --- a/legacy/evas/src/lib/engines/common/evas_blend_pixel_mul_pixel.c +++ b/legacy/evas/src/lib/engines/common/evas_blend_pixel_mul_pixel.c @@ -202,6 +202,9 @@ evas_common_blend_pixels_mul_color_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int default: a = _evas_pow_lut[aa][A_VAL(dst_ptr)]; + BLEND_COLOR(aa, A_VAL(dst_ptr), + 255, A_VAL(dst_ptr), + tmp); BLEND_COLOR(a, R_VAL(dst_ptr), R_VAL(src_ptr), R_VAL(dst_ptr), tmp); @@ -211,7 +214,6 @@ evas_common_blend_pixels_mul_color_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int BLEND_COLOR(a, B_VAL(dst_ptr), B_VAL(src_ptr), B_VAL(dst_ptr), tmp); - A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((aa * (255 - A_VAL(dst_ptr))) / 255); break; } src_ptr++; @@ -231,14 +233,17 @@ evas_common_blend_pixels_mul_color_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int case 0: break; case 255: + A_VAL(dst_ptr) = 255; R_VAL(dst_ptr) = ((R_VAL(src_ptr) * (R_VAL(&mul_color) + 1)) >> 8); G_VAL(dst_ptr) = ((G_VAL(src_ptr) * (G_VAL(&mul_color) + 1)) >> 8); B_VAL(dst_ptr) = ((B_VAL(src_ptr) * (B_VAL(&mul_color) + 1)) >> 8); - A_VAL(dst_ptr) = 255; break; default: a = _evas_pow_lut[aa][A_VAL(dst_ptr)]; + BLEND_COLOR(aa, A_VAL(dst_ptr), + 255, A_VAL(dst_ptr), + tmp); BLEND_COLOR(a, R_VAL(dst_ptr), ((R_VAL(src_ptr) * (R_VAL(&mul_color) + 1)) >> 8), R_VAL(dst_ptr), tmp); @@ -248,7 +253,6 @@ evas_common_blend_pixels_mul_color_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int BLEND_COLOR(a, B_VAL(dst_ptr), ((B_VAL(src_ptr) * (B_VAL(&mul_color) + 1)) >> 8), B_VAL(dst_ptr), tmp); - A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((aa * (255 - A_VAL(dst_ptr))) / 255); break; } src_ptr++; diff --git a/legacy/evas/src/lib/engines/common/evas_blend_pixel_pixel.c b/legacy/evas/src/lib/engines/common/evas_blend_pixel_pixel.c index 8bca7a0e4c..4d7163c9cf 100644 --- a/legacy/evas/src/lib/engines/common/evas_blend_pixel_pixel.c +++ b/legacy/evas/src/lib/engines/common/evas_blend_pixel_pixel.c @@ -4,8 +4,6 @@ #include "evas_mmx.h" #endif -#define CONDITIONAL_BLEND 1 - extern DATA8 _evas_pow_lut[256][256]; extern const DATA16 _evas_const_c1[4]; @@ -22,9 +20,11 @@ evas_common_blend_pixels_rgba_to_rgb_c(DATA32 *src, DATA32 *dst, int len) while (dst_ptr < dst_end_ptr) { DATA32 tmp; + DATA8 a; + + a = A_VAL(src_ptr); -#ifdef CONDITIONAL_BLEND - switch (A_VAL(src_ptr)) + switch (a) { case 0: break; @@ -32,31 +32,17 @@ evas_common_blend_pixels_rgba_to_rgb_c(DATA32 *src, DATA32 *dst, int len) *dst_ptr = *src_ptr; break; default: - BLEND_COLOR(A_VAL(src_ptr), R_VAL(dst_ptr), + BLEND_COLOR(a, R_VAL(dst_ptr), R_VAL(src_ptr), R_VAL(dst_ptr), tmp); - BLEND_COLOR(A_VAL(src_ptr), G_VAL(dst_ptr), + BLEND_COLOR(a, G_VAL(dst_ptr), G_VAL(src_ptr), G_VAL(dst_ptr), tmp); - BLEND_COLOR(A_VAL(src_ptr), B_VAL(dst_ptr), + BLEND_COLOR(a, B_VAL(dst_ptr), B_VAL(src_ptr), B_VAL(dst_ptr), tmp); break; } -#else - if (A_VAL(src_ptr)) - { - BLEND_COLOR(A_VAL(src_ptr), R_VAL(dst_ptr), - R_VAL(src_ptr), R_VAL(dst_ptr), - tmp); - BLEND_COLOR(A_VAL(src_ptr), G_VAL(dst_ptr), - G_VAL(src_ptr), G_VAL(dst_ptr), - tmp); - BLEND_COLOR(A_VAL(src_ptr), B_VAL(dst_ptr), - B_VAL(src_ptr), B_VAL(dst_ptr), - tmp); - } -#endif src_ptr++; dst_ptr++; } @@ -128,9 +114,10 @@ evas_common_blend_pixels_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int len) while (dst_ptr < dst_end_ptr) { DATA32 tmp; - DATA8 a; + DATA8 a, aa; - switch (A_VAL(src_ptr)) + aa = A_VAL(src_ptr); + switch (aa) { case 0: break; @@ -138,8 +125,11 @@ evas_common_blend_pixels_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int len) *dst_ptr = *src_ptr; break; default: - a = _evas_pow_lut[A_VAL(src_ptr)][A_VAL(dst_ptr)]; + a = _evas_pow_lut[aa][A_VAL(dst_ptr)]; + BLEND_COLOR(aa, A_VAL(dst_ptr), + 255, A_VAL(dst_ptr), + tmp); BLEND_COLOR(a, R_VAL(dst_ptr), R_VAL(src_ptr), R_VAL(dst_ptr), tmp); @@ -149,7 +139,6 @@ evas_common_blend_pixels_rgba_to_rgba_c(DATA32 *src, DATA32 *dst, int len) BLEND_COLOR(a, B_VAL(dst_ptr), B_VAL(src_ptr), B_VAL(dst_ptr), tmp); - A_VAL(dst_ptr) = A_VAL(dst_ptr) + ((A_VAL(src_ptr) * (255 - A_VAL(dst_ptr))) / 255); } src_ptr++; dst_ptr++; diff --git a/legacy/evas/src/lib/engines/common/evas_line_main.c b/legacy/evas/src/lib/engines/common/evas_line_main.c index 426632f74d..92ab41505e 100644 --- a/legacy/evas/src/lib/engines/common/evas_line_main.c +++ b/legacy/evas/src/lib/engines/common/evas_line_main.c @@ -31,6 +31,8 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in sx = SGN(dx); sy = SGN(dy); + col = dc->col.col; + if ((dx == 0) && (dy == 0)) { if ((x1 < 0) || @@ -54,6 +56,9 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in ptr = dst->image->data + (y1 * dst->image->w) + x1; __blend_a = _evas_pow_lut[A_VAL(&(col))][A_VAL(ptr)]; + BLEND_COLOR(A_VAL(&(col)), A_VAL(ptr), + 255, A_VAL(ptr), + __blend_tmp); BLEND_COLOR(__blend_a, R_VAL(ptr), R_VAL(&(col)), R_VAL(ptr), __blend_tmp); @@ -63,7 +68,6 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in BLEND_COLOR(__blend_a, B_VAL(ptr), B_VAL(&(col)), B_VAL(ptr), __blend_tmp); - A_VAL(ptr) = A_VAL(ptr) + ((A_VAL(&(col)) * (255 - A_VAL(ptr))) / 255); } else { @@ -86,8 +90,6 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in im = dst->image->data; im_w = dst->image->w; im_h = dst->image->h; - col = dc->col.col; - if (!A_VAL(&(col))) return; ext_x = 0; ext_y = 0; ext_w = im_w; ext_h = im_h; if (dc->clip.use) @@ -146,6 +148,9 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in __blend_a = _evas_pow_lut[A_VAL(&(col))][A_VAL(ptr)]; + BLEND_COLOR(A_VAL(&(col)), A_VAL(ptr), + 255, A_VAL(ptr), + __blend_tmp); BLEND_COLOR(__blend_a, R_VAL(ptr), R_VAL(&(col)), R_VAL(ptr), __blend_tmp); @@ -155,7 +160,6 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in BLEND_COLOR(__blend_a, B_VAL(ptr), B_VAL(&(col)), B_VAL(ptr), __blend_tmp); - A_VAL(ptr) = A_VAL(ptr) + ((A_VAL(&(col)) * (255 - A_VAL(ptr))) / 255); } } if (x == x2) return; @@ -183,6 +187,9 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in __blend_a = _evas_pow_lut[A_VAL(&(col))][A_VAL(ptr)]; + BLEND_COLOR(A_VAL(&(col)), A_VAL(ptr), + 255, A_VAL(ptr), + __blend_tmp); BLEND_COLOR(__blend_a, R_VAL(ptr), R_VAL(&(col)), R_VAL(ptr), __blend_tmp); @@ -192,7 +199,6 @@ evas_common_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x1, int y1, in BLEND_COLOR(__blend_a, B_VAL(ptr), B_VAL(&(col)), B_VAL(ptr), __blend_tmp); - A_VAL(ptr) = A_VAL(ptr) + ((A_VAL(&(col)) * (255 - A_VAL(ptr))) / 255); } } if (y == y2) return;