wl_signal_emit(&PRI(ec)->events.parent_set, parent_ec);
}
-static void
-_e_client_transform_sub_apply(E_Client *ec, E_Client *epc, double zoom)
-{
- E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
- E_Client *subc;
- Eina_List *l;
- int px = 0, py = 0;
- int ox = 0, oy = 0, ow, oh;
- int mx, my, mw, mh;
- E_Map *map;
-
- EINA_SAFETY_ON_FALSE_RETURN(e_comp_wl_subsurface_check(ec));
-
- e_comp_wl_subsurface_position_get(ec, &ox, &oy);
- ow = cdata->width_from_viewport;
- oh = cdata->height_from_viewport;
-
- map = e_client_map_get(epc);
- e_map_point_coord_get(map, 0, &px, &py, 0);
- e_map_free(map);
-
- mx = ox * zoom + px;
- my = oy * zoom + py;
- mw = ow * zoom;
- mh = oh * zoom;
-
- map = e_map_new_with_direct_render(ec->transform_core.direct_render);
- e_map_util_points_populate_from_geometry(map, mx, my, mw, mh, 0);
- e_map_util_object_move_sync_set(map, EINA_TRUE);
- e_client_map_set(ec, map);
- e_client_map_enable_set(ec, EINA_TRUE);
-
- EINA_LIST_FOREACH(cdata->sub.list, l, subc)
- _e_client_transform_sub_apply(subc, ec, zoom);
- EINA_LIST_REVERSE_FOREACH(cdata->sub.below_list, l, subc)
- _e_client_transform_sub_apply(subc, ec, zoom);
-
- e_map_free(map);
-}
-
static void
_e_client_transient_for_group_make(E_Client *ec, Eina_List **list)
{
_e_client_transform_resize(ec);
}
-////////////////////////////////////////////
-
-EINTERN void
-e_client_transform_apply(E_Client *ec, double angle, double zoom, int cx, int cy)
-{
- E_Map *map;
- E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
- E_Client *subc;
- Eina_List *l;
-
- if (e_comp_wl_subsurface_check(ec))
- return;
-
- /* check if it's different with current state */
- if ((ec->transform.angle == angle) &&
- (ec->transform.zoom == zoom) &&
- (ec->transform.center.x == cx) &&
- (ec->transform.center.y == cy))
- return;
-
- /* use previous value if any required value is invalid */
- if (angle == -1.0)
- angle = ec->transform.angle;
- if (zoom == -1.0)
- zoom = ec->transform.zoom;
- if (!E_INSIDE(cx, cy,
- ec->client.x, ec->client.y,
- ec->client.w, ec->client.h))
- {
- cx = ec->transform.center.x;
- cy = ec->transform.center.y;
- }
-
- if ((angle == 0) && (zoom == 1.0))
- {
- e_client_transform_clear(ec);
- return;
- }
-
- map = e_map_new_with_direct_render(ec->transform_core.direct_render);
- e_map_util_points_populate_from_object_full(map, ec->frame, 0);
-
- e_map_util_rotate(map, angle, cx, cy);
- _e_client_transform_geometry_save(ec, map);
-
- e_map_util_zoom(map, zoom, zoom, cx, cy);
-
- e_map_util_object_move_sync_set(map, EINA_TRUE);
- e_client_map_set(ec, map);
- e_client_map_enable_set(ec, EINA_TRUE);
-
- EINA_LIST_FOREACH(cdata->sub.list, l, subc)
- _e_client_transform_sub_apply(subc, ec, zoom);
- EINA_LIST_REVERSE_FOREACH(cdata->sub.below_list, l, subc)
- _e_client_transform_sub_apply(subc, ec, zoom);
-
- e_map_free(map);
-
- ec->transform.zoom = zoom;
- ec->transform.angle = angle;
- ec->transform.center.x = cx;
- ec->transform.center.y = cy;
- ec->transformed = EINA_TRUE;
-}
-
-////////////////////////////////////////////
-
-EINTERN void
-e_client_transform_clear(E_Client *ec)
-{
- E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
- E_Client *subc;
- Eina_List *l;
-
- e_client_map_enable_set(ec, EINA_FALSE);
- e_client_map_set(ec, NULL);
-
- if (!cdata)
- {
- ELOGF("COMP", "cdata is NULL", ec);
- return;
- }
-
- EINA_LIST_FOREACH(cdata->sub.list, l, subc)
- _e_client_transform_sub_apply(subc, ec, 1.0);
- EINA_LIST_REVERSE_FOREACH(cdata->sub.below_list, l, subc)
- _e_client_transform_sub_apply(subc, ec, 1.0);
-
- ec->transform.zoom = 1.0;
- ec->transform.angle = 0.0;
- ec->transformed = EINA_FALSE;
-}
-
E_API Eina_Bool
e_client_transform_core_enable_get(E_Client *ec)
{