c5906b4531dccf6a7cadc079cd843508fe3e5804
[platform/upstream/efl.git] / src / lib / ecore_x / xlib / ecore_x_damage.c
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
14 _ecore_x_damage_init(void)
15 {
16 #ifdef ECORE_XDAMAGE
17    _damage_major = 1;
18    _damage_minor = 0;
19
20    LOGFN(__FILE__, __LINE__, __FUNCTION__);
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
32 ecore_x_damage_query(void)
33 {
34    return _damage_available;
35 }
36
37 EAPI Ecore_X_Damage
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(__FILE__, __LINE__, __FUNCTION__);
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
55 ecore_x_damage_free(Ecore_X_Damage damage)
56 {
57 #ifdef ECORE_XDAMAGE
58    LOGFN(__FILE__, __LINE__, __FUNCTION__);
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
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(__FILE__, __LINE__, __FUNCTION__);
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