public override void Update(TimeSpan delta) { // Update our console and then update the scroll bar base.Update(delta); controlsContainer.Update(delta); // If we detect that this console has shifted the data up for any reason (like the virtual cursor reached the // bottom of the entire text surface, OR we reached the bottom of the render area, we need to adjust the // scroll bar and follow the cursor if (TimesShiftedUp != 0 | Cursor.Position.Y == ViewPort.Height + scrollingCounter) { // Once the buffer has finally been filled enough to need scrolling, turn on the scroll bar scrollBar.IsEnabled = true; // Make sure we've never scrolled the entire size of the buffer if (scrollingCounter < Height - ViewPort.Height) { // Record how much we've scrolled to enable how far back the bar can see scrollingCounter += TimesShiftedUp != 0 ? TimesShiftedUp : 1; } scrollBar.Maximum = (Height + scrollingCounter) - Height; // This will follow the cursor since we move the render area in the event. scrollBar.Value = scrollingCounter; // Reset the shift amount. TimesShiftedUp = 0; } }