]> git.sur5r.net Git - i3/i3/commitdiff
Fix the resize algorithm I broke earlier.
authorFernando Tarlá Cardoso Lemos <fernandotcl@gmail.com>
Wed, 26 Jan 2011 00:14:04 +0000 (22:14 -0200)
committerMichael Stapelberg <michael@stapelberg.de>
Thu, 27 Jan 2011 12:00:14 +0000 (13:00 +0100)
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

index 9477155102ba62fd371f9e80a4ecb4cc31a034ea..9c465e183ea812700ab46236ad25306a49aab46c 100644 (file)
@@ -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;
 }