input: Add weston_pointer_clamp function to ensure pointer visible

This refactors the code out from clip_pointer_motion into a function of
its own which can then be used elsewhere to clamp the pointer
coordinates to the range of the outputs.

This change also makes the caller of clip_pointer_motion use this new
function.
dev
Rob Bradford 12 years ago committed by Kristian Høgsberg
parent 1d697d7adf
commit 806d8c0b78
  1. 3
      src/compositor.h
  2. 12
      src/input.c

@ -345,6 +345,9 @@ weston_pointer_start_grab(struct weston_pointer *pointer,
struct weston_pointer_grab *grab);
void
weston_pointer_end_grab(struct weston_pointer *pointer);
void
weston_pointer_clamp(struct weston_pointer *pointer,
wl_fixed_t *fx, wl_fixed_t *fy);
struct weston_keyboard *
weston_keyboard_create(void);

@ -561,17 +561,17 @@ weston_touch_end_grab(struct weston_touch *touch)
touch->grab = &touch->default_grab;
}
static void
clip_pointer_motion(struct weston_seat *seat, wl_fixed_t *fx, wl_fixed_t *fy)
WL_EXPORT void
weston_pointer_clamp(struct weston_pointer *pointer, wl_fixed_t *fx, wl_fixed_t *fy)
{
struct weston_compositor *ec = seat->compositor;
struct weston_compositor *ec = pointer->seat->compositor;
struct weston_output *output, *prev = NULL;
int x, y, old_x, old_y, valid = 0;
x = wl_fixed_to_int(*fx);
y = wl_fixed_to_int(*fy);
old_x = wl_fixed_to_int(seat->pointer->x);
old_y = wl_fixed_to_int(seat->pointer->y);
old_x = wl_fixed_to_int(pointer->x);
old_y = wl_fixed_to_int(pointer->y);
wl_list_for_each(output, &ec->output_list, link) {
if (pixman_region32_contains_point(&output->region,
@ -605,7 +605,7 @@ move_pointer(struct weston_seat *seat, wl_fixed_t x, wl_fixed_t y)
struct weston_output *output;
int32_t ix, iy;
clip_pointer_motion(seat, &x, &y);
weston_pointer_clamp (pointer, &x, &y);
pointer->x = x;
pointer->y = y;

Loading…
Cancel
Save