E_FREE(hwc_window);
}
+static void
+_e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window)
+{
+ E_Map *map = NULL, *new_map = NULL;
+ int w, h;
+ Eina_Bool enable;
+ E_View *view;
+
+ EINA_SAFETY_ON_NULL_RETURN(hwc_window->below_transparent_view);
+
+ e_view_rect_size_get(hwc_window->below_transparent_view, &w, &h);
+ view = e_view_rect_view_get(hwc_window->below_transparent_view);
+
+ enable = e_client_transform_core_enable_get(hwc_window->ec);
+ if (enable)
+ map = e_view_client_map_get(e_client_view_get(hwc_window->ec));
+
+ if ((enable) && (map))
+ {
+ new_map = e_map_dup(map);
+ if (!new_map)
+ {
+ EHWERR("fail to dup e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
+ e_map_free(map);
+ return;
+ }
+ }
+ else
+ {
+ new_map = e_map_new();
+ if (!new_map)
+ {
+ EHWERR("fail to new e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
+ return;
+ }
+
+ e_map_util_points_populate_from_view_full(new_map, view, 0);
+ e_map_util_points_color_set(new_map, 255, 255, 255, 255);
+ }
+
+ e_map_point_image_uv_set(new_map, 0, 0, 0);
+ e_map_point_image_uv_set(new_map, 1, w, 0);
+ e_map_point_image_uv_set(new_map, 2, w, h);
+ e_map_point_image_uv_set(new_map, 3, 0, h);
+
+ e_view_map_set(view, new_map);
+ e_view_map_enable_set(view, true);
+
+ if (map) e_map_free(map);
+
+ e_map_free(new_map);
+}
+
static void
_e_hwc_window_view_cb_show(struct wl_listener *listener, void *data)
{
E_Hwc_Window *hwc_window;
+ E_View *view;
hwc_window = wl_container_of(listener, hwc_window, show_listener);
hwc_window->evas_visible = EINA_TRUE;
e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+
+ if (hwc_window->below_transparent_view)
+ {
+ view = e_view_rect_view_get(hwc_window->below_transparent_view);
+ e_view_show(view);
+ }
}
static void
_e_hwc_window_view_cb_hide(struct wl_listener *listener, void *data)
{
E_Hwc_Window *hwc_window;
+ E_View *view;
hwc_window = wl_container_of(listener, hwc_window, hide_listener);
hwc_window->evas_visible = EINA_FALSE;
e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+
+ if (hwc_window->below_transparent_view)
+ {
+ view = e_view_rect_view_get(hwc_window->below_transparent_view);
+ e_view_hide(view);
+ }
}
static void
E_Client *subc;
E_Hwc_Window_State state;
E_Client *ec;
+ E_View *view;
hwc_window = wl_container_of(listener, hwc_window, move_listener);
e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
}
+ if (hwc_window->below_transparent_view)
+ {
+ view = e_view_rect_view_get(hwc_window->below_transparent_view);
+ e_view_position_set(view, hwc_window->ec->x, hwc_window->ec->y);
+ _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
+ }
+
ec = hwc_window->ec;
if (!ec) return;
if ((hwc_window->evas_visible) && (e_hwc_window_client_geometry_visible_get(hwc_window)))
e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
}
+
+ if (hwc_window->below_transparent_view)
+ _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
}
static void
_e_hwc_window_view_cb_restack(struct wl_listener *listener, void *data)
{
+ E_View_Event_Callback_Data *callback_data = data;
E_Hwc_Window *hwc_window;
+ E_View *view;
hwc_window = wl_container_of(listener, hwc_window, restack_listener);
e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+
+ if (hwc_window->below_transparent_view)
+ {
+ view = e_view_rect_view_get(hwc_window->below_transparent_view);
+ e_view_reparent(view, e_view_parent_get(callback_data->view));
+ e_view_place_below(view, callback_data->view);
+ }
}
static void
return EINA_TRUE;
}
-static void
-_e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window)
-{
- E_Map *map = NULL, *new_map = NULL;
- int w, h;
- Eina_Bool enable;
- E_View *view;
-
- EINA_SAFETY_ON_NULL_RETURN(hwc_window->below_transparent_view);
-
- e_view_rect_size_get(hwc_window->below_transparent_view, &w, &h);
- view = e_view_rect_view_get(hwc_window->below_transparent_view);
-
- enable = e_client_transform_core_enable_get(hwc_window->ec);
- if (enable)
- map = e_view_client_map_get(e_client_view_get(hwc_window->ec));
-
- if ((enable) && (map))
- {
- new_map = e_map_dup(map);
- if (!new_map)
- {
- EHWERR("fail to dup e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
- e_map_free(map);
- return;
- }
- }
- else
- {
- new_map = e_map_new();
- if (!new_map)
- {
- EHWERR("fail to new e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
- return;
- }
-
- e_map_util_points_populate_from_view_full(new_map, view, 0);
- e_map_util_points_color_set(new_map, 255, 255, 255, 255);
- }
-
- e_map_point_image_uv_set(new_map, 0, 0, 0);
- e_map_point_image_uv_set(new_map, 1, w, 0);
- e_map_point_image_uv_set(new_map, 2, w, h);
- e_map_point_image_uv_set(new_map, 3, 0, h);
-
- e_view_map_set(view, new_map);
- e_view_map_enable_set(view, true);
-
- if (map) e_map_free(map);
-
- e_map_free(new_map);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_show(struct wl_listener *listener, void *data)
-{
- E_Hwc_Window *hwc_window;
- E_View *view;
-
- hwc_window = wl_container_of(listener, hwc_window, transparent_show_listener);
-
- view = e_view_rect_view_get(hwc_window->below_transparent_view);
- e_view_show(view);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_hide(struct wl_listener *listener, void *data)
-{
- E_Hwc_Window *hwc_window;
- E_View *view;
-
- hwc_window = wl_container_of(listener, hwc_window, transparent_hide_listener);
-
- view = e_view_rect_view_get(hwc_window->below_transparent_view);
- e_view_hide(view);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_move(struct wl_listener *listener, void *data)
-{
- E_Hwc_Window *hwc_window;
- E_View *view;
-
- hwc_window = wl_container_of(listener, hwc_window, transparent_move_listener);
-
- view = e_view_rect_view_get(hwc_window->below_transparent_view);
- e_view_position_set(view, hwc_window->ec->x, hwc_window->ec->y);
-
- _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_resize(struct wl_listener *listener, void *data)
-{
- E_Hwc_Window *hwc_window;
-
- hwc_window = wl_container_of(listener, hwc_window, transparent_resize_listener);
-
- _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_restack(struct wl_listener *listener, void *data)
-{
- E_Hwc_Window *hwc_window;
- E_View *view, *ec_view;
-
- hwc_window = wl_container_of(listener, hwc_window, transparent_restack_listener);
-
- view = e_view_rect_view_get(hwc_window->below_transparent_view);
- ec_view = e_view_client_view_get(e_client_view_get(hwc_window->ec));
- e_view_reparent(view, e_view_parent_get(ec_view));
- e_view_place_below(view, ec_view);
-}
-
EINTERN void
e_hwc_window_below_transparent_obj_set(E_Hwc_Window *hwc_window, Eina_Bool set)
{
E_View_Rect *below_transparent_view;
const int color[4] = {0, 0, 0, 0};
E_View *view, *ec_view;
- E_View_Client *view_client;
EINA_SAFETY_ON_NULL_RETURN(hwc_window);
if (e_view_visible_get(ec_view))
e_view_show(view);
- hwc_window->transparent_show_listener.notify = _e_hwc_window_below_transparent_view_cb_show;
- e_view_event_listener_add(ec_view, E_VIEW_SHOW, &hwc_window->transparent_show_listener);
- hwc_window->transparent_hide_listener.notify = _e_hwc_window_below_transparent_view_cb_hide;
- e_view_event_listener_add(ec_view, E_VIEW_HIDE, &hwc_window->transparent_hide_listener);
- hwc_window->transparent_move_listener.notify = _e_hwc_window_below_transparent_view_cb_move;
- e_view_event_listener_add(ec_view, E_VIEW_MOVE, &hwc_window->transparent_move_listener);
- hwc_window->transparent_resize_listener.notify = _e_hwc_window_below_transparent_view_cb_resize;
- e_view_event_listener_add(ec_view, E_VIEW_RESIZE, &hwc_window->transparent_resize_listener);
- hwc_window->transparent_restack_listener.notify = _e_hwc_window_below_transparent_view_cb_restack;
- e_view_event_listener_add(ec_view, E_VIEW_RESTACK, &hwc_window->transparent_restack_listener);
-
EHWINF("Set below_transparent_obj", hwc_window->ec, hwc_window->hwc, hwc_window);
}
else
e_view_destroy(view);
hwc_window->below_transparent_view = NULL;
- if (hwc_window->ec)
- {
- view_client = e_client_view_get(hwc_window->ec);
- view = e_view_client_view_get(view_client);
-
- e_view_event_listener_del(view, E_VIEW_SHOW, &hwc_window->transparent_show_listener);
- e_view_event_listener_del(view, E_VIEW_HIDE, &hwc_window->transparent_hide_listener);
- e_view_event_listener_del(view, E_VIEW_MOVE, &hwc_window->transparent_move_listener);
- e_view_event_listener_del(view, E_VIEW_RESIZE, &hwc_window->transparent_resize_listener);
- e_view_event_listener_del(view, E_VIEW_RESTACK, &hwc_window->transparent_restack_listener);
- }
-
EHWINF("Unset below_transparent_obj", hwc_window->ec, hwc_window->hwc, hwc_window);
}
}