forked from enlightenment/enlightenment
fix shape cutting for frames which are larger than their object size implies
requires border themes to have data.item "frame_extends" set
This commit is contained in:
parent
d8aa488096
commit
dbce413b42
|
@ -577,27 +577,28 @@ _e_comp_shapes_update_comp_client_shape_comp_helper(E_Client *ec, Eina_Tiler *tb
|
|||
|
||||
/* add the frame */
|
||||
e_comp_object_frame_geometry_get(ec->frame, &l, &r, &t, &b);
|
||||
if (l || r || t || b)
|
||||
e_comp_object_frame_extends_get(ec->frame, &x, &y, &w, &h);
|
||||
if ((l + x) || (r + (w - ec->w + x)) || (t - y) || (b + (h - ec->h + y)))
|
||||
{
|
||||
if (t)
|
||||
if (t - y)
|
||||
{
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x, ec->y, ec->w, t});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x, ec->y, ec->w, t);
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x + x, ec->y + y, w, t - y});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x + x, ec->y + y, w, t - y);
|
||||
}
|
||||
if (l)
|
||||
if (l - x)
|
||||
{
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x, ec->y, l, ec->h});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x, ec->y, l, ec->h);
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x + x, ec->y + y, l - x, h});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x + x, ec->y + y, l - x, h);
|
||||
}
|
||||
if (r)
|
||||
if (r + (w - ec->w + x))
|
||||
{
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x + l + ec->client.w, ec->y, r, ec->h});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->client.x + ec->client.w, ec->y, r, ec->h);
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x + l + ec->client.w + x, ec->y + y, r + (w - ec->w + x), h});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x + l + ec->client.w + x, ec->y + y, r + (w - ec->w + x), h);
|
||||
}
|
||||
if (b)
|
||||
if (b + (h - ec->h + y))
|
||||
{
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x, ec->y + t + ec->client.h, ec->w, b});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x, ec->client.y + ec->client.h, ec->w, b);
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x + x, ec->y + t + ec->client.h + y, w, b + (h - ec->h + y)});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x + x, ec->y + t + ec->client.h + y, w, b + (h - ec->h + y));
|
||||
}
|
||||
}
|
||||
rects = ec->shape_rects ?: ec->shape_input_rects;
|
||||
|
@ -631,9 +632,10 @@ _e_comp_shapes_update_comp_client_shape_comp_helper(E_Client *ec, Eina_Tiler *tb
|
|||
|
||||
if (!e_client_util_borderless(ec))
|
||||
{
|
||||
e_comp_object_frame_extends_get(ec->frame, &x, &y, &w, &h);
|
||||
/* add the frame */
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x, ec->y, ec->w, ec->h});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x, ec->y, ec->w, ec->h);
|
||||
eina_tiler_rect_add(tb, &(Eina_Rectangle){ec->x + x, ec->y + y, w, h});
|
||||
SHAPE_INF("ADD: %d,%d@%dx%d", ec->x + x, ec->y + y, w, h);
|
||||
}
|
||||
|
||||
if ((!ec->shaded) && (!ec->shading))
|
||||
|
|
|
@ -97,6 +97,7 @@ typedef struct _E_Comp_Object
|
|||
Eina_Bool updates_full : 1; // entire object will be updated
|
||||
|
||||
Eina_Bool force_move : 1;
|
||||
Eina_Bool frame_extends : 1; //frame may extend beyond object size
|
||||
} E_Comp_Object;
|
||||
|
||||
|
||||
|
@ -2473,6 +2474,21 @@ e_comp_object_client_get(Evas_Object *obj)
|
|||
return cw ? cw->ec : NULL;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_comp_object_frame_extends_get(Evas_Object *obj, int *x, int *y, int *w, int *h)
|
||||
{
|
||||
API_ENTRY;
|
||||
if (cw->frame_extends)
|
||||
edje_object_parts_extends_calc(cw->frame_object, x, y, w, h);
|
||||
else
|
||||
{
|
||||
if (x) *x = 0;
|
||||
if (y) *y = 0;
|
||||
if (w) *w = cw->ec->w;
|
||||
if (h) *h = cw->ec->h;
|
||||
}
|
||||
}
|
||||
|
||||
EAPI E_Zone *
|
||||
e_comp_object_util_zone_get(Evas_Object *obj)
|
||||
{
|
||||
|
@ -2812,8 +2828,13 @@ reshadow:
|
|||
}
|
||||
evas_object_smart_callback_call(cw->smart_obj, "frame_changed", NULL);
|
||||
if (cw->frame_object)
|
||||
{
|
||||
cw->frame_extends = !!edje_object_data_get(cw->frame_object, "frame_extends");
|
||||
edje_object_signal_callback_add(cw->frame_object, "*", "*",
|
||||
_e_comp_object_cb_signal_bind, cw);
|
||||
}
|
||||
else
|
||||
cw->frame_extends = 0;
|
||||
evas_object_del(pbg);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ EAPI void e_comp_object_frame_xy_adjust(Evas_Object *obj, int x, int y, int *ax,
|
|||
EAPI void e_comp_object_frame_xy_unadjust(Evas_Object *obj, int x, int y, int *ax, int *ay);
|
||||
EAPI void e_comp_object_frame_wh_adjust(Evas_Object *obj, int w, int h, int *aw, int *ah);
|
||||
EAPI void e_comp_object_frame_wh_unadjust(Evas_Object *obj, int w, int h, int *aw, int *ah);
|
||||
EAPI void e_comp_object_frame_extends_get(Evas_Object *obj, int *x, int *y, int *w, int *h);
|
||||
EAPI E_Client *e_comp_object_client_get(Evas_Object *obj);
|
||||
EAPI E_Zone *e_comp_object_util_zone_get(Evas_Object *obj);
|
||||
EAPI void e_comp_object_util_del_list_append(Evas_Object *obj, Evas_Object *to_del);
|
||||
|
|
Loading…
Reference in New Issue