#include "canvas/debug.h"
+#include "ardour_ui.h"
#include "time_axis_view.h"
#include "streamview.h"
#include "editor_summary.h"
_view_rectangle_y (0, 0),
_zoom_dragging (false),
_old_follow_playhead (false),
+ _image (0),
_background_dirty (true)
{
add_events (Gdk::POINTER_MOTION_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
set_flags (get_flags() | Gtk::CAN_FOCUS);
+
+ ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &EditorSummary::parameter_changed));
+}
+
+EditorSummary::~EditorSummary ()
+{
+ cairo_surface_destroy (_image);
+}
+
+void
+EditorSummary::parameter_changed (string p)
+{
+
+ if (p == "color-regions-using-track-color") {
+ set_background_dirty ();
+ }
}
/** Handle a size allocation.
void
EditorSummary::on_size_allocate (Gtk::Allocation& alloc)
{
- Gtk::EventBox::on_size_allocate (alloc);
- _background_dirty = true;
- set_dirty ();
+ CairoWidget::on_size_allocate (alloc);
+ set_background_dirty ();
}
Region::RegionPropertyChanged.connect (region_property_connection, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
Route::RemoteControlIDChange.connect (route_ctrl_id_connection, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
_editor->playhead_cursor->PositionChanged.connect (position_connection, invalidator (*this), boost::bind (&EditorSummary::playhead_position_changed, this, _1), gui_context());
- _session->StartTimeChanged.connect (_session_connections, invalidator (*this), boost::bind (&CairoWidget::set_dirty, this), gui_context());
- _session->EndTimeChanged.connect (_session_connections, invalidator (*this), boost::bind (&CairoWidget::set_dirty, this), gui_context());
+ _session->StartTimeChanged.connect (_session_connections, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
+ _session->EndTimeChanged.connect (_session_connections, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
_editor->selection->RegionsChanged.connect (sigc::mem_fun(*this, &EditorSummary::set_background_dirty));
}
}
void
EditorSummary::render_background_image ()
{
- _image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, get_width (), get_height ());
+ cairo_surface_destroy (_image); // passing NULL is safe
+ _image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, get_width (), get_height ());
+
cairo_t* cr = cairo_create (_image);
/* background (really just the dividing lines between tracks */
y += _track_height;
}
+
+ /* start and end markers */
+
+ cairo_set_line_width (cr, 1);
+ cairo_set_source_rgb (cr, 1, 1, 0);
+
+ const double p = (_session->current_start_frame() - _start) * _x_scale;
+ cairo_move_to (cr, p, 0);
+ cairo_line_to (cr, p, get_height());
+
+ double const q = (_session->current_end_frame() - _start) * _x_scale;
+ cairo_move_to (cr, q, 0);
+ cairo_line_to (cr, q, get_height());
+ cairo_stroke (cr);
+
cairo_destroy (cr);
}
cairo_push_group (cr);
+ /* Fill with the background image */
+
cairo_rectangle (cr, 0, 0, get_width(), get_height());
cairo_set_source_surface (cr, _image, 0, 0);
- cairo_paint (cr);
-
- /* start and end markers */
-
- cairo_set_line_width (cr, 1);
- cairo_set_source_rgb (cr, 1, 1, 0);
-
- const double p = (_session->current_start_frame() - _start) * _x_scale;
- cairo_move_to (cr, p, 0);
- cairo_line_to (cr, p, get_height());
-
- double const q = (_session->current_end_frame() - _start) * _x_scale;
- cairo_move_to (cr, q, 0);
- cairo_line_to (cr, q, get_height());
- cairo_stroke (cr);
+ cairo_fill (cr);
/* Render the view rectangle. If there is an editor visual pending, don't update
the view rectangle now --- wait until the expose event that we'll get after
x->second = x->first + _editor->current_page_samples() * _x_scale;
y->first = editor_y_to_summary (_editor->vertical_adjustment.get_value ());
- y->second = editor_y_to_summary (_editor->vertical_adjustment.get_value () + _editor->visible_canvas_height());
+ y->second = editor_y_to_summary (_editor->vertical_adjustment.get_value () + _editor->visible_canvas_height() - _editor->get_trackview_group()->canvas_origin().y);
}
}
EditorSummary::set_editor_y (double const y)
{
double y1 = summary_y_to_editor (y);
- double const eh = _editor->visible_canvas_height();
+ double const eh = _editor->visible_canvas_height() - _editor->get_trackview_group()->canvas_origin().y;
double y2 = y1 + eh;
double const full_editor_height = _editor->_full_canvas_height;
}
}
- _background_dirty = true;
- set_dirty ();
+ set_background_dirty ();
}
void
EditorSummary::route_gui_changed (string c)
{
if (c == "color") {
- _background_dirty = true;
- set_dirty ();
+ set_background_dirty ();
}
}