libweston: Make a common helper for clamping a coord to an output

This is a tricky bit of code and we use it in two places. Let's make a
single implementation.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
Derek Foreman 2023-07-18 13:29:52 -05:00
parent 71e38cf2ef
commit 18cce195d3
3 changed files with 28 additions and 21 deletions

View File

@ -2040,6 +2040,10 @@ struct weston_coord_buffer __attribute__ ((warn_unused_result))
weston_coord_surface_to_buffer(const struct weston_surface *surface,
struct weston_coord_surface coord);
struct weston_coord_global __attribute__ ((warn_unused_result))
weston_coord_global_clamp_for_output(struct weston_coord_global pos,
const struct weston_output *output);
void
weston_view_activate_input(struct weston_view *view,
struct weston_seat *seat,

View File

@ -406,7 +406,6 @@ weston_mode_switch_finish(struct weston_output *output,
* lower-right corner */
wl_list_for_each(seat, &output->compositor->seat_list, link) {
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
double quantum = 1.0 / 1024.0;
int32_t x, y;
if (!pointer)
@ -419,11 +418,8 @@ weston_mode_switch_finish(struct weston_output *output,
weston_output_contains_coord(output, pointer->pos))
continue;
if (pointer->pos.c.x >= output->pos.c.x + output->width - quantum)
pointer->pos.c.x = output->pos.c.x + output->width - quantum;
if (pointer->pos.c.y >= output->pos.c.y + output->height - quantum)
pointer->pos.c.y = output->pos.c.y + output->height - quantum;
pointer->pos = weston_coord_global_clamp_for_output(pointer->pos,
output);
}
pixman_region32_fini(&old_output_region);
@ -905,6 +901,27 @@ weston_coord_surface_to_buffer(const struct weston_surface *surface,
return tmp;
}
WL_EXPORT struct weston_coord_global
weston_coord_global_clamp_for_output(struct weston_coord_global pos,
const struct weston_output *output)
{
struct weston_coord_global clamped_pos;
double quantum = 1.0 / 1024.0;
int x = pos.c.x;
int y = pos.c.y;
if (x < output->pos.c.x)
clamped_pos.c.x = output->pos.c.x;
else if (x >= output->pos.c.x + output->width - quantum)
clamped_pos.c.x = output->pos.c.x + output->width - quantum;
if (y < output->pos.c.y)
clamped_pos.c.y = output->pos.c.y;
else if (y >= output->pos.c.y + output->height - quantum)
clamped_pos.c.y = output->pos.c.y + output->height - quantum;
return clamped_pos;
}
WL_EXPORT pixman_box32_t
weston_matrix_transform_rect(struct weston_matrix *matrix,
pixman_box32_t rect)

View File

@ -2141,21 +2141,7 @@ weston_pointer_clamp_for_output(struct weston_pointer *pointer,
struct weston_output *output,
struct weston_coord_global pos)
{
double quantum = 1.0 / 1024.0;
struct weston_coord_global out = pos;
int x = pos.c.x;
int y = pos.c.y;
if (x < output->pos.c.x)
out.c.x = output->pos.c.x;
else if (x >= output->pos.c.x + output->width - quantum)
out.c.x = output->pos.c.x + output->width - quantum;
if (y < output->pos.c.y)
out.c.y = output->pos.c.y;
else if (y >= output->pos.c.y + output->height - quantum)
out.c.y = output->pos.c.y + output->height - quantum;
return out;
return weston_coord_global_clamp_for_output(pos, output);
}
WL_EXPORT struct weston_coord_global