1 /// This module contains interfaces for handling mouse actions. 2 module fluid.io.mouse; 3 4 import fluid.future.context; 5 6 import fluid.io.action; 7 8 @safe: 9 10 /// I/O interface for emitting mouse events. 11 /// 12 /// While a mouse button is held down, it will emit inactive input events. The moment a mouse button is released, 13 /// it will emit an active event. This is unlike keyboard events in the sense that a mouse button will emit an event 14 /// one frame after it is no longer held. 15 /// 16 /// A `MouseIO` system will usually pass events to a `HoverIO` system it is child of. 17 interface MouseIO : IO { 18 19 mixin inputEvents!(MouseIO, Button); 20 21 /// 22 @("MouseIO.codes resolves into input event codes") 23 unittest { 24 25 assert(MouseIO.codes.left == MouseIO.getCode(MouseIO.Button.left)); 26 assert(MouseIO.codes.right == MouseIO.getCode(MouseIO.Button.right)); 27 28 } 29 30 alias press = click; 31 alias release = click; 32 33 /// 34 @("MouseIO.hold resolves into input events") 35 unittest { 36 37 assert(MouseIO.hold.left == MouseIO.createEvent(MouseIO.Button.left, false)); 38 assert(MouseIO.release.left == MouseIO.createEvent(MouseIO.Button.left, true)); 39 40 assert(MouseIO.hold.right == MouseIO.createEvent(MouseIO.Button.right, false)); 41 assert(MouseIO.release.right == MouseIO.createEvent(MouseIO.Button.right, true)); 42 43 } 44 45 enum Button { 46 none, 47 left, // Left (primary) mouse button. 48 right, // Right (secondary) mouse button. 49 middle, // Middle mouse button. 50 extra1, // Additional mouse button. 51 extra2, // ditto 52 forward, // Mouse button going forward in browser history. 53 back, // Mouse button going back in browser history. 54 55 primary = left, 56 secondary = right, 57 58 } 59 60 }