Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/modules/engines/xrender_xcb Modified Files: evas_engine.c evas_engine.h evas_engine_gradient.c evas_engine_image.c Log Message: jose's software rendering work - slight improvements (about 5-10%). i had to disable destination alha mmx support for text rendering (mask + color) as it was broken in tests. =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- evas_engine.c 23 Apr 2006 15:38:23 -0000 1.3 +++ evas_engine.c 2 May 2006 07:28:49 -0000 1.4 @@ -57,12 +57,15 @@ static void eng_polygon_draw(void *data, void *context, void *surface, void *polygon); static void *eng_gradient_color_add(void *data, void *context, void *gradient, int r, int g, int b, int a, int distance); static void *eng_gradient_colors_clear(void *data, void *context, void *gradient); +static void *eng_gradient_data_set(void *data, void *context, void *gradient, void *map, int len, int has_alpha); +static void *eng_gradient_data_unset(void *data, void *context, void *gradient); static void eng_gradient_free(void *data, void *gradient); static void eng_gradient_fill_set(void *data, void *gradient, int x, int y, int w, int h); +static void eng_gradient_range_offset_set(void *data, void *gradient, float offset); static void eng_gradient_type_set(void *data, void *gradient, char *name); static void eng_gradient_type_params_set(void *data, void *gradient, char *params); static void *eng_gradient_geometry_init(void *data, void *gradient, int spread); -static int eng_gradient_alpha_get(void *data, void *gradient, int spread); +static int eng_gradient_alpha_get(void *data, void *gradient, int spread, int op); static void eng_gradient_map(void *data, void *context, void *gradient, int spread); static void eng_gradient_draw(void *data, void *context, void *surface, void *gradient, int x, int y, int w, int h, double angle, int spread); static void *eng_image_load(void *data, char *file, char *key, int *error); @@ -401,6 +404,26 @@ return _xre_gradient_colors_clear((XR_Gradient *)gradient); } +static void * +eng_gradient_data_set(void *data, void *context, void *gradient, void *map, int len, int has_alpha) +{ + Render_Engine *re; + + re = (Render_Engine *)data; + return _xre_gradient_data_set(re->xcbinf, (XR_Gradient *)gradient, map, len, has_alpha); + context = NULL; +} + +static void * +eng_gradient_data_unset(void *data, void *context, void *gradient) +{ + Render_Engine *re; + + re = (Render_Engine *)data; + return _xre_gradient_data_unset((XR_Gradient *)gradient); + context = NULL; +} + static void eng_gradient_free(void *data, void *gradient) { @@ -414,6 +437,15 @@ } static void +eng_gradient_range_offset_set(void *data, void *gradient, float offset) +{ + Render_Engine *re; + + re = (Render_Engine *)data; + _xre_gradient_range_offset_set((XR_Gradient *)gradient, offset); +} + +static void eng_gradient_type_set(void *data, void *gradient, char *name) { _xre_gradient_type_set((XR_Gradient *)gradient, name); @@ -432,9 +464,9 @@ } static int -eng_gradient_alpha_get(void *data, void *gradient, int spread) +eng_gradient_alpha_get(void *data, void *gradient, int spread, int op) { - return _xre_gradient_alpha_get((XR_Gradient *)gradient, spread); + return _xre_gradient_alpha_get((XR_Gradient *)gradient, spread, op); } static void @@ -749,8 +781,11 @@ ORD(polygon_draw); ORD(gradient_color_add); ORD(gradient_colors_clear); + ORD(gradient_data_set); + ORD(gradient_data_unset); ORD(gradient_free); ORD(gradient_fill_set); + ORD(gradient_range_offset_set); ORD(gradient_type_set); ORD(gradient_type_params_set); ORD(gradient_geometry_init); =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- evas_engine.h 10 Mar 2006 19:10:07 -0000 1.1 +++ evas_engine.h 2 May 2006 07:28:49 -0000 1.2 @@ -173,6 +173,14 @@ XR_Gradient *_xre_gradient_colors_clear (XR_Gradient *gr); +XR_Gradient *_xre_gradient_data_set (XCBimage_Info *xcbinf, + XR_Gradient *gr, + void *map, + int len, + int has_alpha); + +XR_Gradient *_xre_gradient_data_unset (XR_Gradient *gr); + void _xre_gradient_free (XR_Gradient *gr); void _xre_gradient_fill_set (XR_Gradient *gr, @@ -181,6 +189,9 @@ int w, int h); +void _xre_gradient_range_offset_set(XR_Gradient *gr, + float offset); + void _xre_gradient_type_set (XR_Gradient *gr, char *name); @@ -191,7 +202,8 @@ int spread); int _xre_gradient_alpha_get (XR_Gradient *gr, - int spread); + int spread, + int op); void _xre_gradient_map (RGBA_Draw_Context *dc, XR_Gradient *gr, =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine_gradient.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- evas_engine_gradient.c 10 Mar 2006 19:10:07 -0000 1.1 +++ evas_engine_gradient.c 2 May 2006 07:28:49 -0000 1.2 @@ -45,6 +45,47 @@ return gr; } +XR_Gradient * +_xre_gradient_data_set(XCBimage_Info *xcbinf, XR_Gradient *gr, void *map, int len, int has_alpha) +{ + if (!gr) + { + gr = calloc(1, sizeof(XR_Gradient)); + if (!gr) return NULL; + gr->xcbinf = xcbinf; + gr->xcbinf->references++; + gr->grad = evas_common_gradient_new(); + if (!gr->grad) + { + gr->xcbinf->references--; + free(gr); + return NULL; + } + } + evas_common_gradient_data_set(gr->grad, map, len, has_alpha); + if (gr->surface) + { + _xr_render_surface_free(gr->surface); + gr->surface = NULL; + } + gr->changed = 1; + return gr; +} + +XR_Gradient * +_xre_gradient_data_unset(XR_Gradient *gr) +{ + if (!gr) return NULL; + evas_common_gradient_data_unset(gr->grad); + if (gr->surface) + { + _xr_render_surface_free(gr->surface); + gr->surface = NULL; + } + gr->changed = 1; + return gr; +} + void _xre_gradient_free(XR_Gradient *gr) { @@ -80,6 +121,14 @@ } void +_xre_gradient_range_offset_set(XR_Gradient *gr, float offset) +{ + if (!gr) return; + evas_common_gradient_range_offset_set(gr->grad, offset); + gr->changed = 1; +} + +void _xre_gradient_type_params_set(XR_Gradient *gr, char *params) { if (!gr) return; @@ -96,10 +145,10 @@ } int -_xre_gradient_alpha_get(XR_Gradient *gr, int spread) +_xre_gradient_alpha_get(XR_Gradient *gr, int spread, int op) { if (!gr) return 0; - return evas_common_gradient_has_alpha(gr->grad, spread); + return evas_common_gradient_has_alpha(gr->grad, spread, op); } void @@ -140,6 +189,7 @@ memset(im->image->data, 0, im->image->w * im->image->h * sizeof(DATA32)); dc2->anti_alias = dc->anti_alias; dc2->interpolation.color_space = dc->interpolation.color_space; + dc2->render_op = _EVAS_RENDER_COPY; evas_common_gradient_draw(im, dc2, 0, 0, w, h, gr->grad, angle, spread); gr->surface = _xr_render_surface_new(gr->xcbinf, w, h, gr->xcbinf->fmt32, 1); if (gr->surface) =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine_image.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- evas_engine_image.c 23 Apr 2006 15:38:23 -0000 1.3 +++ evas_engine_image.c 2 May 2006 07:28:49 -0000 1.4 @@ -139,7 +139,7 @@ } if (data) { - Gfx_Func_Blend_Src_Dst func; + Gfx_Func_Copy func; func = evas_common_draw_func_copy_get(w * h, 0); if (func) func(data, im->data, w * h); @@ -287,7 +287,7 @@ } if (im->data) { - Gfx_Func_Blend_Src_Dst func; + Gfx_Func_Copy func; int x = 0, y = 0, ww, hh; unsigned int *sp, *dp; void *data; ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs