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