/// <summary> /// Renders the autocomplete dialog inside the given <paramref name="view"/> at the /// given point. /// </summary> /// <param name="view">The view the overlay should be rendered into</param> /// <param name="renderAt"></param> public void RenderOverlay(View view, Point renderAt) { if (!Visible || !view.HasFocus || Suggestions.Count == 0) { return; } view.Move(renderAt.X, renderAt.Y); // don't overspill vertically var height = Math.Min(view.Bounds.Height - renderAt.Y, MaxHeight); var toRender = Suggestions.Skip(ScrollOffset).Take(height).ToArray(); if (toRender.Length == 0) { return; } var width = Math.Min(MaxWidth, toRender.Max(s => s.Length)); // don't overspill horizontally width = Math.Min(view.Bounds.Width - renderAt.X, width); for (int i = 0; i < toRender.Length; i++) { if (i == SelectedIdx - ScrollOffset) { Application.Driver.SetAttribute(ColorScheme.Focus); } else { Application.Driver.SetAttribute(ColorScheme.Normal); } view.Move(renderAt.X, renderAt.Y + i); var text = TextFormatter.ClipOrPad(toRender[i], width); Application.Driver.AddStr(text); } }