Example #1
0
        private ISkiaInputComponent getSkiaInputComponent(SKPoint point)
        {
            List <ISkiaInputComponent> inputComponents = new List <ISkiaInputComponent>();

            for (int i = 0; i < SkiaBehaviourEngine.SkiaObjectCount; i++)
            {
                SkiaObject skiaObject = SkiaBehaviourEngine.GetSkiaObject(i);
                if (skiaObject is ISkiaInputComponent)
                {
                    ISkiaInputComponent inputComponent = skiaObject as ISkiaInputComponent;
                    if (inputComponent.FirstTouchArea.IsOverlapPoint(point))
                    {
                        inputComponents.Add(inputComponent);
                    }
                }
            }
            if (inputComponents.Count == 0)
            {
                return(null);
            }
            ISkiaInputComponent topInputComponent = inputComponents[0];

            for (int i = 0; i < inputComponents.Count; i++)
            {
                if (inputComponents[i].InputHeightLevel > topInputComponent.InputHeightLevel)
                {
                    topInputComponent = inputComponents[i];
                }
            }
            return(topInputComponent);
        }
Example #2
0
        private void handleTouchAction(ITouch touch, TouchMotionAction action)
        {
            CanvasInfoProvider canvasInfoProvider = SkiaBehaviourEngine.CanvasInfoProvider as CanvasInfoProvider;
            SkiaTouch          skiaTouch          = null;

            if (action == TouchMotionAction.Down)
            {
                int heightLevel = 0;
                ISkiaInputComponent skiaInputComponent = getSkiaInputComponent(canvasInfoProvider.DeviceToCanvasPoint(touch.Position.ToSKPoint()));
                if (skiaInputComponent != null)
                {
                    heightLevel = skiaInputComponent.InputHeightLevel;
                }
                skiaTouch = new SkiaTouch(this, touch, heightLevel);
                _SkiaTouches.Add(skiaTouch);
            }
            else if (action == TouchMotionAction.Up)
            {
                for (int i = 0; i < _SkiaTouches.Count; i++)
                {
                    if (_SkiaTouches[i].Touch == touch)
                    {
                        skiaTouch = _SkiaTouches[i];
                        _SkiaTouches.RemoveAt(i);
                        break;
                    }
                }
            }
            else
            {
                for (int i = 0; i < _SkiaTouches.Count; i++)
                {
                    if (_SkiaTouches[i].Touch == touch)
                    {
                        skiaTouch = _SkiaTouches[i];
                    }
                }
            }
            if (skiaTouch == null)
            {
                return;
            }
            OnSkiaTouchAction?.Invoke(skiaTouch, action);
        }