if hwc of the E_Pointer is set, the E_Pointer does not move the
evas object for preventing that evas compositing is triggered
even if it is on hwc.
but after below patch, it does not trigger evas compoisiting
because hwc makes transparent the evas object.
hwc of the E_Pointer is not needed.
"e_comp_object: make the frame object transparent when it is unredirected"
12b00f04a6124c4f9c013ec407871b1788453584
Change-Id: Ife3432f34ab51eaf70c673c89ef476046a9fac15
e_hwc_window_rendered_window_update(E_Hwc_Window *hwc_window)
{
E_Client *ec;
- E_Pointer *pointer = NULL;
E_Hwc_Window_State state;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
ec = hwc_window->ec;
if (!ec) return EINA_TRUE;
- if (hwc_window->is_cursor)
- pointer = e_pointer_get(hwc_window->ec);
-
state = e_hwc_window_state_get(hwc_window);
switch(state)
case E_HWC_WINDOW_STATE_DEVICE:
case E_HWC_WINDOW_STATE_CURSOR:
_e_hwc_window_rendered_window_set(hwc_window, EINA_FALSE);
- if (pointer)
- e_pointer_hwc_set(pointer, EINA_TRUE);
break;
case E_HWC_WINDOW_STATE_CLIENT:
case E_HWC_WINDOW_STATE_NONE:
_e_hwc_window_rendered_window_set(hwc_window, EINA_TRUE);
- if (pointer)
- e_pointer_hwc_set(pointer, EINA_FALSE);
break;
case E_HWC_WINDOW_STATE_VIDEO:
default:
EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
E_Plane_Renderer_Client *renderer_client = NULL;
- E_Pointer *pointer = NULL;
if (renderer->ec && renderer->ec != ec)
{
- pointer = e_pointer_get(renderer->ec);
- if (pointer)
- e_pointer_hwc_set(pointer, EINA_FALSE);
-
renderer_client = e_plane_renderer_client_get(renderer->ec);
if (renderer_client)
renderer_client->renderer = NULL;
- pointer = NULL;
renderer_client = NULL;
}
- pointer = e_pointer_get(ec);
- EINA_SAFETY_ON_NULL_RETURN_VAL(pointer, EINA_FALSE);
+ if (!e_pointer_get(ec))
+ {
+ ERR("fail to get e_pointer ec:%p", ec);
+ return EINA_FALSE;
+ }
renderer_client = e_plane_renderer_client_get(ec);
EINA_SAFETY_ON_NULL_RETURN_VAL(renderer_client, EINA_FALSE);
renderer->ec = ec;
renderer_client->renderer = renderer;
- e_pointer_hwc_set(pointer, EINA_TRUE);
-
return EINA_TRUE;
}
E_Plane *plane = NULL;
E_Plane_Role role;
E_Client *ec = NULL;
- E_Pointer *pointer = NULL;
E_Plane_Renderer_Client *renderer_client = NULL;
EINA_SAFETY_ON_NULL_RETURN(renderer);
role = e_plane_role_get(plane);
if (role == E_PLANE_ROLE_CURSOR)
{
- if (ec)
- {
- pointer = e_pointer_get(ec);
-
- if (pointer)
- e_pointer_hwc_set(pointer, EINA_FALSE);
- }
-
_e_plane_renderer_recover_ec(renderer);
tbm_surface_destroy(renderer->cursor_tsurface);
}
break;
}
- if (ptr->hwc)
- e_comp_object_hwc_update_set(ptr->o_ptr, EINA_TRUE);
- else
- evas_object_move(ptr->o_ptr, nx, ny);
+ evas_object_move(ptr->o_ptr, nx, ny);
}
static void
-_e_pointer_object_map_update(E_Pointer *ptr)
+_e_pointer_map_apply(E_Pointer *ptr)
{
E_Map *map;
int x, y, w, h;
e_map_free(map);
}
-// TODO: transform the cursor position with hot spot...!!!!!!
-static void
-_e_pointer_map_apply(E_Pointer *ptr)
-{
- EINA_SAFETY_ON_NULL_RETURN(ptr);
-
- if (ptr->hwc)
- e_comp_object_hwc_update_set(ptr->o_ptr, EINA_TRUE);
- else
- _e_pointer_object_map_update(ptr);
-}
-
static void
_e_pointer_cb_object_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
ptr->o_ptr = NULL;
ptr->device = E_POINTER_NONE;
- ptr->hwc = EINA_FALSE;
ptr->hot.x = 0;
ptr->hot.y = 0;
}
ec->override = 1; /* ignore the previous cursor_ec */
}
- ptr->hwc = EINA_FALSE;
-
/* hide cursor object */
if (evas_object_visible_get(obj))
{
evas_object_geometry_set(ec->frame, ec->x, ec->y, ec->w, ec->h);
ec->comp_data->mapped = EINA_TRUE;
ec->override = 0; /* do not ignore the cursor_ec to set the image object */
-
- if (e_comp_is_on_overlay(ec))
- ptr->hwc = EINA_TRUE;
}
/* show cursor object */
*y = ptr->y;
}
-EINTERN Eina_Bool
-e_pointer_hwc_set(E_Pointer *ptr, Eina_Bool set)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ptr, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ptr->o_ptr, EINA_FALSE);
-
- if (ptr->hwc == set) return EINA_TRUE;
-
- ptr->hwc = set;
-
- if (set)
- {
- e_comp_object_hwc_update_set(ptr->o_ptr, EINA_TRUE);
- }
- else
- {
- _e_pointer_map_apply(ptr);
- _e_pointer_position_update(ptr);
- }
-
- return EINA_TRUE;
-}
-
EINTERN E_Pointer *
e_pointer_get(E_Client *ec)
{
Eina_Bool e_cursor : 1;
Eina_Bool canvas : 1;
- Eina_Bool hwc;
};
struct _E_Pointer_Hook
EINTERN int e_pointer_shutdown(void);
EINTERN E_Pointer *e_pointer_canvas_new(Ecore_Evas *ee, Eina_Bool filled);
EINTERN void e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y);
-EINTERN Eina_Bool e_pointer_hwc_set(E_Pointer *ptr, Eina_Bool set);
EINTERN void e_pointer_touch_move(E_Pointer *ptr, int x, int y);
E_API void e_pointer_mouse_move(E_Pointer *ptr, int x, int y);