0
|
1 module tk.types;
|
|
2
|
|
3 private import std.string;
|
5
|
4 private import std.typecons;
|
|
5 private import std.algorithm;
|
0
|
6
|
5
|
7 mixin(defineEnum!("ButtonPress",
|
|
8 "SINGLE", "DOUBLE", "TRIPLE", "RELEASE"));
|
|
9 mixin(defineEnum!("ButtonNumber",
|
|
10 "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5"));
|
|
11 mixin(defineEnum!("ScrollDirection",
|
|
12 "UP", "DOWN", "LEFT", "RIGHT"));
|
|
13 mixin(defineEnum!("Modifier",
|
|
14 "SHIFT", "CAPS_LOCK", "CONTROL", "ALT", "NUM_LOCK", "META",
|
|
15 "SCROLL_LOCK", "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5"));
|
|
16
|
6
|
17 class Mask {
|
5
|
18 this(in Modifier[] modifiers) {
|
|
19 _modifiers = modifiers.dup;
|
|
20 }
|
|
21
|
6
|
22 override string toString() const {
|
5
|
23 string s;
|
|
24
|
|
25 foreach (Modifier m; _modifiers) {
|
6
|
26 if (s != "") s ~= "|";
|
5
|
27 s ~= enumToString(m);
|
|
28 }
|
|
29
|
|
30 return s;
|
|
31 }
|
|
32
|
|
33 bool is_set(Modifier m) const {
|
|
34 foreach (Modifier m2; _modifiers) {
|
|
35 if (m == m2) {
|
|
36 return true;
|
|
37 }
|
|
38 }
|
|
39
|
|
40 return false;
|
|
41 }
|
|
42
|
|
43 bool is_unset(Modifier m) const {
|
|
44 return !is_set(m);
|
0
|
45 }
|
|
46
|
|
47 private {
|
5
|
48 Modifier[] _modifiers;
|
|
49 }
|
|
50 }
|
|
51
|
6
|
52 /*
|
5
|
53 class Mask {
|
|
54 this() {
|
|
55 }
|
|
56
|
|
57 this(in Mask other) {
|
|
58 mBits = other.mBits;
|
|
59 }
|
|
60
|
|
61 void add(Modifier modifier) { mBits |= to_bit(modifier); }
|
|
62 void remove(Modifier modifier) { mBits &= ~to_bit(modifier); }
|
|
63 bool query(Modifier modifier) const { return cast(bool)(mBits & to_bit(modifier)); }
|
|
64
|
|
65 override string toString() const {
|
|
66 Modifier m = Modifier.SHIFT;
|
|
67 return enumToString(m);
|
|
68 }
|
|
69
|
|
70 private {
|
|
71 static int to_bit(Modifier modifier) { return 1 << cast(int)modifier; }
|
0
|
72 int mBits;
|
|
73 }
|
|
74 }
|
6
|
75 */
|