void XamlCanvas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            var spt = e.GetPosition((FrameworkElement)Parent);
            var pt  = e.GetPosition(this);

            var t = new CanvasTouch {
                Handle              = MouseId,
                CanvasLocation      = new PointF((float)pt.X, (float)pt.Y),
                SuperCanvasLocation = new PointF((float)spt.X, (float)spt.Y),
                Time = DateTime.UtcNow,
            };

            t.PreviousTime                = t.Time;
            t.CanvasPreviousLocation      = t.CanvasLocation;
            t.SuperCanvasPreviousLocation = t.SuperCanvasLocation;

            _activeTouches[t.Handle] = t;

            if (Content != null)
            {
                Content.TouchesBegan(new[] { t }, CanvasKeys.None);
            }
        }
        void XamlCanvas_TouchDown(object sender, TouchEventArgs e)
        {
            var spt = e.GetTouchPoint((FrameworkElement)Parent);
            var pt  = e.GetTouchPoint(this);

            var t = new CanvasTouch {
                Handle              = new IntPtr(e.TouchDevice.Id),
                CanvasLocation      = new PointF((float)pt.Position.X, (float)pt.Position.Y),
                SuperCanvasLocation = new PointF((float)spt.Position.X, (float)spt.Position.Y),
                Time = DateTime.UtcNow,
            };

            t.PreviousTime                = t.Time;
            t.CanvasPreviousLocation      = t.CanvasLocation;
            t.SuperCanvasPreviousLocation = t.SuperCanvasLocation;

            _activeTouches[t.Handle] = t;

            if (Content != null)
            {
                Content.TouchesBegan(new[] { t }, CanvasKeys.None);
            }
        }
예제 #3
0
        void XamlCanvas_TouchDown(object sender, TouchEventArgs e)
        {
            var spt = e.GetTouchPoint ((FrameworkElement)Parent);
            var pt = e.GetTouchPoint (this);

            var t = new CanvasTouch {
                Handle = new IntPtr (e.TouchDevice.Id),
                CanvasLocation = new PointF ((float)pt.Position.X, (float)pt.Position.Y),
                SuperCanvasLocation = new PointF ((float)spt.Position.X, (float)spt.Position.Y),
                Time = DateTime.UtcNow,
            };
            t.PreviousTime = t.Time;
            t.CanvasPreviousLocation = t.CanvasLocation;
            t.SuperCanvasPreviousLocation = t.SuperCanvasLocation;

            _activeTouches[t.Handle] = t;

            if (Content != null) {
                Content.TouchesBegan (new[] { t }, CanvasKeys.None);
            }
        }
예제 #4
0
        void XamlCanvas_MouseDown(object sender, MouseButtonEventArgs e)
        {
            var spt = e.GetPosition ((FrameworkElement)Parent);
            var pt = e.GetPosition (this);

            var t = new CanvasTouch {
                Handle = MouseId,
                CanvasLocation = new PointF ((float)pt.X, (float)pt.Y),
                SuperCanvasLocation = new PointF ((float)spt.X, (float)spt.Y),
                Time = DateTime.UtcNow,
            };
            t.PreviousTime = t.Time;
            t.CanvasPreviousLocation = t.CanvasLocation;
            t.SuperCanvasPreviousLocation = t.SuperCanvasLocation;

            _activeTouches[t.Handle] = t;

            if (Content != null) {
                Content.TouchesBegan (new[] { t }, CanvasKeys.None);
            }
        }
예제 #5
0
        void HandleTouchFrameReported(object sender, TouchFrameEventArgs e)
        {
            try {
                var pts = e.GetTouchPoints(this);
                var spts = e.GetTouchPoints((UIElement)Parent);

                var began = new List<CanvasTouch>();
                var ended = new List<CanvasTouch>();
                var moved = new List<CanvasTouch>();

                for (var i = 0; i < pts.Count; i++) {

                    var p = pts[i];
                    var handle = new IntPtr(p.TouchDevice.Id + 1);

                    var now = DateTime.UtcNow;

                    if (p.Action == TouchAction.Down) {

                        var pos = p.Position.ToPointF();

                        //
                        // Look for double taps
                        //
                        var tapCount = 1;

                        if (_lastDownTime.ContainsKey(handle) &&
                            _lastBeganPosition.ContainsKey(handle)) {
                            var dt = now - _lastDownTime[handle];

                            if (dt.TotalSeconds < 0.5 && pos.DistanceTo(_lastBeganPosition[handle]) < DoubleClickMinDistance) {
                                tapCount++;
                            }
                        }

                        //
                        // TouchBegan
                        //
                        var t = new CanvasTouch {
                            Handle = handle,
                            TapCount = tapCount,
                            CanvasLocation = pos,
                            CanvasPreviousLocation = pos,
                            SuperCanvasLocation = spts[i].Position.ToPointF(),
                            SuperCanvasPreviousLocation = spts[i].Position.ToPointF(),
                            PreviousTime = now,
                            Time = now,
                        };
                        _activeTouches[t.Handle] = t;
                        _lastDownTime[t.Handle] = now;
                        _lastBeganPosition[t.Handle] = pos;
                        began.Add(t);
                    }
                    else if (_activeTouches.ContainsKey(handle)) {
                        var t = _activeTouches[handle];

                        t.CanvasPreviousLocation = t.CanvasLocation;
                        t.SuperCanvasPreviousLocation = t.SuperCanvasLocation;
                        t.PreviousTime = t.Time;

                        t.CanvasLocation = p.Position.ToPointF();
                        t.SuperCanvasLocation = spts[i].Position.ToPointF();
                        t.Time = now;

                        if (p.Action == TouchAction.Move) {
                            moved.Add(t);
                        }
                        else {
                            ended.Add(t);
                        }
                    }
                }

                var del = Content;
                if (del != null && _touchEnabled) {
                    if (began.Count > 0) {
                        var keys = CanvasKeys.None;
                        //if (Keyboard.IsKeyDown (Key.LeftCtrl) || Keyboard.IsKeyDown (Key.RightCtrl)) {
                        //	keys = keys | CanvasKeys.Command;
                        //}
                        //if (Keyboard.IsKeyDown (Key.LeftShift) || Keyboard.IsKeyDown (Key.RightShift)) {
                        //	keys = keys | CanvasKeys.Shift;
                        //}
                        del.TouchesBegan(began.ToArray(), keys);
                    }
                    if (moved.Count > 0) {
                        del.TouchesMoved(moved.ToArray());
                    }
                    if (ended.Count > 0) {
                        del.TouchesEnded(ended.ToArray());
                    }
                }
            }
            catch (Exception err) {
                System.Diagnostics.Debug.WriteLine(err);
            }
        }
예제 #6
0
 public void TouchesBegan(CanvasTouch[] touches)
 {
     var touch = touches.First ();
     if (Frame.Contains (touch.CanvasLocation)) {
         istate = InteractionState.Pressed;
     }
 }
예제 #7
0
 public virtual bool TouchesMoved(CanvasTouch[] touches)
 {
     return false;
 }
예제 #8
0
 public virtual void TouchesEnded(CanvasTouch[] touches)
 {
 }
예제 #9
0
 public virtual void TouchesCancelled(CanvasTouch[] touches)
 {
 }
예제 #10
0
 public virtual void TouchesBegan(CanvasTouch[] touches)
 {
 }
예제 #11
0
 public void TouchesEnded(CanvasTouch[] touches)
 {
     if (istate == InteractionState.Pressed) {
         istate = InteractionState.None;
         var c = Click;
         if (c != null) {
             c (this, EventArgs.Empty);
         }
     }
 }
예제 #12
0
 public virtual void TouchesBegan(CanvasTouch[] touches, CanvasKeys keys)
 {
 }
        void HandleTouchFrameReported(object sender, TouchFrameEventArgs e)
        {
            try {
                var pts  = e.GetTouchPoints(this);
                var spts = e.GetTouchPoints((UIElement)Parent);

                var began = new List <CanvasTouch>();
                var ended = new List <CanvasTouch>();
                var moved = new List <CanvasTouch>();

                for (var i = 0; i < pts.Count; i++)
                {
                    var p      = pts[i];
                    var handle = new IntPtr(p.TouchDevice.Id + 1);

                    var now = DateTime.UtcNow;

                    if (p.Action == TouchAction.Down)
                    {
                        var pos = p.Position.ToPointF();

                        //
                        // Look for double taps
                        //
                        var tapCount = 1;

                        if (_lastDownTime.ContainsKey(handle) &&
                            _lastBeganPosition.ContainsKey(handle))
                        {
                            var dt = now - _lastDownTime[handle];

                            if (dt.TotalSeconds < 0.5 && pos.DistanceTo(_lastBeganPosition[handle]) < DoubleClickMinDistance)
                            {
                                tapCount++;
                            }
                        }

                        //
                        // TouchBegan
                        //
                        var t = new CanvasTouch {
                            Handle                      = handle,
                            TapCount                    = tapCount,
                            CanvasLocation              = pos,
                            CanvasPreviousLocation      = pos,
                            SuperCanvasLocation         = spts[i].Position.ToPointF(),
                            SuperCanvasPreviousLocation = spts[i].Position.ToPointF(),
                            PreviousTime                = now,
                            Time = now,
                        };
                        _activeTouches[t.Handle]     = t;
                        _lastDownTime[t.Handle]      = now;
                        _lastBeganPosition[t.Handle] = pos;
                        began.Add(t);
                    }
                    else if (_activeTouches.ContainsKey(handle))
                    {
                        var t = _activeTouches[handle];

                        t.CanvasPreviousLocation      = t.CanvasLocation;
                        t.SuperCanvasPreviousLocation = t.SuperCanvasLocation;
                        t.PreviousTime = t.Time;

                        t.CanvasLocation      = p.Position.ToPointF();
                        t.SuperCanvasLocation = spts[i].Position.ToPointF();
                        t.Time = now;

                        if (p.Action == TouchAction.Move)
                        {
                            moved.Add(t);
                        }
                        else
                        {
                            ended.Add(t);
                        }
                    }
                }

                var del = Content;
                if (del != null && _touchEnabled)
                {
                    if (began.Count > 0)
                    {
                        var keys = CanvasKeys.None;
                        //if (Keyboard.IsKeyDown (Key.LeftCtrl) || Keyboard.IsKeyDown (Key.RightCtrl)) {
                        //	keys = keys | CanvasKeys.Command;
                        //}
                        //if (Keyboard.IsKeyDown (Key.LeftShift) || Keyboard.IsKeyDown (Key.RightShift)) {
                        //	keys = keys | CanvasKeys.Shift;
                        //}
                        del.TouchesBegan(began.ToArray(), keys);
                    }
                    if (moved.Count > 0)
                    {
                        del.TouchesMoved(moved.ToArray());
                    }
                    if (ended.Count > 0)
                    {
                        del.TouchesEnded(ended.ToArray());
                    }
                }
            }
            catch (Exception err) {
                System.Diagnostics.Debug.WriteLine(err);
            }
        }