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

Reply via email to