Example #1
0
        internal protected override bool PartialHitTest(ref HitTestArgs args)
        {
            switch (ClipChildren)
            {
            case ClipMethod.None:
                return(base.PartialHitTest(ref args));

            case ClipMethod.ScissorTest:
            case ClipMethod.StencilTest:
                if (!(ClipByWidget ?? this).BoundingRectHitTest(args.Point))
                {
                    return(false);
                }
                EnsureRenderChain();
                try {
                    for (var node = FirstChild; node != null; node = node.NextSibling)
                    {
                        node.RenderChainBuilder?.AddToRenderChain(renderChain);
                    }
                    if (renderChain.HitTest(ref args))
                    {
                        return(true);
                    }
                    return(base.PartialHitTest(ref args));
                } finally {
                    renderChain.Clear();
                }

            case ClipMethod.NoRender:
                return(false);

            default:
                throw new InvalidOperationException();
            }
        }
Example #2
0
        private Node LookForNodeUnderMouse(RenderChain renderChain)
        {
#if iOS || ANDROID
            if (!Window.Input.IsTouching(0) && !Window.Input.WasTouchEnded(0))
            {
                return(null);
            }
#endif
            var hitTestArgs = new HitTestArgs(Window.Input.MousePosition);
            renderChain.HitTest(ref hitTestArgs);
            var n = hitTestArgs.Node;
            if (
                n != null &&
                WidgetInput.InputScopeStack.Top != null &&
                !n.SameOrDescendantOf(WidgetInput.InputScopeStack.Top)
                )
            {
                n = null;
            }
            return(n);
        }
Example #3
0
        public bool PartialHitTest(Node node, ref HitTestArgs args)
        {
            var widget = (Widget)node;

            if (!widget.BoundingRectHitTest(args.Point))
            {
                return(false);
            }
            var savedLayer = renderChain.CurrentLayer;

            try {
                renderChain.CurrentLayer = widget.Layer;
                for (var child = widget.FirstChild; child != null; child = child.NextSibling)
                {
                    child.RenderChainBuilder?.AddToRenderChain(renderChain);
                }
                return(renderChain.HitTest(ref args) || SelfPartialHitTest(widget, ref args));
            } finally {
                renderChain.Clear();
                renderChain.CurrentLayer = savedLayer;
            }
        }