Add relative mode flag to mouse processors
The default mouse injection works in absolute mode: it forwards clicks at a specific position on screen. To support HID mouse, add a flag to indicate that the mouse processor works in relative mode: it forwards mouse motion vectors, without any absolute reference to the screen.
This commit is contained in:
parent
924375487e
commit
b5855e5deb
3 changed files with 19 additions and 0 deletions
|
@ -659,7 +659,11 @@ input_manager_process_mouse_motion(struct input_manager *im,
|
||||||
assert(im->mp->ops->process_mouse_motion);
|
assert(im->mp->ops->process_mouse_motion);
|
||||||
im->mp->ops->process_mouse_motion(im->mp, &evt);
|
im->mp->ops->process_mouse_motion(im->mp, &evt);
|
||||||
|
|
||||||
|
// vfinger must never be used in relative mode
|
||||||
|
assert(!im->mp->relative_mode || !im->vfinger_down);
|
||||||
|
|
||||||
if (im->vfinger_down) {
|
if (im->vfinger_down) {
|
||||||
|
assert(!im->mp->relative_mode); // assert one more time
|
||||||
struct sc_point mouse =
|
struct sc_point mouse =
|
||||||
screen_convert_window_to_frame_coords(im->screen, event->x,
|
screen_convert_window_to_frame_coords(im->screen, event->x,
|
||||||
event->y);
|
event->y);
|
||||||
|
@ -772,6 +776,12 @@ input_manager_process_mouse_button(struct input_manager *im,
|
||||||
assert(im->mp->ops->process_mouse_click);
|
assert(im->mp->ops->process_mouse_click);
|
||||||
im->mp->ops->process_mouse_click(im->mp, &evt);
|
im->mp->ops->process_mouse_click(im->mp, &evt);
|
||||||
|
|
||||||
|
if (im->mp->relative_mode) {
|
||||||
|
assert(!im->vfinger_down); // vfinger must not be used in relative mode
|
||||||
|
// No pinch-to-zoom simulation
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Pinch-to-zoom simulation.
|
// Pinch-to-zoom simulation.
|
||||||
//
|
//
|
||||||
// If Ctrl is hold when the left-click button is pressed, then
|
// If Ctrl is hold when the left-click button is pressed, then
|
||||||
|
|
|
@ -151,4 +151,6 @@ sc_mouse_inject_init(struct sc_mouse_inject *mi,
|
||||||
};
|
};
|
||||||
|
|
||||||
mi->mouse_processor.ops = &ops;
|
mi->mouse_processor.ops = &ops;
|
||||||
|
|
||||||
|
mi->mouse_processor.relative_mode = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,13 @@
|
||||||
*/
|
*/
|
||||||
struct sc_mouse_processor {
|
struct sc_mouse_processor {
|
||||||
const struct sc_mouse_processor_ops *ops;
|
const struct sc_mouse_processor_ops *ops;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If set, the mouse processor works in relative mode (the absolute
|
||||||
|
* position is irrelevant). In particular, it indicates that the mouse
|
||||||
|
* pointer must be "captured" by the UI.
|
||||||
|
*/
|
||||||
|
bool relative_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sc_mouse_processor_ops {
|
struct sc_mouse_processor_ops {
|
||||||
|
|
Loading…
Reference in a new issue