input: use doubles in the interfaces to notify of input events
This patch is a further step in the wl_fixed_t internal sanitization. It changes the notify_* functions to take doubles instead of wl_fixed_t but does not change how these are stored in the various input structs yet, except for weston_pointer_axis_event. However this already allows to remove all wl_fixed_t usage in places like the libinput or the x11 backend. Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
fcf4b6c0ae
commit
90a6fc659f
|
@ -4786,7 +4786,7 @@ surface_opacity_binding(struct weston_pointer *pointer, uint32_t time,
|
||||||
if (!shsurf)
|
if (!shsurf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
shsurf->view->alpha -= wl_fixed_to_double(event->value) * step;
|
shsurf->view->alpha -= event->value * step;
|
||||||
|
|
||||||
if (shsurf->view->alpha > 1.0)
|
if (shsurf->view->alpha > 1.0)
|
||||||
shsurf->view->alpha = 1.0;
|
shsurf->view->alpha = 1.0;
|
||||||
|
@ -4799,7 +4799,7 @@ surface_opacity_binding(struct weston_pointer *pointer, uint32_t time,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_zoom(struct weston_seat *seat, uint32_t time, uint32_t key, uint32_t axis,
|
do_zoom(struct weston_seat *seat, uint32_t time, uint32_t key, uint32_t axis,
|
||||||
wl_fixed_t value)
|
double value)
|
||||||
{
|
{
|
||||||
struct weston_compositor *compositor = seat->compositor;
|
struct weston_compositor *compositor = seat->compositor;
|
||||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||||
|
@ -4823,7 +4823,7 @@ do_zoom(struct weston_seat *seat, uint32_t time, uint32_t key, uint32_t axis,
|
||||||
else if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL)
|
else if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL)
|
||||||
/* For every pixel zoom 20th of a step */
|
/* For every pixel zoom 20th of a step */
|
||||||
increment = output->zoom.increment *
|
increment = output->zoom.increment *
|
||||||
-wl_fixed_to_double(value) / 20.0;
|
-value / 20.0;
|
||||||
else
|
else
|
||||||
increment = 0;
|
increment = 0;
|
||||||
|
|
||||||
|
|
|
@ -942,7 +942,6 @@ static BOOL xf_peer_post_connect(freerdp_peer *client)
|
||||||
static FREERDP_CB_RET_TYPE
|
static FREERDP_CB_RET_TYPE
|
||||||
xf_mouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
xf_mouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
||||||
{
|
{
|
||||||
wl_fixed_t wl_x, wl_y;
|
|
||||||
RdpPeerContext *peerContext = (RdpPeerContext *)input->context;
|
RdpPeerContext *peerContext = (RdpPeerContext *)input->context;
|
||||||
struct rdp_output *output;
|
struct rdp_output *output;
|
||||||
uint32_t button = 0;
|
uint32_t button = 0;
|
||||||
|
@ -951,10 +950,8 @@ xf_mouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
||||||
if (flags & PTR_FLAGS_MOVE) {
|
if (flags & PTR_FLAGS_MOVE) {
|
||||||
output = peerContext->rdpBackend->output;
|
output = peerContext->rdpBackend->output;
|
||||||
if (x < output->base.width && y < output->base.height) {
|
if (x < output->base.width && y < output->base.height) {
|
||||||
wl_x = wl_fixed_from_int((int)x);
|
|
||||||
wl_y = wl_fixed_from_int((int)y);
|
|
||||||
notify_motion_absolute(&peerContext->item.seat, weston_compositor_get_time(),
|
notify_motion_absolute(&peerContext->item.seat, weston_compositor_get_time(),
|
||||||
wl_x, wl_y);
|
x, y);
|
||||||
need_frame = true;
|
need_frame = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -988,7 +985,7 @@ xf_mouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
||||||
value = -value;
|
value = -value;
|
||||||
|
|
||||||
weston_event.axis = WL_POINTER_AXIS_VERTICAL_SCROLL;
|
weston_event.axis = WL_POINTER_AXIS_VERTICAL_SCROLL;
|
||||||
weston_event.value = wl_fixed_from_double(DEFAULT_AXIS_STEP_DISTANCE * value);
|
weston_event.value = DEFAULT_AXIS_STEP_DISTANCE * value;
|
||||||
weston_event.discrete = (int)value;
|
weston_event.discrete = (int)value;
|
||||||
weston_event.has_discrete = true;
|
weston_event.has_discrete = true;
|
||||||
|
|
||||||
|
@ -1006,16 +1003,13 @@ xf_mouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
||||||
static FREERDP_CB_RET_TYPE
|
static FREERDP_CB_RET_TYPE
|
||||||
xf_extendedMouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
xf_extendedMouseEvent(rdpInput *input, UINT16 flags, UINT16 x, UINT16 y)
|
||||||
{
|
{
|
||||||
wl_fixed_t wl_x, wl_y;
|
|
||||||
RdpPeerContext *peerContext = (RdpPeerContext *)input->context;
|
RdpPeerContext *peerContext = (RdpPeerContext *)input->context;
|
||||||
struct rdp_output *output;
|
struct rdp_output *output;
|
||||||
|
|
||||||
output = peerContext->rdpBackend->output;
|
output = peerContext->rdpBackend->output;
|
||||||
if (x < output->base.width && y < output->base.height) {
|
if (x < output->base.width && y < output->base.height) {
|
||||||
wl_x = wl_fixed_from_int((int)x);
|
|
||||||
wl_y = wl_fixed_from_int((int)y);
|
|
||||||
notify_motion_absolute(&peerContext->item.seat, weston_compositor_get_time(),
|
notify_motion_absolute(&peerContext->item.seat, weston_compositor_get_time(),
|
||||||
wl_x, wl_y);
|
x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
FREERDP_CB_RETURN(TRUE);
|
FREERDP_CB_RETURN(TRUE);
|
||||||
|
|
|
@ -1275,11 +1275,15 @@ input_set_cursor(struct wayland_input *input)
|
||||||
static void
|
static void
|
||||||
input_handle_pointer_enter(void *data, struct wl_pointer *pointer,
|
input_handle_pointer_enter(void *data, struct wl_pointer *pointer,
|
||||||
uint32_t serial, struct wl_surface *surface,
|
uint32_t serial, struct wl_surface *surface,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
wl_fixed_t fixed_x, wl_fixed_t fixed_y)
|
||||||
{
|
{
|
||||||
struct wayland_input *input = data;
|
struct wayland_input *input = data;
|
||||||
int32_t fx, fy;
|
int32_t fx, fy;
|
||||||
enum theme_location location;
|
enum theme_location location;
|
||||||
|
double x, y;
|
||||||
|
|
||||||
|
x = wl_fixed_to_double(fixed_x);
|
||||||
|
y = wl_fixed_to_double(fixed_y);
|
||||||
|
|
||||||
/* XXX: If we get a modifier event immediately before the focus,
|
/* XXX: If we get a modifier event immediately before the focus,
|
||||||
* we should try to keep the same serial. */
|
* we should try to keep the same serial. */
|
||||||
|
@ -1288,11 +1292,10 @@ input_handle_pointer_enter(void *data, struct wl_pointer *pointer,
|
||||||
|
|
||||||
if (input->output->frame) {
|
if (input->output->frame) {
|
||||||
location = frame_pointer_enter(input->output->frame, input,
|
location = frame_pointer_enter(input->output->frame, input,
|
||||||
wl_fixed_to_int(x),
|
x, y);
|
||||||
wl_fixed_to_int(y));
|
|
||||||
frame_interior(input->output->frame, &fx, &fy, NULL, NULL);
|
frame_interior(input->output->frame, &fx, &fy, NULL, NULL);
|
||||||
x -= wl_fixed_from_int(fx);
|
x -= fx;
|
||||||
y -= wl_fixed_from_int(fy);
|
y -= fy;
|
||||||
|
|
||||||
if (frame_status(input->output->frame) & FRAME_STATUS_REPAINT)
|
if (frame_status(input->output->frame) & FRAME_STATUS_REPAINT)
|
||||||
weston_output_schedule_repaint(&input->output->base);
|
weston_output_schedule_repaint(&input->output->base);
|
||||||
|
@ -1337,23 +1340,26 @@ input_handle_pointer_leave(void *data, struct wl_pointer *pointer,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
input_handle_motion(void *data, struct wl_pointer *pointer,
|
input_handle_motion(void *data, struct wl_pointer *pointer,
|
||||||
uint32_t time, wl_fixed_t x, wl_fixed_t y)
|
uint32_t time, wl_fixed_t fixed_x, wl_fixed_t fixed_y)
|
||||||
{
|
{
|
||||||
struct wayland_input *input = data;
|
struct wayland_input *input = data;
|
||||||
int32_t fx, fy;
|
int32_t fx, fy;
|
||||||
enum theme_location location;
|
enum theme_location location;
|
||||||
bool want_frame = false;
|
bool want_frame = false;
|
||||||
|
double x, y;
|
||||||
|
|
||||||
if (!input->output)
|
if (!input->output)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
x = wl_fixed_to_double(fixed_x);
|
||||||
|
y = wl_fixed_to_double(fixed_y);
|
||||||
|
|
||||||
if (input->output->frame) {
|
if (input->output->frame) {
|
||||||
location = frame_pointer_motion(input->output->frame, input,
|
location = frame_pointer_motion(input->output->frame, input,
|
||||||
wl_fixed_to_int(x),
|
x, y);
|
||||||
wl_fixed_to_int(y));
|
|
||||||
frame_interior(input->output->frame, &fx, &fy, NULL, NULL);
|
frame_interior(input->output->frame, &fx, &fy, NULL, NULL);
|
||||||
x -= wl_fixed_from_int(fx);
|
x -= fx;
|
||||||
y -= wl_fixed_from_int(fy);
|
y -= fy;
|
||||||
|
|
||||||
if (frame_status(input->output->frame) & FRAME_STATUS_REPAINT)
|
if (frame_status(input->output->frame) & FRAME_STATUS_REPAINT)
|
||||||
weston_output_schedule_repaint(&input->output->base);
|
weston_output_schedule_repaint(&input->output->base);
|
||||||
|
@ -1447,7 +1453,7 @@ input_handle_axis(void *data, struct wl_pointer *pointer,
|
||||||
struct weston_pointer_axis_event weston_event;
|
struct weston_pointer_axis_event weston_event;
|
||||||
|
|
||||||
weston_event.axis = axis;
|
weston_event.axis = axis;
|
||||||
weston_event.value = value;
|
weston_event.value = wl_fixed_to_double(value);
|
||||||
|
|
||||||
if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL &&
|
if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL &&
|
||||||
input->vert.has_discrete) {
|
input->vert.has_discrete) {
|
||||||
|
@ -1705,14 +1711,18 @@ static const struct wl_keyboard_listener keyboard_listener = {
|
||||||
static void
|
static void
|
||||||
input_handle_touch_down(void *data, struct wl_touch *wl_touch,
|
input_handle_touch_down(void *data, struct wl_touch *wl_touch,
|
||||||
uint32_t serial, uint32_t time,
|
uint32_t serial, uint32_t time,
|
||||||
struct wl_surface *surface, int32_t id, wl_fixed_t x,
|
struct wl_surface *surface, int32_t id,
|
||||||
wl_fixed_t y)
|
wl_fixed_t fixed_x, wl_fixed_t fixed_y)
|
||||||
{
|
{
|
||||||
struct wayland_input *input = data;
|
struct wayland_input *input = data;
|
||||||
struct wayland_output *output;
|
struct wayland_output *output;
|
||||||
enum theme_location location;
|
enum theme_location location;
|
||||||
bool first_touch;
|
bool first_touch;
|
||||||
int32_t fx, fy;
|
int32_t fx, fy;
|
||||||
|
double x, y;
|
||||||
|
|
||||||
|
x = wl_fixed_to_double(fixed_x);
|
||||||
|
y = wl_fixed_to_double(fixed_y);
|
||||||
|
|
||||||
first_touch = (input->touch_points == 0);
|
first_touch = (input->touch_points == 0);
|
||||||
input->touch_points++;
|
input->touch_points++;
|
||||||
|
@ -1723,13 +1733,11 @@ input_handle_touch_down(void *data, struct wl_touch *wl_touch,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (output->frame) {
|
if (output->frame) {
|
||||||
location = frame_touch_down(output->frame, input, id,
|
location = frame_touch_down(output->frame, input, id, x, y);
|
||||||
wl_fixed_to_int(x),
|
|
||||||
wl_fixed_to_int(y));
|
|
||||||
|
|
||||||
frame_interior(output->frame, &fx, &fy, NULL, NULL);
|
frame_interior(output->frame, &fx, &fy, NULL, NULL);
|
||||||
x -= wl_fixed_from_int(fx);
|
x -= fx;
|
||||||
y -= wl_fixed_from_int(fy);
|
y -= fy;
|
||||||
|
|
||||||
if (frame_status(output->frame) & FRAME_STATUS_REPAINT)
|
if (frame_status(output->frame) & FRAME_STATUS_REPAINT)
|
||||||
weston_output_schedule_repaint(&output->base);
|
weston_output_schedule_repaint(&output->base);
|
||||||
|
@ -1792,20 +1800,24 @@ input_handle_touch_up(void *data, struct wl_touch *wl_touch,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
input_handle_touch_motion(void *data, struct wl_touch *wl_touch,
|
input_handle_touch_motion(void *data, struct wl_touch *wl_touch,
|
||||||
uint32_t time, int32_t id, wl_fixed_t x,
|
uint32_t time, int32_t id,
|
||||||
wl_fixed_t y)
|
wl_fixed_t fixed_x, wl_fixed_t fixed_y)
|
||||||
{
|
{
|
||||||
struct wayland_input *input = data;
|
struct wayland_input *input = data;
|
||||||
struct wayland_output *output = input->touch_focus;
|
struct wayland_output *output = input->touch_focus;
|
||||||
int32_t fx, fy;
|
int32_t fx, fy;
|
||||||
|
double x, y;
|
||||||
|
|
||||||
|
x = wl_fixed_to_double(fixed_x);
|
||||||
|
y = wl_fixed_to_double(fixed_y);
|
||||||
|
|
||||||
if (!output || !input->touch_active)
|
if (!output || !input->touch_active)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (output->frame) {
|
if (output->frame) {
|
||||||
frame_interior(output->frame, &fx, &fy, NULL, NULL);
|
frame_interior(output->frame, &fx, &fy, NULL, NULL);
|
||||||
x -= wl_fixed_from_int(fx);
|
x -= fx;
|
||||||
y -= wl_fixed_from_int(fy);
|
y -= fy;
|
||||||
}
|
}
|
||||||
|
|
||||||
weston_output_transform_coordinate(&output->base, x, y, &x, &y);
|
weston_output_transform_coordinate(&output->base, x, y, &x, &y);
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
#include "presentation-time-server-protocol.h"
|
#include "presentation-time-server-protocol.h"
|
||||||
#include "linux-dmabuf.h"
|
#include "linux-dmabuf.h"
|
||||||
|
|
||||||
#define DEFAULT_AXIS_STEP_DISTANCE wl_fixed_from_int(10)
|
#define DEFAULT_AXIS_STEP_DISTANCE 10
|
||||||
|
|
||||||
static int option_width;
|
static int option_width;
|
||||||
static int option_height;
|
static int option_height;
|
||||||
|
@ -85,8 +85,8 @@ struct x11_backend {
|
||||||
/* We could map multi-pointer X to multiple wayland seats, but
|
/* We could map multi-pointer X to multiple wayland seats, but
|
||||||
* for now we only support core X input. */
|
* for now we only support core X input. */
|
||||||
struct weston_seat core_seat;
|
struct weston_seat core_seat;
|
||||||
wl_fixed_t prev_x;
|
double prev_x;
|
||||||
wl_fixed_t prev_y;
|
double prev_y;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
xcb_atom_t wm_protocols;
|
xcb_atom_t wm_protocols;
|
||||||
|
@ -1151,7 +1151,7 @@ x11_backend_deliver_motion_event(struct x11_backend *b,
|
||||||
xcb_generic_event_t *event)
|
xcb_generic_event_t *event)
|
||||||
{
|
{
|
||||||
struct x11_output *output;
|
struct x11_output *output;
|
||||||
wl_fixed_t x, y;
|
double x, y;
|
||||||
struct weston_pointer_motion_event motion_event = { 0 };
|
struct weston_pointer_motion_event motion_event = { 0 };
|
||||||
xcb_motion_notify_event_t *motion_notify =
|
xcb_motion_notify_event_t *motion_notify =
|
||||||
(xcb_motion_notify_event_t *) event;
|
(xcb_motion_notify_event_t *) event;
|
||||||
|
@ -1163,14 +1163,14 @@ x11_backend_deliver_motion_event(struct x11_backend *b,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
weston_output_transform_coordinate(&output->base,
|
weston_output_transform_coordinate(&output->base,
|
||||||
wl_fixed_from_int(motion_notify->event_x),
|
motion_notify->event_x,
|
||||||
wl_fixed_from_int(motion_notify->event_y),
|
motion_notify->event_y,
|
||||||
&x, &y);
|
&x, &y);
|
||||||
|
|
||||||
motion_event = (struct weston_pointer_motion_event) {
|
motion_event = (struct weston_pointer_motion_event) {
|
||||||
.mask = WESTON_POINTER_MOTION_REL,
|
.mask = WESTON_POINTER_MOTION_REL,
|
||||||
.dx = wl_fixed_to_double(x - b->prev_x),
|
.dx = x - b->prev_x,
|
||||||
.dy = wl_fixed_to_double(y - b->prev_y)
|
.dy = y - b->prev_y
|
||||||
};
|
};
|
||||||
|
|
||||||
notify_motion(&b->core_seat, weston_compositor_get_time(),
|
notify_motion(&b->core_seat, weston_compositor_get_time(),
|
||||||
|
@ -1186,7 +1186,7 @@ x11_backend_deliver_enter_event(struct x11_backend *b,
|
||||||
xcb_generic_event_t *event)
|
xcb_generic_event_t *event)
|
||||||
{
|
{
|
||||||
struct x11_output *output;
|
struct x11_output *output;
|
||||||
wl_fixed_t x, y;
|
double x, y;
|
||||||
|
|
||||||
xcb_enter_notify_event_t *enter_notify =
|
xcb_enter_notify_event_t *enter_notify =
|
||||||
(xcb_enter_notify_event_t *) event;
|
(xcb_enter_notify_event_t *) event;
|
||||||
|
@ -1199,8 +1199,8 @@ x11_backend_deliver_enter_event(struct x11_backend *b,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
weston_output_transform_coordinate(&output->base,
|
weston_output_transform_coordinate(&output->base,
|
||||||
wl_fixed_from_int(enter_notify->event_x),
|
enter_notify->event_x,
|
||||||
wl_fixed_from_int(enter_notify->event_y), &x, &y);
|
enter_notify->event_y, &x, &y);
|
||||||
|
|
||||||
notify_pointer_focus(&b->core_seat, &output->base, x, y);
|
notify_pointer_focus(&b->core_seat, &output->base, x, y);
|
||||||
|
|
||||||
|
|
|
@ -4359,19 +4359,19 @@ weston_compositor_add_output(struct weston_compositor *compositor,
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
weston_output_transform_coordinate(struct weston_output *output,
|
weston_output_transform_coordinate(struct weston_output *output,
|
||||||
wl_fixed_t device_x, wl_fixed_t device_y,
|
double device_x, double device_y,
|
||||||
wl_fixed_t *x, wl_fixed_t *y)
|
double *x, double *y)
|
||||||
{
|
{
|
||||||
struct weston_vector p = { {
|
struct weston_vector p = { {
|
||||||
wl_fixed_to_double(device_x),
|
device_x,
|
||||||
wl_fixed_to_double(device_y),
|
device_y,
|
||||||
0.0,
|
0.0,
|
||||||
1.0 } };
|
1.0 } };
|
||||||
|
|
||||||
weston_matrix_transform(&output->inverse_matrix, &p);
|
weston_matrix_transform(&output->inverse_matrix, &p);
|
||||||
|
|
||||||
*x = wl_fixed_from_double(p.f[0] / p.f[3]);
|
*x = p.f[0] / p.f[3];
|
||||||
*y = wl_fixed_from_double(p.f[1] / p.f[3]);
|
*y = p.f[1] / p.f[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -253,7 +253,7 @@ struct weston_pointer_motion_event {
|
||||||
|
|
||||||
struct weston_pointer_axis_event {
|
struct weston_pointer_axis_event {
|
||||||
uint32_t axis;
|
uint32_t axis;
|
||||||
wl_fixed_t value;
|
double value;
|
||||||
bool has_discrete;
|
bool has_discrete;
|
||||||
int32_t discrete;
|
int32_t discrete;
|
||||||
};
|
};
|
||||||
|
@ -1155,7 +1155,7 @@ notify_motion(struct weston_seat *seat, uint32_t time,
|
||||||
struct weston_pointer_motion_event *event);
|
struct weston_pointer_motion_event *event);
|
||||||
void
|
void
|
||||||
notify_motion_absolute(struct weston_seat *seat, uint32_t time,
|
notify_motion_absolute(struct weston_seat *seat, uint32_t time,
|
||||||
wl_fixed_t x, wl_fixed_t y);
|
double x, double y);
|
||||||
void
|
void
|
||||||
notify_button(struct weston_seat *seat, uint32_t time, int32_t button,
|
notify_button(struct weston_seat *seat, uint32_t time, int32_t button,
|
||||||
enum wl_pointer_button_state state);
|
enum wl_pointer_button_state state);
|
||||||
|
@ -1177,7 +1177,7 @@ notify_modifiers(struct weston_seat *seat, uint32_t serial);
|
||||||
|
|
||||||
void
|
void
|
||||||
notify_pointer_focus(struct weston_seat *seat, struct weston_output *output,
|
notify_pointer_focus(struct weston_seat *seat, struct weston_output *output,
|
||||||
wl_fixed_t x, wl_fixed_t y);
|
double x, double y);
|
||||||
|
|
||||||
void
|
void
|
||||||
notify_keyboard_focus_in(struct weston_seat *seat, struct wl_array *keys,
|
notify_keyboard_focus_in(struct weston_seat *seat, struct wl_array *keys,
|
||||||
|
@ -1187,7 +1187,7 @@ notify_keyboard_focus_out(struct weston_seat *seat);
|
||||||
|
|
||||||
void
|
void
|
||||||
notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
|
notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
|
||||||
wl_fixed_t x, wl_fixed_t y, int touch_type);
|
double x, double y, int touch_type);
|
||||||
void
|
void
|
||||||
notify_touch_frame(struct weston_seat *seat);
|
notify_touch_frame(struct weston_seat *seat);
|
||||||
|
|
||||||
|
@ -1494,8 +1494,8 @@ void
|
||||||
weston_output_destroy(struct weston_output *output);
|
weston_output_destroy(struct weston_output *output);
|
||||||
void
|
void
|
||||||
weston_output_transform_coordinate(struct weston_output *output,
|
weston_output_transform_coordinate(struct weston_output *output,
|
||||||
wl_fixed_t device_x, wl_fixed_t device_y,
|
double device_x, double device_y,
|
||||||
wl_fixed_t *x, wl_fixed_t *y);
|
double *x, double *y);
|
||||||
|
|
||||||
void
|
void
|
||||||
weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec,
|
weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec,
|
||||||
|
|
19
src/input.c
19
src/input.c
|
@ -352,7 +352,8 @@ weston_pointer_send_axis(struct weston_pointer *pointer,
|
||||||
|
|
||||||
if (event->value)
|
if (event->value)
|
||||||
wl_pointer_send_axis(resource, time,
|
wl_pointer_send_axis(resource, time,
|
||||||
event->axis, event->value);
|
event->axis,
|
||||||
|
wl_fixed_from_double(event->value));
|
||||||
else if (wl_resource_get_version(resource) >=
|
else if (wl_resource_get_version(resource) >=
|
||||||
WL_POINTER_AXIS_STOP_SINCE_VERSION)
|
WL_POINTER_AXIS_STOP_SINCE_VERSION)
|
||||||
wl_pointer_send_axis_stop(resource, time,
|
wl_pointer_send_axis_stop(resource, time,
|
||||||
|
@ -1275,7 +1276,7 @@ run_modifier_bindings(struct weston_seat *seat, uint32_t old, uint32_t new)
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
notify_motion_absolute(struct weston_seat *seat,
|
notify_motion_absolute(struct weston_seat *seat,
|
||||||
uint32_t time, wl_fixed_t x, wl_fixed_t y)
|
uint32_t time, double x, double y)
|
||||||
{
|
{
|
||||||
struct weston_compositor *ec = seat->compositor;
|
struct weston_compositor *ec = seat->compositor;
|
||||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||||
|
@ -1285,8 +1286,8 @@ notify_motion_absolute(struct weston_seat *seat,
|
||||||
|
|
||||||
event = (struct weston_pointer_motion_event) {
|
event = (struct weston_pointer_motion_event) {
|
||||||
.mask = WESTON_POINTER_MOTION_ABS,
|
.mask = WESTON_POINTER_MOTION_ABS,
|
||||||
.x = wl_fixed_to_double(x),
|
.x = x,
|
||||||
.y = wl_fixed_to_double(y),
|
.y = y,
|
||||||
};
|
};
|
||||||
|
|
||||||
pointer->grab->interface->motion(pointer->grab, time, &event);
|
pointer->grab->interface->motion(pointer->grab, time, &event);
|
||||||
|
@ -1682,12 +1683,14 @@ notify_key(struct weston_seat *seat, uint32_t time, uint32_t key,
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
notify_pointer_focus(struct weston_seat *seat, struct weston_output *output,
|
notify_pointer_focus(struct weston_seat *seat, struct weston_output *output,
|
||||||
wl_fixed_t x, wl_fixed_t y)
|
double x, double y)
|
||||||
{
|
{
|
||||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
|
||||||
|
|
||||||
if (output) {
|
if (output) {
|
||||||
weston_pointer_move_to(pointer, x, y);
|
weston_pointer_move_to(pointer,
|
||||||
|
wl_fixed_from_double(x),
|
||||||
|
wl_fixed_from_double(y));
|
||||||
} else {
|
} else {
|
||||||
/* FIXME: We should call weston_pointer_set_focus(seat,
|
/* FIXME: We should call weston_pointer_set_focus(seat,
|
||||||
* NULL) here, but somehow that breaks re-entry... */
|
* NULL) here, but somehow that breaks re-entry... */
|
||||||
|
@ -1815,13 +1818,15 @@ weston_touch_set_focus(struct weston_touch *touch, struct weston_view *view)
|
||||||
*/
|
*/
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
|
notify_touch(struct weston_seat *seat, uint32_t time, int touch_id,
|
||||||
wl_fixed_t x, wl_fixed_t y, int touch_type)
|
double double_x, double double_y, int touch_type)
|
||||||
{
|
{
|
||||||
struct weston_compositor *ec = seat->compositor;
|
struct weston_compositor *ec = seat->compositor;
|
||||||
struct weston_touch *touch = weston_seat_get_touch(seat);
|
struct weston_touch *touch = weston_seat_get_touch(seat);
|
||||||
struct weston_touch_grab *grab = touch->grab;
|
struct weston_touch_grab *grab = touch->grab;
|
||||||
struct weston_view *ev;
|
struct weston_view *ev;
|
||||||
wl_fixed_t sx, sy;
|
wl_fixed_t sx, sy;
|
||||||
|
wl_fixed_t x = wl_fixed_from_double(double_x);
|
||||||
|
wl_fixed_t y = wl_fixed_from_double(double_y);
|
||||||
|
|
||||||
/* Update grab's global coordinates. */
|
/* Update grab's global coordinates. */
|
||||||
if (touch_id == touch->grab_touch_id && touch_type != WL_TOUCH_UP) {
|
if (touch_id == touch->grab_touch_id && touch_type != WL_TOUCH_UP) {
|
||||||
|
|
|
@ -109,7 +109,7 @@ handle_pointer_motion_absolute(
|
||||||
libinput_device_get_user_data(libinput_device);
|
libinput_device_get_user_data(libinput_device);
|
||||||
struct weston_output *output = device->output;
|
struct weston_output *output = device->output;
|
||||||
uint32_t time;
|
uint32_t time;
|
||||||
wl_fixed_t x, y;
|
double x, y;
|
||||||
uint32_t width, height;
|
uint32_t width, height;
|
||||||
|
|
||||||
if (!output)
|
if (!output)
|
||||||
|
@ -119,12 +119,10 @@ handle_pointer_motion_absolute(
|
||||||
width = device->output->current_mode->width;
|
width = device->output->current_mode->width;
|
||||||
height = device->output->current_mode->height;
|
height = device->output->current_mode->height;
|
||||||
|
|
||||||
x = wl_fixed_from_double(
|
x = libinput_event_pointer_get_absolute_x_transformed(pointer_event,
|
||||||
libinput_event_pointer_get_absolute_x_transformed(pointer_event,
|
width);
|
||||||
width));
|
y = libinput_event_pointer_get_absolute_y_transformed(pointer_event,
|
||||||
y = wl_fixed_from_double(
|
height);
|
||||||
libinput_event_pointer_get_absolute_y_transformed(pointer_event,
|
|
||||||
height));
|
|
||||||
|
|
||||||
weston_output_transform_coordinate(device->output, x, y, &x, &y);
|
weston_output_transform_coordinate(device->output, x, y, &x, &y);
|
||||||
notify_motion_absolute(device->seat, time, x, y);
|
notify_motion_absolute(device->seat, time, x, y);
|
||||||
|
@ -252,7 +250,7 @@ handle_pointer_axis(struct libinput_device *libinput_device,
|
||||||
vert = normalize_scroll(pointer_event, axis);
|
vert = normalize_scroll(pointer_event, axis);
|
||||||
|
|
||||||
weston_event.axis = WL_POINTER_AXIS_VERTICAL_SCROLL;
|
weston_event.axis = WL_POINTER_AXIS_VERTICAL_SCROLL;
|
||||||
weston_event.value = wl_fixed_from_double(vert);
|
weston_event.value = vert;
|
||||||
weston_event.discrete = vert_discrete;
|
weston_event.discrete = vert_discrete;
|
||||||
weston_event.has_discrete = (vert_discrete != 0);
|
weston_event.has_discrete = (vert_discrete != 0);
|
||||||
|
|
||||||
|
@ -267,7 +265,7 @@ handle_pointer_axis(struct libinput_device *libinput_device,
|
||||||
horiz = normalize_scroll(pointer_event, axis);
|
horiz = normalize_scroll(pointer_event, axis);
|
||||||
|
|
||||||
weston_event.axis = WL_POINTER_AXIS_HORIZONTAL_SCROLL;
|
weston_event.axis = WL_POINTER_AXIS_HORIZONTAL_SCROLL;
|
||||||
weston_event.value = wl_fixed_from_double(horiz);
|
weston_event.value = horiz;
|
||||||
weston_event.discrete = horiz_discrete;
|
weston_event.discrete = horiz_discrete;
|
||||||
weston_event.has_discrete = (horiz_discrete != 0);
|
weston_event.has_discrete = (horiz_discrete != 0);
|
||||||
|
|
||||||
|
@ -286,8 +284,8 @@ handle_touch_with_coords(struct libinput_device *libinput_device,
|
||||||
{
|
{
|
||||||
struct evdev_device *device =
|
struct evdev_device *device =
|
||||||
libinput_device_get_user_data(libinput_device);
|
libinput_device_get_user_data(libinput_device);
|
||||||
wl_fixed_t x;
|
double x;
|
||||||
wl_fixed_t y;
|
double y;
|
||||||
uint32_t width, height;
|
uint32_t width, height;
|
||||||
uint32_t time;
|
uint32_t time;
|
||||||
int32_t slot;
|
int32_t slot;
|
||||||
|
@ -300,10 +298,8 @@ handle_touch_with_coords(struct libinput_device *libinput_device,
|
||||||
|
|
||||||
width = device->output->current_mode->width;
|
width = device->output->current_mode->width;
|
||||||
height = device->output->current_mode->height;
|
height = device->output->current_mode->height;
|
||||||
x = wl_fixed_from_double(
|
x = libinput_event_touch_get_x_transformed(touch_event, width);
|
||||||
libinput_event_touch_get_x_transformed(touch_event, width));
|
y = libinput_event_touch_get_y_transformed(touch_event, height);
|
||||||
y = wl_fixed_from_double(
|
|
||||||
libinput_event_touch_get_y_transformed(touch_event, height));
|
|
||||||
|
|
||||||
weston_output_transform_coordinate(device->output,
|
weston_output_transform_coordinate(device->output,
|
||||||
x, y, &x, &y);
|
x, y, &x, &y);
|
||||||
|
|
|
@ -142,7 +142,8 @@ ss_seat_handle_motion(void *data, struct wl_pointer *pointer,
|
||||||
/* No transformation of input position is required here because we are
|
/* No transformation of input position is required here because we are
|
||||||
* always receiving the input in the same coordinates as the output. */
|
* always receiving the input in the same coordinates as the output. */
|
||||||
|
|
||||||
notify_motion_absolute(&seat->base, time, x, y);
|
notify_motion_absolute(&seat->base, time,
|
||||||
|
wl_fixed_to_double(x), wl_fixed_to_double(y));
|
||||||
notify_pointer_frame(&seat->base);
|
notify_pointer_frame(&seat->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +166,7 @@ ss_seat_handle_axis(void *data, struct wl_pointer *pointer,
|
||||||
struct weston_pointer_axis_event weston_event;
|
struct weston_pointer_axis_event weston_event;
|
||||||
|
|
||||||
weston_event.axis = axis;
|
weston_event.axis = axis;
|
||||||
weston_event.value = value;
|
weston_event.value = wl_fixed_to_double(value);
|
||||||
weston_event.has_discrete = false;
|
weston_event.has_discrete = false;
|
||||||
|
|
||||||
notify_axis(&seat->base, time, &weston_event);
|
notify_axis(&seat->base, time, &weston_event);
|
||||||
|
|
Loading…
Reference in New Issue