aboutsummaryrefslogtreecommitdiff
path: root/sway/commands
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-11-17 11:20:08 +0100
committerGitHub <noreply@github.com>2018-11-17 11:20:08 +0100
commitb67baf5108af21bd3d365c8da972148ced1a8349 (patch)
tree48b9ace50cf01eeff510242101ce140d55f478ea /sway/commands
parentc36665bc17d1950672330788040e07953d4fb638 (diff)
parentf4ccc51da0990b728601393671dbbf4b66d81033 (diff)
Merge pull request #3141 from tslocum/resize-set-floating-ppt
resize set: convert ppt to px for floating containers
Diffstat (limited to 'sway/commands')
-rw-r--r--sway/commands/resize.c42
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;