forked from enlightenment/enlightenment
work on better shape handling for gl comp
SVN revision: 46231
This commit is contained in:
parent
0826eb6af5
commit
db323e87f9
|
@ -297,44 +297,54 @@ _e_mod_comp_win_shape_rectangles_apply(E_Comp_Win *cw)
|
||||||
if ((w > 0) && (h > 0))
|
if ((w > 0) && (h > 0))
|
||||||
{
|
{
|
||||||
pix = evas_object_image_data_get(cw->obj, 1);
|
pix = evas_object_image_data_get(cw->obj, 1);
|
||||||
spix = calloc(w * h, sizeof(unsigned char));
|
if (pix)
|
||||||
if (spix)
|
|
||||||
{
|
{
|
||||||
DBG("SHAPE [0x%x] rects %i\n", cw->win, num);
|
spix = calloc(w * h, sizeof(unsigned char));
|
||||||
for (i = 0; i < num; i++)
|
if (spix)
|
||||||
{
|
{
|
||||||
int rx, ry, rw, rh;
|
DBG("SHAPE [0x%x] rects %i\n", cw->win, num);
|
||||||
|
for (i = 0; i < num; i++)
|
||||||
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++)
|
|
||||||
{
|
{
|
||||||
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;
|
||||||
sp = spix;
|
p = pix;
|
||||||
p = pix;
|
for (py = 0; py < h; py++)
|
||||||
for (py = 0; py < h; py++)
|
|
||||||
{
|
|
||||||
for (px = 0; px < w; px++)
|
|
||||||
{
|
{
|
||||||
if (*sp) *p |= 0xff000000;
|
for (px = 0; px < w; px++)
|
||||||
else *p = 0x00000000;
|
{
|
||||||
sp++;
|
unsigned int mask, imask;
|
||||||
p++;
|
|
||||||
|
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);
|
free(rects);
|
||||||
}
|
}
|
||||||
|
@ -451,6 +461,8 @@ _e_mod_comp_win_update(E_Comp_Win *cw)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
evas_object_image_native_surface_set(cw->obj, NULL);
|
||||||
|
cw->native = 0;
|
||||||
if (!cw->xim)
|
if (!cw->xim)
|
||||||
{
|
{
|
||||||
if (cw->xim = ecore_x_image_new(cw->pw, cw->ph, cw->vis, cw->depth))
|
if (cw->xim = ecore_x_image_new(cw->pw, cw->ph, cw->vis, cw->depth))
|
||||||
|
|
Loading…
Reference in New Issue