protected override void OnPaint(ConsoleBitmap context) { var borderChar = new ConsoleCharacter(' ', Foreground, BorderColor); context.DrawRect(borderChar, 0, 0, Width, Height - 1); context.DrawLine(borderChar, 1, 1, 1, Height - 1); context.DrawLine(borderChar, Width - 2, 1, Width - 2, Height - 1); // todo - that minus 3 should be a 2, but I'm not sure why this makes it work. // I'm afraid there's an off by 1 somewhere deep in the code that processes rectangles. // I'll need to investigate at some point. If I end up fixing that bug then it's likely this line // will stop working. So if it ever looks like the content of this panel is not having it's last line // painted then it's likely that I fixed the other bug and this this.Height - 3 needs to be changed to a this.Height - 2. context.NarrowScope(2, 1, this.Width - 4, this.Height - 3); base.OnPaint(context); }
/// <summary> /// Paints this control /// </summary> /// <param name="context">the drawing surface</param> protected override void OnPaint(ConsoleBitmap context) { foreach (var control in GetPaintOrderedControls()) { Rectangle myScope = context.Scope; try { var w = control.X >= 0 ? control.Width : control.Width + control.X; var h = control.Y >= 0 ? control.Height: control.Height + control.Y; context.NarrowScope(control.X, control.Y, w, h); if (control.Width > 0 && control.Height > 0) { control.Paint(context); } } finally { context.Scope = myScope; } } }