internal protected override bool PartialHitTest(ref HitTestArgs args) { if (Widget == null) { return(false); } var plane = GetPlane(); var ray = args.Ray; var distance = ray.Intersects(plane); if (distance.HasValue && distance <= args.Distance) { var oldPoint = args.Point; try { args.Point = (Vector2)GlobalTransform.CalcInverted().TransformVector(ray.Position + ray.Direction * distance.Value) * new Vector2(1, -1); Widget.RenderChainBuilder?.AddToRenderChain(renderChain); if (renderChain.HitTest(ref args)) { args.Distance = distance.Value; return(true); } } finally { args.Point = oldPoint; renderChain.Clear(); } } return(false); }
public bool PartialHitTest(Node node, ref HitTestArgs args) { var w = (Widget)node; var p = args.Point; try { content.RenderChainBuilder?.AddToRenderChain(renderChain); args.Point = w.LocalToWorldTransform.CalcInversed().TransformVector(args.Point); return(renderChain.HitTest(ref args)); } finally { args.Point = p; renderChain.Clear(); } }
public override bool PartialHitTest(Node node, ref HitTestArgs args) { return(hitTest != null && hitTest((T)node, ref args)); }
public virtual bool PartialHitTest(Node node, ref HitTestArgs args) => false;
protected override bool InternalPartialHitTest(Widget node, ref HitTestArgs args) { return(node.BoundingRectHitTest(args.Point)); }