resize set: convert ppt to px for floating containers

This commit is contained in:
Trevor Slocum 2018-11-16 07:30:46 -08:00
parent c36665bc17
commit f4ccc51da0

View file

@ -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, static struct cmd_results *resize_set_floating(struct sway_container *con,
struct resize_amount *width, struct resize_amount *height) { 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); 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)); if (width->amount) {
int grow_width = width->amount - con->width; if (width->unit == RESIZE_UNIT_PPT ||
int grow_height = height->amount - con->height; width->unit == RESIZE_UNIT_DEFAULT) {
con->x -= grow_width / 2; // Convert to px
con->y -= grow_height / 2; width->amount = con->workspace->width * width->amount / 100;
con->width = width->amount; width->unit = RESIZE_UNIT_PX;
con->height = height->amount; }
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) { if (con->view) {
struct sway_view *view = con->view; struct sway_view *view = con->view;