From 9b98f4be0cd9d239a7b5d4c5df7028718b1e31ce Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sun, 7 Jul 2019 12:20:59 -0400 Subject: [PATCH] ScrubbingToolBar consumes less idle time --- src/toolbars/ScrubbingToolBar.cpp | 71 +++++++++++++++++++------------ src/toolbars/ScrubbingToolBar.h | 7 +++ 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/src/toolbars/ScrubbingToolBar.cpp b/src/toolbars/ScrubbingToolBar.cpp index bca717598..51b16fd39 100644 --- a/src/toolbars/ScrubbingToolBar.cpp +++ b/src/toolbars/ScrubbingToolBar.cpp @@ -142,6 +142,11 @@ void ScrubbingToolBar::UpdatePrefs() } void ScrubbingToolBar::RegenerateTooltips() +{ + DoRegenerateTooltips( true ); +} + +void ScrubbingToolBar::DoRegenerateTooltips( bool force ) { #if wxUSE_TOOLTIPS auto fn = [&] @@ -159,34 +164,46 @@ void ScrubbingToolBar::RegenerateTooltips() const auto seekButton = mButtons[STBSeekID]; wxString label; - label = ( - scrubber.Scrubs() - /* i18n-hint: These commands assist the user in finding a sound by ear. ... - "Scrubbing" is variable-speed playback, ... - "Seeking" is normal speed playback but with skips - */ - ? _("Stop Scrubbing") - : _("Start Scrubbing") - ); - fn(*scrubButton, label, wxT("Scrub")); + bool scrubs = scrubber.Scrubs(); + if (force || mLastScrub != scrubs) { + label = ( + scrubs + /* i18n-hint: These commands assist the user in finding a sound by ear. ... + "Scrubbing" is variable-speed playback, ... + "Seeking" is normal speed playback but with skips + */ + ? _("Stop Scrubbing") + : _("Start Scrubbing") + ); + fn(*scrubButton, label, wxT("Scrub")); + } + mLastScrub = scrubs; - label = ( - scrubber.Seeks() - /* i18n-hint: These commands assist the user in finding a sound by ear. ... - "Scrubbing" is variable-speed playback, ... - "Seeking" is normal speed playback but with skips - */ - ? _("Stop Seeking") - : _("Start Seeking") - ); - fn(*seekButton, label, wxT("Seek")); + bool seeks = scrubber.Seeks(); + if (force || mLastSeek != seeks) { + label = ( + seeks + /* i18n-hint: These commands assist the user in finding a sound by ear. ... + "Scrubbing" is variable-speed playback, ... + "Seeking" is normal speed playback but with skips + */ + ? _("Stop Seeking") + : _("Start Seeking") + ); + fn(*seekButton, label, wxT("Seek")); + } + mLastSeek = seeks; - label = ( - AdornedRulerPanel::Get( *project ).ShowingScrubRuler() - ? _("Hide Scrub Ruler") - : _("Show Scrub Ruler") - ); - fn(*mButtons[STBRulerID], label, wxT("ToggleScrubRuler")); + bool showingRuler = AdornedRulerPanel::Get( *project ).ShowingScrubRuler(); + if (force || mLastRuler != showingRuler) { + label = ( + showingRuler + ? _("Hide Scrub Ruler") + : _("Show Scrub Ruler") + ); + fn(*mButtons[STBRulerID], label, wxT("ToggleScrubRuler")); + } + mLastRuler = showingRuler; } #endif } @@ -256,7 +273,7 @@ void ScrubbingToolBar::EnableDisableButtons() barButton->PushDown(); else barButton->PopUp(); - RegenerateTooltips(); + DoRegenerateTooltips( false ); scrubber.CheckMenuItems(); } diff --git a/src/toolbars/ScrubbingToolBar.h b/src/toolbars/ScrubbingToolBar.h index fc692aea3..78a4343cd 100644 --- a/src/toolbars/ScrubbingToolBar.h +++ b/src/toolbars/ScrubbingToolBar.h @@ -78,6 +78,13 @@ public: DECLARE_CLASS(ScrubbingToolBar) DECLARE_EVENT_TABLE() + +private: + void DoRegenerateTooltips( bool force ); + + bool mLastScrub{ false }; + bool mLastSeek{ false }; + bool mLastRuler{ false }; }; #endif