From afa2e399aa9c19c250a03cce1cb466f54348a97a Mon Sep 17 00:00:00 2001 From: Las Date: Tue, 18 Sep 2018 13:05:44 +0200 Subject: 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. --- rootston/cursor.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'rootston') diff --git a/rootston/cursor.c b/rootston/cursor.c index 0aaff132..4ec600e1 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -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); -- cgit v1.2.3