private void processInputEvent(INPUT_RECORD inputRecord)
        {
            if (inputRecord.EventType == EventType.WINDOW_BUFFER_SIZE_EVENT)
            {
                if (usingLinux)
                {
                    // Reinitializing ncurses to deal with new dimensions
                    // http://stackoverflow.com/questions/13707137/ncurses-resizing-glitch
                    NCurses.endwin();
                    // Needs to be called after an endwin() so ncurses will initialize
                    // itself with the new terminal dimensions.
                    NCurses.refresh();
                    NCurses.clear();
                }

                COORD dwSize = inputRecord.WindowBufferSizeEvent.dwSize;

                // Invoke default handler if no custom handlers attached and
                // userCanvasSize and userRootElementRect are not defined
                if (TerminalSizeChanged == null &&
                    userCanvasSize.IsEmpty &&
                    userRootElementRect.IsEmpty)
                {
                    OnTerminalSizeChangedDefault(this, new TerminalSizeChangedEventArgs(dwSize.X, dwSize.Y));
                }
                else if (TerminalSizeChanged != null)
                {
                    TerminalSizeChanged.Invoke(this, new TerminalSizeChangedEventArgs(dwSize.X, dwSize.Y));
                }

                // Refresh whole display
                renderer.FinallyApplyChangesToCanvas(true);

                return;
            }
            eventManager.ParseInputEvent(inputRecord, mainControl);
        }
 public void OnTerminalResized(int columns, int rows)
 {
     _dispatcherJobs.Add(() => TerminalSizeChanged?.Invoke(this, new TerminalSize {
         Columns = columns, Rows = rows
     }));
 }