summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_summary.cc27
-rw-r--r--gtk2_ardour/editor_summary.h2
2 files changed, 25 insertions, 4 deletions
diff --git a/gtk2_ardour/editor_summary.cc b/gtk2_ardour/editor_summary.cc
index 8de492ddec..57a08caf88 100644
--- a/gtk2_ardour/editor_summary.cc
+++ b/gtk2_ardour/editor_summary.cc
@@ -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;
+}
diff --git a/gtk2_ardour/editor_summary.h b/gtk2_ardour/editor_summary.h
index 6746849fe3..0af8be5c91 100644
--- a/gtk2_ardour/editor_summary.h
+++ b/gtk2_ardour/editor_summary.h
@@ -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