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:
parent
34373c30f3
commit
b8a93d7a86
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user