2005-06-18 08:49:24 -07:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
|
|
|
#include "e.h"
|
|
|
|
|
|
|
|
void
|
2005-06-19 07:59:41 -07:00
|
|
|
e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
|
2005-06-18 08:49:24 -07:00
|
|
|
{
|
|
|
|
Evas_List *l;
|
|
|
|
int cx1, cx2, cy1, cy2;
|
|
|
|
|
|
|
|
cx1 = bd->zone->x;
|
|
|
|
if (x1) cx1 = *x1;
|
|
|
|
|
|
|
|
cy1 = bd->zone->y;
|
|
|
|
if (y1) cy1 = *y1;
|
|
|
|
|
|
|
|
cx2 = bd->zone->x + bd->zone->w;
|
|
|
|
if (x2) cx2 = *x2;
|
|
|
|
|
|
|
|
cy2 = bd->zone->y + bd->zone->h;
|
|
|
|
if (y2) cy2 = *y2;
|
|
|
|
|
|
|
|
/* Find the smallest box */
|
|
|
|
for (l = bd->zone->container->gadman->clients; l; l = l->next)
|
|
|
|
{
|
|
|
|
E_Gadman_Client *gmc;
|
2005-06-19 07:59:41 -07:00
|
|
|
double ax, ay;
|
2005-06-18 08:49:24 -07:00
|
|
|
|
|
|
|
gmc = l->data;
|
|
|
|
if ((gmc->zone != bd->zone)) continue;
|
|
|
|
|
2005-06-19 07:59:41 -07:00
|
|
|
ax = gmc->ax;
|
|
|
|
ay = gmc->ay;
|
|
|
|
|
|
|
|
if (((ax == 0.0) || (ax == 1.0)) &&
|
|
|
|
((ay == 0.0) || (ay == 1.0)))
|
|
|
|
{
|
|
|
|
/* corner gadget */
|
|
|
|
/* Fake removal from one alignment :) */
|
|
|
|
if (gmc->w > gmc->h)
|
|
|
|
ax = 0.5;
|
|
|
|
else
|
|
|
|
ay = 0.5;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((ax == 0.0) && (gmc->x + gmc->w) > cx1)
|
2005-06-18 08:49:24 -07:00
|
|
|
cx1 = (gmc->x + gmc->w);
|
2005-06-19 07:59:41 -07:00
|
|
|
else if ((ax == 1.0) && (gmc->x < cx2))
|
2005-06-18 08:49:24 -07:00
|
|
|
cx2 = gmc->x;
|
2005-06-19 07:59:41 -07:00
|
|
|
else if ((ay == 0.0) && ((gmc->y + gmc->h) > cy1))
|
2005-06-18 08:49:24 -07:00
|
|
|
cy1 = (gmc->y + gmc->h);
|
2005-06-19 07:59:41 -07:00
|
|
|
else if ((ay == 1.0) && (gmc->y < cy2))
|
2005-06-18 08:49:24 -07:00
|
|
|
cy2 = gmc->y;
|
|
|
|
}
|
2005-06-19 07:59:41 -07:00
|
|
|
|
|
|
|
if (x1) *x1 = cx1;
|
|
|
|
if (y1) *y1 = cy1;
|
|
|
|
if (x2) *x2 = cx2;
|
|
|
|
if (y2) *y2 = cy2;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
e_maximize_border_gadman_fill(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
|
|
|
|
{
|
|
|
|
Evas_List *l;
|
|
|
|
int bx, by, bw, bh;
|
|
|
|
int cx1, cx2, cy1, cy2;
|
|
|
|
|
|
|
|
cx1 = bd->zone->x;
|
|
|
|
if (x1) cx1 = *x1;
|
|
|
|
|
|
|
|
cy1 = bd->zone->y;
|
|
|
|
if (y1) cy1 = *y1;
|
|
|
|
|
|
|
|
cx2 = bd->zone->x + bd->zone->w;
|
|
|
|
if (x2) cx2 = *x2;
|
|
|
|
|
|
|
|
cy2 = bd->zone->y + bd->zone->h;
|
|
|
|
if (y2) cy2 = *y2;
|
|
|
|
|
|
|
|
/* Loop four times. We expand left, up, right, down. */
|
|
|
|
/* FIXME: The right order? */
|
|
|
|
bx = bd->x;
|
|
|
|
by = bd->y;
|
|
|
|
bw = bd->w;
|
|
|
|
bh = bd->h;
|
|
|
|
for (l = bd->zone->container->gadman->clients; l; l = l->next)
|
|
|
|
{
|
|
|
|
/* expand left */
|
|
|
|
E_Gadman_Client *gmc;
|
|
|
|
int gx2;
|
|
|
|
|
|
|
|
gmc = l->data;
|
|
|
|
if ((gmc->zone != bd->zone)) continue;
|
|
|
|
|
|
|
|
gx2 = gmc->x + gmc->w;
|
|
|
|
if ((gx2 > cx1) && (gx2 <= bx) &&
|
|
|
|
E_INTERSECTS(0, gmc->y, bd->zone->w, gmc->h, 0, by, bd->zone->w, bh))
|
|
|
|
{
|
|
|
|
cx1 = gx2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bw += (bx - cx1);
|
|
|
|
bx = cx1;
|
|
|
|
for (l = bd->zone->container->gadman->clients; l; l = l->next)
|
|
|
|
{
|
|
|
|
/* expand up */
|
|
|
|
E_Gadman_Client *gmc;
|
|
|
|
int gy2;
|
|
|
|
|
|
|
|
gmc = l->data;
|
|
|
|
if ((gmc->zone != bd->zone)) continue;
|
|
|
|
|
|
|
|
gy2 = gmc->y + gmc->h;
|
|
|
|
if ((gy2 > cy1) && (gy2 <= by) &&
|
|
|
|
E_INTERSECTS(gmc->x, 0, gmc->w, bd->zone->h, bx, 0, bw, bd->zone->h))
|
|
|
|
{
|
|
|
|
cy1 = gy2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bh += (by - cy1);
|
|
|
|
by = cy1;
|
|
|
|
for (l = bd->zone->container->gadman->clients; l; l = l->next)
|
|
|
|
{
|
|
|
|
/* expand right */
|
|
|
|
E_Gadman_Client *gmc;
|
|
|
|
|
|
|
|
gmc = l->data;
|
|
|
|
if ((gmc->zone != bd->zone)) continue;
|
|
|
|
|
|
|
|
if ((gmc->x < cx2) && (gmc->x >= (bx + bw)) &&
|
|
|
|
E_INTERSECTS(0, gmc->y, bd->zone->w, gmc->h, 0, by, bd->zone->w, bh))
|
|
|
|
{
|
|
|
|
cx2 = gmc->x;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bw = (cx2 - cx1);
|
|
|
|
for (l = bd->zone->container->gadman->clients; l; l = l->next)
|
|
|
|
{
|
|
|
|
/* expand down */
|
|
|
|
E_Gadman_Client *gmc;
|
|
|
|
|
|
|
|
gmc = l->data;
|
|
|
|
if ((gmc->zone != bd->zone)) continue;
|
|
|
|
|
|
|
|
if ((gmc->y < cy2) && (gmc->y >= (by + bh)) &&
|
|
|
|
E_INTERSECTS(gmc->x, 0, gmc->w, bd->zone->h, bx, 0, bw, bd->zone->h))
|
|
|
|
{
|
|
|
|
cy2 = gmc->y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bh = (cy2 - cy1);
|
2005-06-18 08:49:24 -07:00
|
|
|
|
|
|
|
if (x1) *x1 = cx1;
|
|
|
|
if (y1) *y1 = cy1;
|
|
|
|
if (x2) *x2 = cx2;
|
|
|
|
if (y2) *y2 = cy2;
|
|
|
|
}
|