diff options
author | emersion <contact@emersion.fr> | 2018-11-17 11:20:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-17 11:20:08 +0100 |
commit | b67baf5108af21bd3d365c8da972148ced1a8349 (patch) | |
tree | 48b9ace50cf01eeff510242101ce140d55f478ea /sway | |
parent | c36665bc17d1950672330788040e07953d4fb638 (diff) | |
parent | f4ccc51da0990b728601393671dbbf4b66d81033 (diff) |
Merge pull request #3141 from tslocum/resize-set-floating-ppt
resize set: convert ppt to px for floating containers
Diffstat (limited to 'sway')
-rw-r--r-- | sway/commands/resize.c | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/sway/commands/resize.c b/sway/commands/resize.c index a82bec20..94ffbbe1 100644 --- a/sway/commands/resize.c +++ b/sway/commands/resize.c @@ -511,16 +511,40 @@ static struct cmd_results *resize_set_tiled(struct sway_container *con, */ static struct cmd_results *resize_set_floating(struct sway_container *con, struct resize_amount *width, struct resize_amount *height) { - int min_width, max_width, min_height, max_height; + int min_width, max_width, min_height, max_height, grow_width, grow_height; calculate_constraints(&min_width, &max_width, &min_height, &max_height); - width->amount = fmax(min_width, fmin(width->amount, max_width)); - height->amount = fmax(min_height, fmin(height->amount, max_height)); - int grow_width = width->amount - con->width; - int grow_height = height->amount - con->height; - con->x -= grow_width / 2; - con->y -= grow_height / 2; - con->width = width->amount; - con->height = height->amount; + + if (width->amount) { + if (width->unit == RESIZE_UNIT_PPT || + width->unit == RESIZE_UNIT_DEFAULT) { + // Convert to px + width->amount = con->workspace->width * width->amount / 100; + width->unit = RESIZE_UNIT_PX; + } + if (width->unit == RESIZE_UNIT_PX) { + width->amount = fmax(min_width, fmin(width->amount, max_width)); + grow_width = width->amount - con->width; + + con->x -= grow_width / 2; + con->width = width->amount; + } + } + + if (height->amount) { + if (height->unit == RESIZE_UNIT_PPT || + height->unit == RESIZE_UNIT_DEFAULT) { + // Convert to px + height->amount = con->workspace->height * height->amount / 100; + height->unit = RESIZE_UNIT_PX; + } + if (height->unit == RESIZE_UNIT_PX) { + height->amount = fmax(min_height, fmin(height->amount, max_height)); + grow_height = height->amount - con->height; + + con->y -= grow_height / 2; + con->height = height->amount; + } + } if (con->view) { struct sway_view *view = con->view; |