From 3c467c9c079f0331161aacdec347f83b41e8ae5b Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Mon, 19 Oct 2020 23:38:12 +0200 Subject: [PATCH] Optimize the terminal output speed --- ChangeLog | 3 ++ examples/background-color.cpp | 2 -- examples/calculator.cpp | 2 -- examples/event-log.cpp | 1 - examples/rotozoomer.cpp | 4 +-- examples/transparent.cpp | 2 -- examples/ui.cpp | 3 -- examples/windows.cpp | 3 -- src/fapplication.cpp | 7 ++--- src/fbusyindicator.cpp | 6 ---- src/fbuttongroup.cpp | 4 --- src/fcombobox.cpp | 4 --- src/fdialog.cpp | 20 ++---------- src/flabel.cpp | 8 ----- src/flineedit.cpp | 16 +++------- src/flistbox.cpp | 26 +++++---------- src/flistview.cpp | 23 +++++--------- src/fmenu.cpp | 29 +---------------- src/fmenubar.cpp | 9 ------ src/fmenuitem.cpp | 2 -- src/fprogressbar.cpp | 7 ----- src/fscrollbar.cpp | 4 +-- src/fscrollview.cpp | 2 +- src/fspinbox.cpp | 1 - src/fstatusbar.cpp | 1 - src/fswitch.cpp | 2 -- src/ftextview.cpp | 7 ++--- src/ftogglebutton.cpp | 11 ------- src/fvterm.cpp | 59 +++++++++++++++++++++-------------- src/fwidget.cpp | 8 ----- src/fwindow.cpp | 3 -- src/include/final/fvterm.h | 3 +- 32 files changed, 70 insertions(+), 212 deletions(-) diff --git a/ChangeLog b/ChangeLog index d2a134b9..f4be7596 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2020-10-19 Markus Gans + * Optimize the terminal output speed + 2020-10-17 Markus Gans * Fixes unit test segfault diff --git a/examples/background-color.cpp b/examples/background-color.cpp index e215f7d7..d52c6a1f 100644 --- a/examples/background-color.cpp +++ b/examples/background-color.cpp @@ -183,7 +183,6 @@ void Background::cb_changed() , int(green.getValue()) , int(blue.getValue()) ); redraw(); - updateTerminal(); } //---------------------------------------------------------------------- @@ -205,7 +204,6 @@ void Background::cb_choice() , int(green.getValue()) , int(blue.getValue()) ); redraw(); - updateTerminal(); } //---------------------------------------------------------------------- diff --git a/examples/calculator.cpp b/examples/calculator.cpp index 77e1479b..a1e46fa1 100644 --- a/examples/calculator.cpp +++ b/examples/calculator.cpp @@ -335,7 +335,6 @@ void Calc::onKeyPress (finalcut::FKeyEvent* ev) } drawDispay(); - updateTerminal(); } ev->accept(); @@ -394,7 +393,6 @@ void Calc::cb_buttonClicked (Calc::button key) } drawDispay(); - updateTerminal(); if ( infix_operator && ! isDataEntryKey(key) ) input = ""; diff --git a/examples/event-log.cpp b/examples/event-log.cpp index 0153d1d7..2c2aa840 100644 --- a/examples/event-log.cpp +++ b/examples/event-log.cpp @@ -294,7 +294,6 @@ void EventLog::onTimer (finalcut::FTimerEvent*) str(""); scrolltext.scrollToEnd(); redraw(); - updateTerminal(); } } diff --git a/examples/rotozoomer.cpp b/examples/rotozoomer.cpp index 31d6d9c5..9826b86c 100644 --- a/examples/rotozoomer.cpp +++ b/examples/rotozoomer.cpp @@ -225,7 +225,7 @@ void RotoZoomer::onShow (finalcut::FShowEvent*) for (path = 1; path < loops; path++) { redraw(); - updateTerminal(); + processTerminalUpdate(); } end = system_clock::now(); @@ -244,8 +244,6 @@ void RotoZoomer::onTimer (finalcut::FTimerEvent*) path++; redraw(); - updateTerminal(); - flush(); } //---------------------------------------------------------------------- diff --git a/examples/transparent.cpp b/examples/transparent.cpp index 80e91e7b..71d3167e 100644 --- a/examples/transparent.cpp +++ b/examples/transparent.cpp @@ -237,8 +237,6 @@ void MainWindow::draw() if ( finalcut::FTerm::isMonochron() ) setReverse(false); - - updateTerminal(); } //---------------------------------------------------------------------- diff --git a/examples/ui.cpp b/examples/ui.cpp index 70db4801..721764b0 100644 --- a/examples/ui.cpp +++ b/examples/ui.cpp @@ -159,9 +159,6 @@ void ProgressDialog::onTimer (finalcut::FTimerEvent*) if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } //---------------------------------------------------------------------- diff --git a/examples/windows.cpp b/examples/windows.cpp index b3ee3827..3276ac72 100644 --- a/examples/windows.cpp +++ b/examples/windows.cpp @@ -153,7 +153,6 @@ void SmallWindow::onTimer (finalcut::FTimerEvent*) top_right_label.redraw(); bottom_label.unsetEmphasis(); bottom_label.redraw(); - updateTerminal(); delOwnTimers(); } @@ -344,8 +343,6 @@ void Window::activateWindow (finalcut::FDialog* win) const if ( has_raised ) win->redraw(); - - updateTerminal(); } //---------------------------------------------------------------------- diff --git a/src/fapplication.cpp b/src/fapplication.cpp index 90bb341d..8fc4a486 100644 --- a/src/fapplication.cpp +++ b/src/fapplication.cpp @@ -971,9 +971,6 @@ void FApplication::unselectMenubarItems() const if ( FWidget::getStatusBar() ) FWidget::getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } } @@ -1290,13 +1287,13 @@ bool FApplication::processNextEvent() if ( is_timeout ) { FObject::getCurrentTime (&time_last_event); + processTerminalUpdate(); // before user input processKeyboardEvent(); processMouseEvent(); processResizeEvent(); - processTerminalUpdate(); + processTerminalUpdate(); // after user input processCloseWidget(); processLogger(); - updateTerminal(); } processExternalUserEvent(); diff --git a/src/fbusyindicator.cpp b/src/fbusyindicator.cpp index 59bc3bdd..7ffec3c6 100644 --- a/src/fbusyindicator.cpp +++ b/src/fbusyindicator.cpp @@ -50,8 +50,6 @@ void FBusyIndicator::start() running = true; createIndicatorText(); show(); - updateTerminal(); - flush(); addTimer(TIMER); } @@ -61,8 +59,6 @@ void FBusyIndicator::stop() delOwnTimers(); running = false; hide(); - updateTerminal(); - flush(); } @@ -119,8 +115,6 @@ void FBusyIndicator::onTimer (finalcut::FTimerEvent*) // Redraw the rotated pattern createIndicatorText(); redraw(); - updateTerminal(); - flush(); } } // namespace finalcut diff --git a/src/fbuttongroup.cpp b/src/fbuttongroup.cpp index 71571b1d..67287d5f 100644 --- a/src/fbuttongroup.cpp +++ b/src/fbuttongroup.cpp @@ -331,8 +331,6 @@ void FButtonGroup::onFocusIn (FFocusEvent* in_ev) if ( getStatusBar() ) { getStatusBar()->drawMessage(); - updateTerminal(); - flush(); } } @@ -507,8 +505,6 @@ void FButtonGroup::directFocus() if ( getStatusBar() ) { getStatusBar()->drawMessage(); - updateTerminal(); - flush(); } } diff --git a/src/fcombobox.cpp b/src/fcombobox.cpp index 8ee8ca44..46719e50 100644 --- a/src/fcombobox.cpp +++ b/src/fcombobox.cpp @@ -102,8 +102,6 @@ void FDropDownListBox::hide() setOpenMenu(nullptr); const auto& t_geometry = getTermGeometryWithShadow(); restoreVTerm (t_geometry); - updateTerminal(); - flush(); } @@ -428,8 +426,6 @@ void FComboBox::onMouseDown (FMouseEvent* ev) else list_window.hide(); } - - updateTerminal(); } //---------------------------------------------------------------------- diff --git a/src/fdialog.cpp b/src/fdialog.cpp index b4c6be82..f4747aa7 100644 --- a/src/fdialog.cpp +++ b/src/fdialog.cpp @@ -447,8 +447,6 @@ void FDialog::activateDialog() if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); } //---------------------------------------------------------------------- @@ -530,8 +528,7 @@ void FDialog::onMouseDown (FMouseEvent* ev) else // ev->getButton() != fc::LeftButton { // Click on titlebar menu button - if ( ms.mouse_x < 4 && ms.mouse_y == 1 - && dialog_menu->isShown() ) + if ( ms.mouse_x < 4 && ms.mouse_y == 1 && dialog_menu->isShown() ) leaveMenu(); // close menu cancelMouseResize(); // Cancel resize @@ -690,8 +687,6 @@ void FDialog::onAccel (FAccelEvent*) if ( has_raised ) redraw(); - - updateTerminal(); } } @@ -717,8 +712,6 @@ void FDialog::onWindowActive (FEvent*) if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); } //---------------------------------------------------------------------- @@ -1227,9 +1220,6 @@ void FDialog::leaveMenu() if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } //---------------------------------------------------------------------- @@ -1273,9 +1263,6 @@ void FDialog::selectFirstMenuItem() if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } //---------------------------------------------------------------------- @@ -1480,12 +1467,10 @@ inline void FDialog::raiseActivateDialog() //---------------------------------------------------------------------- inline void FDialog::lowerActivateDialog() { - const bool has_lowered = lowerWindow(); + lowerWindow(); if ( ! isWindowActive() ) activateDialog(); - else if ( has_lowered ) - updateTerminal(); } //---------------------------------------------------------------------- @@ -1624,7 +1609,6 @@ void FDialog::cancelMouseResize() resize_click_pos.setPoint (0, 0); drawBorder(); - updateTerminal(); } //---------------------------------------------------------------------- diff --git a/src/flabel.cpp b/src/flabel.cpp index 9fbfd9d3..7ee837bc 100644 --- a/src/flabel.cpp +++ b/src/flabel.cpp @@ -205,11 +205,7 @@ void FLabel::onMouseDown (FMouseEvent* ev) accel_widget->redraw(); if ( getStatusBar() ) - { accel_widget->getStatusBar()->drawMessage(); - updateTerminal(); - flush(); - } } } @@ -232,11 +228,7 @@ void FLabel::onAccel (FAccelEvent* ev) FApplication::sendEvent(accel_widget, &in); if ( getStatusBar() ) - { accel_widget->getStatusBar()->drawMessage(); - updateTerminal(); - flush(); - } } } diff --git a/src/flineedit.cpp b/src/flineedit.cpp index 47ac36cf..ea880301 100644 --- a/src/flineedit.cpp +++ b/src/flineedit.cpp @@ -357,7 +357,7 @@ void FLineEdit::onKeyPress (FKeyEvent* ev) && key != fc::Fkey_enter ) { drawInputField(); - updateTerminal(); + processTerminalUpdate(); } } @@ -397,7 +397,7 @@ void FLineEdit::onMouseDown (FMouseEvent* ev) adjustTextOffset(); drawInputField(); - updateTerminal(); + processTerminalUpdate(); } } @@ -431,7 +431,7 @@ void FLineEdit::onMouseMove (FMouseEvent* ev) adjustTextOffset(); drawInputField(); - updateTerminal(); + processTerminalUpdate(); } // auto-scrolling when dragging mouse outside the widget @@ -534,7 +534,7 @@ void FLineEdit::onTimer (FTimerEvent*) adjustTextOffset(); drawInputField(); - updateTerminal(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -554,11 +554,7 @@ void FLineEdit::onAccel (FAccelEvent* ev) redraw(); if ( getStatusBar() ) - { getStatusBar()->drawMessage(); - updateTerminal(); - flush(); - } } } @@ -584,11 +580,7 @@ void FLineEdit::onFocusIn (FFocusEvent*) } if ( getStatusBar() ) - { getStatusBar()->drawMessage(); - updateTerminal(); - flush(); - } } //---------------------------------------------------------------------- diff --git a/src/flistbox.cpp b/src/flistbox.cpp index c3eb068a..2fb0f1c4 100644 --- a/src/flistbox.cpp +++ b/src/flistbox.cpp @@ -352,8 +352,7 @@ void FListBox::onMouseDown (FMouseEvent* ev) if ( yoffset_before != yoffset ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } } @@ -426,8 +425,7 @@ void FListBox::onMouseMove (FMouseEvent* ev) if ( yoffset_before != yoffset ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } // Auto-scrolling when dragging mouse outside the widget @@ -504,8 +502,7 @@ void FListBox::onTimer (FTimerEvent*) if ( yoffset_before != yoffset ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -547,8 +544,7 @@ void FListBox::onWheel (FWheelEvent* ev) if ( yoffset_before != yoffset ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -1082,8 +1078,7 @@ inline void FListBox::updateDrawing (bool draw_vbar, bool draw_hbar) if ( draw_hbar ) hbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -1803,8 +1798,7 @@ void FListBox::cb_vbarChange (const FWidget*) if ( yoffset_before != yoffset ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } } @@ -1862,11 +1856,8 @@ void FListBox::cb_hbarChange (const FWidget*) inc_search.clear(); if ( isShown() ) - { drawList(); - updateTerminal(); - flush(); - } + if ( scrollType >= FScrollbar::scrollStepBackward ) { @@ -1875,8 +1866,7 @@ void FListBox::cb_hbarChange (const FWidget*) if ( xoffset_before != xoffset ) hbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } } diff --git a/src/flistview.cpp b/src/flistview.cpp index 67a3d026..ab7a4e2c 100644 --- a/src/flistview.cpp +++ b/src/flistview.cpp @@ -1116,8 +1116,7 @@ void FListView::onMouseDown (FMouseEvent* ev) if ( first_line_position_before != first_visible_line.getPosition() ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } } } @@ -1221,8 +1220,7 @@ void FListView::onMouseMove (FMouseEvent* ev) if ( first_line_position_before != first_visible_line.getPosition() ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } // auto-scrolling when dragging mouse outside the widget @@ -1308,8 +1306,7 @@ void FListView::onTimer (FTimerEvent*) if ( first_line_position_before != first_visible_line.getPosition() ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -1347,8 +1344,7 @@ void FListView::onWheel (FWheelEvent* ev) if ( first_line_position_before != first_visible_line.getPosition() ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -2152,8 +2148,7 @@ void FListView::updateDrawing (bool draw_vbar, bool draw_hbar) if ( draw_hbar ) hbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -2872,8 +2867,7 @@ void FListView::cb_vbarChange (const FWidget*) if ( first_line_position_before != first_visible_line.getPosition() ) vbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } } @@ -2929,8 +2923,6 @@ void FListView::cb_hbarChange (const FWidget*) { drawHeadlines(); drawList(); - updateTerminal(); - flush(); } if ( scrollType >= FScrollbar::scrollStepBackward ) @@ -2940,8 +2932,7 @@ void FListView::cb_hbarChange (const FWidget*) if ( xoffset_before != xoffset ) hbar->drawBar(); - updateTerminal(); - flush(); + processTerminalUpdate(); } } diff --git a/src/fmenu.cpp b/src/fmenu.cpp index 0c8d5401..ee5be03d 100644 --- a/src/fmenu.cpp +++ b/src/fmenu.cpp @@ -110,8 +110,6 @@ void FMenu::hide() FWindow::hide(); const auto& t_geometry = getTermGeometryWithShadow(); restoreVTerm (t_geometry); - updateTerminal(); - flush(); if ( ! isSubMenu() ) { @@ -206,9 +204,6 @@ void FMenu::onMouseDown (FMouseEvent* ev) if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } return; @@ -316,8 +311,7 @@ void FMenu::onMouseMove (FMouseEvent* ev) else if ( ms.hide_sub_menu ) { closeOpenedSubMenu(); - updateTerminal(); - flush(); + processTerminalUpdate(); } } @@ -615,9 +609,6 @@ void FMenu::openSubMenu (FMenu* sub_menu, bool select) if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } //---------------------------------------------------------------------- @@ -728,9 +719,6 @@ void FMenu::mouseDownSubmenu (const FMenuItem* m_item) if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } } @@ -798,9 +786,6 @@ bool FMenu::mouseUpOverList (const FPoint& mouse_pos) if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } return true; @@ -1073,8 +1058,6 @@ bool FMenu::selectNextItem() getStatusBar()->drawMessage(); redraw(); - updateTerminal(); - flush(); break; } @@ -1123,8 +1106,6 @@ bool FMenu::selectPrevItem() getStatusBar()->drawMessage(); redraw(); - updateTerminal(); - flush(); break; } } @@ -1186,8 +1167,6 @@ bool FMenu::hotkeyMenu (FKeyEvent* ev) hideSubMenus(); hide(); hideSuperMenus(); - updateTerminal(); - flush(); ev->accept(); item->processClicked(); } @@ -1527,9 +1506,6 @@ inline void FMenu::selectPrevMenu (FKeyEvent* ev) if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } else keypressMenuBar(ev); // select previous menu @@ -1600,9 +1576,6 @@ inline void FMenu::closeMenu() if ( getStatusBar() ) getStatusBar()->drawMessage(); - - updateTerminal(); - flush(); } //---------------------------------------------------------------------- diff --git a/src/fmenubar.cpp b/src/fmenubar.cpp index 347a20fa..0fdc5f62 100644 --- a/src/fmenubar.cpp +++ b/src/fmenubar.cpp @@ -79,7 +79,6 @@ void FMenuBar::hide() FColor bg = wc->term_bg; setColor (fg, bg); print() << FPoint{1, 1} << FString{getDesktopWidth(), L' '}; - updateTerminal(); FWindow::hide(); } @@ -825,10 +824,7 @@ void FMenuBar::mouseDownOverList (const FMouseEvent* ev) } if ( focus_changed ) - { redraw(); - updateTerminal(); - } } //---------------------------------------------------------------------- @@ -920,10 +916,7 @@ void FMenuBar::mouseMoveOverList (const FMouseEvent* ev) } if ( focus_changed ) - { redraw(); - updateTerminal(); - } } //---------------------------------------------------------------------- @@ -972,8 +965,6 @@ void FMenuBar::leaveMenuBar() if ( getStatusBar() ) getStatusBar()->drawMessage(); - updateTerminal(); - flush(); mouse_down = false; } diff --git a/src/fmenuitem.cpp b/src/fmenuitem.cpp index 5da65bb1..2012f6ec 100644 --- a/src/fmenuitem.cpp +++ b/src/fmenuitem.cpp @@ -250,8 +250,6 @@ void FMenuItem::openMenu() const dd_menu->show(); dd_menu->raiseWindow(); dd_menu->redraw(); - updateTerminal(); - flush(); } //---------------------------------------------------------------------- diff --git a/src/fprogressbar.cpp b/src/fprogressbar.cpp index 8d3e04ad..3a7c9da7 100644 --- a/src/fprogressbar.cpp +++ b/src/fprogressbar.cpp @@ -64,8 +64,6 @@ void FProgressbar::setPercentage (std::size_t percentage_value) drawProgressLabel(); drawProgressBar(); } - - updateTerminal(); } //---------------------------------------------------------------------- @@ -126,8 +124,6 @@ void FProgressbar::reset() drawProgressLabel(); drawProgressBar(); } - - updateTerminal(); } @@ -182,9 +178,6 @@ void FProgressbar::drawProgressBar() if ( FTerm::isMonochron() ) setReverse(false); - - updateTerminal(); - flush(); } //---------------------------------------------------------------------- diff --git a/src/fscrollbar.cpp b/src/fscrollbar.cpp index fef5ace8..397957d9 100644 --- a/src/fscrollbar.cpp +++ b/src/fscrollbar.cpp @@ -352,7 +352,7 @@ void FScrollbar::onMouseMove (FMouseEvent* ev) { setValue(new_val); drawBar(); - updateTerminal(); + processTerminalUpdate(); processScroll(); } } @@ -757,7 +757,7 @@ void FScrollbar::jumpToClickPos (int x, int y) { setValue(new_val); drawBar(); - updateTerminal(); + processTerminalUpdate(); scroll_type = FScrollbar::scrollJump; processScroll(); } diff --git a/src/fscrollview.cpp b/src/fscrollview.cpp index ac696328..073ed127 100644 --- a/src/fscrollview.cpp +++ b/src/fscrollview.cpp @@ -411,7 +411,7 @@ void FScrollView::scrollTo (int x, int y) viewport->has_changes = true; copy2area(); - updateTerminal(); + processTerminalUpdate(); } //---------------------------------------------------------------------- diff --git a/src/fspinbox.cpp b/src/fspinbox.cpp index 38d74290..09fd46e0 100644 --- a/src/fspinbox.cpp +++ b/src/fspinbox.cpp @@ -371,7 +371,6 @@ inline void FSpinBox::updateInputField() input_field << pfix << value << sfix; input_field.redraw(); redraw(); - updateTerminal(); } //---------------------------------------------------------------------- diff --git a/src/fstatusbar.cpp b/src/fstatusbar.cpp index ab53e32b..3149bc92 100644 --- a/src/fstatusbar.cpp +++ b/src/fstatusbar.cpp @@ -189,7 +189,6 @@ void FStatusBar::hide() const FColor bg = wc->term_bg; setColor (fg, bg); print() << FPoint{1, 1} << FString{getDesktopWidth(), L' '}; - updateTerminal(); FWindow::hide(); } diff --git a/src/fswitch.cpp b/src/fswitch.cpp index b3d4618f..71a8a61d 100644 --- a/src/fswitch.cpp +++ b/src/fswitch.cpp @@ -123,8 +123,6 @@ void FSwitch::draw() drawLabel(); drawCheckButton(); FToggleButton::draw(); - updateTerminal(); - flush(); } //---------------------------------------------------------------------- diff --git a/src/ftextview.cpp b/src/ftextview.cpp index 961ce175..4caa8b62 100644 --- a/src/ftextview.cpp +++ b/src/ftextview.cpp @@ -184,7 +184,7 @@ void FTextView::scrollTo (int x, int y) } drawText(); - updateTerminal(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -328,7 +328,6 @@ void FTextView::clear() << FString{size, L' '}; } - updateTerminal(); processChanged(); } @@ -476,7 +475,7 @@ void FTextView::onWheel (FWheelEvent* ev) if ( isShown() ) drawText(); - updateTerminal(); + processTerminalUpdate(); } //---------------------------------------------------------------------- @@ -621,8 +620,6 @@ void FTextView::draw() } setCursorPos ({int(getWidth()), int(getHeight())}); - updateTerminal(); - flush(); } //---------------------------------------------------------------------- diff --git a/src/ftogglebutton.cpp b/src/ftogglebutton.cpp index a96e029f..f90ade84 100644 --- a/src/ftogglebutton.cpp +++ b/src/ftogglebutton.cpp @@ -222,11 +222,7 @@ void FToggleButton::onMouseDown (FMouseEvent* ev) redraw(); if ( getStatusBar() ) - { getStatusBar()->drawMessage(); - updateTerminal(); - flush(); - } } //---------------------------------------------------------------------- @@ -299,11 +295,7 @@ void FToggleButton::onAccel (FAccelEvent* ev) redraw(); if ( getStatusBar() ) - { getStatusBar()->drawMessage(); - updateTerminal(); - flush(); - } processClick(); ev->accept(); @@ -474,10 +466,7 @@ void FToggleButton::onKeyPress (FKeyEvent* ev) } if ( ev->isAccepted() ) - { draw(); - updateTerminal(); - } } diff --git a/src/fvterm.cpp b/src/fvterm.cpp index 80c1c39b..c0f86d45 100644 --- a/src/fvterm.cpp +++ b/src/fvterm.cpp @@ -183,9 +183,10 @@ void FVTerm::hideCursor (bool enable) const const char* visibility_str = FTerm::cursorsVisibilityString (enable); - if ( visibility_str ) - appendOutputBuffer(visibility_str); + if ( ! visibility_str ) + return; + appendOutputBuffer(visibility_str); flush(); } @@ -286,24 +287,8 @@ void FVTerm::updateTerminal() const } } - const auto& data = FTerm::getFTermData(); - - // Checks if the resizing of the terminal is not finished - if ( data && data->hasTermResized() ) - return; - - // Monitor whether the terminal size has changed - if ( isTermSizeChanged() ) - { - raise (SIGWINCH); // Send SIGWINCH - return; - } - - // Update data on VTerm - updateVTerm(); - // Checks if VTerm has changes - if ( ! vterm->has_changes ) + if ( ! hasPendingUpdates(vterm) ) return; for (uInt y{0}; y < uInt(vterm->height); y++) @@ -630,8 +615,12 @@ void FVTerm::flush() while ( ! output_buffer->empty() ) { static const FTerm::defaultPutChar& FTermPutchar = FTerm::putchar(); - FTermPutchar (output_buffer->front()); - output_buffer->pop(); + + if ( FTermPutchar ) + { + FTermPutchar (output_buffer->front()); + output_buffer->pop(); + } } std::fflush(stdout); @@ -1283,7 +1272,23 @@ void FVTerm::processTerminalUpdate() const // Retains terminal updates if there are unprocessed inputs static constexpr int max_skip = 8; - if ( ! terminal_update_pending ) + const auto& data = FTerm::getFTermData(); + + // Checks if the resizing of the terminal is not finished + if ( data && data->hasTermResized() ) + return; + + // Monitor whether the terminal size has changed + if ( isTermSizeChanged() ) + { + raise (SIGWINCH); // Send SIGWINCH + return; + } + + // Update data on VTerm + updateVTerm(); + + if ( ! terminal_update_pending && ! hasPendingUpdates(vterm) ) return; if ( ! keyboard->isInputDataPending() ) @@ -1652,7 +1657,7 @@ void FVTerm::updateVTerm() const { // Updates the character data from all areas to VTerm - if ( vdesktop && vdesktop->has_changes ) + if ( hasPendingUpdates(vdesktop) ) { putArea(vdesktop); vdesktop->has_changes = false; @@ -1671,7 +1676,7 @@ void FVTerm::updateVTerm() const if ( ! (v_win && v_win->visible) ) continue; - if ( v_win->has_changes ) + if ( hasPendingUpdates(v_win) ) { putArea(v_win); v_win->has_changes = false; @@ -2941,6 +2946,12 @@ inline bool FVTerm::isTermSizeCheckTimeout() return FObject::isTimeout (&last_term_size_check, term_size_check_timeout); } +//---------------------------------------------------------------------- +inline bool FVTerm::hasPendingUpdates (FTermArea* area) +{ + return ( area && area->has_changes ) ? true : false; +} + //---------------------------------------------------------------------- inline void FVTerm::markAsPrinted (uInt pos, uInt line) { diff --git a/src/fwidget.cpp b/src/fwidget.cpp index 1ea7e97f..89400712 100644 --- a/src/fwidget.cpp +++ b/src/fwidget.cpp @@ -905,11 +905,7 @@ void FWidget::redraw() finishTerminalUpdate(); if ( redraw_root_widget == this ) - { - updateTerminal(); - flush(); redraw_root_widget = nullptr; - } } //---------------------------------------------------------------------- @@ -976,8 +972,6 @@ void FWidget::show() if ( show_root_widget && show_root_widget == this ) { finishTerminalUpdate(); - updateTerminal(); - flush(); show_root_widget = nullptr; } @@ -1953,8 +1947,6 @@ bool FWidget::changeFocus ( FWidget* follower, FWidget* parent { redraw(); follower->redraw(); - updateTerminal(); - flush(); } } diff --git a/src/fwindow.cpp b/src/fwindow.cpp index 5caece02..e060751f 100644 --- a/src/fwindow.cpp +++ b/src/fwindow.cpp @@ -929,9 +929,6 @@ void closeDropDown (const FWidget* widget, const FPoint& mouse_position) if ( FWidget::getStatusBar() ) FWidget::getStatusBar()->drawMessage(); - - widget->updateTerminal(); - FVTerm::flush(); } } // namespace finalcut diff --git a/src/include/final/fvterm.h b/src/include/final/fvterm.h index 88798fe9..2636e056 100644 --- a/src/include/final/fvterm.h +++ b/src/include/final/fvterm.h @@ -340,7 +340,7 @@ class FVTerm // Constants // Buffer size for character output on the terminal - static constexpr uInt TERMINAL_OUTPUT_BUFFER_SIZE = 32768; + static constexpr uInt TERMINAL_OUTPUT_BUFFER_SIZE = 131072; // Methods void resetTextAreaToDefault ( const FTermArea* @@ -417,6 +417,7 @@ class FVTerm bool isInsideTerminal (const FPoint&) const; bool isTermSizeChanged() const; static bool isTermSizeCheckTimeout(); + static bool hasPendingUpdates (FTermArea*); static void markAsPrinted (uInt, uInt); static void markAsPrinted (uInt, uInt, uInt); static void newFontChanges (FChar*&);