From: Fernando Tarlá Cardoso Lemos Date: Wed, 26 Jan 2011 00:14:04 +0000 (-0200) Subject: Fix the resize algorithm I broke earlier. X-Git-Tag: tree-pr2~102 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=568cafd4ec1f9d818f4b2ee4167a7b5666f7836a;p=i3%2Fi3 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. --- 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; }