e_desk_area: delegate e_comp_object_lower
[platform/upstream/enlightenment.git] / src / bin / e_comp_object_intern.h
1 #ifndef E_COMP_OBJECT_INTERN_H
2 #define E_COMP_OBJECT_INTERN_H
3
4 #include <wayland-server.h>
5
6 //#ifdef REFACTOR_DESK_AREA
7 typedef struct _E_Comp_Object E_Comp_Object;
8 struct _E_Comp_Object
9 {
10    EINA_INLIST;
11
12    int                  x, y, w, h;  // geometry
13
14    E_Client *ec;
15
16    E_Comp_Object_Frame client_inset;
17    struct
18    {
19       double          start;
20       double          val;
21       int             x, y;
22       E_Direction     dir;
23       Ecore_Animator *anim;
24    } shade;
25
26    Eina_Stringshare   *frame_theme;
27    Eina_Stringshare   *frame_name;
28    Eina_Stringshare   *visibility_effect; //effect when toggling visibility
29
30    E_Comp_Object_Content_Type content_type; // type of e.swallow.content
31
32    Evas_Object         *smart_obj;  // smart object
33    Evas_Object         *clip; // clipper over effect object
34    Evas_Object         *input_obj; // input smart object
35    Evas_Object         *obj;  // composite object
36    Evas_Object         *frame_object; // for client frames
37    Evas_Object         *shobj;  // shadow object
38    Evas_Object         *effect_obj; // effects object
39    Evas_Object         *transform_bg_obj;   // transform backgroung with keep_ratio option
40    struct
41      {
42         int r, g, b, a;
43      } transform_bg_color;
44    Evas_Object         *transform_tranp_obj;// transform transp rect obj
45    Evas_Object         *default_input_obj; // default input object
46    unsigned int         layer; //e_comp_canvas_layer_map(cw->ec->layer)
47    Eina_List           *obj_mirror;  // extra mirror objects
48    Eina_Tiler          *updates; //render update regions
49    Eina_Tiler          *pending_updates; //render update regions which are about to render
50
51    Evas_Native_Surface *ns; //for custom gl rendering
52
53    struct wl_listener   buffer_destroy_listener;
54
55    unsigned int         update_count;  // how many updates have happened to this obj
56
57    unsigned int         opacity;  // opacity set with _NET_WM_WINDOW_OPACITY
58
59    unsigned int         animating;  // it's busy animating
60    unsigned int         failures; //number of consecutive e_pixmap_image_draw() failures
61    unsigned int         force_visible; //number of visible obj_mirror objects
62    Eina_Bool            delete_pending : 1;  // delete pending
63    Eina_Bool            defer_hide : 1;  // flag to get hide to work on deferred hide
64    Eina_Bool            showing : 1;  // object is currently in "show" animation
65    Eina_Bool            hiding : 1;   // object is currently in "hide" animation
66    Eina_Bool            visible : 1;  // is visible
67
68    Eina_Bool            shaped : 1;  // is shaped
69    Eina_Bool            update : 1;  // has updates to fetch
70    Eina_Bool            redirected : 1;  // has updates to fetch
71    Eina_Bool            native : 1;  // native
72
73    Eina_Bool            nocomp : 1;  // nocomp applied
74    Eina_Bool            hwc_need_update : 1;  // this window updated while on e_plane to do hw composite
75    Eina_Bool            real_hid : 1;  // last hide was a real window unmap
76
77    Eina_Bool            effect_set : 1; //effect_obj has a valid group
78    Eina_Bool            effect_running : 1; //effect_obj is playing an animation
79    Eina_Bool            effect_clip : 1; //effect_obj is clipped
80    Eina_Bool            effect_clip_able : 1; //effect_obj will be clipped for effects
81
82    Eina_Bool            updates_exist : 1;
83    Eina_Bool            updates_full : 1; // entire object will be updated
84
85    Eina_Bool            force_move : 1;
86    Eina_Bool            frame_extends : 1; //frame may extend beyond object size
87    Eina_Bool            blanked : 1; //window is rendering blank content (externally composited)
88    Eina_Bool            external_content : 1; // e.swallow.content(obj) is set by external evas object
89    Eina_Bool            user_alpha_set : 1;
90    Eina_Bool            user_alpha : 1;
91
92    struct
93      {
94         Evas_Object         *obj; // mask object: transparent parts of this comp object allow to copy the alpha to current H/W plane.
95         Evas_Render_Op       saved_render_op; // saved render operation value to restore when clear a mask.
96      } mask;
97
98    struct
99      {
100         Evas_Object         *obj;
101         int                  w, h;
102      } indicator; //indicator object for internal client
103
104    struct
105      {
106         Evas_Object         *mask_obj;
107         Eina_Bool           enable;
108         Eina_Bool           mask_set;
109         int                 mask_x, mask_y, mask_w, mask_h;
110      } dim;
111
112    Eina_Bool            render_trace : 1; // trace co->obj rendering on canvas
113
114    tbm_surface_h        tbm_surface;
115    E_Comp_Image_Filter  image_filter;
116    Eina_Bool            set_mouse_callbacks;
117
118    struct
119      {
120         int lock;
121         E_Comp_Wl_Buffer_Ref buffer_ref;
122         Eina_Bool            pending_move_set;
123         int                  pending_move_x, pending_move_y;
124         Eina_Bool            pending_resize_set;
125         int                  pending_resize_w, pending_resize_h;
126      } render_update_lock;
127
128    struct
129      {
130         Eina_Bool        set;
131         int              user_r;
132         int              user_g;
133         int              user_b;
134         int              user_a;
135      } transparent;
136
137    struct
138      {
139         struct wl_signal lower;
140         struct wl_signal lower_done;
141         struct wl_signal raise;
142         struct wl_signal show;
143         struct wl_signal hide;
144         struct wl_signal set_layer;
145         struct wl_signal stack_above;
146         struct wl_signal stack_below;
147      } events;
148 };
149 //#endif
150
151 typedef struct _E_Comp_Object_Data_Set_Layer
152 {
153    E_Comp_Object *cw;
154    int   layer; // layer
155 } E_Comp_Object_Data_Set_Layer;
156
157 typedef struct _E_Comp_Object_Data_Stack_Above
158 {
159    E_Comp_Object *cw;
160    Evas_Object   *above_obj; // above_obj
161 } E_Comp_Object_Data_Stack_Above;
162
163 typedef struct _E_Comp_Object_Data_Stack_Below
164 {
165    E_Comp_Object *cw;
166    Evas_Object   *below_obj; // below_obj
167 } E_Comp_Object_Data_Stack_Below;
168
169 //#ifdef REFACTOR_DESK_AREA
170 typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
171
172 EINTERN void _e_comp_object_layers_add(E_Comp_Object *cw, E_Comp_Object *above, E_Comp_Object *below, Eina_Bool prepend);
173 EINTERN void _e_comp_object_layers_remove(E_Comp_Object *cw);
174 EINTERN void _e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj);
175 EINTERN void e_comp_object_layer_set(Evas_Object *obj, short layer);
176 EINTERN void _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target);
177 EINTERN void _e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target);
178 EINTERN void _e_comp_intercept_stack_helper(E_Comp_Object *cw, Evas_Object *stack, E_Comp_Object_Stack_Func stack_cb);
179 EINTERN void _e_comp_object_transform_obj_stack_update(Evas_Object *obj);
180 //#endif
181
182 EINTERN void e_comp_object_lower_listener_add(Evas_Object *obj, struct wl_listener *listener);
183 //#ifdef REFACTOR_DESK_AREA
184 EINTERN void e_comp_object_lower_done_listener_add(Evas_Object *obj, struct wl_listener *listener);
185 EINTERN void e_comp_object_raise_listener_add(Evas_Object *obj, struct wl_listener *listener);
186 //#endif
187 EINTERN void e_comp_object_show_listener_add(Evas_Object *obj, struct wl_listener *listener);
188 EINTERN void e_comp_object_hide_listener_add(Evas_Object *obj, struct wl_listener *listener);
189 //#ifdef REFACTOR_DESK_AREA
190 EINTERN void e_comp_object_set_layer_listener_add(Evas_Object *obj, struct wl_listener *listener);
191 EINTERN void e_comp_object_stack_above_listener_add(Evas_Object *obj, struct wl_listener *listener);
192 EINTERN void e_comp_object_stack_below_listener_add(Evas_Object *obj, struct wl_listener *listener);
193 //#endif
194
195 #endif