From 6b2c581c225cce68e2dacb4e808af79640ce65c1 Mon Sep 17 00:00:00 2001 From: nick_m Date: Thu, 19 Jun 2014 01:52:21 +1000 Subject: Summary changes : * Use correct image format for background image * Construct thr ImageSurface as per cairo docs * Place start/end markers in background image Tempo bars : * adjust beats display threshold to (hopefully) coincide with BBT ruler better. --- gtk2_ardour/editor_summary.cc | 44 +++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'gtk2_ardour/editor_summary.cc') diff --git a/gtk2_ardour/editor_summary.cc b/gtk2_ardour/editor_summary.cc index 57cace3565..10a0594318 100644 --- a/gtk2_ardour/editor_summary.cc +++ b/gtk2_ardour/editor_summary.cc @@ -92,8 +92,8 @@ EditorSummary::set_session (Session* s) 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)); } } @@ -101,7 +101,12 @@ EditorSummary::set_session (Session* s) void EditorSummary::render_background_image () { - _image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, get_width (), get_height ()); + int stride; + unsigned char *data; + stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, get_width ()); + data = (unsigned char*) malloc (stride * get_height ()); + _image = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_RGB24, get_width (), get_height (), stride); + cairo_t* cr = cairo_create (_image); /* background (really just the dividing lines between tracks */ @@ -169,6 +174,21 @@ EditorSummary::render_background_image () 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); } @@ -190,23 +210,11 @@ EditorSummary::render (cairo_t* cr, cairo_rectangle_t*) 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 -- cgit v1.2.3