forked from enlightenment/enlightenment
comp now works in 16/15bpp - in theory even in 8bpp and monochrome :)
SVN revision: 76941
This commit is contained in:
parent
af16f102d0
commit
84fe2c9fcc
|
@ -93,6 +93,7 @@ struct _E_Comp_Win
|
||||||
Ecore_X_Pixmap pixmap; // the compositing pixmap
|
Ecore_X_Pixmap pixmap; // the compositing pixmap
|
||||||
Ecore_X_Damage damage; // damage region
|
Ecore_X_Damage damage; // damage region
|
||||||
Ecore_X_Visual vis; // window visual
|
Ecore_X_Visual vis; // window visual
|
||||||
|
Ecore_X_Colormap cmap; // colormap of window
|
||||||
int depth; // window depth
|
int depth; // window depth
|
||||||
Evas_Object *obj; // composite object
|
Evas_Object *obj; // composite object
|
||||||
Evas_Object *shobj; // shadow object
|
Evas_Object *shobj; // shadow object
|
||||||
|
@ -759,44 +760,100 @@ _e_mod_comp_win_update(E_Comp_Win *cw)
|
||||||
{
|
{
|
||||||
if (cw->xim)
|
if (cw->xim)
|
||||||
{
|
{
|
||||||
unsigned int *pix;
|
if (ecore_x_image_is_argb32_get(cw->xim))
|
||||||
|
|
||||||
pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
|
|
||||||
evas_object_image_data_set(cw->obj, pix);
|
|
||||||
evas_object_image_size_set(cw->obj, cw->pw, cw->ph);
|
|
||||||
EINA_LIST_FOREACH(cw->obj_mirror, l, o)
|
|
||||||
{
|
{
|
||||||
evas_object_image_data_set(o, pix);
|
unsigned int *pix;
|
||||||
evas_object_image_size_set(o, cw->pw, cw->ph);
|
|
||||||
}
|
pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
|
||||||
|
evas_object_image_data_set(cw->obj, pix);
|
||||||
e_mod_comp_update_clear(cw->up);
|
evas_object_image_size_set(cw->obj, cw->pw, cw->ph);
|
||||||
for (i = 0; r[i].w > 0; i++)
|
EINA_LIST_FOREACH(cw->obj_mirror, l, o)
|
||||||
{
|
|
||||||
int x, y, w, h;
|
|
||||||
|
|
||||||
x = r[i].x; y = r[i].y;
|
|
||||||
w = r[i].w; h = r[i].h;
|
|
||||||
if (!ecore_x_image_get(cw->xim, cw->pixmap, x, y, x, y, w, h))
|
|
||||||
{
|
{
|
||||||
DBG("UPDATE [0x%x] %i %i %ix%i FAIL!!!!!!!!!!!!!!!!!\n", cw->win, x, y, w, h);
|
evas_object_image_data_set(o, pix);
|
||||||
e_mod_comp_update_add(cw->up, x, y, w, h);
|
evas_object_image_size_set(o, cw->pw, cw->ph);
|
||||||
cw->update = 1;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
e_mod_comp_update_clear(cw->up);
|
||||||
|
for (i = 0; r[i].w > 0; i++)
|
||||||
{
|
{
|
||||||
// why do we neeed these 2? this smells wrong
|
int x, y, w, h;
|
||||||
pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
|
|
||||||
DBG("UPDATE [0x%x] %i %i %ix%i -- pix = %p\n", cw->win, x, y, w, h, pix);
|
x = r[i].x; y = r[i].y;
|
||||||
evas_object_image_data_set(cw->obj, pix);
|
w = r[i].w; h = r[i].h;
|
||||||
evas_object_image_data_update_add(cw->obj, x, y, w, h);
|
if (!ecore_x_image_get(cw->xim, cw->pixmap, x, y, x, y, w, h))
|
||||||
EINA_LIST_FOREACH(cw->obj_mirror, l, o)
|
|
||||||
{
|
{
|
||||||
evas_object_image_data_set(o, pix);
|
DBG("UPDATE [0x%x] %i %i %ix%i FAIL!!!!!!!!!!!!!!!!!\n", cw->win, x, y, w, h);
|
||||||
evas_object_image_data_update_add(o, x, y, w, h);
|
e_mod_comp_update_add(cw->up, x, y, w, h);
|
||||||
|
cw->update = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// why do we neeed these 2? this smells wrong
|
||||||
|
pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
|
||||||
|
DBG("UPDATE [0x%x] %i %i %ix%i -- pix = %p\n", cw->win, x, y, w, h, pix);
|
||||||
|
evas_object_image_data_set(cw->obj, pix);
|
||||||
|
evas_object_image_data_update_add(cw->obj, x, y, w, h);
|
||||||
|
EINA_LIST_FOREACH(cw->obj_mirror, l, o)
|
||||||
|
{
|
||||||
|
evas_object_image_data_set(o, pix);
|
||||||
|
evas_object_image_data_update_add(o, x, y, w, h);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned int *pix;
|
||||||
|
int stride;
|
||||||
|
|
||||||
|
evas_object_image_size_set(cw->obj, cw->pw, cw->ph);
|
||||||
|
pix = evas_object_image_data_get(cw->obj, EINA_TRUE);
|
||||||
|
stride = evas_object_image_stride_get(cw->obj);
|
||||||
|
EINA_LIST_FOREACH(cw->obj_mirror, l, o)
|
||||||
|
{
|
||||||
|
evas_object_image_data_set(o, pix);
|
||||||
|
evas_object_image_size_set(o, cw->pw, cw->ph);
|
||||||
|
}
|
||||||
|
|
||||||
|
e_mod_comp_update_clear(cw->up);
|
||||||
|
for (i = 0; r[i].w > 0; i++)
|
||||||
|
{
|
||||||
|
int x, y, w, h;
|
||||||
|
|
||||||
|
x = r[i].x; y = r[i].y;
|
||||||
|
w = r[i].w; h = r[i].h;
|
||||||
|
if (!ecore_x_image_get(cw->xim, cw->pixmap, x, y, x, y, w, h))
|
||||||
|
{
|
||||||
|
DBG("UPDATE [0x%x] %i %i %ix%i FAIL!!!!!!!!!!!!!!!!!\n", cw->win, x, y, w, h);
|
||||||
|
e_mod_comp_update_add(cw->up, x, y, w, h);
|
||||||
|
cw->update = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned int *srcpix;
|
||||||
|
int srcbpp = 0, srcbpl = 0;
|
||||||
|
// why do we neeed these 2? this smells wrong
|
||||||
|
srcpix = ecore_x_image_data_get
|
||||||
|
(cw->xim, &srcbpl, NULL, &srcbpp);
|
||||||
|
ecore_x_image_to_argb_convert(srcpix,
|
||||||
|
srcbpp,
|
||||||
|
srcbpl,
|
||||||
|
cw->cmap,
|
||||||
|
cw->vis,
|
||||||
|
x, y, w, h,
|
||||||
|
pix,
|
||||||
|
stride,
|
||||||
|
x, y);
|
||||||
|
DBG("UPDATE [0x%x] %i %i %ix%i -- pix = %p\n", cw->win, x, y, w, h, pix);
|
||||||
|
evas_object_image_data_update_add(cw->obj, x, y, w, h);
|
||||||
|
EINA_LIST_FOREACH(cw->obj_mirror, l, o)
|
||||||
|
{
|
||||||
|
evas_object_image_data_update_add(o, x, y, w, h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
evas_object_image_data_set(cw->obj, pix);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
free(r);
|
free(r);
|
||||||
if (cw->shaped)
|
if (cw->shaped)
|
||||||
|
@ -1815,10 +1872,19 @@ _e_mod_comp_win_mirror_add(E_Comp_Win *cw)
|
||||||
}
|
}
|
||||||
else if (cw->xim)
|
else if (cw->xim)
|
||||||
{
|
{
|
||||||
pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
|
if (ecore_x_image_is_argb32_get(cw->xim))
|
||||||
evas_object_image_data_set(o, pix);
|
{
|
||||||
evas_object_image_size_set(o, w, h);
|
pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
|
||||||
evas_object_image_data_set(o, pix);
|
evas_object_image_data_set(o, pix);
|
||||||
|
evas_object_image_size_set(o, w, h);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pix = evas_object_image_data_get(cw->obj, EINA_TRUE);
|
||||||
|
evas_object_image_data_set(o, pix);
|
||||||
|
evas_object_image_size_set(o, w, h);
|
||||||
|
evas_object_image_data_set(cw->obj, pix);
|
||||||
|
}
|
||||||
evas_object_image_data_update_add(o, 0, 0, w, h);
|
evas_object_image_data_update_add(o, 0, 0, w, h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1897,12 +1963,13 @@ _e_mod_comp_win_add(E_Comp *c,
|
||||||
if ((!att.input_only) &&
|
if ((!att.input_only) &&
|
||||||
((att.depth != 24) && (att.depth != 32)))
|
((att.depth != 24) && (att.depth != 32)))
|
||||||
{
|
{
|
||||||
printf("WARNING: window 0x%x not 24/32bpp -> %ibpp\n", cw->win, att.depth);
|
// printf("WARNING: window 0x%x not 24/32bpp -> %ibpp\n", cw->win, att.depth);
|
||||||
cw->invalid = 1;
|
// cw->invalid = 1;
|
||||||
}
|
}
|
||||||
cw->input_only = att.input_only;
|
cw->input_only = att.input_only;
|
||||||
cw->override = att.override;
|
cw->override = att.override;
|
||||||
cw->vis = att.visual;
|
cw->vis = att.visual;
|
||||||
|
cw->cmap = att.colormap;
|
||||||
cw->depth = att.depth;
|
cw->depth = att.depth;
|
||||||
cw->argb = ecore_x_window_argb_get(cw->win);
|
cw->argb = ecore_x_window_argb_get(cw->win);
|
||||||
eina_hash_add(windows, e_util_winid_str_get(cw->win), cw);
|
eina_hash_add(windows, e_util_winid_str_get(cw->win), cw);
|
||||||
|
@ -2928,6 +2995,7 @@ _e_mod_comp_override_timed_pop(E_Comp *c)
|
||||||
ecore_timer_add(5.0, _e_mod_comp_override_expire, c);
|
ecore_timer_add(5.0, _e_mod_comp_override_expire, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* here for completeness
|
||||||
static void
|
static void
|
||||||
_e_mod_comp_override_pop(E_Comp *c)
|
_e_mod_comp_override_pop(E_Comp *c)
|
||||||
{
|
{
|
||||||
|
@ -2938,6 +3006,7 @@ _e_mod_comp_override_pop(E_Comp *c)
|
||||||
if (c->nocomp_want) _e_mod_comp_cb_nocomp_begin(c);
|
if (c->nocomp_want) _e_mod_comp_cb_nocomp_begin(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_mod_comp_override_push(E_Comp *c)
|
_e_mod_comp_override_push(E_Comp *c)
|
||||||
|
@ -3586,6 +3655,7 @@ _e_mod_comp_add(E_Manager *man)
|
||||||
|
|
||||||
if ((att.depth != 24) && (att.depth != 32))
|
if ((att.depth != 24) && (att.depth != 32))
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
e_util_dialog_internal
|
e_util_dialog_internal
|
||||||
(_("Compositor Error"),
|
(_("Compositor Error"),
|
||||||
_("Your screen is not in 24/32bit display mode.<br>"
|
_("Your screen is not in 24/32bit display mode.<br>"
|
||||||
|
@ -3594,6 +3664,7 @@ _e_mod_comp_add(E_Manager *man)
|
||||||
ecore_x_composite_render_window_disable(c->win);
|
ecore_x_composite_render_window_disable(c->win);
|
||||||
free(c);
|
free(c);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->man->num == 0) e_alert_composite_win = c->win;
|
if (c->man->num == 0) e_alert_composite_win = c->win;
|
||||||
|
|
|
@ -71,7 +71,7 @@ wizard_page_show(E_Wizard_Page *pg)
|
||||||
|
|
||||||
memset((&att), 0, sizeof(Ecore_X_Window_Attributes));
|
memset((&att), 0, sizeof(Ecore_X_Window_Attributes));
|
||||||
ecore_x_window_attributes_get(ecore_x_window_root_first_get(), &att);
|
ecore_x_window_attributes_get(ecore_x_window_root_first_get(), &att);
|
||||||
if ((att.depth != 24) && (att.depth != 32)) return 0;
|
if ((att.depth <= 8)) return 0;
|
||||||
|
|
||||||
ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 320, 240);
|
ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 320, 240);
|
||||||
if (ee)
|
if (ee)
|
||||||
|
|
Loading…
Reference in New Issue