1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif /* ifdef HAVE_CONFIG_H */
4
5 #include "ecore_x_private.h"
6 #include "Ecore_X.h"
7
8 static Eina_Bool _damage_available = EINA_FALSE;
9 #ifdef ECORE_XDAMAGE
10 static int _damage_major, _damage_minor;
11 #endif /* ifdef ECORE_XDAMAGE */
12
13 void
_ecore_x_damage_init(void)14 _ecore_x_damage_init(void)
15 {
16 #ifdef ECORE_XDAMAGE
17 _damage_major = 1;
18 _damage_minor = 0;
19
20 LOGFN;
21 if (XDamageQueryVersion(_ecore_x_disp, &_damage_major, &_damage_minor))
22 _damage_available = EINA_TRUE;
23 else
24 _damage_available = EINA_FALSE;
25
26 #else /* ifdef ECORE_XDAMAGE */
27 _damage_available = EINA_FALSE;
28 #endif /* ifdef ECORE_XDAMAGE */
29 }
30
31 EAPI Eina_Bool
ecore_x_damage_query(void)32 ecore_x_damage_query(void)
33 {
34 return _damage_available;
35 }
36
37 EAPI Ecore_X_Damage
ecore_x_damage_new(Ecore_X_Drawable d,Ecore_X_Damage_Report_Level level)38 ecore_x_damage_new(Ecore_X_Drawable d,
39 Ecore_X_Damage_Report_Level level)
40 {
41 #ifdef ECORE_XDAMAGE
42 Ecore_X_Damage damage;
43
44 LOGFN;
45 EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, 0);
46 damage = XDamageCreate(_ecore_x_disp, d, level);
47 if (_ecore_xlib_sync) ecore_x_sync();
48 return damage;
49 #else /* ifdef ECORE_XDAMAGE */
50 return 0;
51 #endif /* ifdef ECORE_XDAMAGE */
52 }
53
54 EAPI void
ecore_x_damage_free(Ecore_X_Damage damage)55 ecore_x_damage_free(Ecore_X_Damage damage)
56 {
57 #ifdef ECORE_XDAMAGE
58 LOGFN;
59 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
60 XDamageDestroy(_ecore_x_disp, damage);
61 #endif /* ifdef ECORE_XDAMAGE */
62 }
63
64 EAPI void
ecore_x_damage_subtract(Ecore_X_Damage damage,Ecore_X_Region repair,Ecore_X_Region parts)65 ecore_x_damage_subtract(Ecore_X_Damage damage,
66 Ecore_X_Region repair,
67 Ecore_X_Region parts)
68 {
69 #ifdef ECORE_XDAMAGE
70 LOGFN;
71 EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
72 XDamageSubtract(_ecore_x_disp, damage, repair, parts);
73 if (_ecore_xlib_sync) ecore_x_sync();
74 #endif /* ifdef ECORE_XDAMAGE */
75 }
76
77