1 module d2d.toolkit.input.mouse; 2 3 import d2d.window.windowevent; 4 5 struct Mouse 6 { 7 @disable this(this); 8 9 int x, y; 10 int dx, dy; 11 int wheelX, wheelY; 12 int wheelDX, wheelDY; 13 14 bool[32] buttons; 15 16 static Mouse instance; 17 18 Mouse dup() 19 { 20 return Mouse(x, y, dx, dy, wheelX, wheelY, wheelDX, wheelDY, buttons); 21 } 22 23 void move(int x, int y, int dx, int dy) 24 { 25 this.x = x; 26 this.y = y; 27 this.dx = dx; 28 this.dy = dy; 29 } 30 31 void moveTo(int x, int y) 32 { 33 move(x, y, x - this.x, y - this.y); 34 } 35 36 void scroll(int dx, int dy) 37 { 38 wheelX += dx; 39 wheelY += dy; 40 wheelDX = dx; 41 wheelDY = dy; 42 } 43 44 void click(int button, bool down) 45 { 46 buttons[button] = down; 47 } 48 49 void handle(Event event) 50 { 51 switch (event.type) 52 { 53 case Event.Type.MouseWheelMoved: 54 scroll(event.x, event.y); 55 break; 56 case Event.Type.MouseMoved: 57 move(event.x, event.y, event.xrel, event.yrel); 58 break; 59 case Event.Type.MouseButtonPressed: 60 if (event.x != x || event.y != y) 61 moveTo(event.x, event.y); 62 click(event.mousebutton, true); 63 break; 64 case Event.Type.MouseButtonReleased: 65 if (event.x != x || event.y != y) 66 moveTo(event.x, event.y); 67 click(event.mousebutton, false); 68 break; 69 default: 70 break; 71 } 72 } 73 }