Mercurial > projects > doodle
view tk/types.d @ 6:a27d2093991c
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sat, 11 Jul 2009 20:44:14 +0930 |
parents | 8a39b13cd3e6 |
children | 936feb16eed4 |
line wrap: on
line source
module tk.types; private import std.string; private import std.typecons; private import std.algorithm; mixin(defineEnum!("ButtonPress", "SINGLE", "DOUBLE", "TRIPLE", "RELEASE")); mixin(defineEnum!("ButtonNumber", "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5")); mixin(defineEnum!("ScrollDirection", "UP", "DOWN", "LEFT", "RIGHT")); mixin(defineEnum!("Modifier", "SHIFT", "CAPS_LOCK", "CONTROL", "ALT", "NUM_LOCK", "META", "SCROLL_LOCK", "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5")); class Mask { this(in Modifier[] modifiers) { _modifiers = modifiers.dup; } override string toString() const { string s; foreach (Modifier m; _modifiers) { if (s != "") s ~= "|"; s ~= enumToString(m); } return s; } bool is_set(Modifier m) const { foreach (Modifier m2; _modifiers) { if (m == m2) { return true; } } return false; } bool is_unset(Modifier m) const { return !is_set(m); } private { Modifier[] _modifiers; } } /* class Mask { this() { } this(in Mask other) { mBits = other.mBits; } void add(Modifier modifier) { mBits |= to_bit(modifier); } void remove(Modifier modifier) { mBits &= ~to_bit(modifier); } bool query(Modifier modifier) const { return cast(bool)(mBits & to_bit(modifier)); } override string toString() const { Modifier m = Modifier.SHIFT; return enumToString(m); } private { static int to_bit(Modifier modifier) { return 1 << cast(int)modifier; } int mBits; } } */