Beispiel #1
0
        public override void Run(Window window)
        {
            _background = new Background(window);
            var windowSize = window.ScreenSize;

            _background.Color = Color.White;
            _background.Resize(windowSize.Width, windowSize.Height);
            _background.Show();

            _box1 = new Rectangle(window)
            {
                Color = Color.Yellow
            };
            _box1.Resize(400, 600);
            _box1.Move(160, 160);
            _box1.Show();

            _log = new Label(window);
            _log.Resize(700, 1280 - 780);
            _log.Move(10, 770);
            _log.Show();
            _logEntries = new List <string>();
            Log("Double tap to register additional gestures. Tripple tap to unregister them.");

            _glayer = new GestureLayer(_box1);
            _glayer.Attach(_box1);

            _glayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) => {
                Log("Tap {0},{1}", info.X, info.Y);
            });

            _glayer.SetTapCallback(GestureLayer.GestureType.DoubleTap, GestureLayer.GestureState.End, (info) => {
                Log("DoubleTap {0},{1} {2}", info.X, info.Y, info.FingersCount);
                _glayer.SetLineCallback(GestureLayer.GestureState.End, (line) => {
                    Log("Line {0},{1}-{2},{3}, M:{4},{5}", line.X1, line.Y1, line.X2, line.Y2, line.HorizontalMomentum, line.VerticalMomentum);
                });
                _glayer.SetFlickCallback(GestureLayer.GestureState.End, (flick) => {
                    Log("Flick {0},{1}-{2},{3}, M:{4},{5}", flick.X1, flick.Y1, flick.X2, flick.Y2, flick.HorizontalMomentum, flick.VerticalMomentum);
                });
                _glayer.RotateStep = 3;
                _glayer.SetRotateCallback(GestureLayer.GestureState.Move, (rotate) => {
                    Log("Rotation {0},{1} a:{2:F3} ba:{3:F3}", rotate.X, rotate.Y, rotate.Angle, rotate.BaseAngle);
                });
                _glayer.SetZoomCallback(GestureLayer.GestureState.End, (zoom) => {
                    Log("Zoom {0},{1} r:{2} z:{3:F3}", zoom.X, zoom.Y, zoom.Radius, zoom.Zoom);
                });
                Log("Line, Flick, Rotate, and Zoom callbacks enabled.");
            });

            _glayer.SetTapCallback(GestureLayer.GestureType.TripleTap, GestureLayer.GestureState.End, (info) => {
                Log("TrippleTap {0},{1} {2}", info.X, info.Y, info.FingersCount);
                _glayer.SetLineCallback(GestureLayer.GestureState.End, null);
                _glayer.SetFlickCallback(GestureLayer.GestureState.End, null);
                _glayer.SetRotateCallback(GestureLayer.GestureState.Move, null);
                _glayer.SetZoomCallback(GestureLayer.GestureState.End, null);
                Log("Cleared Line, Flick, Rotate, and Zoom callbacks.");
            });
            // Momentum is not used, it seems that it conflicts with Rotate and Zoom
        }
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         _gestureLayer?.Unrealize();
         _gestureLayer = null;
     }
     base.Dispose(disposing);
 }
Beispiel #3
0
 private void DestroyGestureLayer()
 {
     if (gestureLayer != null)
     {
         gestureLayer.IsEnabled = false;
         gestureLayer.Unrealize();
         gestureLayer = null;
     }
 }
Beispiel #4
0
        void Initialize()
        {
            Window window = new Window("ElmSharpApp")
            {
                AvailableRotations = DisplayRotation.Degree_0 | DisplayRotation.Degree_180 | DisplayRotation.Degree_270 | DisplayRotation.Degree_90
            };

            window.BackButtonPressed += (s, e) =>
            {
                Exit();
            };
            window.Show();

            var conformant = new Conformant(window);

            conformant.Show();

            var view = new SKCanvasView(conformant);

            conformant.SetContent(view);
            view.Show();

            view.PaintSurface += OnRender;

            loop            = new AnimatorLoop();
            loop.Processed += (s, e) =>
            {
                view.Invalidate();
            };

            root = new World((int)(1 / loop.FrameTime * 3));

            loop.Start();

            gestureLayer = new GestureLayer(conformant);
            gestureLayer.Attach(view);
            gestureLayer.SetTapCallback(GestureType.Tap, GestureState.Start, data => {
                var args = new TouchEventArgs {
                    X = data.X, Y = data.Y, State = TouchState.Start
                };
                root.DispatchEvent(args);
            });
            gestureLayer.SetTapCallback(GestureType.Tap, GestureState.End, data => {
                var args = new TouchEventArgs {
                    X = data.X, Y = data.Y, State = TouchState.End
                };
                root.DispatchEvent(args);
            });
            gestureLayer.SetTapCallback(GestureType.Tap, GestureState.Abort, data => {
                var args = new TouchEventArgs {
                    X = data.X, Y = data.Y, State = TouchState.Abort
                };
                root.DispatchEvent(args);
            });

            //Drawable.DebugSquare = true;
        }
        private void Initialize()
        {
            _gestureLayer?.Unrealize();
            _gestureLayer = new GestureLayer(NativeView);
            _gestureLayer.Attach(NativeView);

            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.Move, OnMoved);
            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.End, OnEnd);
            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.Abort, OnEnd);
        }
Beispiel #6
0
        void Initialize()
        {
            AlignmentX = -1;
            AlignmentY = -1;
            WeightX    = 1;
            WeightY    = 1;

            _contentBox = new Box(_mainLayout);
            _contentBox.Show();
            _mainLayout.PackEnd(_contentBox);

            _drawerBox = new Box(_mainLayout);
            _drawerBox.Show();
            _mainLayout.PackEnd(_drawerBox);

            _drawerContentBox = new Box(_drawerBox);
            _drawerBox.PackEnd(_drawerContentBox);

            _drawerIconBox = new Box(_drawerBox);
            _drawerBox.PackEnd(_drawerIconBox);

            _drawerIcon = new EImage(this)
            {
                AlignmentY = -1,
                AlignmentX = -1,
                WeightX    = 1,
                WeightY    = 1
            };
            _drawerIcon.Show();
            using (var stream = GetType().Assembly.GetManifestResourceStream(DefaultIcon))
            {
                _drawerIcon.Load(stream);
            }

            _drawerIconBox.PackEnd(_drawerIcon);

            _contentGesture = new GestureLayer(_contentBox);
            _contentGesture.Attach(_contentBox);
            _contentGesture.SetMomentumCallback(GestureLayer.GestureState.Start, OnContentDragStarted);
            _contentGesture.SetMomentumCallback(GestureLayer.GestureState.End, OnContentDragEnded);
            _contentGesture.SetMomentumCallback(GestureLayer.GestureState.Abort, OnContentDragEnded);

            _drawerGesture = new GestureLayer(_drawerIconBox);
            _drawerGesture.Attach(_drawerIconBox);

            _drawerGesture.SetMomentumCallback(GestureLayer.GestureState.Move, OnDrawerDragged);
            _drawerGesture.SetMomentumCallback(GestureLayer.GestureState.End, OnDrawerDragEnded);
            _drawerGesture.SetMomentumCallback(GestureLayer.GestureState.Abort, OnDrawerDragEnded);

            _mainLayout.SetLayoutCallback(OnLayout);
            _drawerBox.SetLayoutCallback(OnDrawerContentLayout);
            _contentBox.SetLayoutCallback(OnContentLayout);

            RotaryEventManager.Rotated += OnRotateEventReceived;
        }
 void CreateGestureLayer()
 {
     _gestureLayer = new GestureLayer(_renderer.NativeView);
     _gestureLayer.Attach(_renderer.NativeView);
     _gestureLayer.Deleted += (s, e) =>
     {
         _gestureLayer = null;
         Clear();
     };
     _gestureLayer.IsEnabled = _renderer.Element.IsEnabled;
 }
Beispiel #8
0
 void CreateGestureLayer()
 {
     _gestureLayer = new GestureLayer(_renderer.NativeView);
     _gestureLayer.Attach(_renderer.NativeView);
     _gestureLayer.Deleted += (s, e) =>
     {
         _gestureLayer = null;
         Clear();
     };
     UpdateGestureLayerEnabled();
 }
Beispiel #9
0
        protected override void OnAttached()
        {
            effect = TouchEffect.PickFrom(Element);
            if (effect?.IsDisabled ?? true)
            {
                return;
            }

            effect.Element = (VisualElement)Element;
            gestureLayer   = new TouchTapGestureRecognizer(Control, effect);
        }
Beispiel #10
0
        protected override void OnAttached()
        {
            _effect = Element.PickTouchEff();
            if (_effect?.IsDisabled ?? true)
            {
                return;
            }

            _effect.Control = Element as VisualElement;
            _gestureLayer   = new TouchTapGestureRecognizer(Control, _effect);
        }
        public TizenUIElementPointersSupport(object owner, UnoCanvas canvas)
        {
            _owner              = (CoreWindow)owner;
            _ownerEvents        = (ICoreWindowEvents)owner;
            _canvas             = canvas;
            _displayInformation = DisplayInformation.GetForCurrentView();

            _gestureLayer = new GestureLayer(canvas);
            _gestureLayer.Attach(canvas);
            _gestureLayer.IsEnabled = true;
            SetupTapGesture();
            SetupMomentumGesture();
        }
Beispiel #12
0
        public DrawerBox(EvasObject parent) : base(parent)
        {
            _drawerBox = new EBox(this);
            _drawerBox.SetAlignment(-1.0, -1.0);
            _drawerBox.SetWeight(1.0, 1.0);
            _drawerBox.Show();

            _contentBox = new EBox(this);
            _contentBox.SetAlignment(-1.0, -1.0);
            _contentBox.SetWeight(1.0, 1.0);
            _contentBox.Show();

            _dimArea = new EBox(this)
            {
                BackgroundColor = ThemeConstants.Shell.ColorClass.DefaultDrawerDimBackgroundColor,
                Opacity         = ThemeConstants.Shell.Resources.DefaultDrawerDimOpacity
            };

            _gestureOnDimArea = new GestureLayer(_dimArea);
            _gestureOnDimArea.SetTapCallback(GestureType.Tap, GestureLayer.GestureState.Start, OnTapped);
            _gestureOnDimArea.Attach(_dimArea);

            _splitPane = new Panes(this)
            {
                AlignmentX   = -1,
                AlignmentY   = -1,
                WeightX      = 1,
                WeightY      = 1,
                IsFixed      = true,
                IsHorizontal = false,
            };

            _panel = new Panel(this);
            _panel.SetScrollable(_isGestureEnabled);
            _panel.SetScrollableArea(1.0);
            _panel.Direction = PanelDirection.Left;
            _panel.Toggled  += (object?sender, EventArgs e) =>
            {
                if (_panel.IsOpen)
                {
                    _dimArea.Show();
                }

                Toggled?.Invoke(this, EventArgs.Empty);
            };

            _mainWidget = _contentBox;

            ConfigureLayout();
            SetLayoutCallback(OnLayout);
        }
Beispiel #13
0
 public void Clear()
 {
     // this will clear all callbacks in ElmSharp GestureLayer
     _gestureLayer?.Unrealize();
     _gestureLayer = null;
     foreach (var handlers in _handlerCache.Values)
     {
         foreach (var handler in handlers)
         {
             handler.PropertyChanged -= OnGestureRecognizerPropertyChanged;
         }
     }
     _handlerCache.Clear();
 }
        protected override void OnAttached()
        {
            Console.WriteLine("Tizen OnAttached()");
            _view = Control ?? Container;

            if (_view == null)
            {
                Console.WriteLine("_view is null. leaving");
                return;
            }

            Console.WriteLine($"_view is {_view}");

            if (Element is ITouchAndPressEffectConsumer touchAndPressEffectConsumer)
            {
                var gestureRecognizer = new GestureLayer(_view);
                gestureRecognizer.Attach(_view);

                Console.WriteLine("Attaching gesture recognizer to _view");

                gestureRecognizer.SetTapCallback(GestureLayer.GestureType.Tap,
                                                 GestureLayer.GestureState.Start,
                                                 arg =>
                {
                    touchAndPressEffectConsumer.ConsumeEvent(EventType.Pressing);
                    Console.WriteLine("Tizen: Tap Start");
                });

                gestureRecognizer.SetTapCallback(GestureLayer.GestureType.Tap,
                                                 GestureLayer.GestureState.End,
                                                 arg =>
                {
                    touchAndPressEffectConsumer.ConsumeEvent(EventType.Released);
                    Console.WriteLine("Tizen: Tap End");
                });

                gestureRecognizer.SetTapCallback(GestureLayer.GestureType.Tap,
                                                 GestureLayer.GestureState.Abort,
                                                 arg =>
                {
                    touchAndPressEffectConsumer.ConsumeEvent(EventType.Cancelled);
                    Console.WriteLine("Tizen: Tap Abort");
                });
            }
            else
            {
                Console.WriteLine("Element is NOT ITouchAndPressEffectConsumer");
            }
        }
Beispiel #15
0
        protected override void OnDetached()
        {
            if (effect?.Element == null)
            {
                return;
            }

            if (gestureLayer != null)
            {
                gestureLayer.ClearCallbacks();
                gestureLayer.Unrealize();
                gestureLayer = null;
            }
            effect.Element = null;
            effect         = null;
        }
Beispiel #16
0
        private void CreateGestureLayer(EvasObject parent)
        {
            if (gestureLayer == null)
            {
                gestureLayer = new GestureLayer(parent);
                gestureLayer.Attach(parent);
                gestureLayer.Deleted += (s, e) =>
                {
                    gestureLayer = null;
                    DestroyGestureLayer();
                };
                gestureLayer.IsEnabled = true;

                AddMomentumGesture();
            }
        }
Beispiel #17
0
        protected override void OnDetached()
        {
            if (_effect?.Control == null)
            {
                return;
            }

            if (_gestureLayer != null)
            {
                _gestureLayer.ClearCallbacks();
                _gestureLayer.Unrealize();
                _gestureLayer = null;
            }
            _effect.Control = null;
            _effect         = null;
        }
Beispiel #18
0
        void CreateGestureLayer()
        {
            _gestureLayer = new GestureLayer(_renderer.NativeView);
            _gestureLayer.Attach(_renderer.NativeView);
            _gestureLayer.Deleted += (s, e) =>
            {
                _gestureLayer = null;
                Clear();
            };
            UpdateGestureLayerEnabled();

            if (Device.Idiom == TargetIdiom.TV)
            {
                _renderer.NativeView.KeyDown += OnKeyDown;
            }
        }
Beispiel #19
0
        void Initialize()
        {
            _gestureLayer?.Unrealize();
            _gestureLayer = new GestureLayer(NativeView);
            _gestureLayer.Attach(NativeView);

            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.Move, OnMoved);
            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.End, OnEnd);
            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.Abort, OnEnd);
            SwipeDirection = 0;
            DrawerState    = SwipeDrawerState.Closed;
            Control.AllowFocus(true);
            Control.Unfocused += (s, e) =>
            {
                _ = SwipeCloseAsync();
            };
        }
        protected override void OnElementChanged(ElementChangedEventArgs <Xamarin.Forms.Image> args)
        {
            base.OnElementChanged(args);

            if (Control == null)
            {
                return;
            }

            if (GestureRecognizer == null)
            {
                GestureRecognizer = new GestureLayer(Control);
                GestureRecognizer.Attach(Control);
            }

            if (args.NewElement == null)
            {
                GestureRecognizer.ClearCallbacks();
                return;
            }
            else
            {
                Control.Clicked += SendClicked;
            }

            if (!(args.NewElement is ImageButton button))
            {
                return;
            }

            GestureRecognizer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.Start, x => {
                KeyDown();
            });
            GestureRecognizer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, x => {
                KeyUp();
            });
            GestureRecognizer.SetTapCallback(GestureLayer.GestureType.LongTap, GestureLayer.GestureState.End, x => {
                KeyUp();
            });
            GestureRecognizer.SetTapCallback(GestureLayer.GestureType.LongTap, GestureLayer.GestureState.Abort, x => {
                KeyUp();
            });
        }
Beispiel #21
0
        public void Clear()
        {
            // this will clear all callbacks in ElmSharp GestureLayer
            _gestureLayer?.Unrealize();
            _gestureLayer = null;
            foreach (var handlers in _handlerCache.Values)
            {
                foreach (var handler in handlers)
                {
                    handler.PropertyChanged -= OnGestureRecognizerPropertyChanged;
                }
            }
            _handlerCache.Clear();

            if (Device.Idiom == TargetIdiom.TV)
            {
                _renderer.NativeView.KeyDown -= OnKeyDown;
            }
        }
Beispiel #22
0
        /// <summary>
        /// Initializes a new instance of the RefreshLayout class.
        /// </summary>
        /// <param name="parent"></param>
        public RefreshLayout(EvasObject parent) : base(parent)
        {
            MinimumHeight  = _minimumSize;
            _refreshState  = RefreshState.Idle;
            _refreshIcon   = new RefreshIcon(parent);
            _contentLayout = new Box(parent);
            _refreshIcon.Show();
            _contentLayout.Show();

            _gestureLayer = new GestureLayer(parent);
            _gestureLayer.Attach(_contentLayout);
            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.Move, OnMoved);
            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.End, OnEnded);
            _gestureLayer.SetMomentumCallback(GestureLayer.GestureState.Abort, OnEnded);

            this.PackEnd(_contentLayout);
            this.PackEnd(_refreshIcon);

            SetLayoutCallback(OnLayoutUpdate);
        }
Beispiel #23
0
        void Initialize()
        {
            Layout.KeyDown += (s, e) =>
            {
                if (e.KeyName == "Return")
                {
                    if (!_isTexstBlockFocused)
                    {
                        SetFocusOnTextBlock(true);
                        e.Flags |= EvasEventFlag.OnHold;
                    }
                }
            };

            var gesture = new GestureLayer(Layout);

            gesture.Attach(Layout);
            gesture.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (data) => SetFocusOnTextBlock(true));

            Clicked += (s, e) => SetFocusOnTextBlock(true);
        }
Beispiel #24
0
        public override void Run(Window window)
        {
            _background = new Background(window);
            var windowSize = window.ScreenSize;

            _background.Color = Color.White;
            _background.Resize(windowSize.Width, windowSize.Height);
            _background.Show();

            _box1 = new Rectangle(window)
            {
                Color = Color.Yellow
            };
            _box1.Resize(400, 600);
            _box1.Move(160, 160);
            _box1.Show();

            _log = new Label(window);
            _log.Resize(700, 1280 - 780);
            _log.Move(10, 770);
            _log.Show();
            _logEntries = new List <string>();
            Log("Momentum & Roate Gesture Test.");

            _glayer = new GestureLayer(_box1);
            _glayer.Attach(_box1);

            _glayer.RotateStep = 3;
            _glayer.SetRotateCallback(GestureLayer.GestureState.Start, (rotate) =>
            {
                _prevAngle = (int)rotate.BaseAngle;
            });

            _glayer.SetRotateCallback(GestureLayer.GestureState.Move, (rotate) =>
            {
                if (_box1.IsMapEnabled)
                {
                    _angle    += (int)rotate.Angle - _prevAngle;
                    _prevAngle = (int)rotate.Angle;
                    Log($"@@ Rotation XY:({rotate.X},{rotate.Y}) a:{rotate.Angle:F2} ba:{rotate.BaseAngle:F2} total:{_angle}");
                    ApplyTransformation();
                }
            });

            int prevX = 0, prevY = 0;

            _glayer.SetMomentumCallback(GestureLayer.GestureState.Start, (data) =>
            {
                if (data.FingersCount == 1)
                {
                    prevX = _glayer.EvasCanvas.Pointer.X;
                    prevY = _glayer.EvasCanvas.Pointer.Y;
                }
            });
            _glayer.SetMomentumCallback(GestureLayer.GestureState.Move, (data) =>
            {
                if (data.FingersCount == 1)
                {
                    data.X2  = _glayer.EvasCanvas.Pointer.X;
                    data.Y2  = _glayer.EvasCanvas.Pointer.Y;
                    _totalX += (data.X2 - prevX);
                    _totalY += (data.Y2 - prevY);
                    prevX    = data.X2;
                    prevY    = data.Y2;
                    Log($"@@ Momentum X:({prevX},{data.X2}), Y({prevY},{data.Y2}) = Total:({(data.X2 - prevX)}, {(data.Y2 - prevY)})");
                    ApplyTransformation();
                }
            });
            _glayer.SetMomentumCallback(GestureLayer.GestureState.Abort, (data) =>
            {
                Log($"@@ Momentum Abort");
            });
            _glayer.SetMomentumCallback(GestureLayer.GestureState.End, (data) =>
            {
                Log($"@@ Momentum End");
            });
        }
Beispiel #25
0
        public override void Run(Window window)
        {
            Conformant conformant = new Conformant(window);

            conformant.Show();
            gParent = new Box(window)
            {
                BackgroundColor = Color.Yellow,
                PassEvents      = false,
                PropagateEvents = false,
            };
            conformant.SetContent(gParent);

            Box parent = new Box(gParent)
            {
                AlignmentX      = -1,
                AlignmentY      = -1,
                WeightX         = 1,
                WeightY         = 1,
                BackgroundColor = Color.Green,
                PassEvents      = false,
                PropagateEvents = false,
            };
            Box child = new Box(parent)
            {
                AlignmentX      = -1,
                AlignmentY      = -1,
                WeightX         = 1,
                WeightY         = 1,
                BackgroundColor = Color.Blue,
                PassEvents      = false,
                PropagateEvents = false,
            };

            Check ch = new Check(child)
            {
                AlignmentX      = -1,
                AlignmentY      = -1,
                WeightX         = 1,
                WeightY         = 1,
                BackgroundColor = Color.Silver,
                PassEvents      = false,
                PropagateEvents = false,
            };

            gParent.PackEnd(parent);
            parent.PackEnd(child);
            child.PackEnd(ch);

            gParent.Show();
            parent.Show();
            child.Show();
            ch.Show();

            _gParentLayer = new GestureLayer(gParent);
            _gParentLayer.Attach(gParent);
            _gParentLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
            {
                Debug.WriteLine($"@@@ Grand Parent Tap : {gParent.PassEvents}, {gParent.PropagateEvents}, {gParent.RepeatEvents}");
            });
            _parentLayer = new GestureLayer(parent);
            _parentLayer.Attach(parent);
            _parentLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
            {
                Debug.WriteLine($"@@@ Parent Tap : {parent.PassEvents}, {parent.PropagateEvents}, {parent.RepeatEvents}");
            });
            childLayer = new GestureLayer(child);
            childLayer.Attach(child);
            childLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
            {
                Debug.WriteLine($"@@@ Child Tap : {child.PassEvents}, {child.PropagateEvents}, {child.RepeatEvents}");
            });

            chLayer = new GestureLayer(ch);
            chLayer.Attach(ch);
            chLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
            {
                Debug.WriteLine($"@@@ Check1 Tap : {ch.PassEvents}, {ch.PropagateEvents}, {ch.RepeatEvents}");
            });

            EvasObjectEvent eventGrand = new EvasObjectEvent(gParent, EvasObjectCallbackType.MouseDown);

            eventGrand.On += (s, e) =>
            {
                Debug.WriteLine($"@@@ Grand Parent down : {gParent.PassEvents}, {gParent.PropagateEvents}, {gParent.RepeatEvents}");
            };
            EvasObjectEvent evnetParent = new EvasObjectEvent(parent, EvasObjectCallbackType.MouseDown);

            evnetParent.On += (s, e) =>
            {
                Debug.WriteLine($"@@@ Parent down : {parent.PassEvents}, {parent.PropagateEvents}, {parent.RepeatEvents}");
            };
            EvasObjectEvent eventChild = new EvasObjectEvent(child, EvasObjectCallbackType.MouseDown);

            eventChild.On += (s, e) =>
            {
                Debug.WriteLine($"@@@ Child down : {child.PassEvents}, {child.PropagateEvents}, {child.RepeatEvents}");
            };
            EvasObjectEvent eventCh = new EvasObjectEvent(ch, ch.RealHandle, EvasObjectCallbackType.MouseDown);

            eventCh.On += (s, e) =>
            {
                Debug.WriteLine($"@@@ Check down : {ch.PassEvents}, {ch.PropagateEvents}, {ch.RepeatEvents}");
            };
        }