public ICube?TryGetElementBounds(IVisualElement element)
        {
            lock (_renderLock)
            {
                if (RenderPositions.TryGetValue(element, out var c))
                {
                    return(c);
                }

                return(default);
        public IEnumerable <IRenderedVisual> GetElementsAt <TPoint>(TPoint point2D)
            where TPoint : IPoint2D
        {
            lock (_renderLock)
            {
                foreach (var kvp in RenderPositions.Where(p => p.Value.Contains(point2D))
                         .OrderByDescending(p => p.Value.Depth))
                {
                    if (kvp.Key is IContentContainer container && container.Content != null)
                    {
                        yield return(new RenderedVisual(container.Content, kvp.Value));
                    }

                    yield return(new RenderedVisual(kvp.Key, kvp.Value));
                }
            }
        }
        public IEnumerable <IRenderedVisual <IHandleInput <T> > > GetRenderedVisualsForMouseInput <T, TPoint>(
            TPoint point2D,
            InputAction inputAction)
            where T : IInputEventArgs
            where TPoint : IPoint2D
        {
            lock (_renderLock)
            {
                foreach (var kvp in RenderPositions.Where(p => p.Value.Contains(point2D))
                         .OrderByDescending(p => p.Value.Depth))
                {
                    if (!(kvp.Key is IHandleInput interactive) ||
                        (interactive.HandlesActions & inputAction) != inputAction ||
                        !(interactive is IHandleInput <T> inputHandler))
                    {
                        continue;
                    }

                    yield return(new RenderedVisual <IHandleInput <T> >(inputHandler, kvp.Value));
                }
            }
        }