#ifndef E_COMP_OBJECT_INTERN_H
#define E_COMP_OBJECT_INTERN_H
+#include "e_intern.h"
+#include "e_comp_object.h"
+#include "e_object.h"
+
#include <wayland-server.h>
+//#ifdef REFACTOR_DESK_AREA
+typedef struct _E_Comp_Object E_Comp_Object;
+struct _E_Comp_Object
+{
+ EINA_INLIST;
+
+ int x, y, w, h; // geometry
+
+ E_Client *ec;
+
+ E_Comp_Object_Frame client_inset;
+ struct
+ {
+ double start;
+ double val;
+ int x, y;
+ E_Direction dir;
+ Ecore_Animator *anim;
+ } shade;
+
+ Eina_Stringshare *frame_theme;
+ Eina_Stringshare *frame_name;
+ Eina_Stringshare *visibility_effect; //effect when toggling visibility
+
+ E_Comp_Object_Content_Type content_type; // type of e.swallow.content
+
+ Evas_Object *smart_obj; // smart object
+ Evas_Object *clip; // clipper over effect object
+ Evas_Object *input_obj; // input smart object
+ Evas_Object *obj; // composite object
+ Evas_Object *frame_object; // for client frames
+ Evas_Object *shobj; // shadow object
+ Evas_Object *effect_obj; // effects object
+ Evas_Object *transform_bg_obj; // transform backgroung with keep_ratio option
+ struct
+ {
+ int r, g, b, a;
+ } transform_bg_color;
+ Evas_Object *transform_tranp_obj;// transform transp rect obj
+ Evas_Object *default_input_obj; // default input object
+ unsigned int layer; //e_comp_canvas_layer_map(cw->ec->layer)
+ Eina_List *obj_mirror; // extra mirror objects
+ Eina_Tiler *updates; //render update regions
+ Eina_Tiler *pending_updates; //render update regions which are about to render
+
+ Evas_Native_Surface *ns; //for custom gl rendering
+
+ struct wl_listener buffer_destroy_listener;
+
+ unsigned int update_count; // how many updates have happened to this obj
+
+ unsigned int opacity; // opacity set with _NET_WM_WINDOW_OPACITY
+
+ unsigned int animating; // it's busy animating
+ unsigned int failures; //number of consecutive e_pixmap_image_draw() failures
+ unsigned int force_visible; //number of visible obj_mirror objects
+ Eina_Bool delete_pending : 1; // delete pending
+ Eina_Bool defer_hide : 1; // flag to get hide to work on deferred hide
+ Eina_Bool showing : 1; // object is currently in "show" animation
+ Eina_Bool hiding : 1; // object is currently in "hide" animation
+ Eina_Bool visible : 1; // is visible
+
+ Eina_Bool shaped : 1; // is shaped
+ Eina_Bool update : 1; // has updates to fetch
+ Eina_Bool redirected : 1; // has updates to fetch
+ Eina_Bool native : 1; // native
+
+ Eina_Bool nocomp : 1; // nocomp applied
+ Eina_Bool hwc_need_update : 1; // this window updated while on e_plane to do hw composite
+ Eina_Bool real_hid : 1; // last hide was a real window unmap
+
+ Eina_Bool effect_set : 1; //effect_obj has a valid group
+ Eina_Bool effect_running : 1; //effect_obj is playing an animation
+ Eina_Bool effect_clip : 1; //effect_obj is clipped
+ Eina_Bool effect_clip_able : 1; //effect_obj will be clipped for effects
+
+ Eina_Bool updates_exist : 1;
+ Eina_Bool updates_full : 1; // entire object will be updated
+
+ Eina_Bool force_move : 1;
+ Eina_Bool frame_extends : 1; //frame may extend beyond object size
+ Eina_Bool blanked : 1; //window is rendering blank content (externally composited)
+ Eina_Bool external_content : 1; // e.swallow.content(obj) is set by external evas object
+ Eina_Bool user_alpha_set : 1;
+ Eina_Bool user_alpha : 1;
+
+ struct
+ {
+ Evas_Object *obj; // mask object: transparent parts of this comp object allow to copy the alpha to current H/W plane.
+ Evas_Render_Op saved_render_op; // saved render operation value to restore when clear a mask.
+ } mask;
+
+ struct
+ {
+ Evas_Object *obj;
+ int w, h;
+ } indicator; //indicator object for internal client
+
+ struct
+ {
+ Evas_Object *mask_obj;
+ Eina_Bool enable;
+ Eina_Bool mask_set;
+ int mask_x, mask_y, mask_w, mask_h;
+ } dim;
+
+ Eina_Bool render_trace : 1; // trace co->obj rendering on canvas
+
+ tbm_surface_h tbm_surface;
+ E_Comp_Image_Filter image_filter;
+ Eina_Bool set_mouse_callbacks;
+
+ struct
+ {
+ int lock;
+ E_Comp_Wl_Buffer_Ref buffer_ref;
+ Eina_Bool pending_move_set;
+ int pending_move_x, pending_move_y;
+ Eina_Bool pending_resize_set;
+ int pending_resize_w, pending_resize_h;
+ } render_update_lock;
+
+ struct
+ {
+ Eina_Bool set;
+ Eina_Bool setting;
+ int user_r;
+ int user_g;
+ int user_b;
+ int user_a;
+ } transparent;
+
+ struct
+ {
+ struct wl_signal lower;
+ struct wl_signal lower_done;
+ struct wl_signal raise;
+ struct wl_signal show;
+ struct wl_signal hide;
+ struct wl_signal hiding;
+ struct wl_signal set_layer;
+ struct wl_signal stack_above;
+ struct wl_signal stack_below;
+ struct wl_signal image_filter_set;
+ struct wl_signal render_op_set;
+ struct wl_signal content_type_set;
+ struct wl_signal color_set;
+ struct wl_signal color_visible_set;
+ struct wl_signal resize;
+ } events;
+
+ Eina_Bool color_visible;
+};
+//#endif
+
+typedef struct _E_Comp_Object_Data_Set_Layer
+{
+ E_Comp_Object *cw;
+ int layer; // layer
+} E_Comp_Object_Data_Set_Layer;
+
+typedef struct _E_Comp_Object_Data_Stack_Above
+{
+ E_Comp_Object *cw;
+ Evas_Object *above_obj; // above_obj
+} E_Comp_Object_Data_Stack_Above;
+
+typedef struct _E_Comp_Object_Data_Stack_Below
+{
+ E_Comp_Object *cw;
+ Evas_Object *below_obj; // below_obj
+} E_Comp_Object_Data_Stack_Below;
+
+extern EINTERN int E_EVENT_COMP_OBJECT_ADD;
+extern EINTERN int E_EVENT_COMP_OBJECT_IMG_RENDER;
+extern EINTERN int E_EVENT_COMP_OBJECT_EFFECT_START;
+extern EINTERN int E_EVENT_COMP_OBJECT_EFFECT_END;
+
+EINTERN void e_comp_object_init(void);
+EINTERN void e_comp_object_shutdown(void);
+
+EINTERN Evas_Object *e_comp_object_client_add(E_Client *ec);
+EINTERN Eina_Bool e_comp_object_alpha_get(Evas_Object *obj);
+EINTERN Eina_Bool e_comp_object_color_visible_get(Evas_Object *obj);
+EINTERN void e_comp_object_clear(Evas_Object *obj);
+EINTERN Eina_Bool e_comp_object_redirected_get(Evas_Object *obj);
+EINTERN Eina_Bool e_comp_object_mirror_visibility_check(Evas_Object *obj);
+EINTERN void e_comp_object_input_objs_del(Evas_Object *obj);
+EINTERN Eina_Bool e_comp_object_hwc_update_exists(Evas_Object *obj);
+EINTERN void e_comp_object_damage_trace_debug(Eina_Bool onoff);
+
+EINTERN Eina_Bool e_comp_object_frame_allowed(Evas_Object *obj);
+EINTERN void e_comp_object_frame_geometry_get(Evas_Object *obj, int *l, int *r, int *t, int *b);
+EINTERN void e_comp_object_frame_geometry_set(Evas_Object *obj, int l, int r, int t, int b);
+EINTERN Eina_Bool e_comp_object_frame_exists(Evas_Object *obj);
+EINTERN Eina_Bool e_comp_object_frame_theme_set(Evas_Object *obj, const char *name);
+EINTERN void e_comp_object_frame_extends_get(Evas_Object *obj, int *x, int *y, int *w, int *h);
+
+EINTERN E_Zone *e_comp_object_util_zone_get(Evas_Object *obj);
+EINTERN void e_comp_object_util_del_list_append(Evas_Object *obj, Evas_Object *to_del);
+EINTERN void e_comp_object_util_del_list_remove(Evas_Object *obj, Evas_Object *to_del);
+EINTERN void e_comp_object_util_autoclose(Evas_Object *obj, E_Comp_Object_Autoclose_Cb del_cb, E_Comp_Object_Key_Cb cb, const void *data);
+EINTERN void e_comp_object_util_center(Evas_Object *obj);
+EINTERN void e_comp_object_util_center_on(Evas_Object *obj, Evas_Object *on);
+EINTERN void e_comp_object_util_center_pos_get(Evas_Object *obj, int *x, int *y);
+EINTERN void e_comp_object_util_fullscreen(Evas_Object *obj);
+
+EINTERN Eina_Bool e_comp_object_damage_exists(Evas_Object *obj);
+EINTERN void e_comp_object_shape_apply(Evas_Object *obj);
+EINTERN void e_comp_object_redirected_set(Evas_Object *obj, Eina_Bool set);
+EINTERN void e_comp_object_blank(Evas_Object *obj, Eina_Bool set);
+EINTERN void e_comp_object_size_update(Evas_Object *obj, int w, int h);
+
+EINTERN void e_comp_object_render_update_add(Evas_Object *obj);
+EINTERN void e_comp_object_render_update_del(Evas_Object *obj);
+
+EINTERN void e_comp_object_native_surface_set(Evas_Object *obj, Eina_Bool set);
+EINTERN void e_comp_object_native_surface_override(Evas_Object *obj, Evas_Native_Surface *ns);
+
+EINTERN Eina_Bool e_comp_object_effect_allowed_get(Evas_Object *obj);
+EINTERN void e_comp_object_effect_clip(Evas_Object *obj);
+EINTERN void e_comp_object_effect_unclip(Evas_Object *obj);
+
+EINTERN void e_comp_object_transform_bg_vertices_set(Evas_Object *obj, E_Util_Transform_Rect_Vertex *vertices);
+EINTERN void e_comp_object_transform_bg_vertices_set_with_zoom(Evas_Object *obj, E_Util_Transform_Rect_Vertex *vertices, E_Util_Transform_Zoom zoom);
+EINTERN void e_comp_object_transform_transp_vertices_set(Evas_Object *obj, E_Util_Transform_Rect_Vertex *vertices);
+EINTERN void e_comp_object_transform_transp_vertices_set_with_zoom(Evas_Object *obj, E_Util_Transform_Rect_Vertex *vertices, E_Util_Transform_Zoom zoom);
+
+//#ifdef REFACTOR_DESK_AREA
+//#else
+EINTERN void e_comp_object_layer_update(Evas_Object *obj, Evas_Object *above, Evas_Object *below);
+//#endif
+EINTERN int e_comp_object_layer_get(Evas_Object *obj);
+
+EINTERN Eina_Bool e_comp_object_content_unset(Evas_Object* obj);
+EINTERN Evas_Object *e_comp_object_content_get(Evas_Object* obj);
+
+EINTERN E_Client *e_comp_object_dim_client_get(void);
+EINTERN void e_comp_object_dim_mask_set(Evas_Object *obj, Eina_Bool set);
+
+EINTERN void e_comp_object_indicator_swallow(Evas_Object *obj, Evas_Object *indicator);
+EINTERN void e_comp_object_indicator_unswallow(Evas_Object *obj, Evas_Object *indicator);
+EINTERN void e_comp_object_indicator_size_set(Evas_Object *obj, int w, int h);
+
+EINTERN Eina_Bool e_comp_object_image_filter_set(Evas_Object *obj, E_Comp_Image_Filter filter);
+EINTERN E_Comp_Image_Filter e_comp_object_image_filter_get(Evas_Object *obj);
+
+EINTERN E_Map *e_comp_object_map_get(const Evas_Object *obj);
+EINTERN void e_comp_object_map_update(Evas_Object *obj);
+
+EINTERN void e_comp_object_render_op_set(Evas_Object *obj, Evas_Render_Op op);
+EINTERN Evas_Render_Op e_comp_object_render_op_get(Evas_Object *obj);
+EINTERN Eina_Bool e_comp_object_render_trace_set(Evas_Object *obj, Eina_Bool set);
+
+//#ifdef REFACTOR_DESK_AREA
+typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
+//#endif
+
+//#ifdef REFACTOR_DESK_AREA
+EINTERN void e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj);
+EINTERN void e_comp_object_raise(Evas_Object *obj);
+EINTERN void e_comp_object_layer_set(Evas_Object *obj, short layer);
+EINTERN void e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target);
+EINTERN void e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target);
+EINTERN void e_comp_object_transform_obj_stack_update(Evas_Object *obj);
+//#endif
+
+// listeners
EINTERN void e_comp_object_lower_listener_add(Evas_Object *obj, struct wl_listener *listener);
+//#ifdef REFACTOR_DESK_AREA
+EINTERN void e_comp_object_lower_done_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_raise_listener_add(Evas_Object *obj, struct wl_listener *listener);
+//#endif
EINTERN void e_comp_object_show_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_hide_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_hiding_listener_add(Evas_Object *obj, struct wl_listener *listener);
+//#ifdef REFACTOR_DESK_AREA
+EINTERN void e_comp_object_set_layer_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_stack_above_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_stack_below_listener_add(Evas_Object *obj, struct wl_listener *listener);
+//#endif
+
+EINTERN void e_comp_object_image_filter_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_render_op_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_content_type_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_color_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_color_visible_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
+EINTERN void e_comp_object_resize_listener_add(Evas_Object *obj, struct wl_listener *listener);
#endif