/// <summary> /// Initializes a new instance of the <see cref="TerminalScreenCopy"/> class. /// </summary> /// <param name="terminalScreen">The screen from which to copy the content.</param> public TerminalScreenCopy(Screen terminalScreen) { this.CursorRow = terminalScreen.CursorRow; this.CursorColumn = terminalScreen.CursorColumn; this.CursorHidden = terminalScreen.CursorHidden; this.HasFocus = terminalScreen.HasFocus; IEnumerable<ScreenLine> lines; if (!terminalScreen.useAlternateBuffer && terminalScreen.scrollbackPosition > 0) { lines = terminalScreen.scrollbackBuffer.Skip(terminalScreen.scrollbackBuffer.Count - terminalScreen.scrollbackPosition).Take(terminalScreen.mainBuffer.Count); if (terminalScreen.scrollbackPosition < terminalScreen.mainBuffer.Count) { lines = lines.Union(terminalScreen.mainBuffer.Take(terminalScreen.mainBuffer.Count - terminalScreen.scrollbackPosition)); } this.CursorRow += terminalScreen.scrollbackPosition; } else { lines = terminalScreen.CurrentBuffer; } this.cells = lines.Select(l => l.Select(c => c.Clone()).ToArray()).ToArray(); }
/// <summary> /// Initializes a new instance of the <see cref="ScreenModifier"/> class. /// </summary> /// <param name="screen">The screen that can be modified with this screen modifier.</param> public ScreenModifier(Screen screen) { this.screen = screen; Monitor.Enter(screen.changeLock); }