Fix implicit conversion of floats to ints in calls to pixman_region32_contains_point

I do not think the conversion is specifically defined, but on my system and SirCmpwn's
the floats are rounded instead of floored, which is incorrect in this case, since
for a range from 0 to 256, any value greater or equal to 0 and less than 256 is valid.
I.e. [0;256[, or 0 <= x < 256, but if x is e.g. -0.1, then it will be rounded to 0, which
is invalid. The correct behavior would be to floor to -1.
This commit is contained in:
Las 2018-09-18 13:05:44 +02:00
parent fa2e6e7d9d
commit afa2e399aa
3 changed files with 5 additions and 5 deletions

View file

@ -381,7 +381,7 @@ void roots_cursor_handle_motion_absolute(struct roots_cursor *cursor,
if (cursor->active_constraint &&
!pixman_region32_contains_point(&cursor->confine,
lx - view->x, ly - view->y, NULL)) {
floor(lx - view->x), floor(ly - view->y), NULL)) {
return;
}
}
@ -501,7 +501,7 @@ void roots_cursor_handle_tool_axis(struct roots_cursor *cursor,
if (cursor->active_constraint &&
!pixman_region32_contains_point(&cursor->confine,
lx - view->x, ly - view->y, NULL)) {
floor(lx - view->x), floor(ly - view->y), NULL)) {
return;
}
}
@ -602,7 +602,7 @@ void roots_cursor_constrain(struct roots_cursor *cursor,
pixman_region32_t *region = &constraint->region;
if (!pixman_region32_contains_point(region, sx, sy, NULL)) {
if (!pixman_region32_contains_point(region, floor(sx), floor(sy), NULL)) {
// Warp into region if possible
int nboxes;
pixman_box32_t *boxes = pixman_region32_rectangles(region, &nboxes);