#include <scaler-server-protocol.h>
#include <tizen-extension-server-protocol.h>
-#define PER(fmt,arg...) ELOGF("VIEWPORT<E>", "viewport(%p) epc(%p): " \
- fmt, viewport->ec, viewport, viewport->epc, ##arg)
-#define PWR(fmt,arg...) ELOGF("VIEWPORT<W>", "viewport(%p) epc(%p): " \
- fmt, viewport->ec, viewport, viewport->epc, ##arg)
-#define PIN(fmt,arg...) ELOGF("VIEWPORT<I>", "viewport(%p) epc(%p): " \
- fmt, viewport->ec, viewport, viewport->epc, ##arg)
-#define PDB(fmt,arg...) DBG("viewport(%p) window(0x%08"PRIxPTR") ec(%p) epc(%p): "fmt, \
- viewport, viewport->window, viewport->ec, viewport->epc, ##arg)
+#define PER(fmt,arg...) ELOGF("VIEWPORT", "<ERR> window(0x%08"PRIxPTR") epc(%p): " \
+ fmt, viewport->ec, \
+ viewport->window, viewport->epc, ##arg)
+#define PWR(fmt,arg...) ELOGF("VIEWPORT", "<WRN> window(0x%08"PRIxPTR") epc(%p): " \
+ fmt, viewport->ec, \
+ viewport->window, viewport->epc, ##arg)
+#define PIN(fmt,arg...) ELOGF("VIEWPORT", "<INF> window(0x%08"PRIxPTR") epc(%p): " \
+ fmt, viewport->ec, \
+ viewport->window, viewport->epc, ##arg)
+#define PDB(fmt,arg...) DBG("window(0x%08"PRIxPTR") ec(%p) epc(%p): "fmt, \
+ viewport->window, viewport->ec, viewport->epc, ##arg)
#undef SWAP
#define SWAP(a, b) ({double t; t = a; a = b; b = t;})
} E_Viewport;
static E_Viewport* _e_comp_wl_viewport_get_viewport(struct wl_resource *resource);
+static void _e_comp_wl_viewport_cb_parent_show(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _e_comp_wl_viewport_cb_parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _e_comp_wl_viewport_parent_check(E_Viewport *viewport);
-static void _e_comp_wl_viewport_parent_set(E_Viewport *viewport, E_Client *epc);
-static void _e_comp_wl_viewport_parent_unset(E_Viewport *viewport);
static void
_destroy_viewport(E_Viewport *viewport)
if (!viewport) return;
- PIN("destroy E_Viewport");
-
ec = viewport->ec;
ecore_event_handler_del(viewport->topmost_rotate_hdl);
- _e_comp_wl_viewport_parent_unset(viewport);
+ if (viewport->epc)
+ {
+ evas_object_event_callback_del_full(viewport->epc->frame, EVAS_CALLBACK_SHOW,
+ _e_comp_wl_viewport_cb_parent_show, viewport);
+ evas_object_event_callback_del_full(viewport->epc->frame, EVAS_CALLBACK_RESIZE,
+ _e_comp_wl_viewport_cb_parent_resize, viewport);
+ viewport->epc = NULL;
+ }
e_client_hook_del(viewport->client_hook_del);
e_client_hook_del(viewport->client_hook_move);
ec->comp_data->pending.buffer_viewport.changed = 1;
}
+ PIN("tizen_viewport@%d destroy. viewport(%p)", wl_resource_get_id(viewport->resource), viewport);
+
free(viewport);
}
viewport = data;
if (viewport->epc != ec) return;
+ evas_object_event_callback_del(viewport->epc->frame, EVAS_CALLBACK_SHOW,
+ _e_comp_wl_viewport_cb_parent_show);
+ evas_object_event_callback_del(viewport->epc->frame, EVAS_CALLBACK_RESIZE,
+ _e_comp_wl_viewport_cb_parent_resize);
PIN("epc del");
-
- _e_comp_wl_viewport_parent_unset(viewport);
+ viewport->epc = NULL;
}
static void
if (e_comp_wl_subsurface_check(ec))
new_parent = e_comp_wl_subsurface_parent_get(ec);
- PIN("parent_check: parent(%p)", new_parent);
+ if (viewport->epc == new_parent) return;
+
+ if (viewport->epc)
+ {
+ evas_object_event_callback_del(viewport->epc->frame,
+ EVAS_CALLBACK_SHOW,
+ _e_comp_wl_viewport_cb_parent_show);
+ evas_object_event_callback_del(viewport->epc->frame,
+ EVAS_CALLBACK_RESIZE,
+ _e_comp_wl_viewport_cb_parent_resize);
+ }
+
+ viewport->epc = new_parent;
- _e_comp_wl_viewport_parent_set(viewport, new_parent);
+ PIN("epc(%p)", viewport->epc);
+
+ if (viewport->epc)
+ {
+ evas_object_event_callback_add(viewport->epc->frame,
+ EVAS_CALLBACK_SHOW,
+ _e_comp_wl_viewport_cb_parent_show,
+ viewport);
+ evas_object_event_callback_add(viewport->epc->frame,
+ EVAS_CALLBACK_RESIZE,
+ _e_comp_wl_viewport_cb_parent_resize,
+ viewport);
+ }
}
static void
};
static void
+_e_comp_wl_viewport_cb_parent_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ E_Viewport *viewport;
+
+ viewport = data;
+ if (e_object_is_del(E_OBJECT(viewport->ec)))
+ return;
+
+ if (e_comp_wl_viewport_is_changed(viewport->ec))
+ {
+ PIN("Parent gets visible and viewport has changed, "
+ "try to apply viewport to ec(%p)", viewport->ec);
+ e_comp_wl_viewport_apply(viewport->ec);
+ }
+}
+
+static void
+_e_comp_wl_viewport_cb_parent_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ E_Viewport *viewport = data;
+ Evas_Coord old_w, old_h;
+
+ if (e_object_is_del(E_OBJECT(viewport->epc))) return;
+
+ if (viewport->query_parent_size)
+ {
+ old_w = viewport->parent_size.w;
+ old_h = viewport->parent_size.h;
+
+ evas_object_geometry_get(viewport->epc->frame,
+ &viewport->parent_size.x,
+ &viewport->parent_size.y,
+ &viewport->parent_size.w,
+ &viewport->parent_size.h);
+
+ if ((old_w != viewport->parent_size.w) ||
+ (old_h != viewport->parent_size.h))
+ tizen_viewport_send_parent_size(viewport->resource,
+ viewport->parent_size.w,
+ viewport->parent_size.h);
+ }
+
+ e_comp_wl_viewport_apply(viewport->ec);
+}
+
+static void
_e_comp_wl_viewport_destroy(struct wl_resource *resource)
{
E_Viewport *viewport;
viewport->surface_destroy_listener.notify = _e_comp_wl_viewport_cb_surface_destroy;
wl_resource_add_destroy_listener(ec->comp_data->surface, &viewport->surface_destroy_listener);
- PIN("create viewport");
+ PIN("tizen_viewport@%d viewport(%p) created", id, viewport);
return EINA_TRUE;
}
{
e_info_server_hook_set("viewport", NULL, NULL);
}
-
-static void
-_e_comp_wl_viewport_cb_parent_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- E_Viewport *viewport = data;
-
- if (e_object_is_del(E_OBJECT(viewport->ec))) return;
-
- if (e_comp_wl_viewport_is_changed(viewport->ec))
- {
- PIN("Parent gets visible and viewport has changed, "
- "try to apply viewport to ec(%p)", viewport->ec);
- e_comp_wl_viewport_apply(viewport->ec);
- }
-}
-
-static void
-_e_comp_wl_viewport_cb_parent_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- E_Viewport *viewport = data;
- Evas_Coord old_w, old_h;
-
- if (e_object_is_del(E_OBJECT(viewport->epc))) return;
-
- if (viewport->query_parent_size)
- {
- old_w = viewport->parent_size.w;
- old_h = viewport->parent_size.h;
-
- evas_object_geometry_get(viewport->epc->frame,
- &viewport->parent_size.x,
- &viewport->parent_size.y,
- &viewport->parent_size.w,
- &viewport->parent_size.h);
-
- if ((old_w != viewport->parent_size.w) ||
- (old_h != viewport->parent_size.h))
- tizen_viewport_send_parent_size(viewport->resource,
- viewport->parent_size.w,
- viewport->parent_size.h);
- }
-
- e_comp_wl_viewport_apply(viewport->ec);
-}
-
-static void
-_e_comp_wl_viewport_parent_set(E_Viewport *viewport, E_Client *epc)
-{
- if (viewport->epc == epc) return;
-
- PIN("parent_set: new_parent(%p)", epc);
-
- _e_comp_wl_viewport_parent_unset(viewport);
-
- if (!epc)
- return;
-
- viewport->epc = epc;
-
- EINA_SAFETY_ON_NULL_RETURN(epc->frame);
-
- evas_object_event_callback_add(epc->frame, EVAS_CALLBACK_SHOW,
- _e_comp_wl_viewport_cb_parent_show,
- viewport);
- evas_object_event_callback_add(epc->frame, EVAS_CALLBACK_RESIZE,
- _e_comp_wl_viewport_cb_parent_resize,
- viewport);
-}
-
-static void
-_e_comp_wl_viewport_parent_unset(E_Viewport *viewport)
-{
- if (!viewport->epc) return;
-
- PIN("parent_unset");
-
- EINA_SAFETY_ON_NULL_GOTO(viewport->epc->frame, end);
-
- evas_object_event_callback_del_full(viewport->epc->frame,
- EVAS_CALLBACK_SHOW,
- _e_comp_wl_viewport_cb_parent_show,
- viewport);
- evas_object_event_callback_del_full(viewport->epc->frame,
- EVAS_CALLBACK_RESIZE,
- _e_comp_wl_viewport_cb_parent_resize,
- viewport);
-end:
- viewport->epc = NULL;
-}