public PressableController(FrameworkElement element, PressableModel model, KinectRegion kinectRegion)
        {
            this.element      = new WeakReference(element);
            this.kinectRegion = kinectRegion;
            this.inputModel   = model;

            if (this.inputModel == null)
            {
                return;
            }

            this.eventSubscriptions = new CompositeDisposable
            {
                this.inputModel.PressingStartedObservable()
                .Subscribe(_ => VisualStateManager.GoToState(this.Control, "Focused", true)),

                this.inputModel.HoldingObservable()
                .Subscribe(_ => Debug.WriteLine(string.Format("Holding: {0}, ", DateTime.Now))),

                this.inputModel.PressingUpdatedObservable()
                .Subscribe(_ => Debug.WriteLine(string.Format("PressingUpdated: {0}, ", DateTime.Now))),

                this.inputModel.PressingCompletedObservable()
                .Subscribe(_ => VisualStateManager.GoToState(this.Control, "Unfocused", true)),

                this.inputModel.TappedObservable()
                .Subscribe(_ => Debug.WriteLine(string.Format("Tapped: {0}, ", DateTime.Now))),
            };
        }
        public PressableController(FrameworkElement element, PressableModel model, KinectRegion kinectRegion)
        {
            this.element = new WeakReference(element);
            this.kinectRegion = kinectRegion;
            this.inputModel = model;

            if (this.inputModel == null)
                return;

            this.eventSubscriptions = new CompositeDisposable 
            {
                this.inputModel.PressingStartedObservable()
                               .Subscribe(_ => VisualStateManager.GoToState(this.Control, "Focused", true)),

                this.inputModel.HoldingObservable()
                               .Subscribe(_ => Debug.WriteLine(string.Format("Holding: {0}, ", DateTime.Now))),

                this.inputModel.PressingUpdatedObservable()
                               .Subscribe(_ => Debug.WriteLine(string.Format("PressingUpdated: {0}, ", DateTime.Now))),

                this.inputModel.PressingCompletedObservable()
                               .Subscribe(_ => VisualStateManager.GoToState(this.Control, "Unfocused", true)),

                this.inputModel.TappedObservable()
                               .Subscribe(_ => Debug.WriteLine(string.Format("Tapped: {0}, ", DateTime.Now))),
            };
        }
 public KinectV2CustomButtonController(IInputModel inputModel, KinectRegion kinectRegion, EventHandler HandPointerEnter, EventHandler HandPointerLeave)
 {
     _inputModel                    = inputModel as PressableModel;
     _handPointerEnter              = HandPointerEnter;
     _handPointerLeave              = HandPointerLeave;
     _kinectRegion                  = kinectRegion;
     _interactiveElement            = _inputModel.Element as KinectV2CustomButton;
     kinectCoreWindow.PointerMoved += kinectCoreWindow_PointerMoved;
 }
 protected virtual void Dispose(bool disposing)
 {
     if (!_disposedValue)
     {
         _kinectRegion                  = null;
         _inputModel                    = null;
         _interactiveElement            = null;
         kinectCoreWindow.PointerMoved -= kinectCoreWindow_PointerMoved;
         _handPointerEnter              = null;
         _handPointerLeave              = null;
         kinectCoreWindow               = null;
         _disposedValue                 = true;
     }
 }
 private static IObservable <T> GetObservable <T>(PressableModel model, string eventName)
 {
     return(ModelObservable.GetObservable <PressableModel, T>(model, eventName));
 }
 public static IObservable <KinectTappedEventArgs> TappedObservable(this PressableModel pressableModel)
 {
     return(GetObservable <KinectTappedEventArgs>(pressableModel, "Tapped"));
 }
 public static IObservable <KinectPressingCompletedEventArgs> PressingCompletedObservable(this PressableModel pressableModel)
 {
     return(GetObservable <KinectPressingCompletedEventArgs>(pressableModel, "PressingCompleted"));
 }
 public static IObservable <KinectHoldingEventArgs> HoldingObservable(this PressableModel pressableModel)
 {
     return(GetObservable <KinectHoldingEventArgs>(pressableModel, "Holding"));
 }