/// <summary> /// Wird aufgerufen , wenn ein neuer TouchPoint auf der Oberfläche erkannt wurde /// </summary> /// <param name="sender">Der Listener</param> /// <param name="gtp">Der TouchPoint</param> public void TouchDown(object sender, GenericEventArgs <TouchPoint> gtp) { TouchPoint tp = gtp.Value; if (!IsInitialized) { return; } Application.Current.Dispatcher.BeginInvoke(new Action(() => { //Nachschlagen welches UIElement an der entsprechenden Position liegt UIElement uie = new HitTestExecution(this).ExecuteHitTest(Root, tp.CurrentPoint); if (uie != null) { //Nachschlagen, ob es bereits eine TouchGroup zu diesem Element gibt. //Diese anschließend aktualisieren (also den TouchPoint zu dieser Hinzufügen) //oder eine neue erstellen if (currentGestures.ContainsKey(uie)) { currentGestures[uie].Add(tp); UpdateGestures(currentGestures[uie]); } else { TouchGroup tg = new TouchGroup(uie, tp); this.currentGestures.Add(uie, tg); UpdateGestures(tg); } } })); }
/// <summary> /// Überprüft eine TouchGroup und dessen UIElement auf alle möglichen Gesten, die erfüllt sein könnten /// und führt diese ggf. aus /// </summary> /// <param name="group">Die TouchGroup</param> private void UpdateGestures(TouchGroup group) { List <GestureHandler> gestures = GetGestures(group.Element, true); foreach (GestureHandler g in gestures) { g.Execute(group); } }
/// <summary> /// Wird aufgerufen, wenn eine Linien-Geste erkannt wurde /// </summary> /// <param name="element"></param> /// <param name="points"></param> private void LineCallback(UIElement element, ScrumGestures.TouchGroup points) { TouchPoint tp = points[0]; //We need at least 2 points this.Surface.Dispatcher.Invoke(new Action(() => { this.SortByPriority(tp.StartPoint, VectorExtension.FromPoints(tp.StartPoint, tp.CurrentPoint)); })); }
/// <summary> /// Wird aufgerufen , wenn ein TouchPoint auf der Oberfläche bewegt wurde /// </summary> /// <param name="sender">Der Listener</param> /// <param name="gtp">Der TouchPoint</param> public void TouchMove(object sender, GenericEventArgs <TouchPoint> gtp) { TouchPoint tp = gtp.Value; TouchGroup group = GetTouchGroup(tp.SessionID); if (group != null) { UpdateGestures(group); } }
/// <summary> /// Überprüft, ob die Geste stattgefunden hat und führt dann ggf. den Callback aus /// </summary> /// <param name="group">Die Berührungspunkte, die zur Erkennung dienen</param> public void Execute(TouchGroup group) { if (IsActive) { TouchGroup g2 = group.Copy(); if (Gesture.Validate(this.Element, g2)) { Callback(this.Element, g2); } } }
private void CenterFocusCallback(System.Windows.UIElement element, ScrumGestures.TouchGroup points) { this.Invoke(() => { if (Surface.ViewController.CurrentView.FreeMovement) { RequestFocus(); OnFocusRequested(); } }); }
/// <summary> /// Wird aufgerufen , wenn ein TouchPoint von der Oberfläche entfernt wurde. /// Entfernt diesen aus der entsprechenden TouchGroup, und löscht diese falls der TouchPoint /// der letzte war /// </summary> /// <param name="sender">Der Listener</param> /// <param name="gtp">Der TouchPoint</param> public void TouchUp(object sender, GenericEventArgs <TouchPoint> gtp) { TouchPoint tp = gtp.Value; TouchGroup group = GetTouchGroup(tp.SessionID); if (group != null) { UpdateGestures(group); group.Remove(tp.SessionID); if (group.Count == 0) { currentGestures.Remove(group.Element); } } }
/// <summary> /// Kopiert eine TouchGroup /// </summary> /// <param name="tg">Die zu kopierende TouchGroup</param> private TouchGroup(TouchGroup tg) : base(tg) { this.Element = tg.Element; this.MaxPoints = tg.MaxPoints; }