From 568cafd4ec1f9d818f4b2ee4167a7b5666f7836a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Tarl=C3=A1=20Cardoso=20Lemos?= Date: Tue, 25 Jan 2011 22:14:04 -0200 Subject: [PATCH] Fix the resize algorithm I broke earlier. The reason it was broken was that it was ok for the sum of the percentages to be something other than 1.0. Now this is no longer the case, the sum of the percentages must always be 1.0 or an assertion will fail when we render the containers. --- src/resize.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/resize.c b/src/resize.c index 94771551..9c465e18 100644 --- a/src/resize.c +++ b/src/resize.c @@ -107,11 +107,14 @@ int resize_graphical_handler(Con *first, Con *second, orientation_t orientation, DLOG("Done, pixels = %d\n", pixels); + // if we got thus far, the containers must have + // percentages associated with them + assert(first->percent > 0.0); + assert(second->percent > 0.0); + + // calculate the new percentage for the first container double new_percent, difference; - int children = con_num_children(first->parent); - double percent = 1.0 / children; - if (first->percent > 0.0) - percent = first->percent; + double percent = first->percent; DLOG("percent = %f\n", percent); int original = (orientation == HORIZ ? first->rect.width : first->rect.height); DLOG("original = %d\n", original); @@ -119,15 +122,15 @@ int resize_graphical_handler(Con *first, Con *second, orientation_t orientation, difference = percent - new_percent; DLOG("difference = %f\n", difference); DLOG("new percent = %f\n", new_percent); - first->percent = new_percent; - double s_percent = 1.0 / children; - if (second->percent > 0.0) - s_percent = second->percent; - + // calculate the new percentage for the second container + double s_percent = second->percent; second->percent = s_percent + difference; DLOG("second->percent = %f\n", second->percent); + // now we must make sure that the sum of the percentages remain 1.0 + con_fix_percent(first->parent); + return 0; }