internal void CopyToConsole(Win32Console console) { bool[] dirtyRows = new bool[_bufferDimensions.Height]; for (int row = 0; row < _bufferDimensions.Height; row += 1) { for (int column = 0; column < _bufferDimensions.Width; column += 1) { if (CellChanged(row, column)) { dirtyRows[row] = true; break; } } } var spans = new List <RowSpan>(); for (int row = 0; row < _bufferDimensions.Height; row += 1) { for (int column = 0; column < _bufferDimensions.Width; column += 1) { if (!CellChanged(row, column)) { continue; } int start = column; while (column < _bufferDimensions.Width && CellChanged(row, column)) { column += 1; } spans.Add(new RowSpan(row, start, column)); } } console.WriteOutputBuffer(_backbufferChars, _backbufferForegroundColors, _backbufferBackgroundColors, _bufferDimensions.Width, _bufferDimensions.Height, spans); var tempbufferChars = _frontbufferChars; var tempbufferForegroundColors = _frontbufferForegroundColors; var tempbufferBackgroundColors = _frontbufferBackgroundColors; _frontbufferChars = _backbufferChars; _frontbufferForegroundColors = _backbufferForegroundColors; _frontbufferBackgroundColors = _backbufferBackgroundColors; _backbufferChars = tempbufferChars; _backbufferForegroundColors = tempbufferForegroundColors; _backbufferBackgroundColors = tempbufferBackgroundColors; }
protected Screen() { ActiveControl = this; // TODO: Save existing console buffer before resizing to fit window, // TODO: then restore it in Dispose() Console.CursorSize = 8; Console.SetBufferSize(Console.WindowWidth, Console.WindowHeight); _console = new Win32Console(); _console.EnableInputEvents(); var dim = _console.GetBufferDimensions(); this.Left = 0; this.Top = 0; this.Width = dim.Width; this.Height = dim.Height; }
internal void RestoreBufferToScreen(Win32Console console) { console.WriteOutputBuffer(_frontbufferChars, _frontbufferForegroundColors, _frontbufferBackgroundColors, _bufferDimensions.Width, _bufferDimensions.Height, null); }