diff --git a/src/modules/comp/e_mod_comp.c b/src/modules/comp/e_mod_comp.c index 47c238f36..77fb1f7a6 100644 --- a/src/modules/comp/e_mod_comp.c +++ b/src/modules/comp/e_mod_comp.c @@ -297,44 +297,54 @@ _e_mod_comp_win_shape_rectangles_apply(E_Comp_Win *cw) if ((w > 0) && (h > 0)) { pix = evas_object_image_data_get(cw->obj, 1); - spix = calloc(w * h, sizeof(unsigned char)); - if (spix) + if (pix) { - DBG("SHAPE [0x%x] rects %i\n", cw->win, num); - for (i = 0; i < num; i++) + spix = calloc(w * h, sizeof(unsigned char)); + if (spix) { - int rx, ry, rw, rh; - - rx = rects[i].x; ry = rects[i].y; - rw = rects[i].width; rh = rects[i].height; - E_RECTS_CLIP_TO_RECT(rx, ry, rw, rh, 0, 0, w, h); - sp = spix + (w * ry) + rx; - for (py = 0; py < rh; py++) + DBG("SHAPE [0x%x] rects %i\n", cw->win, num); + for (i = 0; i < num; i++) { - for (px = 0; px < rw; px++) + int rx, ry, rw, rh; + + rx = rects[i].x; ry = rects[i].y; + rw = rects[i].width; rh = rects[i].height; + E_RECTS_CLIP_TO_RECT(rx, ry, rw, rh, 0, 0, w, h); + sp = spix + (w * ry) + rx; + for (py = 0; py < rh; py++) { - *sp = 1; sp++; + for (px = 0; px < rw; px++) + { + *sp = 0xff; sp++; + } + sp += w - rw; } - sp += w - rw; } - } - sp = spix; - p = pix; - for (py = 0; py < h; py++) - { - for (px = 0; px < w; px++) + sp = spix; + p = pix; + for (py = 0; py < h; py++) { - if (*sp) *p |= 0xff000000; - else *p = 0x00000000; - sp++; - p++; + for (px = 0; px < w; px++) + { + unsigned int mask, imask; + + mask = ((unsigned int)(*sp)) << 24; + imask = mask >> 8; + imask |= imask >> 8; + imask |= imask >> 8; + *p = mask | (*p & imask); +// if (*sp) *p = 0xff000000 | *p; +// else *p = 0x00000000; + sp++; + p++; + } } + free(spix); } - free(spix); + evas_object_image_data_set(cw->obj, pix); + evas_object_image_alpha_set(cw->obj, 1); + evas_object_image_data_update_add(cw->obj, 0, 0, w, h); } - evas_object_image_data_set(cw->obj, pix); - evas_object_image_alpha_set(cw->obj, 1); - evas_object_image_data_update_add(cw->obj, 0, 0, w, h); } free(rects); } @@ -451,6 +461,8 @@ _e_mod_comp_win_update(E_Comp_Win *cw) } else { + evas_object_image_native_surface_set(cw->obj, NULL); + cw->native = 0; if (!cw->xim) { if (cw->xim = ecore_x_image_new(cw->pw, cw->ph, cw->vis, cw->depth))