X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3;a=blobdiff_plain;f=src%2Ffloating.c;h=0bc5f6d65aac466814b08c62350c5c4d6fe18d3b;hp=90c4d5607c26ff9fc7c838de77719909b51eb183;hb=fb4ee17b054afa2f85ad64480353f554e5eae2d3;hpb=2f22fae119bb119483298f5423ced3f4d6b37d84 diff --git a/src/floating.c b/src/floating.c index 90c4d560..0bc5f6d6 100644 --- a/src/floating.c +++ b/src/floating.c @@ -608,19 +608,24 @@ void floating_reposition(Con *con, Rect newrect) { * */ void floating_fix_coordinates(Con *con, Rect *old_rect, Rect *new_rect) { - DLOG("Fixing coordinates of floating window %p\n", con); + DLOG("Fixing coordinates of floating window %p (rect (%d, %d), %d x %d)\n", + con, con->rect.x, con->rect.y, con->rect.width, con->rect.height); + DLOG("old_rect = (%d, %d), %d x %d\n", + old_rect->x, old_rect->y, old_rect->width, old_rect->height); + DLOG("new_rect = (%d, %d), %d x %d\n", + new_rect->x, new_rect->y, new_rect->width, new_rect->height); /* First we get the x/y coordinates relative to the x/y coordinates * of the output on which the window is on */ - uint32_t rel_x = (con->rect.x - old_rect->x); - uint32_t rel_y = (con->rect.y - old_rect->y); + int32_t rel_x = (con->rect.x - old_rect->x); + int32_t rel_y = (con->rect.y - old_rect->y); /* Then we calculate a fraction, for example 0.63 for a window * which is at y = 1212 of a 1920 px high output */ DLOG("rel_x = %d, rel_y = %d, fraction_x = %f, fraction_y = %f, output->w = %d, output->h = %d\n", rel_x, rel_y, (double)rel_x / old_rect->width, (double)rel_y / old_rect->height, old_rect->width, old_rect->height); /* Here we have to multiply at first. Or we will lose precision when not compiled with -msse2 */ - con->rect.x = new_rect->x + (double)(rel_x * new_rect->width) / old_rect->width; - con->rect.y = new_rect->y + (double)(rel_y * new_rect->height) / old_rect->height; + con->rect.x = (int32_t)new_rect->x + (double)(rel_x * (int32_t)new_rect->width) / (int32_t)old_rect->width; + con->rect.y = (int32_t)new_rect->y + (double)(rel_y * (int32_t)new_rect->height) / (int32_t)old_rect->height; DLOG("Resulting coordinates: x = %d, y = %d\n", con->rect.x, con->rect.y); }