diff -r e99fe78cd168 -r 45c9e55fcf23 src/GestureControl/GestureControl.cs --- a/src/GestureControl/GestureControl.cs Mon Oct 26 08:36:15 2009 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Diagnostics; -using System.Text; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Media.Animation; -using System.Windows.Navigation; -using System.Windows.Shapes; -using Microsoft.Surface; -using Microsoft.Surface.Presentation; -using Microsoft.Surface.Presentation.Controls; -using System.Windows.Ink; - -namespace GestureControl -{ - public class GestureControl : ContentControl - { - private double angle = 0; - public static readonly DependencyProperty GestureProperty; - public String Gesture - { - get { return (String)GetValue(GestureControl.GestureProperty); } - set { SetValue(GestureControl.GestureProperty, value); } - } - - #region GestureEvent - public delegate void GestureRoutedEventHandler(object sender, GestureRoutedEventArgs e); - public static readonly RoutedEvent gestureEvent = EventManager.RegisterRoutedEvent( - "GestureEvent", RoutingStrategy.Bubble, typeof(GestureRoutedEventHandler), typeof(GestureControl)); - - public event GestureRoutedEventHandler GestureEvent - { - add { AddHandler(gestureEvent, value); } - remove { RemoveHandler(gestureEvent, value); } - } - protected virtual void RaiseGestureEvent(String gesture) - { - try - { - GestureRoutedEventArgs newEventArgs = new GestureRoutedEventArgs(GestureControl.gestureEvent, gesture); - RaiseEvent(newEventArgs); - } - catch (Exception e) { } - } - #endregion - - static GestureControl() - { - DefaultStyleKeyProperty.OverrideMetadata(typeof(GestureControl), new FrameworkPropertyMetadata(typeof(GestureControl))); - - GestureControl.GestureProperty = DependencyProperty.Register("Gesture", typeof(String), typeof(GestureControl), - new FrameworkPropertyMetadata("None", new PropertyChangedCallback(OnGestureChanged))); - } - private static void OnGestureChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) - { - //Debug.WriteLine("changed", "Gesture"); - } - - protected override void OnInitialized(EventArgs e) - { - base.OnInitialized(e); - this.InitializeControl(); - } - protected void InitializeControl() - { - base.AddHandler(SurfaceControl.PreviewContactDownEvent, new RoutedEventHandler(AreaDown)); - base.AddHandler(SurfaceInkCanvas.StrokeCollectedEvent, new RoutedEventHandler(AreaStrokeCollected)); - } - // get angle from the first contact of the stroke - protected void AreaDown(object source, RoutedEventArgs e) - { - ContactEventArgs c = (ContactEventArgs)e; - this.angle = c.Contact.GetOrientation(this) - 270; - } - - protected void AreaStrokeCollected(object source, RoutedEventArgs e) - { - Debug.WriteLine("collected", "Stroke"); - System.Windows.Controls.InkCanvasStrokeCollectedEventArgs tmp = e as System.Windows.Controls.InkCanvasStrokeCollectedEventArgs; - // Apply a rotation with the angle of the first contact - Matrix rot = Matrix.Identity; - rot.Rotate(-this.angle); - Stroke s = tmp.Stroke; - s.Transform(rot, true); - // Get a list of point from a Bezier curve - StylusPointCollection tmp2 = s.GetBezierStylusPoints(); - // Generate a list of SurfaceGesturePoint, just X and Y but can be improve - List pointList = new List(); - foreach (StylusPoint p in tmp2) - pointList.Add(new SurfaceGesturePoint { X = p.X, Y = p.Y }); - // create the gesture analyser and set the list - SurfaceGesture gesture = new SurfaceGesture(pointList, 1); - // try to get a pattern from the list, if one, raise a event - this.Gesture = gesture.GetPattern(); - if (this.Gesture != "None") - { - this.RaiseGestureEvent(this.Gesture); - } - // clear the stroke - SurfaceInkCanvas ink = e.OriginalSource as SurfaceInkCanvas; - ink.Strokes.Clear(); - } - } -}