1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-20 04:48:06 +01:00

Make wmaker 0.11% smaller by avoiding code duplication

This patch cleans up an obvious code duplication case in the
different "placement" algorithms.

Avoid this needless repetition by using a helper function,
which in turn lets those functions a bit easier to read and
also makes wmaker 0.11% smaller :-)

[mafra@Pilar:wmaker.git]$ size src/.libs/wmaker.*
   text    data     bss     dec     hex filename
 619824   19160    8544  647528   9e168 src/.libs/wmaker.new
 620552   19160    8544  648256   9e440 src/.libs/wmaker.old
This commit is contained in:
Carlos R. Mafra
2009-08-28 16:44:54 +02:00
parent 22730876e4
commit 2f87d01a41

View File

@@ -318,6 +318,22 @@ static int calcSumOfCoveredAreas(WWindow * wwin, int x, int y, int w, int h)
return sum_isect;
}
static void set_width_height(WWindow *wwin, unsigned int *width, unsigned int *height)
{
if (wwin->frame) {
*height += wwin->frame->top_width + wwin->frame->bottom_width;
} else {
if (HAS_TITLEBAR(wwin))
*height += 18;
if (HAS_RESIZEBAR(wwin))
*height += RESIZEBAR_HEIGHT;
}
if (HAS_BORDER(wwin)) {
*height += 2 * FRAME_BORDER_WIDTH;
*width += 2 * FRAME_BORDER_WIDTH;
}
}
static void
smartPlaceWindow(WWindow * wwin, int *x_ret, int *y_ret, unsigned int width, unsigned int height, WArea usableArea)
{
@@ -327,20 +343,9 @@ smartPlaceWindow(WWindow * wwin, int *x_ret, int *y_ret, unsigned int width, uns
int min_isect, min_isect_x, min_isect_y;
int sum_isect;
if (wwin->frame) {
height += wwin->frame->top_width + wwin->frame->bottom_width;
} else {
if (HAS_TITLEBAR(wwin))
height += 18;
if (HAS_RESIZEBAR(wwin))
height += 8;
}
if (HAS_BORDER(wwin)) {
height += 2;
width += 2;
}
sx = X_ORIGIN;
set_width_height(wwin, &width, &height);
sx = X_ORIGIN;
min_isect = INT_MAX;
min_isect_x = sx;
min_isect_y = test_y;
@@ -399,24 +404,11 @@ autoPlaceWindow(WWindow * wwin, int *x_ret, int *y_ret,
int swidth, sx;
WWindow *test_window;
if (wwin->frame) {
height += wwin->frame->top_width + wwin->frame->bottom_width;
} else {
if (HAS_TITLEBAR(wwin))
height += 18;
if (HAS_RESIZEBAR(wwin))
height += 8;
}
if (HAS_BORDER(wwin)) {
height += 2;
width += 2;
}
set_width_height(wwin, &width, &height);
swidth = usableArea.x2 - usableArea.x1;
sx = X_ORIGIN;
/* this was based on fvwm2's smart placement */
while (((test_y + height) < (usableArea.y2 - usableArea.y1)) && !loc_ok) {
test_x = sx;
@@ -507,18 +499,7 @@ static void
cascadeWindow(WScreen * scr, WWindow * wwin, int *x_ret, int *y_ret,
unsigned int width, unsigned int height, int h, WArea usableArea)
{
if (wwin->frame) {
height += wwin->frame->top_width + wwin->frame->bottom_width;
} else {
if (HAS_TITLEBAR(wwin))
height += 18;
if (HAS_RESIZEBAR(wwin))
height += 8;
}
if (HAS_BORDER(wwin)) {
height += 2;
width += 2;
}
set_width_height(wwin, &width, &height);
*x_ret = h * scr->cascade_index + X_ORIGIN;
*y_ret = h * scr->cascade_index + Y_ORIGIN;
@@ -536,18 +517,7 @@ randomPlaceWindow(WScreen * scr, WWindow * wwin, int *x_ret, int *y_ret,
{
int w, h;
if (wwin->frame) {
height += wwin->frame->top_width + wwin->frame->bottom_width;
} else {
if (HAS_TITLEBAR(wwin))
height += 18;
if (HAS_RESIZEBAR(wwin))
height += 8;
}
if (HAS_BORDER(wwin)) {
height += 2;
width += 2;
}
set_width_height(wwin, &width, &height);
w = ((usableArea.x2 - X_ORIGIN) - width);
h = ((usableArea.y2 - Y_ORIGIN) - height);