-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmouse.c
60 lines (54 loc) · 1.03 KB
/
mouse.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <mouse.h> /* for screen->r and geometry */
#include "dat.h"
#include "fns.h"
enum {
MouseMove= 0x0800,
MouseB1= 0x1000,
MouseB2= 0x2000,
MouseB3= 0x4000,
MouseB4= 0x0280,
MouseB5= 0x0380,
MouseBdown= 0x8000,
};
static void
sendmouse1(Rdp* c, Mouse m, int f)
{
act(c, m.msec, InputMouse, f, m.xy.x, m.xy.y);
}
void
sendmouse(Rdp* c, Mouse m)
{
static Mouse o;
int down;
int chg;
m.xy = subpt(m.xy, screen->r.min);
switch(m.buttons){
case 8:
sendmouse1(c, m, MouseB4|MouseBdown);
sendmouse1(c, m, MouseB4);
return;
case 16:
sendmouse1(c, m, MouseB5|MouseBdown);
sendmouse1(c, m, MouseB5);
return;
}
if(!eqpt(m.xy, o.xy))
sendmouse1(c, m, MouseMove);
chg = m.buttons ^ o.buttons;
if(chg&1){
down = (m.buttons&1)? MouseBdown : 0;
sendmouse1(c, m, MouseB1|down);
}
if(chg&2){
down = (m.buttons&2)? MouseBdown : 0;
sendmouse1(c, m, MouseB3|down);
}
if(chg&4){
down = (m.buttons&4)? MouseBdown : 0;
sendmouse1(c, m, MouseB2|down);
}
o = m;
}