ジェスチャ判定方法
こんな感じでどうでしょうか。
// マウスジェスチャ 方向 private enum GestureDirection { Up = 1, Down = 2, Left = 4, Right = 8, None = 0, } void Document_MouseUp(object sender, HtmlElementEventArgs e) { if (e.MouseButtonsPressed == (MouseButtons.Left | MouseButtons.Right)) { Debug.WriteLine("Gesturing Off"); } else { if (e.MouseButtonsPressed == MouseButtons.Right) { mouseGestureRightDown = false; } else if (e.MouseButtonsPressed == MouseButtons.Left) { mouseGestureLeftDown = false; } } if (mouseGestureStatus == GestureStatus.Gesturing) { int gestureCode = getGestureCode(gestureList); if (gestureCode == 4) { // ← GoBack(); } else if (gestureCode == 8) { // → GoForward(); } else if (gestureCode == 40) { // ↓→ Debug.WriteLine("Window Close"); } mouseGestureStatus = GestureStatus.None; gestureList.Clear(); } } private int getGestureCode(List<GestureDirection> gesture) { int result = 0; foreach (int g in gesture) { result = (result << 4) + g; } return result; }
4bit を 1 個のジェスチャとして判定する方法です。符号付32bit でも 7 個まで判定出来るので必要十分な気がします。3bit でも良かったのですが、なんとなく中途半端な気がしたので 4bit にしてしまいました。None がある為(必要かどうかは分かりませんが)残念ながら 2bit には収まりません。
とか書いてたら string を使えばそんな制限無しで判定出来るということに気が付きました…。しかも判定文が
if (gestureList.CompareTo("DR") == 0)
とか書けるので見た目も人にやさしくなりますね(この例は↓→)。本番はこっちを使うかな。