Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: arrange.c Log Message: Refactor some code bits. =================================================================== RCS file: /cvs/e/e16/e/src/arrange.c,v retrieving revision 1.89 retrieving revision 1.90 diff -u -3 -r1.89 -r1.90 --- arrange.c 23 Apr 2006 08:42:17 -0000 1.89 +++ arrange.c 30 Apr 2006 10:32:48 -0000 1.90 @@ -49,6 +49,84 @@ return current_size + 1; } +#define Filled(x,y) (filled[(y * (xsize - 1)) + x]) + +static void +ArrangeMakeFillLists(int startx, int width, int starty, int height, + const RectBox * sorted, int num_sorted, + int *xarray, int *nx, int *yarray, int *ny, + unsigned char *filled) +{ + int j, x1, x2, y1, y2, k, y, x; + int xsize, ysize; + + xsize = 0; + ysize = 0; + + /* put all the sorted rects into the xy arrays */ + xsize = ArrangeAddToList(xarray, xsize, startx); + xsize = ArrangeAddToList(xarray, xsize, width); + ysize = ArrangeAddToList(yarray, ysize, starty); + ysize = ArrangeAddToList(yarray, ysize, height); + + for (j = 0; j < num_sorted; j++) + { + if (sorted[j].x < width) + xsize = ArrangeAddToList(xarray, xsize, sorted[j].x); + if ((sorted[j].x + sorted[j].w) < width) + xsize = ArrangeAddToList(xarray, xsize, sorted[j].x + sorted[j].w); + if (sorted[j].y < height) + ysize = ArrangeAddToList(yarray, ysize, sorted[j].y); + if ((sorted[j].y + sorted[j].h) < height) + ysize = ArrangeAddToList(yarray, ysize, sorted[j].y + sorted[j].h); + } + + /* fill the allocation array */ + for (j = 0; j < (xsize - 1) * (ysize - 1); filled[j++] = 0) + ; + for (j = 0; j < num_sorted; j++) + { + x1 = -1; + x2 = -1; + y1 = -1; + y2 = -1; + for (k = 0; k < xsize - 1; k++) + { + if (sorted[j].x == xarray[k]) + { + x1 = k; + x2 = k; + } + if (sorted[j].x + sorted[j].w == xarray[k + 1]) + x2 = k; + } + for (k = 0; k < ysize - 1; k++) + { + if (sorted[j].y == yarray[k]) + { + y1 = k; + y2 = k; + } + if (sorted[j].y + sorted[j].h == yarray[k + 1]) + y2 = k; + } + if ((x1 >= 0) && (x2 >= 0) && (y1 >= 0) && (y2 >= 0)) + { + for (y = y1; y <= y2; y++) + { + for (x = x1; x <= x2; x++) + { + if (Filled(x, y) <= sorted[j].p) + Filled(x, y) = sorted[j].p + 1; + } + } + } + } + + *nx = xsize; + *ny = ysize; +} + static void ArrangeSwapList(RectBox * list, int a, int b) { @@ -76,19 +154,17 @@ int floating_count, RectBox * sorted, int startx, int starty, int width, int height, int policy, char initial_window) { - int num_sorted = 0; + int num_sorted; int xsize = 0, ysize = 0; - int *xarray = NULL, *yarray = NULL; - int *leftover = NULL; - int i, j, k, x, y, x1, x2, y1, y2; - unsigned char *filled = NULL; - RectBox *spaces = NULL; - int num_spaces = 0; + int *xarray, *yarray; + int *leftover; + int i, j, k, x, y, x1, y1; + unsigned char *filled; + RectBox *spaces; + int num_spaces; int sort; int a1, a2; - int num_leftover = 0; - -#define Filled(x,y) (filled[(y * (xsize - 1)) + x]) + int num_leftover; if (initial_window) { @@ -149,101 +225,38 @@ default: break; } -/* for every floating rect in order, "fit" it into the sorted list */ + + /* for every floating rect in order, "fit" it into the sorted list */ i = ((fixed_count + floating_count) * 2) + 2; xarray = Emalloc(i * sizeof(int)); yarray = Emalloc(i * sizeof(int)); filled = Emalloc(i * i * sizeof(char)); - spaces = Emalloc(i * i * sizeof(RectBox)); + leftover = NULL; if (floating_count) leftover = Emalloc(floating_count * sizeof(int)); if (!xarray || !yarray || !filled || !spaces) goto done; -/* copy "fixed" rects into the sorted list */ - for (i = 0; i < fixed_count; i++) - { - sorted[num_sorted].data = fixed[i].data; - sorted[num_sorted].x = fixed[i].x; - sorted[num_sorted].y = fixed[i].y; - sorted[num_sorted].w = fixed[i].w; - sorted[num_sorted].h = fixed[i].h; - sorted[num_sorted].p = fixed[i].p; - num_sorted++; - } -/* go through each floating rect in order and "fit" it in */ + /* copy "fixed" rects into the sorted list */ + memcpy(sorted, fixed, fixed_count * sizeof(RectBox)); + num_sorted = fixed_count; + + /* go through each floating rect in order and "fit" it in */ + num_leftover = 0; for (i = 0; i < floating_count; i++) { - xsize = 0; - ysize = 0; -/* put all the sorted rects into the xy arrays */ - xsize = ArrangeAddToList(xarray, xsize, startx); - xsize = ArrangeAddToList(xarray, xsize, width); - ysize = ArrangeAddToList(yarray, ysize, starty); - ysize = ArrangeAddToList(yarray, ysize, height); - for (j = 0; j < num_sorted; j++) - { - if (sorted[j].x < width) - xsize = ArrangeAddToList(xarray, xsize, sorted[j].x); - if ((sorted[j].x + sorted[j].w) < width) - xsize = - ArrangeAddToList(xarray, xsize, sorted[j].x + sorted[j].w); - if (sorted[j].y < height) - ysize = ArrangeAddToList(yarray, ysize, sorted[j].y); - if ((sorted[j].y + sorted[j].h) < height) - ysize = - ArrangeAddToList(yarray, ysize, sorted[j].y + sorted[j].h); - } -/* fill the allocation array */ - for (j = 0; j < (xsize - 1) * (ysize - 1); filled[j++] = 0) - ; - for (j = 0; j < num_sorted; j++) - { - x1 = -1; - x2 = -1; - y1 = -1; - y2 = -1; - for (k = 0; k < xsize - 1; k++) - { - if (sorted[j].x == xarray[k]) - { - x1 = k; - x2 = k; - } - if (sorted[j].x + sorted[j].w == xarray[k + 1]) - x2 = k; - } - for (k = 0; k < ysize - 1; k++) - { - if (sorted[j].y == yarray[k]) - { - y1 = k; - y2 = k; - } - if (sorted[j].y + sorted[j].h == yarray[k + 1]) - y2 = k; - } - if ((x1 >= 0) && (x2 >= 0) && (y1 >= 0) && (y2 >= 0)) - { - for (y = y1; y <= y2; y++) - { - for (x = x1; x <= x2; x++) - { - if (Filled(x, y) <= sorted[j].p) - Filled(x, y) = sorted[j].p + 1; - } - } - } - } + ArrangeMakeFillLists(startx, width, starty, height, sorted, num_sorted, + xarray, &xsize, yarray, &ysize, filled); + + /* create list of all "spaces" */ num_spaces = 0; -/* create list of all "spaces" */ for (y = 0; y < ysize - 1; y++) { for (x = 0; x < xsize - 1; x++) { -/* if the square is empty (lowe prioiryt suares filled) "grow" the space */ + /* if the square is empty (lowe prioiryt suares filled) "grow" the space */ if (Filled(x, y) <= floating[i].p) { int can_expand_x = 1; @@ -292,7 +305,8 @@ } } } -/* find the first space that fits */ + + /* find the first space that fits */ k = -1; sort = 0x7fffffff; for (j = 0; j < num_spaces; j++) @@ -339,6 +353,7 @@ } } } + if (k >= 0) { if (policy == ARRANGE_BY_POSITION) @@ -387,69 +402,11 @@ /* the leftovers into the leftover space */ for (i = 0; i < num_leftover; i++) { - xsize = 0; - ysize = 0; - /* put all the sorted rects into the xy arrays */ - xsize = ArrangeAddToList(xarray, xsize, 0); - xsize = ArrangeAddToList(xarray, xsize, width); - ysize = ArrangeAddToList(yarray, ysize, 0); - ysize = ArrangeAddToList(yarray, ysize, height); - for (j = 0; j < num_sorted; j++) - { - if (sorted[j].x < width) - xsize = ArrangeAddToList(xarray, xsize, sorted[j].x); - if ((sorted[j].x + sorted[j].w) < width) - xsize = - ArrangeAddToList(xarray, xsize, sorted[j].x + sorted[j].w); - if (sorted[j].y < height) - ysize = ArrangeAddToList(yarray, ysize, sorted[j].y); - if ((sorted[j].y + sorted[j].h) < height) - ysize = - ArrangeAddToList(yarray, ysize, sorted[j].y + sorted[j].h); - } - /* fill the allocation array */ - for (j = 0; j < (xsize - 1) * (ysize - 1); filled[j++] = 0) - ; - for (j = 0; j < num_sorted; j++) - { - x1 = -1; - x2 = -1; - y1 = -1; - y2 = -1; - for (k = 0; k < xsize - 1; k++) - { - if (sorted[j].x == xarray[k]) - { - x1 = k; - x2 = k; - } - if (sorted[j].x + sorted[j].w == xarray[k + 1]) - x2 = k; - } - for (k = 0; k < ysize - 1; k++) - { - if (sorted[j].y == yarray[k]) - { - y1 = k; - y2 = k; - } - if (sorted[j].y + sorted[j].h == yarray[k + 1]) - y2 = k; - } - if ((x1 >= 0) && (x2 >= 0) && (y1 >= 0) && (y2 >= 0)) - { - for (y = y1; y <= y2; y++) - { - for (x = x1; x <= x2; x++) - { - if (Filled(x, y) <= sorted[j].p) - Filled(x, y) = sorted[j].p + 1; - } - } - } - } - num_spaces = 0; + ArrangeMakeFillLists(startx, width, starty, height, sorted, num_sorted, + xarray, &xsize, yarray, &ysize, filled); + /* create list of all "spaces" */ + num_spaces = 0; for (y = 0; y < ysize - 1; y++) { for (x = 0; x < xsize - 1; x++) @@ -505,6 +462,7 @@ } } } + /* find the first space that fits */ k = -1; sort = 0x7fffffff; @@ -519,6 +477,7 @@ sort = a1 - a2; } } + /* if there's a small space ... */ if (k >= 0) { @@ -553,6 +512,7 @@ num_sorted++; } } + for (i = 0; i < num_sorted; i++) { if ((sorted[i].x + sorted[i].w) > width) ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs