Enlightenment CVS committal Author : doursse 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 evas_engine_ximage.c evas_engine_xrender.c Log Message: fix xrender xcb engine, add old stuff committed to the Xlib engines and not to the XCB ones, replace deprecated XCBSync call by a call of GetInputFocus, fix some round trips but a complete review of the engines must be done to fix them all, first part of a cleanup, first part of XCB error management =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- evas_engine.c 6 Sep 2006 07:28:45 -0000 1.7 +++ evas_engine.c 9 Sep 2006 08:10:24 -0000 1.8 @@ -68,7 +68,7 @@ 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, Evas_Image_Load_Opts *lo); +static void *eng_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo); static void *eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data); static void *eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data); static void eng_image_free(void *data, void *image); @@ -82,12 +82,12 @@ static void *eng_image_border_set(void *data, void *image, int l, int r, int t, int b); static void eng_image_border_get(void *data, void *image, int *l, int *r, int *t, int *b); static void eng_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth); -static char *eng_image_comment_get(void *data, void *image, char *key); +static const char *eng_image_comment_get(void *data, void *image, char *key); static char *eng_image_format_get(void *data, void *image); static void eng_image_cache_flush(void *data); static void eng_image_cache_set(void *data, int bytes); static int eng_image_cache_get(void *data); -static void eng_font_draw(void *data, void *context, void *surface, void *font, int x, int y, int w, int h, int ow, int oh, char *text); +static void eng_font_draw(void *data, void *context, void *surface, void *font, int x, int y, int w, int h, int ow, int oh, const char *text); /* internal engine routines */ @@ -334,7 +334,8 @@ static void eng_output_flush(void *data) { - Render_Engine *re; + Render_Engine *re; + XCBGetInputFocusRep *reply; re = (Render_Engine *)data; while (re->updates) @@ -367,7 +368,11 @@ _xr_render_surface_free(reu->surface); free(reu); } - XCBSync(re->conn, 0); + /* we sync */ + reply = XCBGetInputFocusReply(re->conn, + XCBGetInputFocusUnchecked(re->conn), + NULL); + free(reply); _xr_image_info_pool_flush(re->xcbinf, 0, 0); } @@ -486,7 +491,7 @@ } static void * -eng_image_load(void *data, char *file, char *key, int *error, Evas_Image_Load_Opts *lo) +eng_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo) { Render_Engine *re; XR_Image *im; @@ -698,7 +703,7 @@ smooth); } -static char * +static const char * eng_image_comment_get(void *data, void *image, char *key) { if (!image) return NULL; @@ -737,7 +742,7 @@ } static void -eng_font_draw(void *data, void *context, void *surface, void *font, int x, int y, int w, int h, int ow, int oh, char *text) +eng_font_draw(void *data, void *context, void *surface, void *font, int x, int y, int w, int h, int ow, int oh, const char *text) { Render_Engine *re; =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- evas_engine.h 18 Aug 2006 14:45:26 -0000 1.5 +++ evas_engine.h 9 Sep 2006 08:10:24 -0000 1.6 @@ -93,24 +93,25 @@ struct _XR_Image { - XCBimage_Info *xcbinf; - char *file; - char *key; - char *fkey; - RGBA_Image *im; - void *data; - int w, h; - XCBrender_Surface *surface; - int references; - char *format; - char *comment; - Tilebuf *updates; - unsigned char alpha : 1; - unsigned char dirty : 1; - unsigned char free_data : 1; + XCBimage_Info *xcbinf; + const char *file; + const char *key; + char *fkey; + RGBA_Image *im; + void *data; + int w, h; + XCBrender_Surface *surface; + int references; + char *format; + const char *comment; + Tilebuf *updates; + RGBA_Image_Loadopts load_opts; + unsigned char alpha : 1; + unsigned char dirty : 1; + unsigned char free_data : 1; }; -XR_Image *_xre_image_load(XCBimage_Info *xcbinf, char *file, char *key, Evas_Image_Load_Opts *lo); +XR_Image *_xre_image_load(XCBimage_Info *xcbinf, const char *file, const char *key, Evas_Image_Load_Opts *lo); XR_Image *_xre_image_new_from_data(XCBimage_Info *xcbinf, int w, int h, void *data); XR_Image *_xre_image_new_from_copied_data(XCBimage_Info *xcbinf, int w, int h, void *data); XR_Image *_xre_image_new(XCBimage_Info *xcbinf, int w, int h); =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine_gradient.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- evas_engine_gradient.c 2 May 2006 07:28:49 -0000 1.2 +++ evas_engine_gradient.c 9 Sep 2006 08:10:24 -0000 1.3 @@ -164,9 +164,11 @@ _xre_gradient_draw(XCBrender_Surface *rs, RGBA_Draw_Context *dc, XR_Gradient *gr, int x, int y, int w, int h, double angle, int spread) { RGBA_Image *im; + int mul_use; if ((w <= 0) || (h <= 0)) return; - + if (!rs || !dc || !gr) return; + if ((angle != gr->angle) || (spread != gr->spread) || (gr->changed)) { if (gr->surface) @@ -201,7 +203,10 @@ evas_common_image_free(im); } } + mul_use = dc->mul.use; + dc->mul.use = 0; if (gr->surface) _xr_render_surface_composite(gr->surface, rs, dc, 0, 0, gr->surface->w, gr->surface->h, x, y, w, h, 1); + dc->mul.use = mul_use; gr->changed = 0; } =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine_image.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- evas_engine_image.c 18 Aug 2006 14:45:26 -0000 1.6 +++ evas_engine_image.c 9 Sep 2006 08:10:24 -0000 1.7 @@ -66,7 +66,7 @@ } XR_Image * -_xre_image_load(XCBimage_Info *xcbinf, char *file, char *key, Evas_Image_Load_Opts *lo) +_xre_image_load(XCBimage_Info *xcbinf, const char *file, const char *key, Evas_Image_Load_Opts *lo) { XR_Image *im; char buf[4096]; @@ -75,16 +75,16 @@ if (!lo) { if (key) - snprintf(buf, sizeof(buf), "/@[EMAIL PROTECTED]@/%s//://%s", xinf->disp, xinf->root, file, key); + snprintf(buf, sizeof(buf), "/@[EMAIL PROTECTED]@/%s//://%s", xcbinf->conn, xcbinf->root.window.xid, file, key); else - snprintf(buf, sizeof(buf), "/@[EMAIL PROTECTED]@/%s", xinf->disp, xinf->root, file); + snprintf(buf, sizeof(buf), "/@[EMAIL PROTECTED]@/%s", xcbinf->conn, xcbinf->root.window.xid, file); } else { if (key) - snprintf(buf, sizeof(buf), "//@/%i/%1.5f/%ix%i//@[EMAIL PROTECTED]@/%s//://%s", lo->scale_down_by, lo->dpi, lo->w, lo->h, xinf->disp, xinf->root, file, key); + snprintf(buf, sizeof(buf), "//@/%i/%1.5f/%ix%i//@[EMAIL PROTECTED]@/%s//://%s", lo->scale_down_by, lo->dpi, lo->w, lo->h, xcbinf->conn, xcbinf->root.window.xid, file, key); else - snprintf(buf, sizeof(buf), "//@/%i/%1.5f/%ix%i//@[EMAIL PROTECTED]@/%s", lo->scale_down_by, lo->dpi, lo->w, lo->h, xinf->disp, xinf->root, file); + snprintf(buf, sizeof(buf), "//@/%i/%1.5f/%ix%i//@[EMAIL PROTECTED]@/%s", lo->scale_down_by, lo->dpi, lo->w, lo->h, xcbinf->conn, xcbinf->root.window.xid, file); } im = __xre_image_find(buf); if (im) =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine_ximage.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- evas_engine_ximage.c 6 May 2006 06:22:57 -0000 1.3 +++ evas_engine_ximage.c 9 Sep 2006 08:10:24 -0000 1.4 @@ -40,7 +40,7 @@ XCBRenderQueryPictFormatsRep *rep; XCBRenderPICTFORMINFOIter iter_forminfo; - cookie = XCBRenderQueryPictFormats (conn); + cookie = XCBRenderQueryPictFormatsUnchecked (conn); rep = XCBRenderQueryPictFormatsReply (conn, cookie, NULL); iter_forminfo = XCBRenderQueryPictFormatsFormatsIter (rep); for (; iter_forminfo.rem; XCBRenderPICTFORMINFONext (&iter_forminfo)) { @@ -283,7 +283,7 @@ xcbinf->references = 1; xcbinf->conn = conn; xcbinf->draw = draw; - cookie = XCBGetGeometry(xcbinf->conn, xcbinf->draw); + cookie = XCBGetGeometryUnchecked(xcbinf->conn, xcbinf->draw); rep = XCBGetGeometryReply(xcbinf->conn, cookie, NULL); xcbinf->root.window = rep->root; free(rep); @@ -340,19 +340,28 @@ if (shm_info.shmid >= 0) { shm_info.shmaddr = xcbim->data = shmat(shm_info.shmid, 0, 0); if ((shm_info.shmaddr != NULL) && (shm_info.shmaddr != (void *) -1)) { - /* - * FIXME: no error mechanism - */ - /* XErrorHandler ph; */ - - XCBSync(xcbinf->conn, 0); - _xcb_err = 0; - /* ph = XSetErrorHandler((XErrorHandler)_tmp_xcb_err); */ - XCBShmAttach(xcbinf->conn, shm_info.shmseg, shm_info.shmid, 0); - XCBSync(xcbinf->conn, 0); - /* XSetErrorHandler((XErrorHandler)ph); */ - if (!_xcb_err) xcbinf->can_do_shm = 1; - shmdt(shm_info.shmaddr); + XCBGetInputFocusRep *reply; + /* + * FIXME: no error mechanism + */ + /* XErrorHandler ph; */ + + /* we sync */ + reply = XCBGetInputFocusReply(xcbinf->conn, + XCBGetInputFocusUnchecked(xcbinf->conn), + NULL); + free(reply); + _xcb_err = 0; + /* ph = XSetErrorHandler((XErrorHandler)_tmp_xcb_err); */ + XCBShmAttach(xcbinf->conn, shm_info.shmseg, shm_info.shmid, 0); + /* we sync */ + reply = XCBGetInputFocusReply(xcbinf->conn, + XCBGetInputFocusUnchecked(xcbinf->conn), + NULL); + free(reply); + /* XSetErrorHandler((XErrorHandler)ph); */ + if (!_xcb_err) xcbinf->can_do_shm = 1; + shmdt(shm_info.shmaddr); } shmctl(shm_info.shmid, IPC_RMID, 0); } @@ -366,7 +375,16 @@ void _xr_image_info_free(XCBimage_Info *xcbinf) { - if (xcbinf->pool) XCBSync(xcbinf->conn, 0); + if (!xcbinf) return; + if (xcbinf->pool) + { + XCBGetInputFocusRep *reply; + + reply = XCBGetInputFocusReply(xcbinf->conn, + XCBGetInputFocusUnchecked(xcbinf->conn), + NULL); + free(reply); + } _xr_image_info_pool_flush(xcbinf, 0, 0); xcbinf->references--; if (xcbinf->references != 0) return; @@ -433,16 +451,25 @@ xcbim->shm_info->shmaddr = xcbim->xcbim->data = shmat(xcbim->shm_info->shmid, 0, 0); if ((xcbim->shm_info->shmaddr) && (xcbim->shm_info->shmaddr != (void *) -1)) { - /* - * FIXME: no error mechanism - */ -/* XErrorHandler ph; */ - - XCBSync(xcbim->xcbinf->conn, 0); + XCBGetInputFocusRep *reply; + /* + * FIXME: no error mechanism + */ + /* XErrorHandler ph; */ + + /* we sync */ + reply = XCBGetInputFocusReply(xcbim->xcbinf->conn, + XCBGetInputFocusUnchecked(xcbim->xcbinf->conn), + NULL); + free(reply); _xcb_err = 0; /* ph = XSetErrorHandler((XErrorHandler)_tmp_xcb_err); */ XCBShmAttach(xcbim->xcbinf->conn, xcbim->shm_info->shmseg, xcbim->shm_info->shmid, 0); - XCBSync(xcbim->xcbinf->conn, 0); + /* we sync */ + reply = XCBGetInputFocusReply(xcbim->xcbinf->conn, + XCBGetInputFocusUnchecked(xcbim->xcbinf->conn), + NULL); + free(reply); /* XSetErrorHandler((XErrorHandler)ph); */ if (!_xcb_err) goto xcbim_ok; shmdt(xcbim->shm_info->shmaddr); @@ -485,7 +512,15 @@ { if (xcbim->shm_info) { - if (!xcbim->available) XCBSync(xcbim->xcbinf->conn, 0); + if (!xcbim->available) + { + XCBGetInputFocusRep *reply; + + reply = XCBGetInputFocusReply(xcbim->xcbinf->conn, + XCBGetInputFocusUnchecked(xcbim->xcbinf->conn), + NULL); + free(reply); + } XCBShmDetach(xcbim->xcbinf->conn, xcbim->shm_info->shmseg); XCBImageSHMDestroy(xcbim->xcbim); shmdt(xcbim->shm_info->shmaddr); @@ -506,7 +541,8 @@ void _xr_image_put(XCBimage_Image *xcbim, XCBDRAWABLE draw, int x, int y, int w, int h) { - XCBGCONTEXT gc; + XCBGetInputFocusRep *reply; + XCBGCONTEXT gc; gc = XCBGCONTEXTNew(xcbim->xcbinf->conn); XCBCreateGC(xcbim->xcbinf->conn, gc, draw, 0, NULL); @@ -521,7 +557,11 @@ 0, xcbim->shm_info->shmseg, xcbim->xcbim->data - xcbim->shm_info->shmaddr); - XCBSync(xcbim->xcbinf->conn, 0); + /* we sync */ + reply = XCBGetInputFocusReply(xcbim->xcbinf->conn, + XCBGetInputFocusUnchecked(xcbim->xcbinf->conn), + NULL); + free(reply); } else XCBImagePut(xcbim->xcbinf->conn, draw, gc, xcbim->xcbim, 0, 0, x, y, w, h); =================================================================== RCS file: /cvs/e/e17/libs/evas/src/modules/engines/xrender_xcb/evas_engine_xrender.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- evas_engine_xrender.c 6 May 2006 06:22:57 -0000 1.3 +++ evas_engine_xrender.c 9 Sep 2006 08:10:24 -0000 1.4 @@ -63,6 +63,8 @@ CARD32 mask; CARD32 values[3]; + if ((!xcbinf) || (!fmt) || (w < 1) || (h < 1)) return NULL; + rs = calloc(1, sizeof(XCBrender_Surface)); if (!rs) return NULL; rs->xcbinf = xcbinf; @@ -74,6 +76,11 @@ rs->allocated = 1; rs->draw.pixmap = XCBPIXMAPNew(xcbinf->conn); XCBCreatePixmap(xcbinf->conn, fmt->depth, rs->draw.pixmap, xcbinf->root, w, h); + if (rs->draw.pixmap.xid == 0) + { + free(rs); + return NULL; + } rs->xcbinf->references++; mask = XCBRenderCPRepeat | XCBRenderCPDither | XCBRenderCPComponentAlpha; values[0] = 0; @@ -81,6 +88,13 @@ values[2] = 0; rs->pic = XCBRenderPICTURENew(xcbinf->conn); XCBRenderCreatePicture(xcbinf->conn, rs->pic, rs->draw, fmt->id, mask, values); + if (rs->pic.xid == 0) + { + XCBFreePixmap(rs->xcbinf->conn, rs->draw.pixmap); + rs->xcbinf->references--; + free(rs); + return NULL; + } return rs; } @@ -93,9 +107,11 @@ CARD32 mask; CARD32 values[3]; + if ((!xcbinf) || (draw.pixmap.xid == 0) || (w < 1) || (h < 1)) return NULL; fmt = XCBRenderFindVisualFormat(xcbinf->conn, xcbinf->vis); if (!fmt) return NULL; rs = calloc(1, sizeof(XCBrender_Surface)); + if (!rs) return NULL; rs->xcbinf = xcbinf; rs->w = w; rs->h = h; @@ -125,6 +141,12 @@ values[2] = 0; rs->pic = XCBRenderPICTURENew(xcbinf->conn); XCBRenderCreatePicture(xcbinf->conn, rs->pic, rs->draw, fmt->id, mask, values); + if (rs->pic.xid == 0) + { + rs->xcbinf->references--; + free(rs); + return NULL; + } return rs; } @@ -133,10 +155,12 @@ _xr_render_surface_format_adopt(XCBimage_Info *xcbinf, XCBDRAWABLE draw, int w, int h, XCBRenderPICTFORMINFO *fmt, int alpha) { XCBrender_Surface *rs; - CARD32 mask; - CARD32 values[3]; + CARD32 mask; + CARD32 values[3]; + if ((!xcbinf) || (!fmt) || (draw.pixmap.xid == 0) || (w < 1) || (h < 1)) return NULL; rs = calloc(1, sizeof(XCBrender_Surface)); + if (!rs) return NULL; rs->xcbinf = xcbinf; rs->w = w; rs->h = h; @@ -153,6 +177,12 @@ values[2] = 0; rs->pic = XCBRenderPICTURENew(xcbinf->conn); XCBRenderCreatePicture(xcbinf->conn, rs->pic, rs->draw, fmt->id, mask, values); + if (rs->pic.xid == 0) + { + rs->xcbinf->references--; + free(rs); + return NULL; + } return rs; } @@ -160,10 +190,16 @@ void _xr_render_surface_free(XCBrender_Surface *rs) { - if (rs->allocated) XCBFreePixmap(rs->xcbinf->conn, rs->draw.pixmap); - XCBRenderFreePicture(rs->xcbinf->conn, rs->pic); - _xr_image_info_free(rs->xcbinf); - rs->xcbinf = NULL; + if (!rs) return; + if (rs->xcbinf) + { + if ((rs->allocated) && (rs->draw.pixmap.xid != 0)) + XCBFreePixmap(rs->xcbinf->conn, rs->draw.pixmap); + if (rs->pic.xid != 0) + XCBRenderFreePicture(rs->xcbinf->conn, rs->pic); + _xr_image_info_free(rs->xcbinf); + rs->xcbinf = NULL; + } free(rs); } @@ -185,7 +221,7 @@ XCBRECTANGLE rect; int aa; - aa = a +1; + aa = a + 1; r = (r * aa) >> 8; g = (g * aa) >> 8; b = (b * aa) >> 8; @@ -257,20 +293,18 @@ sple = sp + w; while (sp < sple) { - switch (a = A_VAL(sp)) + switch (a = (*sp & 0xff000000)) { case 0: *p = 0; break; - case 255: + case 0xff000000: *p = *sp; break; - default: - aa = a + 1; - r = ((R_VAL(sp)) * aa) >> 8; - g = ((G_VAL(sp)) * aa) >> 8; - b = ((B_VAL(sp)) * aa) >> 8; - *p = (a << 24) | (r << 16) | (g << 8) | b; + default: + aa = (a >> 24) + 1; + *p = a + (((((*sp) >> 8) & 0xff) * aa) & 0xff00) + + (((((*sp) & 0x00ff00ff) * aa) >> 8) & 0x00ff00ff); break; } p++; @@ -324,7 +358,7 @@ sple = sp + w; while (sp < sple) { - *p = 0xff000000 | ((R_VAL(sp)) << 16) | ((G_VAL(sp)) << 8) | (B_VAL(sp)); + *p = 0xff000000 | *sp; p++; sp++; } @@ -392,7 +426,6 @@ CARD32 value_mask; CARD32 value_list[1]; int r, g, b, a; - int sf; int op; if ((sw <= 0) || (sh <= 0) || (w <= 0) || (h <= 0)) return; @@ -436,23 +469,27 @@ } else { - xf.matrix11 = 1; + xf.matrix11 = 1 << 16; xf.matrix12 = 0; xf.matrix13 = 0; xf.matrix21 = 0; - xf.matrix22 = 1; + xf.matrix22 = 1 << 16; xf.matrix23 = 0; xf.matrix31 = 0; xf.matrix32 = 0; - xf.matrix33 = 1; + xf.matrix33 = 1 << 16; if ((srs->alpha) || (a != 0xff)) trs = _xr_render_surface_new(srs->xcbinf, sw + 1, sh + 1, srs->xcbinf->fmt32, 1); + /* trs = _xr_render_surface_new(srs->xcbinf, sw, sh, + srs->xcbinf->fmt32, 1); */ else trs = _xr_render_surface_new(srs->xcbinf, sw + 1, sh + 1, srs->fmt, srs->alpha); + /* trs = _xr_render_surface_new(srs->xcbinf, sw, sh, + srs->fmt, srs->alpha); */ XCBRenderSetPictureTransform(srs->xcbinf->conn, srs->pic, xf); XCBRenderComposite(srs->xcbinf->conn, XCBRenderPictOpSrc, srs->pic, mask, trs->pic, sx, sy, 0, 0, 0, 0, sw, sh); @@ -468,7 +505,7 @@ } } - + /* sf = MAX(sw, sh); #define BMAX 26 if (sf <= 8 ) sf = 1 << (BMAX - 3); @@ -484,18 +521,22 @@ else if (sf <= 8192 ) sf = 1 << (BMAX - 13); else if (sf <= 16384) sf = 1 << (BMAX - 14); else sf = 1 << (BMAX - 15); + */ - xf.matrix11 = (sf * sw) / w; + /* xf.matrix11 = (sf * sw) / w; */ + xf.matrix11 = (sw << 16) / w; xf.matrix12 = 0; xf.matrix13 = 0; xf.matrix21 = 0; - xf.matrix22 = (sf * sh) / h; + /* xf.matrix22 = (sf * sh) / h; */ + xf.matrix22 = (sh << 16) / h; xf.matrix23 = 0; xf.matrix31 = 0; xf.matrix32 = 0; - xf.matrix33 = sf; + /* xf.matrix33 = sf; */ + xf.matrix33 = 1 << 16; _xr_render_surface_clips_set(drs, dc, x, y, w, h); if (trs) @@ -519,6 +560,8 @@ XCBRenderSetPictureTransform(srs->xcbinf->conn, srs->pic, xf); XCBRenderComposite(srs->xcbinf->conn, op, srs->pic, mask, drs->pic, + /* (sx * w) / sw, + (sy * h) / sh, */ ((sx * w) + (sw / 2)) / sw, ((sy * h) + (sh / 2)) / sh, 0, 0, x, y, w, h); @@ -532,19 +575,25 @@ XCBRenderPICTURE mask = { 0 }; CARD32 value_mask; CARD32 value_list[1]; + int ident; - if ((w <= 0) || (h <= 0) || (!srs) || (!drs)) return; - xf.matrix11 = 1; + if ((w < 1) || (h < 1) || (!srs) || (!drs)) return; + ident = 1 << 16; + /* FIXME: why do we need to change the identity matrix if the src surface + * is 1 bit deep? + */ + if (srs->depth == 1) ident = 1; + xf.matrix11 = ident; xf.matrix12 = 0; xf.matrix13 = 0; xf.matrix21 = 0; - xf.matrix22 = 1; + xf.matrix22 = ident; xf.matrix23 = 0; xf.matrix31 = 0; xf.matrix32 = 0; - xf.matrix33 = 1; + xf.matrix33 = ident; XCBRenderSetPictureTransform(srs->xcbinf->conn, srs->pic, xf); value_mask = XCBRenderCPClipMask; @@ -566,13 +615,13 @@ CARD32 value_list[1]; int r, g, b, a, aa, op; - if ((w <= 0) || (h <= 0)) return; + if ((w < 1) || (h < 1) || (!rs) || (!dc)) return; a = (dc->col.col >> 24) & 0xff; if (a == 0) return; r = (dc->col.col >> 16) & 0xff; g = (dc->col.col >> 8 ) & 0xff; b = (dc->col.col ) & 0xff; - aa = a +1; + aa = a + 1; r = (r * aa) >> 8; g = (g * aa) >> 8; b = (b * aa) >> 8; @@ -601,6 +650,7 @@ /* CARD32 value_list[1]; */ /* int op; */ +/* if ((!rs) || (!dc)) return; */ /* op = XCBRenderPictOpSrc; */ /* value_mask = XCBRenderCPClipMask; */ /* value_list[0] = 0; */ @@ -660,13 +710,13 @@ /* CARD32 value_list[1]; */ /* int op; */ -/* op = XCBRenderPictOpSrc; */ +/* if ((!rs) || (!dc)) return; */ /* num = 0; */ /* for (pt = points; pt; pt = (RGBA_Polygon_Point *)(((Evas_Object_List *)pt)->next)) num++; */ /* if (num < 3) return; */ /* a = (dc->col.col >> 24) & 0xff; */ /* if (a == 0) return; */ -/* if (a < 0xff) op = XCBRenderPictOpOver; */ +/* op = XCBRenderPictOpOver; */ /* r = (dc->col.col >> 16) & 0xff; */ /* g = (dc->col.col >> 8 ) & 0xff; */ /* b = (dc->col.col ) & 0xff; */ ------------------------------------------------------------------------- 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