/// <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);
         }
     }
 }
Beispiel #6
0
 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);
                }
            }
        }
Beispiel #8
0
 /// <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;
 }