diff options
Diffstat (limited to 'src/virtual_window_wayland.c')
-rw-r--r-- | src/virtual_window_wayland.c | 433 |
1 files changed, 0 insertions, 433 deletions
diff --git a/src/virtual_window_wayland.c b/src/virtual_window_wayland.c deleted file mode 100644 index 3a1dadf..0000000 --- a/src/virtual_window_wayland.c +++ /dev/null @@ -1,433 +0,0 @@ -#include <Elementary.h> -#include <string.h> -#include <Ecore_Evas.h> -#include <Ecore_X.h> -#include <Evas.h> - -#include <dlog.h> -#include <livebox-errno.h> -#include <livebox-service.h> - -#include "livebox.h" -#include "debug.h" - -#define IS_PD 1 - -#define PUBLIC __attribute__((visibility("default"))) - -/*! - * \brief - * Abstracted Data Type of Virtual Window - */ -struct info { - char *id; /*!< Identification */ - struct livebox_buffer *handle; /*!< Livebox buffer handle */ - int is_hw; /*!< 1 if a buffer is created on the H/W accelerated place or 0 */ - Ecore_Evas *ee; - Evas *e; - int is_pd; -}; - -static inline Evas_Object *get_highlighted_object(Evas_Object *obj) -{ - Evas_Object *o, *ho; - - o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp"); - if (!o) return NULL; - - ho = evas_object_data_get(o, "_elm_access_target"); - return ho; -} - -/*! - * \note - * Every user event (mouse) on the buffer will be passed via this event callback - */ -static int event_handler_cb(struct livebox_buffer *handler, struct buffer_event_data *event_info, void *data) -{ - struct info *info = data; - Elm_Access_Action_Info action_info; - Elm_Access_Action_Type action_type; - int ret = 0; - Evas_Object *parent_elm; - - - if (!info->handle) { - /* Just ignore this event */ - return 0; - } - - /*! - * \note - * Feed up events - */ - switch (event_info->type) { - case BUFFER_EVENT_ENTER: - evas_event_feed_mouse_in(info->e, event_info->timestamp * 1000, NULL); - break; - case BUFFER_EVENT_LEAVE: - evas_event_feed_mouse_out(info->e, event_info->timestamp * 1000, NULL); - break; - case BUFFER_EVENT_DOWN: - /*! - * \note - * Calculate the event occurred X & Y on the buffer - */ - evas_event_feed_mouse_move(info->e, event_info->info.pointer.x, event_info->info.pointer.y, (event_info->timestamp - 0.001f) * 1000, NULL); /* + 0.1f just for fake event */ - evas_event_feed_mouse_down(info->e, 1, EVAS_BUTTON_NONE, event_info->timestamp * 1000, NULL); /* + 0.2f just for fake event */ - break; - case BUFFER_EVENT_MOVE: - /*! - * \note - * Calculate the event occurred X & Y on the buffer - */ - evas_event_feed_mouse_move(info->e, event_info->info.pointer.x, event_info->info.pointer.y, event_info->timestamp * 1000, NULL); - break; - case BUFFER_EVENT_UP: - evas_event_feed_mouse_move(info->e, event_info->info.pointer.x, event_info->info.pointer.y, event_info->timestamp * 1000, NULL); - evas_event_feed_mouse_up(info->e, 1, EVAS_BUTTON_NONE, (event_info->timestamp + 0.001f) * 1000, NULL); - break; - case BUFFER_EVENT_HIGHLIGHT: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_HIGHLIGHT; - /*! - * \note - * Calculate the event occurred X & Y on the buffer - */ - action_info.x = event_info->info.pointer.x; - action_info.y = event_info->info.pointer.y; - ret = elm_access_action(parent_elm, action_type, &action_info); - if (ret == EINA_TRUE) { - if (!get_highlighted_object(parent_elm)) { - LOGE("Highlighted object is not found\n"); - ret = LB_ACCESS_STATUS_ERROR; - } else { - LOGD("Highlighted object is found\n"); - ret = LB_ACCESS_STATUS_DONE; - } - } else { - LOGE("Action error\n"); - ret = LB_ACCESS_STATUS_ERROR; - } - break; - case BUFFER_EVENT_HIGHLIGHT_NEXT: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_HIGHLIGHT_NEXT; - action_info.highlight_cycle = EINA_FALSE; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_LAST : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_HIGHLIGHT_PREV: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_HIGHLIGHT_PREV; - action_info.highlight_cycle = EINA_FALSE; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_FIRST : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_ACTIVATE: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_ACTIVATE; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_ACTION_UP: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_UP; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_ACTION_DOWN: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_DOWN; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_SCROLL_UP: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_SCROLL; - action_info.x = event_info->info.pointer.x; - action_info.y = event_info->info.pointer.y; - action_info.mouse_type = 2; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_SCROLL_MOVE: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_SCROLL; - action_info.x = event_info->info.pointer.x; - action_info.y = event_info->info.pointer.y; - action_info.mouse_type = 1; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_SCROLL_DOWN: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_SCROLL; - action_info.x = event_info->info.pointer.x; - action_info.y = event_info->info.pointer.y; - action_info.mouse_type = 0; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_UNHIGHLIGHT: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - memset(&action_info, 0, sizeof(action_info)); - action_type = ELM_ACCESS_ACTION_UNHIGHLIGHT; - ret = elm_access_action(parent_elm, action_type, &action_info); - ret = (ret == EINA_FALSE) ? LB_ACCESS_STATUS_ERROR : LB_ACCESS_STATUS_DONE; - break; - case BUFFER_EVENT_KEY_DOWN: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - - ret = LB_KEY_STATUS_ERROR; - break; - case BUFFER_EVENT_KEY_UP: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - - ret = LB_KEY_STATUS_ERROR; - break; - case BUFFER_EVENT_KEY_FOCUS_IN: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - - ret = LB_KEY_STATUS_ERROR; - break; - case BUFFER_EVENT_KEY_FOCUS_OUT: - parent_elm = ecore_evas_data_get(info->ee, "dynamic,box,win"); - if (!parent_elm) { - ret = LB_ACCESS_STATUS_ERROR; - break; - } - - ret = LB_KEY_STATUS_ERROR; - break; - default: - LOGD("Unhandled buffer event (%d)\n", event_info->type); - break; - } - - return ret; -} - -static void *alloc_fb(void *data, int size) -{ - struct info *info = data; - void *buffer; - int width = 0; - int height = 0; - - if (info->ee == NULL) { - width = 1; - height = 1; - } else { - ecore_evas_geometry_get(info->ee, NULL, NULL, &width, &height); - } - - /*! - * Acquire a buffer for canvas. - */ - info->handle = livebox_acquire_buffer_NEW(info->id, info->is_pd, - width, height, - event_handler_cb, info); - - /*! - * If it supports the H/W accelerated buffer, - * Use it. - */ - if (livebox_support_hw_buffer(info->handle)) { - if (livebox_create_hw_buffer(info->handle) == 0) { - buffer = livebox_buffer_hw_buffer(info->handle); - if (buffer) { - LOGD("HW Accelerated buffer is created\n"); - info->is_hw = 1; - return buffer; - } - } - - LOGE("Failed to allocate HW Accelerated buffer\n"); - } - - /*! - * Or use the buffer of a S/W backend. - */ - buffer = livebox_ref_buffer(info->handle); - LOGD("SW buffer is created\n"); - info->is_hw = 0; - return buffer; -} - -static void free_fb(void *data, void *ptr) -{ - struct info *info = data; - - if (!info->handle) { - return; - } - - if (info->is_hw) { - if (livebox_destroy_hw_buffer(info->handle) == 0) { - LOGD("HW Accelerated buffer is destroyed\n"); - goto out; - } - } - - livebox_unref_buffer(ptr); - LOGD("SW buffer is destroyed\n"); -out: - livebox_release_buffer(info->handle); - info->handle = NULL; -} - -static void pre_render_cb(void *data, Evas *e, void *event_info) -{ - struct info *info = data; - - if (!info->handle) { - return; - } - - if (info->is_hw) { - livebox_buffer_pre_render(info->handle); - } -} - -static void post_render_cb(void *data, Evas *e, void *event_info) -{ - struct info *info = data; - - if (!info->handle) { - return; - } - - if (info->is_hw) { - livebox_buffer_post_render(info->handle); - } else { - livebox_sync_buffer(info->handle); - } -} - -PUBLIC Evas_Object *livebox_get_evas_object(const char *id, int is_pd) -{ - struct info *info; - Evas_Object *rect; - - if (!id) { - ErrPrint("Invalid parameter\n"); - return NULL; - } - - info = calloc(1, sizeof(*info)); - if (!info) { - ErrPrint("Heap: %s\n", strerror(errno)); - return NULL; - } - - info->id = strdup(id); - if (!info->id) { - ErrPrint("Heap: %s\n", strerror(errno)); - free(info); - return NULL; - } - - info->is_pd = is_pd; - - info->ee = ecore_evas_buffer_allocfunc_new(1, 1, alloc_fb, free_fb, info); - if (!info->ee) { - ErrPrint("Failed to create ecore_evas (%dx%d)\n", 1, 1); - free(info->id); - free(info); - return NULL; - } - - pre_render_cb(info, NULL, NULL); - ecore_evas_alpha_set(info->ee, EINA_TRUE); - post_render_cb(info, NULL, NULL); - - ecore_evas_data_set(info->ee, "dynamic,box,info", info); - - ecore_evas_manual_render_set(info->ee, EINA_FALSE); - ecore_evas_resize(info->ee, 1, 1); - - info->e = ecore_evas_get(info->ee); - if (!info->e) { - ErrPrint("Failed to get evas\n"); - ecore_evas_free(info->ee); - return NULL; - } - - evas_event_callback_add(info->e, EVAS_CALLBACK_RENDER_POST, post_render_cb, info); - evas_event_callback_add(info->e, EVAS_CALLBACK_RENDER_PRE, pre_render_cb, info); - - rect = evas_object_rectangle_add(info->e); - if (!rect) { - ErrPrint("Failed to create evas_object\n"); - ecore_evas_free(info->ee); - return NULL; - } - - evas_object_resize(rect, 1, 1); - evas_object_color_set(rect, 0, 0, 0, 0); - return rect; -} - -/* End of a file */ |