13
0

Don't redraw the summary every time the playhead moves (if it hasn't moved visibly on the summary), and only redraw the bit that has changed when it does happen.

git-svn-id: svn://localhost/ardour2/branches/3.0@11208 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2012-01-09 18:03:49 +00:00
parent 34373c30f3
commit b8a93d7a86
2 changed files with 25 additions and 4 deletions

View File

@ -120,7 +120,7 @@ EditorSummary::on_expose_event (GdkEventExpose* event)
/* XXX: colour should be set from configuration file */
cairo_set_source_rgba (cr, 1, 0, 0, 1);
double const p = (_editor->playhead_cursor->current_frame - _start) * _x_scale;
double const p = playhead_frame_to_position (_editor->playhead_cursor->current_frame);
cairo_move_to (cr, p, 0);
cairo_line_to (cr, p, get_height());
cairo_stroke (cr);
@ -251,10 +251,19 @@ EditorSummary::render_region (RegionView* r, cairo_t* cr, double y) const
void
EditorSummary::set_overlays_dirty ()
{
ENSURE_GUI_THREAD (*this, &EditorSummary::set_overlays_dirty)
ENSURE_GUI_THREAD (*this, &EditorSummary::set_overlays_dirty);
queue_draw ();
}
/** Set the summary so that just the overlays (viewbox, playhead etc.) in a given area will be re-rendered */
void
EditorSummary::set_overlays_dirty (int x, int y, int w, int h)
{
ENSURE_GUI_THREAD (*this, &EditorSummary::set_overlays_dirty);
queue_draw_area (x, y, w, h);
}
/** Handle a size request.
* @param req GTK requisition
*/
@ -859,8 +868,12 @@ EditorSummary::set_editor_y (pair<double, double> const y)
void
EditorSummary::playhead_position_changed (framepos_t p)
{
if (_session && int (p * _x_scale) != int (_last_playhead)) {
set_overlays_dirty ();
int const o = int (_last_playhead);
int const n = int (playhead_frame_to_position (p));
if (_session && o != n) {
int a = min (o, n);
int b = max (o, n);
set_overlays_dirty (a - 1, 0, b + 1, get_height ());
}
}
@ -928,3 +941,9 @@ EditorSummary::route_gui_changed (string c)
set_dirty ();
}
}
double
EditorSummary::playhead_frame_to_position (framepos_t t) const
{
return (t - _start) * _x_scale;
}

View File

@ -83,6 +83,8 @@ private:
void set_cursor (Position);
void route_gui_changed (std::string);
bool suspending_editor_updates () const;
double playhead_frame_to_position (framepos_t) const;
void set_overlays_dirty (int, int, int, int);
framepos_t _start; ///< start frame of the overview
framepos_t _end; ///< end frame of the overview