tizen 2.4 release
[framework/uifw/e17-mod-tizen-comp.git] / src / e_mod_comp_util.h
1 #ifdef E_TYPEDEFS
2 #else
3 #ifndef E_MOD_COMP_UTIL_H
4 #define E_MOD_COMP_UTIL_H
5
6 /* check whether region of given window is equal to root */
7 #ifdef _F_USE_BORDER_TRANSFORM_
8
9 #define TRANSFORM_EQUAL(bd, x_, y_, w_, h_) \
10    (((bd) && ((bd)->transform.enable)) && \
11     (((bd)->transform.border_geometry.x == (x_)) && \
12      ((bd)->transform.border_geometry.y == (y_)) && \
13      ((bd)->transform.border_geometry.w == (w_)) && \
14      ((bd)->transform.border_geometry.h == (h_))))
15
16 #define CW_EQUAL(cw_, x_, y_, w_, h_) \
17    ((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable)))) && \
18     (((cw_)->x == (x_)) && \
19      ((cw_)->y == (y_)) && \
20      ((cw_)->w == (w_)) && \
21      ((cw_)->h == (h_))))
22
23 #define TRANSFORM_EQUAL_SIZE(bd, w_, h_) \
24    (((bd) && ((bd)->transform.enable)) && \
25     (((bd)->transform.border_geometry.w == (w_)) && \
26      ((bd)->transform.border_geometry.h == (h_))))
27
28 #define CW_EQUAL_SIZE(cw_, w_, h_) \
29    (((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable))))) && \
30     (((cw_)->w == (w_)) && \
31      ((cw_)->h == (h_))))
32
33 #define TRANSFORM_BIGGER(bd, x_, y_, w_, h_) \
34    (((bd) && ((bd)->transform.enable)) && \
35     (((bd)->transform.border_geometry.x <= (x_)) && \
36      ((bd)->transform.border_geometry.y <= (y_)) && \
37      ((bd)->transform.border_geometry.x + (bd)->transform.border_geometry.w >= (x_) + (w_)) && \
38      ((bd)->transform.border_geometry.y + (bd)->transform.border_geometry.h >= (y_) + (h_))))
39
40 #define CW_BIGGER(cw_, x_, y_, w_, h_) \
41    (((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable))))) && \
42     (((cw_)->x <= (x_)) && \
43      ((cw_)->y <= (y_)) && \
44      ((cw_)->x + (cw_)->w >= (x_) + (w_)) && \
45      ((cw_)->y + (cw_)->h >= (y_) + (h_))))
46
47 #define TRANSFORM_INTERSECTS(bd, x_, y_, w_, h_) \
48    (((bd) && ((bd)->transform.enable)) && \
49     ((((bd)->transform.border_geometry.x) < ((x_) + (w_))) && \
50      ((bd)->transform.border_geometry.y) < ((y_) + (h_)) && \
51      (((bd)->transform.border_geometry.x + (bd)->transform.border_geometry.w) > (x_)) && \
52      (((bd)->transform.border_geometry.y + (bd)->transform.border_geometry.h) > (y_))))
53
54 #define CW_INTERSECTS(cw_, x_, y_, w_, h_) \
55    (((!((cw_)->bd) || (((cw_)->bd) && (!(((cw_)->bd)->transform.enable))))) && \
56     (((cw_->x) < ((x_) + (w_))) && \
57      ((cw_->y) < ((y_) + (h_))) && \
58      (((cw_->x) + (cw_->w)) > (x_)) && \
59      (((cw_->y) + (cw_->h)) > (y_))))
60 #else
61
62 #define TRANSFORM_EQUAL(bd, x_, y_, w_, h_)      (0)
63 #define TRANSFORM_EQUAL_SIZE(bd, w_, h_)         (0)
64 #define TRANSFORM_BIGGER(bd, x_, y_, w_, h_)     (0)
65 #define TRANSFORM_INTERSECTS(bd, x_, y_, w_, h_) (0)
66
67 #define CW_EQUAL(cw_, x_, y_, w_, h_) \
68    (((cw_)->x == (x_)) && \
69     ((cw_)->y == (y_)) && \
70     ((cw_)->w == (w_)) && \
71     ((cw_)->h == (h_)))
72
73 #define CW_EQUAL_SIZE(cw_, w_, h_) \
74    (((cw_)->w == (w_)) && \
75     ((cw_)->h == (h_)))
76
77 #define CW_BIGGER(cw_, x_, y_, w_, h_) \
78    (((cw_)->x <= (x_)) && \
79     ((cw_)->y <= (y_)) && \
80     ((cw_)->x + (cw_)->w >= (x_) + (w_)) && \
81     ((cw_)->y + (cw_)->h >= (y_) + (h_)))
82
83 #define CW_INTERSECTS(cw, x_, y_, w_, h_) \
84    (((cw->x) < ((x_) + (w_))) && \
85     ((cw->y) < ((y_) + (h_))) && \
86     (((cw->x) + (cw->w)) > (x_)) && \
87     (((cw->y) + (cw->h)) > (y_)))
88
89 #endif /* end of _F_USE_BORDER_TRANSFORM_ */
90
91 #define REGION_EQUAL_TO_ROOT(a)       \
92    (CW_EQUAL((a), 0, 0, ((a)->c->man->w), ((a)->c->man->h)) || \
93     TRANSFORM_EQUAL(((a)->bd), 0, 0, ((a)->c->man->w), ((a)->c->man->h)))
94
95 #define SIZE_EQUAL_TO_ROOT(a)         \
96    (CW_EQUAL_SIZE((a), ((a)->c->man->w), ((a)->c->man->h)) || \
97     TRANSFORM_EQUAL_SIZE(((a)->bd), ((a)->c->man->w), ((a)->c->man->h)))
98
99 #define REGION_EQUAL_TO_ZONE(a, z)    \
100    (CW_EQUAL((a), ((z)->x), ((z)->y), ((z)->w), ((z)->h)) || \
101     TRANSFORM_EQUAL(((a)->bd), ((z)->x), ((z)->y), ((z)->w), ((z)->h)))
102
103 #define REGION_BIGGER_THAN_ZONE(a, z)    \
104    (CW_BIGGER((a), ((z)->x), ((z)->y), ((z)->w), ((z)->h)) || \
105     TRANSFORM_BIGGER(((a)->bd), ((z)->x), ((z)->y), ((z)->w), ((z)->h)))
106
107 # define E_INTERSECTS_EFFECT(cw, xx, yy, ww, hh) \
108    (CW_INTERSECTS((cw), (xx), (yy), (ww), (hh)) || \
109     TRANSFORM_INTERSECTS(((cw)->bd), (xx), (yy), (ww), (hh)))
110
111 #define REGION_EQUAL_TO_CANVAS(a, c) \
112    ((((a)->x) == ((c)->x)) &&         \
113     (((a)->y) == ((c)->y)) &&         \
114     (((a)->w) == ((c)->w)) &&         \
115     (((a)->h) == ((c)->h)))
116
117 #define STATE_INSET_CHECK(a) \
118    ((a->bd) && \
119     ((a->bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) || \
120      (a->bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_ASSISTANT_MENU)))
121
122 #define CLASS_ICONIC_CHECK(a) \
123    ((a->bd) && \
124     (a->bd->client.icccm.class) && \
125     (!strcmp(a->bd->client.icccm.class, "ICON_WIN")))
126
127 #define PARENT_FLOAT_CHECK(a) \
128       ((a->bd) && \
129        (a->bd->parent) && \
130        ((a->bd->parent->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) ||\
131         (a->bd->parent->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_ASSISTANT_MENU)))
132
133 EAPI void           e_mod_comp_util_set(E_Comp *c, E_Manager *man);
134 EAPI E_Comp        *e_mod_comp_util_get(void);
135 EAPI Eina_Bool      e_mod_comp_util_grab_key_set(Eina_Bool grab);
136 EAPI Eina_Bool      e_mod_comp_util_grab_home_key_set(Eina_Bool grab);
137 EAPI Eina_Bool      e_mod_comp_util_screen_input_region_set(Eina_Bool set);
138 EAPI E_Comp_Win    *e_mod_comp_util_win_nocomp_get(E_Comp *c, E_Zone *zone);
139 #if USE_NOCOMP_DISPOSE
140 EAPI E_Comp_Win    *e_mod_comp_util_win_nocomp_end_get(E_Comp *c, E_Zone *zone);
141 #endif
142 EAPI E_Comp_Win    *e_mod_comp_util_win_normal_get(E_Comp_Win *cw, Eina_Bool opaque);
143 EAPI E_Comp_Win    *e_mod_comp_util_win_home_get(E_Comp_Win *cw);
144 EAPI E_Comp_Win    *e_mod_comp_util_win_below_get(E_Comp_Win *cw, Eina_Bool normal_check, Eina_Bool visible_check);
145 EAPI Eina_Bool      e_mod_comp_util_win_below_check(E_Comp_Win *cw, E_Comp_Win *cw2);
146 EAPI Eina_Bool      e_mod_comp_util_win_visible_get(E_Comp_Win *cw, Eina_Bool alpha_check);
147 EAPI Eina_Bool      e_mod_comp_util_win_visible_below_get(E_Comp_Win *cw, E_Comp_Win *cw2);
148 EAPI Ecore_X_Window e_mod_comp_util_client_xid_get(E_Comp_Win *cw);
149 EAPI void           e_mod_comp_util_fb_visible_set(Eina_Bool set);
150 EAPI void           e_mod_comp_util_rr_prop_set(Ecore_X_Atom atom, const char* state);
151 EAPI Ecore_X_Pixmap e_mod_comp_util_copied_pixmap_get(E_Comp_Win *cw);
152
153 #endif
154 #endif