]> git.sur5r.net Git - i3/i3/commitdiff
Make resize set ppt more accurate 3372/head
authorOrestis Floros <orestisf1993@gmail.com>
Fri, 24 Aug 2018 00:50:23 +0000 (03:50 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Fri, 24 Aug 2018 01:13:25 +0000 (04:13 +0300)
See the testcase for the usecase.

src/commands.c
testcases/t/541-resize-set-tiling.t

index 1b05d672b8f3d8ac5002ec11a99427a68a097b23..0874eec2346c12c753e31e6aacf09af43f8c0aac 100644 (file)
@@ -516,7 +516,7 @@ static bool cmd_resize_tiling_direction(I3_CMD, Con *current, const char *direct
     return resize_neighboring_cons(first, second, px, ppt);
 }
 
-static bool cmd_resize_tiling_width_height(I3_CMD, Con *current, const char *direction, int px, int _ppt) {
+static bool cmd_resize_tiling_width_height(I3_CMD, Con *current, const char *direction, int px, double ppt) {
     LOG("width/height resize\n");
 
     /* get the appropriate current container (skip stacked/tabbed cons) */
@@ -542,10 +542,9 @@ static bool cmd_resize_tiling_width_height(I3_CMD, Con *current, const char *dir
             child->percent = percentage;
     }
 
-    double ppt = (double)_ppt / 100.0;
     double new_current_percent;
     double subtract_percent;
-    if (_ppt) {
+    if (ppt != 0.0) {
         new_current_percent = current->percent + ppt;
     } else {
         new_current_percent = px_resize_to_percent(current, px);
@@ -611,9 +610,10 @@ void cmd_resize(I3_CMD, const char *way, const char *direction, long resize_px,
         } else {
             if (strcmp(direction, "width") == 0 ||
                 strcmp(direction, "height") == 0) {
+                const double ppt = (double)resize_ppt / 100.0;
                 if (!cmd_resize_tiling_width_height(current_match, cmd_output,
                                                     current->con, direction,
-                                                    resize_px, resize_ppt))
+                                                    resize_px, ppt))
                     return;
             } else {
                 if (!cmd_resize_tiling_direction(current_match, cmd_output,
@@ -645,10 +645,10 @@ static bool resize_set_tiling(I3_CMD, Con *target, orientation_t resize_orientat
     resize_find_tiling_participants(&target, &dummy, search_direction, true);
 
     /* Calculate new size for the target container */
-    int ppt = 0;
+    double ppt = 0.0;
     int px = 0;
     if (is_ppt) {
-        ppt = target_size - target->percent * 100;
+        ppt = (double)target_size / 100.0 - target->percent;
     } else {
         px = target_size - (resize_orientation == HORIZ ? target->rect.width : target->rect.height);
     }
index 956622a2343014ba7a05e20027648cfece1d0954..d695edee41af60d357d777bc965515fed0bd5ec5 100644 (file)
@@ -124,6 +124,15 @@ cmd 'resize set 155 px 135 px';
 cmp_float($nodes->[1]->{nodes}->[1]->{rect}->{width}, 155, 'bottom-right window got 155 px width');
 cmp_float($nodes->[1]->{nodes}->[1]->{rect}->{height}, 135, 'bottom-right window got 135 px height');
 
+# Mix ppt and px
+cmd 'resize set 75 ppt 200 px';
+
+($nodes, $focus) = get_ws_content($tmp);
+
+cmp_float($nodes->[0]->{percent}, 0.25, 'left container got 25%');
+cmp_float($nodes->[1]->{percent}, 0.75, 'right container got 75%');
+cmp_float($nodes->[1]->{nodes}->[1]->{rect}->{height}, 200, 'bottom-right window got 200 px height');
+
 ############################################################
 # resize from inside a tabbed container
 ############################################################