suspend editor redisplay during batch changes
(major speed-up when changing all meters)
This commit is contained in:
@@ -77,7 +77,8 @@ EditorRoutes::EditorRoutes (Editor* e)
|
|||||||
, _menu (0)
|
, _menu (0)
|
||||||
, old_focus (0)
|
, old_focus (0)
|
||||||
, selection_countdown (0)
|
, selection_countdown (0)
|
||||||
, name_editable (0)
|
, name_editable (0)
|
||||||
|
, _redisplay_on_resume (false)
|
||||||
{
|
{
|
||||||
static const int column_width = 22;
|
static const int column_width = 22;
|
||||||
|
|
||||||
@@ -360,6 +361,13 @@ EditorRoutes::set_session (Session* s)
|
|||||||
if (_session) {
|
if (_session) {
|
||||||
_session->SoloChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::solo_changed_so_update_mute, this), gui_context());
|
_session->SoloChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::solo_changed_so_update_mute, this), gui_context());
|
||||||
_session->RecordStateChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context());
|
_session->RecordStateChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context());
|
||||||
|
|
||||||
|
/* TODO: check if these needs to be tied in with DisplaySuspender
|
||||||
|
* Given that the UI is single-threaded and DisplaySuspender is only used
|
||||||
|
* in loops in the UI thread all should be fine.
|
||||||
|
*/
|
||||||
|
_session->BatchUpdateStart.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::suspend_redisplay, this), gui_context());
|
||||||
|
_session->BatchUpdateEnd.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::resume_redisplay, this), gui_context());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -549,7 +557,12 @@ EditorRoutes::redisplay_real ()
|
|||||||
void
|
void
|
||||||
EditorRoutes::redisplay ()
|
EditorRoutes::redisplay ()
|
||||||
{
|
{
|
||||||
if (_no_redisplay || !_session || _session->deletion_in_progress()) {
|
if (!_session || _session->deletion_in_progress()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_no_redisplay) {
|
||||||
|
_redisplay_on_resume = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,13 +38,18 @@ public:
|
|||||||
void move_selected_tracks (bool);
|
void move_selected_tracks (bool);
|
||||||
void show_track_in_display (TimeAxisView &);
|
void show_track_in_display (TimeAxisView &);
|
||||||
|
|
||||||
|
bool _redisplay_on_resume;
|
||||||
|
|
||||||
void suspend_redisplay () {
|
void suspend_redisplay () {
|
||||||
|
_redisplay_on_resume = false;
|
||||||
_no_redisplay = true;
|
_no_redisplay = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void resume_redisplay () {
|
void resume_redisplay () {
|
||||||
_no_redisplay = false;
|
_no_redisplay = false;
|
||||||
redisplay ();
|
if (_redisplay_on_resume) {
|
||||||
|
redisplay ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void redisplay ();
|
void redisplay ();
|
||||||
|
|||||||
Reference in New Issue
Block a user