forked from enlightenment/efl
avoid damage now has an enum (compatible with the old way at ABI though), so
you can either handle it via exposes, or native system methods (bg pixmaps) SVN revision: 31944
This commit is contained in:
parent
e6aa181b56
commit
6a9f664bea
|
@ -69,6 +69,13 @@ typedef enum _Ecore_Evas_Engine_Type
|
|||
ECORE_EVAS_ENGINE_SDL
|
||||
} Ecore_Evas_Engine_Type;
|
||||
|
||||
typedef enum _Ecore_Evas_Avoid_Damage_Type
|
||||
{
|
||||
ECORE_EVAS_AVOID_DAMAGE_NONE = 0,
|
||||
ECORE_EVAS_AVOID_DAMAGE_EXPOSE = 1,
|
||||
ECORE_EVAS_AVOID_DAMAGE_BUILT_IN = 2
|
||||
} Ecore_Evas_Avoid_Damage_Type;
|
||||
|
||||
#ifndef _ECORE_X_H
|
||||
#define _ECORE_X_WINDOW_PREDEF
|
||||
typedef unsigned int Ecore_X_Window;
|
||||
|
@ -217,8 +224,8 @@ EAPI void ecore_evas_maximized_set(Ecore_Evas *ee, int on);
|
|||
EAPI int ecore_evas_maximized_get(Ecore_Evas *ee);
|
||||
EAPI void ecore_evas_fullscreen_set(Ecore_Evas *ee, int on);
|
||||
EAPI int ecore_evas_fullscreen_get(Ecore_Evas *ee);
|
||||
EAPI void ecore_evas_avoid_damage_set(Ecore_Evas *ee, int on);
|
||||
EAPI int ecore_evas_avoid_damage_get(Ecore_Evas *ee);
|
||||
EAPI void ecore_evas_avoid_damage_set(Ecore_Evas *ee, Ecore_Evas_Avoid_Damage_Type on);
|
||||
EAPI Ecore_Evas_Avoid_Damage_Type ecore_evas_avoid_damage_get(Ecore_Evas *ee);
|
||||
EAPI void ecore_evas_withdrawn_set(Ecore_Evas *ee, int withdrawn);
|
||||
EAPI int ecore_evas_withdrawn_get(Ecore_Evas *ee);
|
||||
EAPI void ecore_evas_sticky_set(Ecore_Evas *ee, int sticky);
|
||||
|
|
|
@ -1625,7 +1625,7 @@ ecore_evas_fullscreen_get(Ecore_Evas *ee)
|
|||
* On expose events it will copy from the pixmap to the window.
|
||||
*/
|
||||
EAPI void
|
||||
ecore_evas_avoid_damage_set(Ecore_Evas *ee, int on)
|
||||
ecore_evas_avoid_damage_set(Ecore_Evas *ee, Ecore_Evas_Avoid_Damage_Type on)
|
||||
{
|
||||
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||
{
|
||||
|
@ -1643,7 +1643,7 @@ ecore_evas_avoid_damage_set(Ecore_Evas *ee, int on)
|
|||
* @return 1 if @p ee avoids damage, 0 if not.
|
||||
*
|
||||
*/
|
||||
EAPI int
|
||||
EAPI Ecore_Evas_Avoid_Damage_Type
|
||||
ecore_evas_avoid_damage_get(Ecore_Evas *ee)
|
||||
{
|
||||
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||
|
@ -1652,7 +1652,7 @@ ecore_evas_avoid_damage_get(Ecore_Evas *ee)
|
|||
"ecore_evas_avoid_damage_get");
|
||||
return 0;
|
||||
}
|
||||
return ee->prop.avoid_damage ? 1:0;
|
||||
return ee->prop.avoid_damage;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -234,13 +234,13 @@ struct _Ecore_Evas
|
|||
} hot;
|
||||
} cursor;
|
||||
int layer;
|
||||
unsigned char avoid_damage;
|
||||
char focused : 1;
|
||||
char iconified : 1;
|
||||
char borderless : 1;
|
||||
char override : 1;
|
||||
char maximized : 1;
|
||||
char fullscreen : 1;
|
||||
char avoid_damage : 1;
|
||||
char withdrawn : 1;
|
||||
char sticky : 1;
|
||||
char request_pos : 1;
|
||||
|
|
|
@ -158,13 +158,16 @@ _ecore_evas_x_render(Ecore_Evas *ee)
|
|||
|
||||
updates = evas_render_updates(ee->evas);
|
||||
#if 0
|
||||
for (l = updates; l; l = l->next)
|
||||
// if (ee->w == 640)
|
||||
{
|
||||
Evas_Rectangle *r;
|
||||
|
||||
r = l->data;
|
||||
printf("DMG render [%p] %ix%i, [%i %i %ix%i]\n",
|
||||
ee, ee->w, ee->h, r->x, r->y, r->w, r->h);
|
||||
for (l = updates; l; l = l->next)
|
||||
{
|
||||
Evas_Rectangle *r;
|
||||
|
||||
r = l->data;
|
||||
printf(" UP render [%p] %ix%i, [%i %i %ix%i]\n",
|
||||
ee, ee->w, ee->h, r->x, r->y, r->w, r->h);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (ee->engine.x.using_bg_pixmap)
|
||||
|
@ -232,6 +235,10 @@ _ecore_evas_x_render(Ecore_Evas *ee)
|
|||
}
|
||||
if (ee->engine.x.damages)
|
||||
{
|
||||
#if 0
|
||||
// if (ee->w == 640)
|
||||
printf(" --COPY PIXMAP\n");
|
||||
#endif
|
||||
/* if we have a damage pixmap - we can avoid exposures by
|
||||
* disabling them just for setting the mask */
|
||||
ecore_x_event_mask_set(ee->engine.x.win,
|
||||
|
@ -309,17 +316,20 @@ _ecore_evas_x_render(Ecore_Evas *ee)
|
|||
if (updates)
|
||||
{
|
||||
#if 0
|
||||
Evas_List *l;
|
||||
|
||||
printf("RENDER [%p] [%i] %ix%i\n",
|
||||
ee, ee->visible, ee->w, ee->h);
|
||||
for (l = updates; l; l = l->next)
|
||||
// if (ee->w == 640)
|
||||
{
|
||||
Evas_Rectangle *r;
|
||||
|
||||
r = l->data;
|
||||
printf(" render [%i %i %ix%i]\n",
|
||||
r->x, r->y, r->w, r->h);
|
||||
Evas_List *l;
|
||||
|
||||
printf("RENDER [%p] [%i] %ix%i\n",
|
||||
ee, ee->visible, ee->w, ee->h);
|
||||
for (l = updates; l; l = l->next)
|
||||
{
|
||||
Evas_Rectangle *r;
|
||||
|
||||
r = l->data;
|
||||
printf(" render [%i %i %ix%i]\n",
|
||||
r->x, r->y, r->w, r->h);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
evas_render_updates_free(updates);
|
||||
|
@ -1043,8 +1053,11 @@ _ecore_evas_x_event_window_configure(void *data __UNUSED__, int type __UNUSED__,
|
|||
}
|
||||
if (ee->prop.avoid_damage)
|
||||
{
|
||||
int pdam;
|
||||
|
||||
pdam = ecore_evas_avoid_damage_get(ee);
|
||||
ecore_evas_avoid_damage_set(ee, 0);
|
||||
ecore_evas_avoid_damage_set(ee, 1);
|
||||
ecore_evas_avoid_damage_set(ee, pdam);
|
||||
}
|
||||
if (ee->shaped)
|
||||
_ecore_evas_x_resize_shape(ee);
|
||||
|
@ -1455,8 +1468,11 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
|
|||
}
|
||||
if (ee->prop.avoid_damage)
|
||||
{
|
||||
int pdam;
|
||||
|
||||
pdam = ecore_evas_avoid_damage_get(ee);
|
||||
ecore_evas_avoid_damage_set(ee, 0);
|
||||
ecore_evas_avoid_damage_set(ee, 1);
|
||||
ecore_evas_avoid_damage_set(ee, pdam);
|
||||
}
|
||||
if (ee->shaped)
|
||||
{
|
||||
|
@ -1503,8 +1519,11 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h)
|
|||
}
|
||||
if (ee->prop.avoid_damage)
|
||||
{
|
||||
int pdam;
|
||||
|
||||
pdam = ecore_evas_avoid_damage_get(ee);
|
||||
ecore_evas_avoid_damage_set(ee, 0);
|
||||
ecore_evas_avoid_damage_set(ee, 1);
|
||||
ecore_evas_avoid_damage_set(ee, pdam);
|
||||
}
|
||||
if (ee->shaped)
|
||||
{
|
||||
|
@ -2351,9 +2370,7 @@ _ecore_evas_x_fullscreen_set(Ecore_Evas *ee, int on)
|
|||
static void
|
||||
_ecore_evas_x_avoid_damage_set(Ecore_Evas *ee, int on)
|
||||
{
|
||||
if (((ee->prop.avoid_damage) && (on)) ||
|
||||
((!ee->prop.avoid_damage) && (!on)))
|
||||
return;
|
||||
if (ee->prop.avoid_damage == on) return;
|
||||
if (!strcmp(ee->driver, "gl_x11")) return;
|
||||
|
||||
if ((!strcmp(ee->driver, "software_x11")) || (!strcmp(ee->driver, "software_xcb")))
|
||||
|
@ -2382,6 +2399,12 @@ _ecore_evas_x_avoid_damage_set(Ecore_Evas *ee, int on)
|
|||
evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
|
||||
else
|
||||
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
|
||||
if (ee->prop.avoid_damage == ECORE_EVAS_AVOID_DAMAGE_BUILT_IN)
|
||||
{
|
||||
ee->engine.x.using_bg_pixmap = 1;
|
||||
ecore_x_window_pixmap_set(ee->engine.x.win, ee->engine.x.pmap);
|
||||
ecore_x_window_area_expose(ee->engine.x.win, 0, 0, ee->w, ee->h);
|
||||
}
|
||||
if (ee->engine.x.direct_resize)
|
||||
{
|
||||
/* Turn this off for now
|
||||
|
@ -2398,6 +2421,7 @@ _ecore_evas_x_avoid_damage_set(Ecore_Evas *ee, int on)
|
|||
{
|
||||
ecore_x_window_pixmap_set(ee->engine.x.win, 0);
|
||||
ee->engine.x.using_bg_pixmap = 0;
|
||||
ecore_x_window_area_expose(ee->engine.x.win, 0, 0, ee->w, ee->h);
|
||||
}
|
||||
ee->engine.x.pmap = 0;
|
||||
ee->engine.x.gc = 0;
|
||||
|
@ -2834,9 +2858,11 @@ ecore_evas_software_x11_direct_resize_set(Ecore_Evas *ee, int on)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* turn this off too- bg pixmap is controlled by avoid damage directly
|
||||
ee->engine.x.using_bg_pixmap = 0;
|
||||
ecore_x_window_pixmap_set(ee->engine.x.win, 0);
|
||||
ecore_x_window_area_expose(ee->engine.x.win, 0, 0, ee->w, ee->h);
|
||||
*/
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
@ -3487,9 +3513,11 @@ ecore_evas_software_x11_16_direct_resize_set(Ecore_Evas *ee, int on)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* turn this off too- bg pixmap is controlled by avoid damage directly
|
||||
ee->engine.x.using_bg_pixmap = 0;
|
||||
ecore_x_window_pixmap_set(ee->engine.x.win, 0);
|
||||
ecore_x_window_area_expose(ee->engine.x.win, 0, 0, ee->w, ee->h);
|
||||
*/
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
|
Loading…
Reference in New Issue