private void TapGestureRecognizer_Tapped_nivel(object sender, EventArgs e)
        {
            IGestureRecognizer tgrIcon = ((Label)sender).GestureRecognizers[0];

            VarGlobal.pro_hallazgo = ((TapGestureRecognizer)tgrIcon).CommandParameter as lc_pro_hallazgo;

            var entidad = new ent_mensaje()
            {
                ico_mensaje = "fa-exclamation-circle",
                tit_mensaje = "Nivel de riesgo",
                tex_mensaje = VarGlobal.pro_hallazgo.nom_tblnivelriesgo
            };

            switch (VarGlobal.pro_hallazgo.nom_tblnivelriesgo)
            {
            case "ALTO":
                entidad.col_mensaje = "#FF0000";
                break;

            case "MEDIO":
                entidad.col_mensaje = "#FF8000";
                break;

            case "BAJO":
                entidad.col_mensaje = "#FFBF00";
                break;
            }

            VarGlobal._mensaje = new pg_mensaje(entidad);
            Navigation.PushPopupAsync(VarGlobal._mensaje);
        }
예제 #2
0
 GestureHandler CreateHandler(IGestureRecognizer recognizer)
 {
     if (recognizer is TapGestureRecognizer)
     {
         return(new TapGestureHandler(recognizer));
     }
     else if (recognizer is PinchGestureRecognizer)
     {
         return(new PinchGestureHandler(recognizer));
     }
     else if (recognizer is PanGestureRecognizer)
     {
         return(new PanGestureHandler(recognizer));
     }
     else if (recognizer is SwipeGestureRecognizer)
     {
         return(new SwipeGestureHandler(recognizer));
     }
     else if (recognizer is DragGestureRecognizer)
     {
         return(new DragGestureHandler(recognizer, _renderer));
     }
     else if (recognizer is DropGestureRecognizer)
     {
         return(new DropGestureHandler(recognizer, _renderer));
     }
     return(Forms.GetHandlerForObject <GestureHandler>(recognizer, recognizer));
 }
예제 #3
0
 GestureHandler CreateHandler(IGestureRecognizer recognizer)
 {
     if (recognizer is TapGestureRecognizer)
     {
         return(new TapGestureHandler(recognizer));
     }
     else if (recognizer is PinchGestureRecognizer)
     {
         return(new PinchGestureHandler(recognizer, _handler));
     }
     else if (recognizer is PanGestureRecognizer)
     {
         return(new PanGestureHandler(recognizer));
     }
     else if (recognizer is SwipeGestureRecognizer)
     {
         return(new SwipeGestureHandler(recognizer));
     }
     else if (recognizer is DragGestureRecognizer)
     {
         return(new DragGestureHandler(recognizer, _handler));
     }
     else if (recognizer is DropGestureRecognizer)
     {
         return(new DropGestureHandler(recognizer, _handler));
     }
     return(Registrar.Registered.GetHandlerForObject <GestureHandler>(recognizer, recognizer));
 }
예제 #4
0
 public DropGestureHandler(IGestureRecognizer recognizer, IViewHandler handler) : base(recognizer)
 {
     _dragEnterCallback = OnEnterCallback;
     _dragLeaveCallback = OnLeaveCallback;
     _dropCallback      = OnDropCallback;
     Handler            = handler;
 }
예제 #5
0
 void KinectListener(object sender, PropertyChangedEventArgs e)
 {
     if (e.PropertyName == "IsClutched")
     {
         //Console.Beep();
         IGestureRecognizer gr_sender = (IGestureRecognizer)sender;
         if (gr_sender.IsClutched)
         {
             foreach (IGestureRecognizer gr in this.recognizers)
             {
                 if (gr != sender)
                 {
                     gr.Disable();
                 }
             }
         }
         else
         {
             foreach (IGestureRecognizer gr in this.recognizers)
             {
                 gr.Enable();
             }
         }
     }
 }
예제 #6
0
 public DragGestureHandler(IGestureRecognizer recognizer, IVisualElementRenderer renderer) : base(recognizer)
 {
     _iconCallback     = OnIconCallback;
     _dragDoneCallback = OnDragDoneCallback;
     _isApi4           = DotnetUtil.TizenAPIVersion <= 4;
     Renderer          = renderer;
 }
예제 #7
0
        void Start()
        {
            playerInfoFileHandler = new FileHandler <int>(pathToPlayerInfoFile);
            templatesFileHandler  = new FileHandler <List <GestureTemplate> >(pathToTemplatesFile);

            Trail.SetActive(false);

            PlayerInfo.GetInfo(playerInfoFileHandler);

            allTemplates = templatesFileHandler.Load();

            foreach (GestureTemplate g in allTemplates)
            {
                g.AfterSerializing();
            }

            points            = new List <Vector2>();
            gestureRecognizer = new RecognizerWithFormCoeficient();
            scoreUI.text      = "0";
            timeUI.text       = "30:00";

            Debug.Log("Templates loaded.");
            template = allTemplates[Randomizer()];
            Debug.Log(template.ToString());

            PlayerInfo.CurrentScore    = 0;
            gestureRecognizer.Template = template.Points;
            TemplateName.text          = template.Name;

            //     DrawTemplate(template.Points);
        }
 protected override void OnAttachedTo(View bindable)
 {
     base.OnAttachedTo(bindable);
     _gestureRecognizer = new TapGestureRecognizer {
         Command = new Command(ShowControl)
     };
     AssociatedObject.GestureRecognizers.Add(_gestureRecognizer);
 }
예제 #9
0
 public DropGestureHandler(IGestureRecognizer recognizer, IVisualElementRenderer renderer) : base(recognizer)
 {
     _dragEnterCallback = OnEnterCallback;
     _dragLeaveCallback = OnLeaveCallback;
     _dropCallback      = OnDropCallback;
     _isApi4            = DotnetUtil.TizenAPIVersion <= 4;
     Renderer           = renderer;
 }
 public static void AddGestureRecognizer(this View view, IGestureRecognizer recognizer)
 {
     view.GestureRecognizers.Add (recognizer);
     var baseGestureRecognizer = recognizer as BaseGestureRecognizer;
     if (baseGestureRecognizer != null) {
         view.ProcessGestureRecognizer (baseGestureRecognizer);
     }
 }
예제 #11
0
        public static void AddGestureRecognizer(this View view, IGestureRecognizer recognizer)
        {
            view.GestureRecognizers.Add(recognizer);
            var baseGestureRecognizer = recognizer as BaseGestureRecognizer;

            if (baseGestureRecognizer != null)
            {
                view.ProcessGestureRecognizer(baseGestureRecognizer);
            }
        }
예제 #12
0
        protected virtual NativeGestureRecognizer GetNativeRecognizer(IGestureRecognizer recognizer)
        {
            if (recognizer == null)
            {
                return(null);
            }

            var weakRecognizer   = new WeakReference(recognizer);
            var weakEventTracker = new WeakReference(this);

            var tapRecognizer = recognizer as TapGestureRecognizer;

            if (tapRecognizer != null && tapRecognizer.NumberOfTapsRequired == 1)
            {
                var returnAction = new TargetEventHandler((s, e) =>
                {
                    var tapGestureRecognizer = weakRecognizer.Target as TapGestureRecognizer;
                    var eventTracker         = weakEventTracker.Target as EventTracker;
                    var view = eventTracker?._renderer?.Element as View;

                    if (tapGestureRecognizer != null && view != null)
                    {
                        tapGestureRecognizer.SendTapped(view);
                    }
                });
                var uiRecognizer = new NativeGestureRecognizer
                {
                    EventType = "click",
                    Handler   = returnAction,
                };
                return(uiRecognizer);
            }
            if (tapRecognizer != null && tapRecognizer.NumberOfTapsRequired == 2)
            {
                var returnAction = new TargetEventHandler((s, e) =>
                {
                    var tapGestureRecognizer = weakRecognizer.Target as TapGestureRecognizer;
                    var eventTracker         = weakEventTracker.Target as EventTracker;
                    var view = eventTracker?._renderer?.Element as View;

                    if (tapGestureRecognizer != null && view != null)
                    {
                        tapGestureRecognizer.SendTapped(view);
                    }
                });
                var uiRecognizer = new NativeGestureRecognizer
                {
                    EventType = "dblclick",
                    Handler   = returnAction,
                };
                return(uiRecognizer);
            }

            return(null);
        }
예제 #13
0
 void ValidateGesture(IGestureRecognizer gesture)
 {
     if (gesture == null)
     {
         return;
     }
     if (gesture is PinchGestureRecognizer && _gestureRecognizers.GetGesturesFor <PinchGestureRecognizer>().Count() > 1)
     {
         throw new InvalidOperationException($"Only one {nameof(PinchGestureRecognizer)} per view is allowed");
     }
 }
예제 #14
0
        GestureHandler CreateHandler(IGestureRecognizer recognizer)
        {
            var handlerType = Registrar.Registered.GetHandlerTypeForObject(recognizer);

            if (handlerType != null)
            {
                return((GestureHandler)Activator.CreateInstance(handlerType, recognizer));
            }
            else
            {
                return(null);
            }
        }
예제 #15
0
        public static bool ShouldBeMadeClickable(this View view)
        {
            for (var i = 0; i < view.GestureRecognizers.Count; i++)
            {
                IGestureRecognizer gesture = view.GestureRecognizers[i];
                if (gesture is TapGestureRecognizer || gesture is PinchGestureRecognizer || gesture is PanGestureRecognizer)
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #16
0
        internal override void ValidateGesture(IGestureRecognizer gesture)
        {
            switch (gesture)
            {
            case ClickGestureRecognizer click:
            case TapGestureRecognizer tap:
            case null:
                break;

            default:
                throw new InvalidOperationException($"{gesture.GetType().Name} is not supported on a {nameof(Span)}");
            }
        }
예제 #17
0
        void RemoveGesture(IGestureRecognizer recognizer)
        {
            var cache   = _handlerCache;
            var handler = LookupHandler(recognizer);

            if (handler == null)
            {
                return;
            }

            var gestureType = cache.FirstOrDefault(x => x.Value.Contains(handler)).Key;

            handler.PropertyChanged -= OnGestureRecognizerPropertyChanged;
            cache[gestureType].Remove(handler);

            if (cache[gestureType].Count == 0)
            {
                switch (gestureType)
                {
                case EGestureType.Tap:
                case EGestureType.DoubleTap:
                case EGestureType.TripleTap:
                case EGestureType.LongTap:
                    RemoveTapGesture(gestureType);
                    break;

                case EGestureType.Line:
                    RemoveLineGesture();
                    break;

                case EGestureType.Flick:
                    RemoveFlickGesture();
                    break;

                case EGestureType.Rotate:
                    RemoveRotateGesture();
                    break;

                case EGestureType.Momentum:
                    RemoveMomentumGesture();
                    break;

                case EGestureType.Zoom:
                    RemovePinchGesture();
                    break;

                default:
                    break;
                }
            }
        }
예제 #18
0
 internal override void ValidateGesture(IGestureRecognizer gesture)
 {
     if (gesture == null)
     {
         return;
     }
     if (gesture is PanGestureRecognizer)
     {
         throw new InvalidOperationException($"{nameof(PanGestureRecognizer)} is not supported on a {nameof(Span)}");
     }
     if (gesture is PinchGestureRecognizer)
     {
         throw new InvalidOperationException($"{nameof(PinchGestureRecognizer)} is not supported on a {nameof(Span)}");
     }
 }
예제 #19
0
        private static void AddGesture(View view, IGestureRecognizer gesture)
        {
            view.GestureRecognizers.Add(gesture);

            var layout = view as Layout <View>;

            if (layout == null)
            {
                return;
            }

            foreach (var child in layout.Children)
            {
                AddGesture(child, gesture);
            }
        }
예제 #20
0
        GestureHandler LookupHandler(IGestureRecognizer recognizer)
        {
            var cache = _handlerCache;

            foreach (var handlers in cache.Values)
            {
                foreach (var handler in handlers)
                {
                    if (handler.Recognizer == recognizer)
                    {
                        return(handler);
                    }
                }
            }
            return(null);
        }
예제 #21
0
        void LoadRecognizers()
        {
            if (ElementGestureRecognizers == null)
            {
                return;
            }

#if __MOBILE__
            if (_shouldReceiveTouch == null)
            {
                // Cache this so we don't create a new UITouchEventArgs instance for every recognizer
                _shouldReceiveTouch = ShouldReceiveTouch;
            }
#endif

            for (int i = 0; i < ElementGestureRecognizers.Count; i++)
            {
                IGestureRecognizer recognizer = ElementGestureRecognizers[i];
                if (_gestureRecognizers.ContainsKey(recognizer))
                {
                    continue;
                }

                var nativeRecognizer = GetNativeRecognizer(recognizer);
                if (nativeRecognizer != null)
                {
#if __MOBILE__
                    nativeRecognizer.ShouldReceiveTouch = _shouldReceiveTouch;
#endif
                    _handler.AddGestureRecognizer(nativeRecognizer);

                    _gestureRecognizers[recognizer] = nativeRecognizer;
                }
            }

            var toRemove = _gestureRecognizers.Keys.Where(key => !ElementGestureRecognizers.Contains(key)).ToArray();

            for (int i = 0; i < toRemove.Length; i++)
            {
                IGestureRecognizer gestureRecognizer = toRemove[i];
                var uiRecognizer = _gestureRecognizers[gestureRecognizer];
                _gestureRecognizers.Remove(gestureRecognizer);

                _handler.RemoveGestureRecognizer(uiRecognizer);
                uiRecognizer.Dispose();
            }
        }
        private void TapGestureRecognizer_Tapped_sincro(object sender, EventArgs e)
        {
            IGestureRecognizer tgrIcon = ((Label)sender).GestureRecognizers[0];

            VarGlobal.pro_inspeccion = ((TapGestureRecognizer)tgrIcon).CommandParameter as lc_pro_inspeccion;

            var entidad = new ent_mensaje()
            {
                ico_mensaje = "fa-cloud-upload",
                tit_mensaje = "Sincronizado",
                tex_mensaje = VarGlobal.pro_inspeccion.sincronizado ? "Registro Sincronizado" : "Registro NO Sincronizado",
                col_mensaje = VarGlobal.pro_inspeccion.sincronizado ? "#04B404" : "#DF0101"
            };

            VarGlobal._mensaje = new pg_mensaje(entidad);
            Navigation.PushPopupAsync(VarGlobal._mensaje);
        }
예제 #23
0
        protected virtual NativeGestureRecognizer GetNativeRecognizer(IGestureRecognizer recognizer)
        {
            //if (recognizer == null)
            //    return null;

            //var weakRecognizer = new WeakReference(recognizer);
            //var weakEventTracker = new WeakReference(this);

            //var tapRecognizer = recognizer as TapGestureRecognizer;
            //if (tapRecognizer != null && tapRecognizer.NumberOfTapsRequired == 1)
            //{
            //    var returnAction = new TargetEventHandler((s, e) => {
            //        var tapGestureRecognizer = weakRecognizer.Target as TapGestureRecognizer;
            //        var eventTracker = weakEventTracker.Target as EventTracker;
            //        var view = eventTracker?._renderer?.Element as View;

            //        if (tapGestureRecognizer != null && view != null)
            //            tapGestureRecognizer.SendTapped(view);
            //    });
            //    var uiRecognizer = new NativeGestureRecognizer
            //    {
            //        EventType = "click",
            //        Handler = returnAction,
            //    };
            //    return uiRecognizer;
            //}
            //if (tapRecognizer != null && tapRecognizer.NumberOfTapsRequired == 2)
            //{
            //    var returnAction = new TargetEventHandler((s, e) => {
            //        var tapGestureRecognizer = weakRecognizer.Target as TapGestureRecognizer;
            //        var eventTracker = weakEventTracker.Target as EventTracker;
            //        var view = eventTracker?._renderer?.Element as View;

            //        if (tapGestureRecognizer != null && view != null)
            //            tapGestureRecognizer.SendTapped(view);
            //    });
            //    var uiRecognizer = new NativeGestureRecognizer
            //    {
            //        EventType = "dblclick",
            //        Handler = returnAction,
            //    };
            //    return uiRecognizer;
            //}

            return(null);
        }
예제 #24
0
 public GamePresenter(
     IGameEngine gameEngine,
     IPhotoView photoView,
     IGameResultView gameResultView,
     ICurrentScoreView currentScoreView,
     IEnumerable <IBucketView> bucketViews,
     ITicker ticker,
     IGestureRecognizer gestureRecognizer)
 {
     _gameEngine        = gameEngine;
     _photoView         = photoView;
     _gameResultView    = gameResultView;
     _currentScoreView  = currentScoreView;
     _bucketViews       = bucketViews;
     _ticker            = ticker;
     _gestureRecognizer = gestureRecognizer;
 }
예제 #25
0
 GestureHandler CreateHandler(IGestureRecognizer recognizer)
 {
     if (recognizer is TapGestureRecognizer)
     {
         return(new TapGestureHandler(recognizer));
     }
     else if (recognizer is PinchGestureRecognizer)
     {
         return(new PinchGestureHandler(recognizer));
     }
     else if (recognizer is PanGestureRecognizer)
     {
         return(new PanGestureHandler(recognizer));
     }
     else if (recognizer is SwipeGestureRecognizer)
     {
         return(new SwipeGestureHandler(recognizer));
     }
     return(System.Maui.Maui.GetHandlerForObject <GestureHandler>(recognizer, recognizer));
 }
예제 #26
0
        public static bool ShouldBeMadeClickable(this View view)
        {
            var shouldBeClickable = false;

            for (var i = 0; i < view.GestureRecognizers.Count; i++)
            {
                IGestureRecognizer gesture = view.GestureRecognizers[i];
                if (gesture is TapGestureRecognizer || gesture is PinchGestureRecognizer || gesture is PanGestureRecognizer)
                {
                    shouldBeClickable = true;
                    break;
                }
            }

            // do some evil
            // This is required so that a layout only absorbs click events if it is not fully transparent
            // However this is not desirable behavior in a ViewCell because it prevents the ViewCell from activating
            if (view is Layout && view.BackgroundColor != Color.Transparent && view.BackgroundColor != Color.Default)
            {
                Element parent = view.RealParent;
                var     skip   = false;
                while (parent != null)
                {
                    if (parent is ViewCell)
                    {
                        skip = true;
                        break;
                    }
                    parent = parent.RealParent;
                }

                if (!skip)
                {
                    shouldBeClickable = true;
                }
            }

            return(shouldBeClickable);
        }
    void Start()
    {
        try
        {
            templatesFileHandler = new FileHandler <List <GestureTemplate> >(pathToTemplatesFile);
            allTemplates         = templatesFileHandler.Load();

            foreach (GestureTemplate g in allTemplates)
            {
                g.AfterSerializing();
            }
        }
        catch
        {
            allTemplates = new List <GestureTemplate>();
        }

        points            = new List <Vector2>();
        trail             = GameObject.Find("Trail");
        gestureRecognizer = new RecognizerWithFormCoeficient();
        brush             = GameObject.Find("Brush");
        trail.SetActive(false);
    }
예제 #28
0
        void LoadRecognizers()
        {
            if (ElementGestureRecognizers == null)
            {
                return;
            }

#if __MOBILE__
            if (_shouldReceiveTouch == null)
            {
                // Cache this so we don't create a new UITouchEventArgs instance for every recognizer
                _shouldReceiveTouch = ShouldReceiveTouch;
            }
#endif

#if __MOBILE__
            UIDragInteraction uIDragInteraction = null;
            UIDropInteraction uIDropInteraction = null;

            if (_dragAndDropDelegate != null)
            {
                foreach (var interaction in _renderer.NativeView.Interactions)
                {
                    if (interaction is UIDragInteraction uIDrag && uIDrag.Delegate == _dragAndDropDelegate)
                    {
                        uIDragInteraction = uIDrag;
                    }

                    if (interaction is UIDropInteraction uiDrop && uiDrop.Delegate == _dragAndDropDelegate)
                    {
                        uIDropInteraction = uiDrop;
                    }
                }
            }

            bool dragFound = false;
            bool dropFound = false;
#endif
            for (int i = 0; i < ElementGestureRecognizers.Count; i++)
            {
                IGestureRecognizer recognizer = ElementGestureRecognizers[i];
                if (_gestureRecognizers.ContainsKey(recognizer))
                {
                    continue;
                }

                var nativeRecognizer = GetNativeRecognizer(recognizer);
                if (nativeRecognizer != null && _handler != null)
                {
#if __MOBILE__
                    nativeRecognizer.ShouldReceiveTouch = _shouldReceiveTouch;
#endif
                    _handler.AddGestureRecognizer(nativeRecognizer);

                    _gestureRecognizers[recognizer] = nativeRecognizer;
                }

#if __MOBILE__
                if (Forms.IsiOS11OrNewer && recognizer is DragGestureRecognizer)
                {
                    dragFound            = true;
                    _dragAndDropDelegate = _dragAndDropDelegate ?? new DragAndDropDelegate();
                    if (uIDragInteraction == null)
                    {
                        var interaction = new UIDragInteraction(_dragAndDropDelegate);
                        interaction.Enabled = true;
                        _renderer.NativeView.AddInteraction(interaction);
                    }
                }

                if (Forms.IsiOS11OrNewer && recognizer is DropGestureRecognizer)
                {
                    dropFound            = true;
                    _dragAndDropDelegate = _dragAndDropDelegate ?? new DragAndDropDelegate();
                    if (uIDropInteraction == null)
                    {
                        var interaction = new UIDropInteraction(_dragAndDropDelegate);
                        _renderer.NativeView.AddInteraction(interaction);
                    }
                }
#endif
            }

#if __MOBILE__
            if (!dragFound && uIDragInteraction != null)
            {
                _renderer.NativeView.RemoveInteraction(uIDragInteraction);
            }

            if (!dropFound && uIDropInteraction != null)
            {
                _renderer.NativeView.RemoveInteraction(uIDropInteraction);
            }
#endif

            var toRemove = _gestureRecognizers.Keys.Where(key => !ElementGestureRecognizers.Contains(key)).ToArray();

            for (int i = 0; i < toRemove.Length; i++)
            {
                IGestureRecognizer gestureRecognizer = toRemove[i];
                var uiRecognizer = _gestureRecognizers[gestureRecognizer];
                _gestureRecognizers.Remove(gestureRecognizer);

                _handler.RemoveGestureRecognizer(uiRecognizer);
                uiRecognizer.Dispose();
            }
        }
예제 #29
0
 public TapGestureHandler(IGestureRecognizer recognizer) : base(recognizer)
 {
 }
예제 #30
0
 public ZoomAndRotationGesture(IGestureRecognizer zoomIdentifier, IRotationGripGesture rotationIdentifier)
 {
     this.zoomIdentifier = zoomIdentifier;
     this.rotationIdentifier = rotationIdentifier;
     AngleControl = 5;
 }
예제 #31
0
        protected virtual NativeGestureRecognizer GetNativeRecognizer(IGestureRecognizer recognizer)
        {
            if (recognizer == null)
            {
                return(null);
            }

            var weakRecognizer   = new WeakReference(recognizer);
            var weakEventTracker = new WeakReference(this);

            var tapRecognizer = recognizer as TapGestureRecognizer;

#if !__MOBILE__
            if (recognizer is ClickGestureRecognizer clickRecognizer)
            {
                var returnAction = CreateRecognizerHandler(weakEventTracker, weakRecognizer, clickRecognizer);
                var uiRecognizer = CreateClickRecognizer((int)clickRecognizer.Buttons, clickRecognizer.NumberOfClicksRequired, returnAction);
                return(uiRecognizer);
            }

            if (tapRecognizer != null)
            {
                var returnAction = CreateTapRecognizerHandler(weakEventTracker, weakRecognizer);
                var uiRecognizer = CreateTapRecognizer(tapRecognizer.NumberOfTapsRequired, returnAction);
                return(uiRecognizer);
            }
#else
            if (tapRecognizer != null)
            {
                var returnAction = CreateRecognizerHandler(weakEventTracker, weakRecognizer, tapRecognizer);

                var uiRecognizer = CreateTapRecognizer(tapRecognizer.NumberOfTapsRequired, returnAction);
                return(uiRecognizer);
            }

            var swipeRecognizer = recognizer as SwipeGestureRecognizer;
            if (swipeRecognizer != null)
            {
                var returnAction = new Action <SwipeDirection>((direction) =>
                {
                    var swipeGestureRecognizer = weakRecognizer.Target as SwipeGestureRecognizer;
                    var eventTracker           = weakEventTracker.Target as EventTracker;
                    var view = eventTracker?._renderer.Element as View;

                    if (swipeGestureRecognizer != null && view != null)
                    {
                        swipeGestureRecognizer.SendSwiped(view, direction);
                    }
                });
                var uiRecognizer = CreateSwipeRecognizer(swipeRecognizer.Direction, returnAction, 1);
                return(uiRecognizer);
            }
#endif

            if (recognizer is ChildGestureRecognizer childRecognizer)
            {
#if !__MOBILE__
                if (childRecognizer.GestureRecognizer is ClickGestureRecognizer clickChildRecognizer)
                {
                    var returnAction = CreateChildRecognizerHandler(weakEventTracker, weakRecognizer);
                    var uiRecognizer = CreateClickRecognizer((int)clickChildRecognizer.Buttons, clickChildRecognizer.NumberOfClicksRequired, returnAction);
                    return(uiRecognizer);
                }

                if (childRecognizer.GestureRecognizer is TapGestureRecognizer tapChildRecognizer)
                {
                    var returnAction = CreateChildTapRecognizerHandler(weakEventTracker, weakRecognizer);
                    var uiRecognizer = CreateTapRecognizer(tapChildRecognizer.NumberOfTapsRequired, returnAction);
                    return(uiRecognizer);
                }
#else
                if (childRecognizer.GestureRecognizer is TapGestureRecognizer tapChildRecognizer)
                {
                    var returnAction = CreateChildRecognizerHandler(weakEventTracker, weakRecognizer);
                    var uiRecognizer = CreateTapRecognizer(tapChildRecognizer.NumberOfTapsRequired, returnAction);
                    return(uiRecognizer);
                }
#endif
            }

            var pinchRecognizer = recognizer as PinchGestureRecognizer;
            if (pinchRecognizer != null)
            {
                double startingScale = 1;
                var    uiRecognizer  = CreatePinchRecognizer(r =>
                {
                    var pinchGestureRecognizer = weakRecognizer.Target as PinchGestureRecognizer;
                    var eventTracker           = weakEventTracker.Target as EventTracker;
                    var view = eventTracker?._renderer?.Element as View;

                    if (pinchGestureRecognizer != null && eventTracker != null && view != null)
                    {
                        var oldScale    = eventTracker._previousScale;
                        var originPoint = r.LocationInView(null);
#if __MOBILE__
                        originPoint = UIApplication.SharedApplication.GetKeyWindow().ConvertPointToView(originPoint, eventTracker._renderer.NativeView);
#else
                        originPoint = NSApplication.SharedApplication.KeyWindow.ContentView.ConvertPointToView(originPoint, eventTracker._renderer.NativeView);
#endif
                        var scaledPoint = new Point(originPoint.X / view.Width, originPoint.Y / view.Height);

                        switch (r.State)
                        {
                        case NativeGestureRecognizerState.Began:
#if __MOBILE__
                            if (r.NumberOfTouches < 2)
                            {
                                return;
                            }
#endif
                            pinchGestureRecognizer.SendPinchStarted(view, scaledPoint);
                            startingScale = view.Scale;
                            break;

                        case NativeGestureRecognizerState.Changed:
#if __MOBILE__
                            if (r.NumberOfTouches < 2 && pinchGestureRecognizer.IsPinching)
                            {
                                r.State = NativeGestureRecognizerState.Ended;
                                pinchGestureRecognizer.SendPinchEnded(view);
                                return;
                            }
                            var scale = r.Scale;
#else
                            var scale = r.Magnification;
#endif
                            var delta = 1.0;
                            var dif   = Math.Abs(scale - oldScale) * startingScale;
                            if (oldScale < scale)
                            {
                                delta = 1 + dif;
                            }
                            if (oldScale > scale)
                            {
                                delta = 1 - dif;
                            }

                            pinchGestureRecognizer.SendPinch(view, delta, scaledPoint);
                            eventTracker._previousScale = scale;
                            break;

                        case NativeGestureRecognizerState.Cancelled:
                        case NativeGestureRecognizerState.Failed:
                            if (pinchGestureRecognizer.IsPinching)
                            {
                                pinchGestureRecognizer.SendPinchCanceled(view);
                            }
                            break;

                        case NativeGestureRecognizerState.Ended:
                            if (pinchGestureRecognizer.IsPinching)
                            {
                                pinchGestureRecognizer.SendPinchEnded(view);
                            }
                            eventTracker._previousScale = 1;
                            break;
                        }
                    }
                });
                return(uiRecognizer);
            }

            var panRecognizer = recognizer as PanGestureRecognizer;
            if (panRecognizer != null)
            {
                var uiRecognizer = CreatePanRecognizer(panRecognizer.TouchPoints, r =>
                {
                    var eventTracker = weakEventTracker.Target as EventTracker;
                    var view         = eventTracker?._renderer?.Element as View;

                    var panGestureRecognizer = weakRecognizer.Target as PanGestureRecognizer;
                    if (panGestureRecognizer != null && view != null)
                    {
                        switch (r.State)
                        {
                        case NativeGestureRecognizerState.Began:
#if __MOBILE__
                            if (r.NumberOfTouches != panRecognizer.TouchPoints)
                            {
                                return;
                            }
#endif
                            panGestureRecognizer.SendPanStarted(view, Application.Current.PanGestureId);
                            break;

                        case NativeGestureRecognizerState.Changed:
#if __MOBILE__
                            if (r.NumberOfTouches != panRecognizer.TouchPoints)
                            {
                                r.State = NativeGestureRecognizerState.Ended;
                                panGestureRecognizer.SendPanCompleted(view, Application.Current.PanGestureId);
                                Application.Current.PanGestureId++;
                                return;
                            }
#endif
                            var translationInView = r.TranslationInView(_handler);
                            panGestureRecognizer.SendPan(view, translationInView.X, translationInView.Y, Application.Current.PanGestureId);
                            break;

                        case NativeGestureRecognizerState.Cancelled:
                        case NativeGestureRecognizerState.Failed:
                            panGestureRecognizer.SendPanCanceled(view, Application.Current.PanGestureId);
                            Application.Current.PanGestureId++;
                            break;

                        case NativeGestureRecognizerState.Ended:
#if __MOBILE__
                            if (r.NumberOfTouches != panRecognizer.TouchPoints)
                            {
                                panGestureRecognizer.SendPanCompleted(view, Application.Current.PanGestureId);
                                Application.Current.PanGestureId++;
                            }
#else
                            panGestureRecognizer.SendPanCompleted(view, Application.Current.PanGestureId);
                            Application.Current.PanGestureId++;
#endif
                            break;
                        }
                    }
                });
                return(uiRecognizer);
            }

            return(null);
        }
예제 #32
0
 public ZoomAndRotationGesture()
 {
     zoomIdentifier = new ZoomGripGesture();
     rotationIdentifier = new RotationGripGesture();
     AngleControl = 5;
 }
예제 #33
0
 internal virtual void ValidateGesture(IGestureRecognizer gesture)
 {
 }
예제 #34
0
 public void Add(IGestureRecognizer recognizer)
 {
     recognizer.PropertyChanged += KinectListener;
     this.recognizers.Add(recognizer);
 }
예제 #35
0
 public CalibrationWindow(IGestureRecognizer rec, GesturePack gestures)
 {
     model = new CalibrationModel(new ModelToViewAdapter(() => { return view; }), rec, gestures);
     view = new CalibrationView();
 }
예제 #36
0
 public ConfigurationWindow(IGestureRecognizer rec, GesturePack gestures)
 {
     // Take advantage of closure to get reference to the uninitialized view
     model = new ConfigurationModel(new ModelToViewAdapter(() => { return view; }), rec, gestures);
     view = new ConfigurationView(new ViewToModelAdapter(() => { return model;  }));
 }
예제 #37
0
파일: View.cs 프로젝트: Costo/Xamarin.Forms
		void ValidateGesture(IGestureRecognizer gesture)
		{
			if (gesture == null)
				return;
			if (gesture is PinchGestureRecognizer && _gestureRecognizers.GetGesturesFor<PinchGestureRecognizer>().Count() > 1)
				throw new InvalidOperationException($"Only one {nameof(PinchGestureRecognizer)} per view is allowed");
		}
예제 #38
0
		protected virtual UIGestureRecognizer GetNativeRecognizer(IGestureRecognizer recognizer)
		{
			if (recognizer == null)
				return null;

			var weakRecognizer = new WeakReference(recognizer);
			var weakEventTracker = new WeakReference(this);

			var tapRecognizer = recognizer as TapGestureRecognizer;
			if (tapRecognizer != null)
			{
				var uiRecognizer = CreateTapRecognizer(1, tapRecognizer.NumberOfTapsRequired, r =>
				{
					var tapGestureRecognizer = weakRecognizer.Target as TapGestureRecognizer;
					var eventTracker = weakEventTracker.Target as EventTracker;
					var view = eventTracker?._renderer?.Element as View;

					if (tapGestureRecognizer != null && view != null)
						tapGestureRecognizer.SendTapped(view);
				});
				return uiRecognizer;
			}

			var pinchRecognizer = recognizer as PinchGestureRecognizer;
			if (pinchRecognizer != null)
			{
				double startingScale = 1;
				var uiRecognizer = CreatePinchRecognizer(r =>
				{
					var pinchGestureRecognizer = weakRecognizer.Target as IPinchGestureController;
					var eventTracker = weakEventTracker.Target as EventTracker;
					var view = eventTracker?._renderer?.Element as View;

					if (pinchGestureRecognizer != null && eventTracker != null && view != null)
					{
						var oldScale = eventTracker._previousScale;
						var originPoint = r.LocationInView(null);
						originPoint = UIApplication.SharedApplication.KeyWindow.ConvertPointToView(originPoint, eventTracker._renderer.NativeView);
						var scaledPoint = new Point(originPoint.X / view.Width, originPoint.Y / view.Height);

						switch (r.State)
						{
							case UIGestureRecognizerState.Began:
								if (r.NumberOfTouches < 2)
									return;
								pinchGestureRecognizer.SendPinchStarted(view, scaledPoint);
								startingScale = view.Scale;
								break;
							case UIGestureRecognizerState.Changed:
								if (r.NumberOfTouches < 2 && pinchGestureRecognizer.IsPinching)
								{
									r.State = UIGestureRecognizerState.Ended;
									pinchGestureRecognizer.SendPinchEnded(view);
									return;
								}

								var delta = 1.0;
								var dif = Math.Abs(r.Scale - oldScale) * startingScale;
								if (oldScale < r.Scale)
									delta = 1 + dif;
								if (oldScale > r.Scale)
									delta = 1 - dif;

								pinchGestureRecognizer.SendPinch(view, delta, scaledPoint);
								eventTracker._previousScale = r.Scale;
								break;
							case UIGestureRecognizerState.Cancelled:
							case UIGestureRecognizerState.Failed:
								if (pinchGestureRecognizer.IsPinching)
									pinchGestureRecognizer.SendPinchCanceled(view);
								break;
							case UIGestureRecognizerState.Ended:
								if (pinchGestureRecognizer.IsPinching)
									pinchGestureRecognizer.SendPinchEnded(view);
								eventTracker._previousScale = 1;
								break;
						}
					}
				});
				return uiRecognizer;
			}

			var panRecognizer = recognizer as PanGestureRecognizer;
			if (panRecognizer != null)
			{
				var uiRecognizer = CreatePanRecognizer(panRecognizer.TouchPoints, r =>
				{
					var eventTracker = weakEventTracker.Target as EventTracker;
					var view = eventTracker?._renderer?.Element as View;

					var panGestureRecognizer = weakRecognizer.Target as IPanGestureController;
					if (panGestureRecognizer != null && view != null)
					{
						switch (r.State)
						{
							case UIGestureRecognizerState.Began:
								if (r.NumberOfTouches != panRecognizer.TouchPoints)
									return;
								panGestureRecognizer.SendPanStarted(view, Application.Current.PanGestureId);
								break;
							case UIGestureRecognizerState.Changed:
								if (r.NumberOfTouches != panRecognizer.TouchPoints)
								{
									r.State = UIGestureRecognizerState.Ended;
									panGestureRecognizer.SendPanCompleted(view, Application.Current.PanGestureId);
									Application.Current.PanGestureId++;
									return;
								}
								var translationInView = r.TranslationInView(_handler);
								panGestureRecognizer.SendPan(view, translationInView.X, translationInView.Y, Application.Current.PanGestureId);
								break;
							case UIGestureRecognizerState.Cancelled:
							case UIGestureRecognizerState.Failed:
								panGestureRecognizer.SendPanCanceled(view, Application.Current.PanGestureId);
								Application.Current.PanGestureId++;
								break;
							case UIGestureRecognizerState.Ended:
								if (r.NumberOfTouches != panRecognizer.TouchPoints)
								{
									panGestureRecognizer.SendPanCompleted(view, Application.Current.PanGestureId);
									Application.Current.PanGestureId++;
								}
								break;
						}
					}
				});
				return uiRecognizer;
			}

			return null;
		}