summaryrefslogtreecommitdiff
path: root/src/bin/e_place.c
diff options
context:
space:
mode:
authorCarsten Haitzler <raster@rasterman.com>2005-01-11 13:11:12 +0000
committerCarsten Haitzler <raster@rasterman.com>2005-01-11 13:11:12 +0000
commit899d272ed5584e14ea42b3e3dc50419ab8dee8d1 (patch)
treec01a75676ab53caf35b870a09e68b8f067087fb2 /src/bin/e_place.c
parent960fcb4bc42c0c601590254c34a278ca31aa8328 (diff)
downloadenlightenment-899d272ed5584e14ea42b3e3dc50419ab8dee8d1.tar.gz
respect zones for resistance, window placement...
SVN revision: 12898
Diffstat (limited to 'src/bin/e_place.c')
-rw-r--r--src/bin/e_place.c81
1 files changed, 43 insertions, 38 deletions
diff --git a/src/bin/e_place.c b/src/bin/e_place.c
index f254a38e0a..54d21bf3fd 100644
--- a/src/bin/e_place.c
+++ b/src/bin/e_place.c
@@ -1,7 +1,7 @@
#include "e.h"
int
-e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int y, int w, int h, int *rx, int *ry)
+e_place_zone_region_smart(E_Zone *zone, Evas_List *skiplist, int x, int y, int w, int h, int *rx, int *ry)
{
int a_w = 0, a_h = 0;
int *a_x = NULL, *a_y = NULL;
@@ -12,12 +12,15 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
a_x = E_NEW(int, 2);
a_y = E_NEW(int, 2);
+ x -= zone->x;
+ y -= zone->y;
+
a_x[0] = 0;
- a_x[1] = con->w;
+ a_x[1] = zone->w;
a_y[0] = 0;
- a_y[1] = con->h;
+ a_y[1] = zone->h;
- for (l = con->clients; l; l = l->next)
+ for (l = zone->container->clients; l; l = l->next)
{
E_Border *bd;
int ok;
@@ -34,8 +37,8 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
}
if ((ok) && (bd->visible))
{
- if (E_INTERSECTS(bd->x, bd->y, bd->w, bd->h,
- 0, 0, con->w, con->h))
+ if (E_INTERSECTS((bd->x - zone->x), (bd->y - zone->y),
+ bd->w, bd->h, 0, 0, zone->w, zone->h))
{
int i, j;
@@ -43,18 +46,18 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
{
int ok = 1;
- if (bd->x > 0)
+ if ((bd->x - zone->x) > 0)
{
- if (a_x[i] == bd->x)
+ if (a_x[i] == (bd->x - zone->x))
ok = 0;
- else if (a_x[i] > bd->x)
+ else if (a_x[i] > (bd->x - zone->x))
{
a_w++;
E_REALLOC(a_x, int, a_w);
for (j = a_w - 1; j > i; j--)
a_x[j] = a_x[j - 1];
- a_x[i] = bd->x;
+ a_x[i] = (bd->x - zone->x);
ok = 0;
}
}
@@ -65,18 +68,18 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
{
int ok = 1;
- if (bd->x + bd->w < con->w)
+ if ((bd->x - zone->x) + bd->w < zone->w)
{
- if (a_x[i] == bd->x + bd->w)
+ if (a_x[i] == (bd->x - zone->x) + bd->w)
ok = 0;
- else if (a_x[i] > bd->x + bd->w)
+ else if (a_x[i] > (bd->x - zone->x) + bd->w)
{
a_w++;
E_REALLOC(a_x, int, a_w);
for (j = a_w - 1; j > i; j--)
a_x[j] = a_x[j - 1];
- a_x[i] = bd->x + bd->w;
+ a_x[i] = (bd->x - zone->x) + bd->w;
ok = 0;
}
}
@@ -87,18 +90,18 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
{
int ok = 1;
- if (bd->y > 0)
+ if ((bd->y - zone->y) > 0)
{
- if (a_y[i] == bd->y)
+ if (a_y[i] == (bd->y - zone->y))
ok = 0;
- else if (a_y[i] > bd->y)
+ else if (a_y[i] > (bd->y - zone->y))
{
a_h++;
E_REALLOC(a_y, int, a_h);
for (j = a_h - 1; j > i; j--)
a_y[j] = a_y[j - 1];
- a_y[i] = bd->y;
+ a_y[i] = (bd->y - zone->y);
ok = 0;
}
}
@@ -109,18 +112,18 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
{
int ok = 1;
- if (bd->y + bd->h < con->h)
+ if ((bd->y - zone->y) + bd->h < zone->h)
{
- if (a_y[i] == bd->y + bd->h)
+ if (a_y[i] == (bd->y - zone->y) + bd->h)
ok = 0;
- else if (a_y[i] > bd->y + bd->h)
+ else if (a_y[i] > (bd->y - zone->y) + bd->h)
{
a_h++;
E_REALLOC(a_y, int, a_h);
for (j = a_h - 1; j > i; j--)
a_y[j] = a_y[j - 1];
- a_y[i] = bd->y + bd->h;
+ a_y[i] = (bd->y - zone->y) + bd->h;
ok = 0;
}
}
@@ -138,12 +141,12 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
{
for (i = 0; i < a_w - 1; i++)
{
- if ((a_x[i] < (con->w - w)) &&
- (a_y[j] < (con->h - h)))
+ if ((a_x[i] < (zone->w - w)) &&
+ (a_y[j] < (zone->h - h)))
{
int ar = 0;
- for (l = con->clients; l; l = l->next)
+ for (l = zone->container->clients; l; l = l->next)
{
E_Border *bd;
int x1, y1, w1, h1, x2, y2, w2, h2;
@@ -155,8 +158,8 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
y1 = a_y[j];
w1 = w;
h1 = h;
- x2 = bd->x;
- y2 = bd->y;
+ x2 = (bd->x - zone->x);
+ y2 = (bd->y - zone->y);
w2 = bd->w;
h2 = bd->h;
for (ll = skiplist; ll; ll = ll->next)
@@ -201,11 +204,11 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
goto done;
}
}
- if ((a_x[i + 1] - w > 0) && (a_y[j] < (con->h - h)))
+ if ((a_x[i + 1] - w > 0) && (a_y[j] < (zone->h - h)))
{
int ar = 0;
- for (l = con->clients; l; l = l->next)
+ for (l = zone->container->clients; l; l = l->next)
{
E_Border *bd;
int x1, y1, w1, h1, x2, y2, w2, h2;
@@ -217,8 +220,8 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
y1 = a_y[j];
w1 = w;
h1 = h;
- x2 = bd->x;
- y2 = bd->y;
+ x2 = (bd->x - zone->x);
+ y2 = (bd->y - zone->y);
w2 = bd->w;
h2 = bd->h;
for (ll = skiplist; ll; ll = ll->next)
@@ -267,7 +270,7 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
{
int ar = 0;
- for (l = con->clients; l; l = l->next)
+ for (l = zone->container->clients; l; l = l->next)
{
E_Border *bd;
int x1, y1, w1, h1, x2, y2, w2, h2;
@@ -279,8 +282,8 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
y1 = a_y[j + 1] - h;
w1 = w;
h1 = h;
- x2 = bd->x;
- y2 = bd->y;
+ x2 = (bd->x - zone->x);
+ y2 = (bd->y - zone->y);
w2 = bd->w;
h2 = bd->h;
for (ll = skiplist; ll; ll = ll->next)
@@ -325,11 +328,11 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
goto done;
}
}
- if ((a_x[i] < (con->w - w)) && (a_y[j + 1] - h > 0))
+ if ((a_x[i] < (zone->w - w)) && (a_y[j + 1] - h > 0))
{
int ar = 0;
- for (l = con->clients; l; l = l->next)
+ for (l = zone->container->clients; l; l = l->next)
{
E_Border *bd;
int x1, y1, w1, h1, x2, y2, w2, h2;
@@ -341,8 +344,8 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
y1 = a_y[j + 1] - h;
w1 = w;
h1 = h;
- x2 = bd->x;
- y2 = bd->y;
+ x2 = (bd->x - zone->x);
+ y2 = (bd->y - zone->y);
w2 = bd->w;
h2 = bd->h;
for (ll = skiplist; ll; ll = ll->next)
@@ -393,5 +396,7 @@ e_place_container_region_smart(E_Container *con, Evas_List *skiplist, int x, int
done:
E_FREE(a_x);
E_FREE(a_y);
+ *rx += zone->x;
+ *ry += zone->y;
return 1;
}