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(); } }
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); }
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; } }