forked from enlightenment/enlightenment
Added support for shaped window borders. Also reduced each border to be 1 evas
and 1 ebit, with an obscure rectangle covering the client area. Right now, all borders (except borderless windows) are considered shaped, would be good to add a way to indicate non-shaped themes. SVN revision: 6383
This commit is contained in:
parent
ef34f0818d
commit
ed19a69d65
|
@ -869,9 +869,6 @@ e_act_resize_start(E_Object * object, E_Action * a, void *data, int x, int y,
|
||||||
if (resize_mode >= E_GUIDES_BOX)
|
if (resize_mode >= E_GUIDES_BOX)
|
||||||
b->hold_changes = 1; /* if non opaque */
|
b->hold_changes = 1; /* if non opaque */
|
||||||
ecore_window_gravity_set(b->win.client, StaticGravity);
|
ecore_window_gravity_set(b->win.client, StaticGravity);
|
||||||
ecore_window_gravity_set(b->win.l, NorthWestGravity);
|
|
||||||
ecore_window_gravity_set(b->win.r, SouthEastGravity);
|
|
||||||
ecore_window_gravity_set(b->win.t, NorthWestGravity);
|
|
||||||
ecore_window_gravity_set(b->win.b, SouthEastGravity);
|
ecore_window_gravity_set(b->win.b, SouthEastGravity);
|
||||||
ecore_window_gravity_set(b->win.input, NorthWestGravity);
|
ecore_window_gravity_set(b->win.input, NorthWestGravity);
|
||||||
ecore_window_gravity_set(b->win.container, NorthWestGravity);
|
ecore_window_gravity_set(b->win.container, NorthWestGravity);
|
||||||
|
@ -1074,9 +1071,6 @@ e_act_resize_h_start(E_Object * object, E_Action * a, void *data, int x, int y,
|
||||||
if (resize_mode >= E_GUIDES_BOX)
|
if (resize_mode >= E_GUIDES_BOX)
|
||||||
b->hold_changes = 1; /* if non opaque */
|
b->hold_changes = 1; /* if non opaque */
|
||||||
ecore_window_gravity_set(b->win.client, StaticGravity);
|
ecore_window_gravity_set(b->win.client, StaticGravity);
|
||||||
ecore_window_gravity_set(b->win.l, NorthWestGravity);
|
|
||||||
ecore_window_gravity_set(b->win.r, SouthEastGravity);
|
|
||||||
ecore_window_gravity_set(b->win.t, NorthWestGravity);
|
|
||||||
ecore_window_gravity_set(b->win.b, SouthEastGravity);
|
ecore_window_gravity_set(b->win.b, SouthEastGravity);
|
||||||
ecore_window_gravity_set(b->win.input, NorthWestGravity);
|
ecore_window_gravity_set(b->win.input, NorthWestGravity);
|
||||||
ecore_window_gravity_set(b->win.container, NorthWestGravity);
|
ecore_window_gravity_set(b->win.container, NorthWestGravity);
|
||||||
|
@ -1239,9 +1233,6 @@ e_act_resize_v_start(E_Object * object, E_Action * a, void *data, int x, int y,
|
||||||
if (resize_mode >= E_GUIDES_BOX)
|
if (resize_mode >= E_GUIDES_BOX)
|
||||||
b->hold_changes = 1; /* if non opaque */
|
b->hold_changes = 1; /* if non opaque */
|
||||||
ecore_window_gravity_set(b->win.client, StaticGravity);
|
ecore_window_gravity_set(b->win.client, StaticGravity);
|
||||||
ecore_window_gravity_set(b->win.l, NorthWestGravity);
|
|
||||||
ecore_window_gravity_set(b->win.r, SouthEastGravity);
|
|
||||||
ecore_window_gravity_set(b->win.t, NorthWestGravity);
|
|
||||||
ecore_window_gravity_set(b->win.b, SouthEastGravity);
|
ecore_window_gravity_set(b->win.b, SouthEastGravity);
|
||||||
ecore_window_gravity_set(b->win.input, NorthWestGravity);
|
ecore_window_gravity_set(b->win.input, NorthWestGravity);
|
||||||
ecore_window_gravity_set(b->win.container, NorthWestGravity);
|
ecore_window_gravity_set(b->win.container, NorthWestGravity);
|
||||||
|
@ -1837,7 +1828,8 @@ e_act_max_start(E_Object * object, E_Action * a, void *data, int x, int y,
|
||||||
b->current.requested.w = b->current.w;
|
b->current.requested.w = b->current.w;
|
||||||
b->current.requested.h = b->current.h;
|
b->current.requested.h = b->current.h;
|
||||||
|
|
||||||
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_BORDER_UNMAXIMIZE, NULL);
|
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_BORDER_UNMAXIMIZE,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1857,7 +1849,8 @@ e_act_max_start(E_Object * object, E_Action * a, void *data, int x, int y,
|
||||||
b->current.requested.w = b->current.w;
|
b->current.requested.w = b->current.w;
|
||||||
b->current.requested.h = b->current.h;
|
b->current.requested.h = b->current.h;
|
||||||
|
|
||||||
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_BORDER_MAXIMIZE, NULL);
|
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_BORDER_MAXIMIZE,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
D_RETURN;
|
D_RETURN;
|
||||||
|
|
597
src/border.c
597
src/border.c
|
@ -124,10 +124,7 @@ e_border_update_borders(void)
|
||||||
b = l->data;
|
b = l->data;
|
||||||
if (b->first_expose)
|
if (b->first_expose)
|
||||||
{
|
{
|
||||||
evas_render(b->evas.l);
|
evas_render(b->evas);
|
||||||
evas_render(b->evas.r);
|
|
||||||
evas_render(b->evas.t);
|
|
||||||
evas_render(b->evas.b);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e_db_runtime_flush();
|
e_db_runtime_flush();
|
||||||
|
@ -190,8 +187,8 @@ e_configure_request(Ecore_Event * ev)
|
||||||
int pl, pr, pt, pb;
|
int pl, pr, pt, pb;
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
if (e->mask & ECORE_EVENT_VALUE_X)
|
if (e->mask & ECORE_EVENT_VALUE_X)
|
||||||
b->current.requested.x = e->x;
|
b->current.requested.x = e->x;
|
||||||
if (e->mask & ECORE_EVENT_VALUE_Y)
|
if (e->mask & ECORE_EVENT_VALUE_Y)
|
||||||
|
@ -476,7 +473,8 @@ e_focus_in(Ecore_Event * ev)
|
||||||
e_border_focus_grab_ended();
|
e_border_focus_grab_ended();
|
||||||
b->current.selected = 1;
|
b->current.selected = 1;
|
||||||
b->changed = 1;
|
b->changed = 1;
|
||||||
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_BORDER_FOCUS_IN, NULL);
|
e_observee_notify_observers(E_OBSERVEE(b), E_EVENT_BORDER_FOCUS_IN,
|
||||||
|
NULL);
|
||||||
g = b->click_grab;
|
g = b->click_grab;
|
||||||
if (g)
|
if (g)
|
||||||
{
|
{
|
||||||
|
@ -603,25 +601,7 @@ e_mouse_down(Ecore_Event * ev)
|
||||||
Evas evas;
|
Evas evas;
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
evas = b->evas.l;
|
evas = b->evas;
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_button_down(evas, x, y, e->button);
|
|
||||||
evas = b->evas.r;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_button_down(evas, x, y, e->button);
|
|
||||||
evas = b->evas.t;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_button_down(evas, x, y, e->button);
|
|
||||||
evas = b->evas.b;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
ecore_window_get_root_relative_location(evas_get_window(evas),
|
||||||
&x, &y);
|
&x, &y);
|
||||||
x = e->rx - x;
|
x = e->rx - x;
|
||||||
|
@ -663,25 +643,7 @@ e_mouse_up(Ecore_Event * ev)
|
||||||
Evas evas;
|
Evas evas;
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
evas = b->evas.l;
|
evas = b->evas;
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_button_up(evas, x, y, e->button);
|
|
||||||
evas = b->evas.r;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_button_up(evas, x, y, e->button);
|
|
||||||
evas = b->evas.t;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_button_up(evas, x, y, e->button);
|
|
||||||
evas = b->evas.b;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
ecore_window_get_root_relative_location(evas_get_window(evas),
|
||||||
&x, &y);
|
&x, &y);
|
||||||
x = e->rx - x;
|
x = e->rx - x;
|
||||||
|
@ -723,25 +685,7 @@ e_mouse_move(Ecore_Event * ev)
|
||||||
Evas evas;
|
Evas evas;
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
evas = b->evas.l;
|
evas = b->evas;
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_move(evas, x, y);
|
|
||||||
evas = b->evas.r;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_move(evas, x, y);
|
|
||||||
evas = b->evas.t;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
|
||||||
&x, &y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_move(evas, x, y);
|
|
||||||
evas = b->evas.b;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas),
|
ecore_window_get_root_relative_location(evas_get_window(evas),
|
||||||
&x, &y);
|
&x, &y);
|
||||||
x = e->rx - x;
|
x = e->rx - x;
|
||||||
|
@ -774,31 +718,7 @@ e_mouse_in(Ecore_Event * ev)
|
||||||
int x, y;
|
int x, y;
|
||||||
Evas evas;
|
Evas evas;
|
||||||
|
|
||||||
evas = b->evas.l;
|
evas = b->evas;
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas), &x,
|
|
||||||
&y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_move(evas, x, y);
|
|
||||||
evas_event_enter(evas);
|
|
||||||
|
|
||||||
evas = b->evas.r;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas), &x,
|
|
||||||
&y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_move(evas, x, y);
|
|
||||||
evas_event_enter(evas);
|
|
||||||
|
|
||||||
evas = b->evas.t;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas), &x,
|
|
||||||
&y);
|
|
||||||
x = e->rx - x;
|
|
||||||
y = e->ry - y;
|
|
||||||
evas_event_move(evas, x, y);
|
|
||||||
evas_event_enter(evas);
|
|
||||||
|
|
||||||
evas = b->evas.b;
|
|
||||||
ecore_window_get_root_relative_location(evas_get_window(evas), &x,
|
ecore_window_get_root_relative_location(evas_get_window(evas), &x,
|
||||||
&y);
|
&y);
|
||||||
x = e->rx - x;
|
x = e->rx - x;
|
||||||
|
@ -831,10 +751,7 @@ e_mouse_out(Ecore_Event * ev)
|
||||||
e_cb_border_mouse_out(b, ev);
|
e_cb_border_mouse_out(b, ev);
|
||||||
if (e->win == b->win.input)
|
if (e->win == b->win.input)
|
||||||
{
|
{
|
||||||
evas_event_leave(b->evas.l);
|
evas_event_leave(b->evas);
|
||||||
evas_event_leave(b->evas.r);
|
|
||||||
evas_event_leave(b->evas.t);
|
|
||||||
evas_event_leave(b->evas.b);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1284,32 +1201,14 @@ e_border_cleanup(E_Border * b)
|
||||||
b->menus = evas_list_remove(b->menus, m);
|
b->menus = evas_list_remove(b->menus, m);
|
||||||
}
|
}
|
||||||
e_desktops_del_border(b->desk, b);
|
e_desktops_del_border(b->desk, b);
|
||||||
if (b->bits.l)
|
|
||||||
ebits_free(b->bits.l);
|
|
||||||
if (b->bits.r)
|
|
||||||
ebits_free(b->bits.r);
|
|
||||||
if (b->bits.t)
|
|
||||||
ebits_free(b->bits.t);
|
|
||||||
if (b->bits.b)
|
if (b->bits.b)
|
||||||
ebits_free(b->bits.b);
|
ebits_free(b->bits.b);
|
||||||
|
|
||||||
if (b->obj.title.l)
|
if (b->obj.title)
|
||||||
e_text_free(b->obj.title.l);
|
e_text_free(b->obj.title);
|
||||||
if (b->obj.title.r)
|
|
||||||
e_text_free(b->obj.title.r);
|
|
||||||
if (b->obj.title.t)
|
|
||||||
e_text_free(b->obj.title.t);
|
|
||||||
if (b->obj.title.b)
|
|
||||||
e_text_free(b->obj.title.b);
|
|
||||||
|
|
||||||
evases = evas_list_remove(evases, b->evas.l);
|
evases = evas_list_remove(evases, b->evas);
|
||||||
evases = evas_list_remove(evases, b->evas.r);
|
evas_free(b->evas);
|
||||||
evases = evas_list_remove(evases, b->evas.t);
|
|
||||||
evases = evas_list_remove(evases, b->evas.b);
|
|
||||||
evas_free(b->evas.l);
|
|
||||||
evas_free(b->evas.r);
|
|
||||||
evas_free(b->evas.t);
|
|
||||||
evas_free(b->evas.b);
|
|
||||||
ecore_window_destroy(b->win.container);
|
ecore_window_destroy(b->win.container);
|
||||||
ecore_window_destroy(b->win.input);
|
ecore_window_destroy(b->win.input);
|
||||||
ecore_window_destroy(b->win.main);
|
ecore_window_destroy(b->win.main);
|
||||||
|
@ -1352,7 +1251,10 @@ e_border_apply_border(E_Border * b)
|
||||||
|
|
||||||
style = "default";
|
style = "default";
|
||||||
if ((!b->client.titlebar) && (!b->client.border))
|
if ((!b->client.titlebar) && (!b->client.border))
|
||||||
|
{
|
||||||
style = "borderless";
|
style = "borderless";
|
||||||
|
b->current.has_shape = 0;
|
||||||
|
}
|
||||||
if (b->border_style)
|
if (b->border_style)
|
||||||
style = b->border_style;
|
style = b->border_style;
|
||||||
|
|
||||||
|
@ -1379,8 +1281,8 @@ e_border_apply_border(E_Border * b)
|
||||||
e_border_set_bits(b, buf);
|
e_border_set_bits(b, buf);
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
e_icccm_set_frame_size(b->win.client, pl, pr, pt, pb);
|
e_icccm_set_frame_size(b->win.client, pl, pr, pt, pb);
|
||||||
|
|
||||||
D_RETURN;
|
D_RETURN;
|
||||||
|
@ -1390,6 +1292,7 @@ void
|
||||||
e_border_reshape(E_Border * b)
|
e_border_reshape(E_Border * b)
|
||||||
{
|
{
|
||||||
static Window shape_win = 0;
|
static Window shape_win = 0;
|
||||||
|
static Evas e = NULL;
|
||||||
int pl, pr, pt, pb;
|
int pl, pr, pt, pb;
|
||||||
|
|
||||||
D_ENTER;
|
D_ENTER;
|
||||||
|
@ -1402,8 +1305,8 @@ e_border_reshape(E_Border * b)
|
||||||
if (!shape_win)
|
if (!shape_win)
|
||||||
shape_win = ecore_window_override_new(0, 0, 0, 1, 1);
|
shape_win = ecore_window_override_new(0, 0, 0, 1, 1);
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
b->shape_changed = 0;
|
b->shape_changed = 0;
|
||||||
|
|
||||||
if ((!b->current.shaped_client) && (!b->current.has_shape))
|
if ((!b->current.shaped_client) && (!b->current.has_shape))
|
||||||
|
@ -1412,6 +1315,14 @@ e_border_reshape(E_Border * b)
|
||||||
D_RETURN;
|
D_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!e)
|
||||||
|
{
|
||||||
|
e = evas_new();
|
||||||
|
evas_set_output_method(e, RENDER_METHOD_IMAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
ecore_window_resize(shape_win, b->current.w, b->current.h);
|
||||||
|
|
||||||
if ((b->current.shaped_client) && (!b->current.has_shape))
|
if ((b->current.shaped_client) && (!b->current.has_shape))
|
||||||
{
|
{
|
||||||
XRectangle rects[4];
|
XRectangle rects[4];
|
||||||
|
@ -1420,98 +1331,105 @@ e_border_reshape(E_Border * b)
|
||||||
rects[0].y = 0;
|
rects[0].y = 0;
|
||||||
rects[0].width = b->current.w;
|
rects[0].width = b->current.w;
|
||||||
rects[0].height = pt;
|
rects[0].height = pt;
|
||||||
|
|
||||||
rects[1].x = 0;
|
rects[1].x = 0;
|
||||||
rects[1].y = pt;
|
rects[1].y = pt;
|
||||||
rects[1].width = pl;
|
rects[1].width = pl;
|
||||||
rects[1].height = b->current.h - pt - pb;
|
rects[1].height = b->current.h - pt - pb;
|
||||||
|
|
||||||
rects[2].x = b->current.w - pr;
|
rects[2].x = b->current.w - pr;
|
||||||
rects[2].y = pt;
|
rects[2].y = pt;
|
||||||
rects[2].width = pr;
|
rects[2].width = pr;
|
||||||
rects[2].height = b->current.h - pt - pb;
|
rects[2].height = b->current.h - pt - pb;
|
||||||
|
|
||||||
rects[3].x = 0;
|
rects[3].x = 0;
|
||||||
rects[3].y = b->current.h - pb;
|
rects[3].y = b->current.h - pb;
|
||||||
rects[3].width = b->current.w;
|
rects[3].width = b->current.w;
|
||||||
rects[3].height = pb;
|
rects[3].height = pb;
|
||||||
|
|
||||||
ecore_window_resize(shape_win, b->current.w, b->current.h);
|
|
||||||
ecore_window_set_shape_window(shape_win, b->win.client, pl,
|
ecore_window_set_shape_window(shape_win, b->win.client, pl,
|
||||||
pt - b->current.shaded);
|
pt - b->current.shaded);
|
||||||
ecore_window_clip_shape_by_rectangle(shape_win, pl, pt,
|
ecore_window_clip_shape_by_rectangle(shape_win, pl, pt,
|
||||||
b->current.w - pl - pr,
|
b->current.w - pl - pr,
|
||||||
b->current.h - pt - pb);
|
b->current.h - pt - pb);
|
||||||
|
|
||||||
ecore_window_add_shape_rectangles(shape_win, rects, 4);
|
ecore_window_add_shape_rectangles(shape_win, rects, 4);
|
||||||
ecore_window_set_shape_window(b->win.main, shape_win, 0, 0);
|
|
||||||
|
|
||||||
D_RETURN;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if ((!b->current.shaped_client) && (b->current.has_shape))
|
if ((!b->current.shaped_client) && (b->current.has_shape))
|
||||||
{
|
{
|
||||||
ecore_window_resize(shape_win, b->current.w, b->current.h);
|
|
||||||
ecore_window_set_shape_rectangle(shape_win, pl, pt - b->current.shaded,
|
ecore_window_set_shape_rectangle(shape_win, pl,
|
||||||
|
pt - b->current.shaded,
|
||||||
b->current.w - pl - pr,
|
b->current.w - pl - pr,
|
||||||
b->current.h - pt - pb);
|
b->current.h - pt - pb);
|
||||||
|
|
||||||
/* FIXME: later when i actually generate shape masks for borders */
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
XRectangle rects[4];
|
|
||||||
|
|
||||||
rects[0].x = 0;
|
|
||||||
rects[0].y = 0;
|
|
||||||
rects[0].width = b->current.w;
|
|
||||||
rects[0].height = pt;
|
|
||||||
rects[1].x = 0;
|
|
||||||
rects[1].y = pt;
|
|
||||||
rects[1].width = pl;
|
|
||||||
rects[1].height = b->current.h - pt - pb;
|
|
||||||
rects[2].x = b->current.w - pr;
|
|
||||||
rects[2].y = pt;
|
|
||||||
rects[2].width = pr;
|
|
||||||
rects[2].height = b->current.h - pt - pb;
|
|
||||||
rects[3].x = 0;
|
|
||||||
rects[3].y = b->current.h - pb;
|
|
||||||
rects[3].width = b->current.w;
|
|
||||||
rects[3].height = pb;
|
|
||||||
ecore_window_add_shape_rectangles(shape_win, rects, 4);
|
|
||||||
}
|
|
||||||
ecore_window_set_shape_window(b->win.main, shape_win, 0, 0);
|
|
||||||
D_RETURN;
|
|
||||||
}
|
|
||||||
if ((b->current.shaped_client) && (b->current.has_shape))
|
|
||||||
{
|
|
||||||
ecore_window_resize(shape_win, b->current.w, b->current.h);
|
|
||||||
ecore_window_set_shape_window(shape_win, b->win.client, pl,
|
ecore_window_set_shape_window(shape_win, b->win.client, pl,
|
||||||
pt - b->current.shaded);
|
pt - b->current.shaded);
|
||||||
ecore_window_clip_shape_by_rectangle(shape_win, pl, pt,
|
ecore_window_clip_shape_by_rectangle(shape_win, pl, pt,
|
||||||
b->current.w - pl - pr,
|
b->current.w - pl - pr,
|
||||||
b->current.h - pt - pb);
|
b->current.h - pt - pb);
|
||||||
|
|
||||||
/* FIXME: later when i actually generate shape masks for borders */
|
}
|
||||||
{
|
|
||||||
XRectangle rects[4];
|
if (b->bits.file)
|
||||||
|
{
|
||||||
|
Imlib_Image im;
|
||||||
|
Ebits_Object bit;
|
||||||
|
Pixmap pmap, mask;
|
||||||
|
|
||||||
|
printf("SHAPE update for border %s\n", b->bits.file);
|
||||||
|
pmap = ecore_pixmap_new(shape_win, b->current.w, b->current.h, 0);
|
||||||
|
mask = ecore_pixmap_new(shape_win, b->current.w, b->current.h, 1);
|
||||||
|
|
||||||
|
im = imlib_create_image(b->current.w, b->current.h);
|
||||||
|
imlib_context_set_image(im);
|
||||||
|
imlib_image_set_has_alpha(1);
|
||||||
|
imlib_image_clear();
|
||||||
|
|
||||||
|
evas_set_output_image(e, im);
|
||||||
|
evas_set_output_size(e, b->current.w, b->current.h);
|
||||||
|
evas_set_output_viewport(e, 0, 0, b->current.w, b->current.h);
|
||||||
|
|
||||||
|
bit = ebits_load(b->bits.file);
|
||||||
|
ebits_add_to_evas(bit, e);
|
||||||
|
ebits_move(bit, 0, 0);
|
||||||
|
ebits_resize(bit, b->current.w, b->current.h);
|
||||||
|
ebits_show(bit);
|
||||||
|
|
||||||
|
evas_update_rect(e, 0, 0, b->current.w, b->current.h);
|
||||||
|
evas_render(e);
|
||||||
|
|
||||||
|
ebits_hide(bit);
|
||||||
|
ebits_free(bit);
|
||||||
|
|
||||||
|
imlib_context_set_image(im);
|
||||||
|
imlib_context_set_dither_mask(1);
|
||||||
|
imlib_context_set_dither(1);
|
||||||
|
imlib_context_set_drawable(pmap);
|
||||||
|
imlib_context_set_mask(mask);
|
||||||
|
imlib_context_set_blend(0);
|
||||||
|
imlib_context_set_color_modifier(NULL);
|
||||||
|
imlib_render_image_on_drawable(0, 0);
|
||||||
|
imlib_free_image();
|
||||||
|
|
||||||
|
ecore_window_set_background_pixmap(shape_win, pmap);
|
||||||
|
ecore_window_add_shape_mask(shape_win, mask);
|
||||||
|
ecore_window_clear(shape_win);
|
||||||
|
|
||||||
|
ecore_pixmap_free(pmap);
|
||||||
|
ecore_pixmap_free(mask);
|
||||||
|
}
|
||||||
|
|
||||||
rects[0].x = 0;
|
|
||||||
rects[0].y = 0;
|
|
||||||
rects[0].width = b->current.w;
|
|
||||||
rects[0].height = pt;
|
|
||||||
rects[1].x = 0;
|
|
||||||
rects[1].y = pt;
|
|
||||||
rects[1].width = pl;
|
|
||||||
rects[1].height = b->current.h - pt - pb;
|
|
||||||
rects[2].x = b->current.w - pr;
|
|
||||||
rects[2].y = pt;
|
|
||||||
rects[2].width = pr;
|
|
||||||
rects[2].height = b->current.h - pt - pb;
|
|
||||||
rects[3].x = 0;
|
|
||||||
rects[3].y = b->current.h - pb;
|
|
||||||
rects[3].width = b->current.w;
|
|
||||||
rects[3].height = pb;
|
|
||||||
ecore_window_add_shape_rectangles(shape_win, rects, 4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ecore_window_set_shape_window(b->win.main, shape_win, 0, 0);
|
ecore_window_set_shape_window(b->win.main, shape_win, 0, 0);
|
||||||
D_RETURN;
|
|
||||||
}
|
|
||||||
|
|
||||||
D_RETURN;
|
D_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -1524,8 +1442,8 @@ e_border_release(E_Border * b)
|
||||||
D_ENTER;
|
D_ENTER;
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
ecore_window_reparent(b->win.client, 0, b->current.x + pl,
|
ecore_window_reparent(b->win.client, 0, b->current.x + pl,
|
||||||
b->current.y + pt);
|
b->current.y + pt);
|
||||||
e_icccm_release(b->win.client);
|
e_icccm_release(b->win.client);
|
||||||
|
@ -1606,8 +1524,8 @@ e_border_adopt(Window win, int use_client_pos)
|
||||||
int pl, pr, pt, pb;
|
int pl, pr, pt, pb;
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.l)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.l, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
b->current.requested.x += pl;
|
b->current.requested.x += pl;
|
||||||
b->current.requested.y += pt;
|
b->current.requested.y += pt;
|
||||||
b->changed = 1;
|
b->changed = 1;
|
||||||
|
@ -1619,8 +1537,8 @@ e_border_adopt(Window win, int use_client_pos)
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
x = y = 0;
|
x = y = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
bw *= 2;
|
bw *= 2;
|
||||||
if (b->client.pos.requested)
|
if (b->client.pos.requested)
|
||||||
{
|
{
|
||||||
|
@ -1725,6 +1643,8 @@ e_border_new(void)
|
||||||
|
|
||||||
D("BORDER CREATED AT %p\n", b);
|
D("BORDER CREATED AT %p\n", b);
|
||||||
|
|
||||||
|
b->current.has_shape = 1;
|
||||||
|
|
||||||
b->current.requested.w = 1;
|
b->current.requested.w = 1;
|
||||||
b->current.requested.h = 1;
|
b->current.requested.h = 1;
|
||||||
b->client.min.w = 1;
|
b->client.min.w = 1;
|
||||||
|
@ -1754,81 +1674,28 @@ e_border_new(void)
|
||||||
ecore_window_show(b->win.input);
|
ecore_window_show(b->win.input);
|
||||||
ecore_window_show(b->win.container);
|
ecore_window_show(b->win.container);
|
||||||
|
|
||||||
b->evas.l = evas_new_all(ecore_display_get(),
|
b->evas = evas_new_all(ecore_display_get(),
|
||||||
b->win.main,
|
b->win.main,
|
||||||
0, 0, 1, 1,
|
0, 0, 1, 1,
|
||||||
RENDER_METHOD_ALPHA_SOFTWARE,
|
RENDER_METHOD_ALPHA_SOFTWARE,
|
||||||
max_colors, font_cache, image_cache, font_dir);
|
max_colors, font_cache, image_cache, font_dir);
|
||||||
b->win.l = evas_get_window(b->evas.l);
|
b->win.b = evas_get_window(b->evas);
|
||||||
b->evas.r = evas_new_all(ecore_display_get(),
|
|
||||||
b->win.main,
|
|
||||||
0, 0, 1, 1,
|
|
||||||
RENDER_METHOD_ALPHA_SOFTWARE,
|
|
||||||
max_colors, font_cache, image_cache, font_dir);
|
|
||||||
b->win.r = evas_get_window(b->evas.r);
|
|
||||||
b->evas.t = evas_new_all(ecore_display_get(),
|
|
||||||
b->win.main,
|
|
||||||
0, 0, 1, 1,
|
|
||||||
RENDER_METHOD_ALPHA_SOFTWARE,
|
|
||||||
max_colors, font_cache, image_cache, font_dir);
|
|
||||||
b->win.t = evas_get_window(b->evas.t);
|
|
||||||
b->evas.b = evas_new_all(ecore_display_get(),
|
|
||||||
b->win.main,
|
|
||||||
0, 0, 1, 1,
|
|
||||||
RENDER_METHOD_ALPHA_SOFTWARE,
|
|
||||||
max_colors, font_cache, image_cache, font_dir);
|
|
||||||
b->win.b = evas_get_window(b->evas.b);
|
|
||||||
e_cursors_display_in_window(b->win.l, "Default");
|
|
||||||
e_cursors_display_in_window(b->win.r, "Default");
|
|
||||||
e_cursors_display_in_window(b->win.t, "Default");
|
|
||||||
e_cursors_display_in_window(b->win.b, "Default");
|
e_cursors_display_in_window(b->win.b, "Default");
|
||||||
|
|
||||||
b->obj.title.l = e_text_new(b->evas.l, "", "title");
|
b->obj.title = e_text_new(b->evas, "", "title");
|
||||||
b->obj.title.r = e_text_new(b->evas.r, "", "title");
|
b->obj.title_clip = evas_add_rectangle(b->evas);
|
||||||
b->obj.title.t = e_text_new(b->evas.t, "", "title");
|
evas_set_color(b->evas, b->obj.title_clip, 255, 255, 255, 255);
|
||||||
b->obj.title.b = e_text_new(b->evas.b, "", "title");
|
e_text_show(b->obj.title);
|
||||||
|
evas_show(b->evas, b->obj.title_clip);
|
||||||
b->obj.title_clip.l = evas_add_rectangle(b->evas.l);
|
e_text_set_clip(b->obj.title, b->obj.title_clip);
|
||||||
b->obj.title_clip.r = evas_add_rectangle(b->evas.r);
|
|
||||||
b->obj.title_clip.t = evas_add_rectangle(b->evas.t);
|
|
||||||
b->obj.title_clip.b = evas_add_rectangle(b->evas.b);
|
|
||||||
|
|
||||||
evas_set_color(b->evas.l, b->obj.title_clip.l, 255, 255, 255, 255);
|
|
||||||
evas_set_color(b->evas.r, b->obj.title_clip.r, 255, 255, 255, 255);
|
|
||||||
evas_set_color(b->evas.t, b->obj.title_clip.t, 255, 255, 255, 255);
|
|
||||||
evas_set_color(b->evas.b, b->obj.title_clip.b, 255, 255, 255, 255);
|
|
||||||
|
|
||||||
e_text_show(b->obj.title.l);
|
|
||||||
e_text_show(b->obj.title.r);
|
|
||||||
e_text_show(b->obj.title.t);
|
|
||||||
e_text_show(b->obj.title.b);
|
|
||||||
|
|
||||||
evas_show(b->evas.l, b->obj.title_clip.l);
|
|
||||||
evas_show(b->evas.r, b->obj.title_clip.r);
|
|
||||||
evas_show(b->evas.t, b->obj.title_clip.t);
|
|
||||||
evas_show(b->evas.b, b->obj.title_clip.b);
|
|
||||||
|
|
||||||
e_text_set_clip(b->obj.title.l, b->obj.title_clip.l);
|
|
||||||
e_text_set_clip(b->obj.title.r, b->obj.title_clip.r);
|
|
||||||
e_text_set_clip(b->obj.title.t, b->obj.title_clip.t);
|
|
||||||
e_text_set_clip(b->obj.title.b, b->obj.title_clip.b);
|
|
||||||
|
|
||||||
ecore_window_raise(b->win.input);
|
ecore_window_raise(b->win.input);
|
||||||
ecore_window_raise(b->win.container);
|
ecore_window_raise(b->win.container);
|
||||||
|
|
||||||
evases = evas_list_append(evases, b->evas.l);
|
evases = evas_list_append(evases, b->evas);
|
||||||
evases = evas_list_append(evases, b->evas.r);
|
|
||||||
evases = evas_list_append(evases, b->evas.t);
|
|
||||||
evases = evas_list_append(evases, b->evas.b);
|
|
||||||
|
|
||||||
ecore_window_set_events(b->win.l, XEV_EXPOSE);
|
|
||||||
ecore_window_set_events(b->win.r, XEV_EXPOSE);
|
|
||||||
ecore_window_set_events(b->win.t, XEV_EXPOSE);
|
|
||||||
ecore_window_set_events(b->win.b, XEV_EXPOSE);
|
ecore_window_set_events(b->win.b, XEV_EXPOSE);
|
||||||
|
|
||||||
ecore_window_show(b->win.l);
|
|
||||||
ecore_window_show(b->win.r);
|
|
||||||
ecore_window_show(b->win.t);
|
|
||||||
ecore_window_show(b->win.b);
|
ecore_window_show(b->win.b);
|
||||||
|
|
||||||
e_border_attach_mouse_grabs(b);
|
e_border_attach_mouse_grabs(b);
|
||||||
|
@ -2078,9 +1945,7 @@ e_border_find_by_window(Window win)
|
||||||
if ((win == b->win.main) ||
|
if ((win == b->win.main) ||
|
||||||
(win == b->win.client) ||
|
(win == b->win.client) ||
|
||||||
(win == b->win.container) ||
|
(win == b->win.container) ||
|
||||||
(win == b->win.input) ||
|
(win == b->win.input) || (win == b->win.b))
|
||||||
(win == b->win.l) ||
|
|
||||||
(win == b->win.r) || (win == b->win.t) || (win == b->win.b))
|
|
||||||
D_RETURN_(b);
|
D_RETURN_(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2097,58 +1962,42 @@ e_border_set_bits(E_Border * b, char *file)
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
ppl = ppr = ppt = ppb = 0;
|
ppl = ppr = ppt = ppb = 0;
|
||||||
|
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
|
|
||||||
if (b->bits.l)
|
|
||||||
ebits_free(b->bits.l);
|
|
||||||
if (b->bits.r)
|
|
||||||
ebits_free(b->bits.r);
|
|
||||||
if (b->bits.t)
|
|
||||||
ebits_free(b->bits.t);
|
|
||||||
if (b->bits.b)
|
if (b->bits.b)
|
||||||
ebits_free(b->bits.b);
|
ebits_free(b->bits.b);
|
||||||
|
if (b->bits.file)
|
||||||
|
free(b->bits.file);
|
||||||
|
|
||||||
b->bits.l = ebits_load(file);
|
|
||||||
b->bits.r = ebits_load(file);
|
|
||||||
b->bits.t = ebits_load(file);
|
|
||||||
b->bits.b = ebits_load(file);
|
b->bits.b = ebits_load(file);
|
||||||
|
if (b->bits.b)
|
||||||
|
b->bits.file = strdup(file);
|
||||||
b->bits.new = 1;
|
b->bits.new = 1;
|
||||||
b->changed = 1;
|
b->changed = 1;
|
||||||
|
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &ppl, &ppr, &ppt, &ppb);
|
ebits_get_insets(b->bits.b, &ppl, &ppr, &ppt, &ppb);
|
||||||
b->current.requested.w -= (pl + pr) - (ppl + ppr);
|
b->current.requested.w -= (pl + pr) - (ppl + ppr);
|
||||||
b->current.requested.h -= (pt + pb) - (ppt + ppb);
|
b->current.requested.h -= (pt + pb) - (ppt + ppb);
|
||||||
b->current.requested.x += (pl - ppl);
|
b->current.requested.x += (pl - ppl);
|
||||||
b->current.requested.y += (pt - ppt);
|
b->current.requested.y += (pt - ppt);
|
||||||
|
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
{
|
{
|
||||||
ebits_add_to_evas(b->bits.l, b->evas.l);
|
|
||||||
ebits_move(b->bits.l, 0, 0);
|
|
||||||
ebits_show(b->bits.l);
|
|
||||||
|
|
||||||
ebits_add_to_evas(b->bits.r, b->evas.r);
|
ebits_add_to_evas(b->bits.b, b->evas);
|
||||||
ebits_move(b->bits.r, 0, 0);
|
|
||||||
ebits_show(b->bits.r);
|
|
||||||
|
|
||||||
ebits_add_to_evas(b->bits.t, b->evas.t);
|
|
||||||
ebits_move(b->bits.t, 0, 0);
|
|
||||||
ebits_show(b->bits.t);
|
|
||||||
|
|
||||||
ebits_add_to_evas(b->bits.b, b->evas.b);
|
|
||||||
ebits_move(b->bits.b, 0, 0);
|
ebits_move(b->bits.b, 0, 0);
|
||||||
ebits_show(b->bits.b);
|
ebits_show(b->bits.b);
|
||||||
|
|
||||||
e_border_set_color_class(b, "Title BG", 100, 200, 255, 255);
|
e_border_set_color_class(b, "Title BG", 100, 200, 255, 255);
|
||||||
|
|
||||||
#define HOOK_CB(_class) \
|
#define HOOK_CB(_class) \
|
||||||
ebits_set_classed_bit_callback(b->bits.t, _class, CALLBACK_MOUSE_IN, e_cb_mouse_in, b); \
|
ebits_set_classed_bit_callback(b->bits.b, _class, CALLBACK_MOUSE_IN, e_cb_mouse_in, b); \
|
||||||
ebits_set_classed_bit_callback(b->bits.t, _class, CALLBACK_MOUSE_OUT, e_cb_mouse_out, b); \
|
ebits_set_classed_bit_callback(b->bits.b, _class, CALLBACK_MOUSE_OUT, e_cb_mouse_out, b); \
|
||||||
ebits_set_classed_bit_callback(b->bits.t, _class, CALLBACK_MOUSE_DOWN, e_cb_mouse_down, b); \
|
ebits_set_classed_bit_callback(b->bits.b, _class, CALLBACK_MOUSE_DOWN, e_cb_mouse_down, b); \
|
||||||
ebits_set_classed_bit_callback(b->bits.t, _class, CALLBACK_MOUSE_UP, e_cb_mouse_up, b); \
|
ebits_set_classed_bit_callback(b->bits.b, _class, CALLBACK_MOUSE_UP, e_cb_mouse_up, b); \
|
||||||
ebits_set_classed_bit_callback(b->bits.t, _class, CALLBACK_MOUSE_MOVE, e_cb_mouse_move, b);
|
ebits_set_classed_bit_callback(b->bits.b, _class, CALLBACK_MOUSE_MOVE, e_cb_mouse_move, b);
|
||||||
HOOK_CB("Title_Bar");
|
HOOK_CB("Title_Bar");
|
||||||
HOOK_CB("Resize");
|
HOOK_CB("Resize");
|
||||||
HOOK_CB("Resize_Horizontal");
|
HOOK_CB("Resize_Horizontal");
|
||||||
|
@ -2170,9 +2019,6 @@ e_border_set_color_class(E_Border * b, char *class, int rr, int gg, int bb,
|
||||||
{
|
{
|
||||||
D_ENTER;
|
D_ENTER;
|
||||||
|
|
||||||
ebits_set_color_class(b->bits.l, class, rr, gg, bb, aa);
|
|
||||||
ebits_set_color_class(b->bits.r, class, rr, gg, bb, aa);
|
|
||||||
ebits_set_color_class(b->bits.t, class, rr, gg, bb, aa);
|
|
||||||
ebits_set_color_class(b->bits.b, class, rr, gg, bb, aa);
|
ebits_set_color_class(b->bits.b, class, rr, gg, bb, aa);
|
||||||
|
|
||||||
D_RETURN;
|
D_RETURN;
|
||||||
|
@ -2206,8 +2052,8 @@ e_border_adjust_limits(E_Border * b)
|
||||||
b->current.h = 1;
|
b->current.h = 1;
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
|
|
||||||
if (b->current.w < (pl + pr + 1))
|
if (b->current.w < (pl + pr + 1))
|
||||||
b->current.w = pl + pr + 1;
|
b->current.w = pl + pr + 1;
|
||||||
|
@ -2218,15 +2064,15 @@ e_border_adjust_limits(E_Border * b)
|
||||||
h = b->current.h - pt - pb + b->current.shaded;
|
h = b->current.h - pt - pb + b->current.shaded;
|
||||||
|
|
||||||
mx = my = 1;
|
mx = my = 1;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_min_size(b->bits.t, &mx, &my);
|
ebits_get_min_size(b->bits.b, &mx, &my);
|
||||||
if (b->current.w < mx)
|
if (b->current.w < mx)
|
||||||
b->current.w = mx;
|
b->current.w = mx;
|
||||||
if (b->current.h < my)
|
if (b->current.h < my)
|
||||||
b->current.h = my;
|
b->current.h = my;
|
||||||
mx = my = 999999;
|
mx = my = 999999;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_max_size(b->bits.t, &mx, &my);
|
ebits_get_max_size(b->bits.b, &mx, &my);
|
||||||
if (b->current.w > mx)
|
if (b->current.w > mx)
|
||||||
b->current.w = mx;
|
b->current.w = mx;
|
||||||
if (b->current.h > my)
|
if (b->current.h > my)
|
||||||
|
@ -2362,8 +2208,8 @@ e_border_update(E_Border * b)
|
||||||
|
|
||||||
ecore_window_move(b->win.main, b->current.x, b->current.y);
|
ecore_window_move(b->win.main, b->current.x, b->current.y);
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
e_icccm_move_resize(b->win.client,
|
e_icccm_move_resize(b->win.client,
|
||||||
b->current.x + pl,
|
b->current.x + pl,
|
||||||
b->current.y + pt, b->client.w, b->client.h);
|
b->current.y + pt, b->client.w, b->client.h);
|
||||||
|
@ -2382,8 +2228,8 @@ e_border_update(E_Border * b)
|
||||||
if ((b->current.w < b->previous.w) || (b->current.h < b->previous.h))
|
if ((b->current.w < b->previous.w) || (b->current.h < b->previous.h))
|
||||||
smaller = 1;
|
smaller = 1;
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
ecore_window_move_resize(b->win.input,
|
ecore_window_move_resize(b->win.input,
|
||||||
0, 0, b->current.w, b->current.h);
|
0, 0, b->current.w, b->current.h);
|
||||||
if (smaller)
|
if (smaller)
|
||||||
|
@ -2411,49 +2257,16 @@ e_border_update(E_Border * b)
|
||||||
ecore_window_move_resize(b->win.main,
|
ecore_window_move_resize(b->win.main,
|
||||||
b->current.x, b->current.y,
|
b->current.x, b->current.y,
|
||||||
b->current.w, b->current.h);
|
b->current.w, b->current.h);
|
||||||
x = 0, y = pt, w = pl, h = (b->current.h - pt - pb);
|
|
||||||
if ((w < 1) || (h < 1))
|
|
||||||
ecore_window_hide(b->win.l);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ecore_window_show(b->win.l);
|
|
||||||
ecore_window_move_resize(b->win.l, x, y, w, h);
|
|
||||||
evas_set_output_size(b->evas.l, w, h);
|
|
||||||
evas_set_output_viewport(b->evas.l, x, y, w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = 0, y = 0, w = b->current.w, h = pt;
|
x = 0, y = 0, w = b->current.w, h = b->current.h;
|
||||||
if ((w < 1) || (h < 1))
|
|
||||||
ecore_window_hide(b->win.t);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ecore_window_show(b->win.t);
|
|
||||||
ecore_window_move_resize(b->win.t, x, y, w, h);
|
|
||||||
evas_set_output_size(b->evas.t, w, h);
|
|
||||||
evas_set_output_viewport(b->evas.t, x, y, w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = b->current.w - pr, y = pt, w = pr, h =
|
|
||||||
(b->current.h - pt - pb);
|
|
||||||
if ((w < 1) || (h < 1))
|
|
||||||
ecore_window_hide(b->win.r);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ecore_window_show(b->win.r);
|
|
||||||
ecore_window_move_resize(b->win.r, x, y, w, h);
|
|
||||||
evas_set_output_size(b->evas.r, w, h);
|
|
||||||
evas_set_output_viewport(b->evas.r, x, y, w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = 0, y = b->current.h - pb, w = b->current.w, h = pb;
|
|
||||||
if ((w < 1) || (h < 1))
|
if ((w < 1) || (h < 1))
|
||||||
ecore_window_hide(b->win.b);
|
ecore_window_hide(b->win.b);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ecore_window_show(b->win.b);
|
ecore_window_show(b->win.b);
|
||||||
ecore_window_move_resize(b->win.b, x, y, w, h);
|
ecore_window_move_resize(b->win.b, x, y, w, h);
|
||||||
evas_set_output_size(b->evas.b, w, h);
|
evas_set_output_size(b->evas, w, h);
|
||||||
evas_set_output_viewport(b->evas.b, x, y, w, h);
|
evas_set_output_viewport(b->evas, x, y, w, h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2461,50 +2274,17 @@ e_border_update(E_Border * b)
|
||||||
ecore_window_move_resize(b->win.main,
|
ecore_window_move_resize(b->win.main,
|
||||||
b->current.x, b->current.y,
|
b->current.x, b->current.y,
|
||||||
b->current.w, b->current.h);
|
b->current.w, b->current.h);
|
||||||
x = 0, y = pt, w = pl, h = (b->current.h - pt - pb);
|
x = 0, y = 0, w = b->current.w, h = b->current.h;
|
||||||
if ((w < 1) || (h < 1))
|
|
||||||
ecore_window_hide(b->win.l);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ecore_window_show(b->win.l);
|
|
||||||
ecore_window_move_resize(b->win.l, x, y, w, h);
|
|
||||||
evas_set_output_size(b->evas.l, w, h);
|
|
||||||
evas_set_output_viewport(b->evas.l, x, y, w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = 0, y = 0, w = b->current.w, h = pt;
|
|
||||||
if ((w < 1) || (h < 1))
|
|
||||||
ecore_window_hide(b->win.t);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ecore_window_show(b->win.t);
|
|
||||||
ecore_window_move_resize(b->win.t, x, y, w, h);
|
|
||||||
evas_set_output_size(b->evas.t, w, h);
|
|
||||||
evas_set_output_viewport(b->evas.t, x, y, w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = b->current.w - pr, y = pt, w = pr, h =
|
|
||||||
(b->current.h - pt - pb);
|
|
||||||
if ((w < 1) || (h < 1))
|
|
||||||
ecore_window_hide(b->win.r);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ecore_window_show(b->win.r);
|
|
||||||
ecore_window_move_resize(b->win.r, x, y, w, h);
|
|
||||||
evas_set_output_size(b->evas.r, w, h);
|
|
||||||
evas_set_output_viewport(b->evas.r, x, y, w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = 0, y = b->current.h - pb, w = b->current.w, h = pb;
|
|
||||||
if ((w < 1) || (h < 1))
|
if ((w < 1) || (h < 1))
|
||||||
ecore_window_hide(b->win.b);
|
ecore_window_hide(b->win.b);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ecore_window_show(b->win.b);
|
ecore_window_show(b->win.b);
|
||||||
ecore_window_move_resize(b->win.b, x, y, w, h);
|
ecore_window_move_resize(b->win.b, x, y, w, h);
|
||||||
evas_set_output_size(b->evas.b, w, h);
|
evas_set_output_size(b->evas, w, h);
|
||||||
evas_set_output_viewport(b->evas.b, x, y, w, h);
|
evas_set_output_viewport(b->evas, x, y, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b->current.shaded == b->client.h)
|
if (b->current.shaded == b->client.h)
|
||||||
{
|
{
|
||||||
ecore_window_move_resize(b->win.container,
|
ecore_window_move_resize(b->win.container,
|
||||||
|
@ -2527,14 +2307,13 @@ e_border_update(E_Border * b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b->bits.l)
|
|
||||||
ebits_resize(b->bits.l, b->current.w, b->current.h);
|
|
||||||
if (b->bits.r)
|
|
||||||
ebits_resize(b->bits.r, b->current.w, b->current.h);
|
|
||||||
if (b->bits.t)
|
|
||||||
ebits_resize(b->bits.t, b->current.w, b->current.h);
|
|
||||||
if (b->bits.b)
|
if (b->bits.b)
|
||||||
|
{
|
||||||
ebits_resize(b->bits.b, b->current.w, b->current.h);
|
ebits_resize(b->bits.b, b->current.w, b->current.h);
|
||||||
|
evas_clear_obscured_rects(b->evas);
|
||||||
|
evas_add_obscured_rect(b->evas, pl, pt, b->current.w - pl - pr,
|
||||||
|
b->current.h - pt - pb);
|
||||||
|
}
|
||||||
|
|
||||||
e_icccm_move_resize(b->win.client,
|
e_icccm_move_resize(b->win.client,
|
||||||
b->current.x + pl,
|
b->current.x + pl,
|
||||||
|
@ -2542,74 +2321,27 @@ e_border_update(E_Border * b)
|
||||||
b->client.h);
|
b->client.h);
|
||||||
e_cb_border_move_resize(b);
|
e_cb_border_move_resize(b);
|
||||||
}
|
}
|
||||||
if ((b->client.title) && (b->bits.t))
|
if ((b->client.title) && (b->bits.b))
|
||||||
{
|
{
|
||||||
double tx, ty, tw, th;
|
double tx, ty, tw, th;
|
||||||
|
|
||||||
ebits_get_named_bit_geometry(b->bits.l, "Title_Area", &tx, &ty, &tw,
|
|
||||||
&th);
|
|
||||||
if (b->obj.title.l)
|
|
||||||
{
|
|
||||||
e_text_set_text(b->obj.title.l, b->client.title);
|
|
||||||
e_text_move(b->obj.title.l, tx, ty);
|
|
||||||
if (b->current.selected)
|
|
||||||
e_text_set_state(b->obj.title.l, "selected");
|
|
||||||
else
|
|
||||||
e_text_set_state(b->obj.title.l, "normal");
|
|
||||||
}
|
|
||||||
evas_move(b->evas.l, b->obj.title_clip.l, tx, ty);
|
|
||||||
evas_resize(b->evas.l, b->obj.title_clip.l, tw, th);
|
|
||||||
|
|
||||||
ebits_get_named_bit_geometry(b->bits.r, "Title_Area", &tx, &ty, &tw,
|
|
||||||
&th);
|
|
||||||
if (b->obj.title.r)
|
|
||||||
{
|
|
||||||
e_text_set_text(b->obj.title.r, b->client.title);
|
|
||||||
e_text_move(b->obj.title.r, tx, ty);
|
|
||||||
if (b->current.selected)
|
|
||||||
e_text_set_state(b->obj.title.r, "selected");
|
|
||||||
else
|
|
||||||
e_text_set_state(b->obj.title.r, "normal");
|
|
||||||
}
|
|
||||||
evas_move(b->evas.r, b->obj.title_clip.r, tx, ty);
|
|
||||||
evas_resize(b->evas.r, b->obj.title_clip.r, tw, th);
|
|
||||||
|
|
||||||
ebits_get_named_bit_geometry(b->bits.t, "Title_Area", &tx, &ty, &tw,
|
|
||||||
&th);
|
|
||||||
if (b->obj.title.t)
|
|
||||||
{
|
|
||||||
e_text_set_text(b->obj.title.t, b->client.title);
|
|
||||||
e_text_move(b->obj.title.t, tx, ty);
|
|
||||||
if (b->current.selected)
|
|
||||||
e_text_set_state(b->obj.title.t, "selected");
|
|
||||||
else
|
|
||||||
e_text_set_state(b->obj.title.t, "normal");
|
|
||||||
}
|
|
||||||
evas_move(b->evas.t, b->obj.title_clip.t, tx, ty);
|
|
||||||
evas_resize(b->evas.t, b->obj.title_clip.t, tw, th);
|
|
||||||
|
|
||||||
ebits_get_named_bit_geometry(b->bits.b, "Title_Area", &tx, &ty, &tw,
|
ebits_get_named_bit_geometry(b->bits.b, "Title_Area", &tx, &ty, &tw,
|
||||||
&th);
|
&th);
|
||||||
if (b->obj.title.b)
|
|
||||||
{
|
|
||||||
e_text_set_text(b->obj.title.b, b->client.title);
|
|
||||||
e_text_move(b->obj.title.b, tx, ty);
|
|
||||||
if (b->current.selected)
|
|
||||||
e_text_set_state(b->obj.title.b, "selected");
|
|
||||||
else
|
|
||||||
e_text_set_state(b->obj.title.b, "normal");
|
|
||||||
}
|
|
||||||
evas_move(b->evas.b, b->obj.title_clip.b, tx, ty);
|
|
||||||
evas_resize(b->evas.b, b->obj.title_clip.b, tw, th);
|
|
||||||
|
|
||||||
if (b->obj.title.l)
|
if (b->obj.title)
|
||||||
e_text_set_layer(b->obj.title.l, 1);
|
{
|
||||||
if (b->obj.title.r)
|
e_text_set_text(b->obj.title, b->client.title);
|
||||||
e_text_set_layer(b->obj.title.r, 1);
|
e_text_move(b->obj.title, tx, ty);
|
||||||
if (b->obj.title.t)
|
if (b->current.selected)
|
||||||
e_text_set_layer(b->obj.title.t, 1);
|
e_text_set_state(b->obj.title, "selected");
|
||||||
if (b->obj.title.b)
|
else
|
||||||
e_text_set_layer(b->obj.title.b, 1);
|
e_text_set_state(b->obj.title, "normal");
|
||||||
|
}
|
||||||
|
evas_move(b->evas, b->obj.title_clip, tx, ty);
|
||||||
|
evas_resize(b->evas, b->obj.title_clip, tw, th);
|
||||||
|
|
||||||
|
if (b->obj.title)
|
||||||
|
e_text_set_layer(b->obj.title, 1);
|
||||||
}
|
}
|
||||||
e_border_reshape(b);
|
e_border_reshape(b);
|
||||||
if (visibility_changed)
|
if (visibility_changed)
|
||||||
|
@ -2852,8 +2584,8 @@ e_border_adopt_children(Window win)
|
||||||
int pl, pr, pt, pb;
|
int pl, pr, pt, pb;
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.l)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.l, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
b->current.requested.x -= pl;
|
b->current.requested.x -= pl;
|
||||||
b->current.requested.y -= pt;
|
b->current.requested.y -= pt;
|
||||||
b->changed = 1;
|
b->changed = 1;
|
||||||
|
@ -3029,9 +2761,6 @@ e_border_set_gravity(E_Border * b, int gravity)
|
||||||
|
|
||||||
ecore_window_gravity_set(b->win.container, gravity);
|
ecore_window_gravity_set(b->win.container, gravity);
|
||||||
ecore_window_gravity_set(b->win.input, gravity);
|
ecore_window_gravity_set(b->win.input, gravity);
|
||||||
ecore_window_gravity_set(b->win.l, gravity);
|
|
||||||
ecore_window_gravity_set(b->win.r, gravity);
|
|
||||||
ecore_window_gravity_set(b->win.t, gravity);
|
|
||||||
ecore_window_gravity_set(b->win.b, gravity);
|
ecore_window_gravity_set(b->win.b, gravity);
|
||||||
|
|
||||||
D_RETURN;
|
D_RETURN;
|
||||||
|
|
29
src/border.h
29
src/border.h
|
@ -30,40 +30,25 @@ struct _E_Border
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
Window main;
|
Window main;
|
||||||
Window l, r, t, b;
|
Window b;
|
||||||
Window input;
|
Window input;
|
||||||
Window container;
|
Window container;
|
||||||
Window client;
|
Window client;
|
||||||
}
|
}
|
||||||
win;
|
win;
|
||||||
|
Evas evas;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
Evas l, r, t, b;
|
E_Text *title;
|
||||||
}
|
Evas_Object title_clip;
|
||||||
evas;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
E_Text *l, *r, *t, *b;
|
|
||||||
}
|
|
||||||
title;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
Evas_Object l, r, t, b;
|
|
||||||
}
|
|
||||||
title_clip;
|
|
||||||
}
|
}
|
||||||
obj;
|
obj;
|
||||||
struct
|
Pixmap pixmap;
|
||||||
{
|
|
||||||
Pixmap l, r, t, b;
|
|
||||||
}
|
|
||||||
pixmap;
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
int new;
|
int new;
|
||||||
Ebits_Object l, r, t, b;
|
char *file;
|
||||||
|
Ebits_Object b;
|
||||||
}
|
}
|
||||||
bits;
|
bits;
|
||||||
|
|
||||||
|
|
|
@ -460,8 +460,8 @@ e_bordermenu_do(E_Border * b)
|
||||||
|
|
||||||
menu = b->menus->data;
|
menu = b->menus->data;
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.t)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.t, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
crx = b->current.x + pl;
|
crx = b->current.x + pl;
|
||||||
cry = b->current.y + pt;
|
cry = b->current.y + pt;
|
||||||
crw = b->client.w;
|
crw = b->client.w;
|
||||||
|
|
|
@ -495,8 +495,8 @@ e_place_cascade(E_Border * b, E_Desktop * desk, int *x, int *y)
|
||||||
D_ENTER;
|
D_ENTER;
|
||||||
|
|
||||||
pl = pr = pt = pb = 0;
|
pl = pr = pt = pb = 0;
|
||||||
if (b->bits.l)
|
if (b->bits.b)
|
||||||
ebits_get_insets(b->bits.l, &pl, &pr, &pt, &pb);
|
ebits_get_insets(b->bits.b, &pl, &pr, &pt, &pb);
|
||||||
w = b->current.requested.w;
|
w = b->current.requested.w;
|
||||||
h = b->current.requested.h;
|
h = b->current.requested.h;
|
||||||
if ((count_x + w) > desk->real.w)
|
if ((count_x + w) > desk->real.w)
|
||||||
|
|
Loading…
Reference in New Issue