--- 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<SurfaceGesturePoint> pointList = new List<SurfaceGesturePoint>();
- 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();
- }
- }
-}