floating_fix_coordinates: properly deal with negative positions
This commit is contained in:
parent
d57d51da6d
commit
74510c59c7
|
@ -607,19 +607,24 @@ void floating_reposition(Con *con, Rect newrect) {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void floating_fix_coordinates(Con *con, Rect *old_rect, Rect *new_rect) {
|
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
|
/* First we get the x/y coordinates relative to the x/y coordinates
|
||||||
* of the output on which the window is on */
|
* of the output on which the window is on */
|
||||||
uint32_t rel_x = (con->rect.x - old_rect->x);
|
int32_t rel_x = (con->rect.x - old_rect->x);
|
||||||
uint32_t rel_y = (con->rect.y - old_rect->y);
|
int32_t rel_y = (con->rect.y - old_rect->y);
|
||||||
/* Then we calculate a fraction, for example 0.63 for a window
|
/* Then we calculate a fraction, for example 0.63 for a window
|
||||||
* which is at y = 1212 of a 1920 px high output */
|
* which is at y = 1212 of a 1920 px high output */
|
||||||
double fraction_x = ((double)rel_x / old_rect->width);
|
double fraction_x = ((double)rel_x / (int32_t)old_rect->width);
|
||||||
double fraction_y = ((double)rel_y / old_rect->height);
|
double fraction_y = ((double)rel_y / (int32_t)old_rect->height);
|
||||||
DLOG("rel_x = %d, rel_y = %d, fraction_x = %f, fraction_y = %f, output->w = %d, output->h = %d\n",
|
DLOG("rel_x = %d, rel_y = %d, fraction_x = %f, fraction_y = %f, output->w = %d, output->h = %d\n",
|
||||||
rel_x, rel_y, fraction_x, fraction_y, old_rect->width, old_rect->height);
|
rel_x, rel_y, fraction_x, fraction_y, old_rect->width, old_rect->height);
|
||||||
con->rect.x = new_rect->x + (fraction_x * new_rect->width);
|
con->rect.x = (int32_t)new_rect->x + (fraction_x * (int32_t)new_rect->width);
|
||||||
con->rect.y = new_rect->y + (fraction_y * new_rect->height);
|
con->rect.y = (int32_t)new_rect->y + (fraction_y * (int32_t)new_rect->height);
|
||||||
DLOG("Resulting coordinates: x = %d, y = %d\n", con->rect.x, con->rect.y);
|
DLOG("Resulting coordinates: x = %d, y = %d\n", con->rect.x, con->rect.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue