remove debug output from last commit
[ardour.git] / gtk2_ardour / editor_canvas.cc
index 3f70322573daf214551732632db739dcce5acd27..d9fe6f529fd2186cc1ac1d1c6a31f089c8d876c4 100644 (file)
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #include <libgnomecanvasmm/init.h>
@@ -142,33 +141,33 @@ Editor::initialize_canvas ()
        range_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 3.0);
        transport_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 4.0);
        
-       tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+       tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
        tempo_bar->property_fill_color_rgba() = color_map[cTempoBar];
        tempo_bar->property_outline_pixels() = 0;
        
-       meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+       meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
        meter_bar->property_fill_color_rgba() = color_map[cMeterBar];
        meter_bar->property_outline_pixels() = 0;
        
-       marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+       marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
        marker_bar->property_fill_color_rgba() = color_map[cMarkerBar];
        marker_bar->property_outline_pixels() = 0;
        
-       range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+       range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
        range_marker_bar->property_fill_color_rgba() = color_map[cRangeMarkerBar];
        range_marker_bar->property_outline_pixels() = 0;
        
-       transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+       transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
        transport_marker_bar->property_fill_color_rgba() = color_map[cTransportMarkerBar];
        transport_marker_bar->property_outline_pixels() = 0;
        
-       range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+       range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
        range_bar_drag_rect->property_fill_color_rgba() = color_map[cRangeDragBarRectFill];
        range_bar_drag_rect->property_outline_color_rgba() = color_map[cRangeDragBarRect];
        range_bar_drag_rect->property_outline_pixels() = 0;
        range_bar_drag_rect->hide ();
        
-       transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+       transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
        transport_bar_drag_rect ->property_fill_color_rgba() = color_map[cTransportDragRectFill];
        transport_bar_drag_rect->property_outline_color_rgba() = color_map[cTransportDragRect];
        transport_bar_drag_rect->property_outline_pixels() = 0;
@@ -264,8 +263,20 @@ Editor::initialize_canvas ()
        double time_width = FLT_MAX/frames_per_unit;
        time_canvas.set_scroll_region(0.0, 0.0, time_width, time_height);
        
-       edit_cursor = new Cursor (*this, "blue", &Editor::canvas_edit_cursor_event);
-       playhead_cursor = new Cursor (*this, "red", &Editor::canvas_playhead_cursor_event);
+       if (!color_map[cEditCursor]) {
+                warning << _("edit cursor color not defined, check your ardour.colors file!") << endmsg;
+               color_map[cEditCursor] = RGBA_TO_UINT (30,30,30,255);
+       }
+
+       if (!color_map[cPlayHead]) {
+               warning << _("playhead color not defined, check your ardour.colors file!") << endmsg;
+               color_map[cPlayHead] = RGBA_TO_UINT (0,0,0,255);
+       }
+
+       edit_cursor = new Cursor (*this, &Editor::canvas_edit_cursor_event);
+       edit_cursor->canvas_item.property_fill_color_rgba() = color_map[cEditCursor];
+       playhead_cursor = new Cursor (*this, &Editor::canvas_playhead_cursor_event);
+       playhead_cursor->canvas_item.property_fill_color_rgba() = color_map[cPlayHead];
 
        initial_ruler_update_required = true;
        track_canvas.signal_size_allocate().connect (mem_fun(*this, &Editor::track_canvas_allocate));
@@ -280,7 +291,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
        if (!initial_ruler_update_required) {
                if (!canvas_idle_queued) {
                        /* call this first so that we do stuff before any pending redraw */
-                       Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_idle), false);
+                       Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_size_allocated), false);
                        canvas_idle_queued = true;
                }
                return;
@@ -288,11 +299,11 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
 
        initial_ruler_update_required = false;
        
-       track_canvas_idle ();
+       track_canvas_size_allocated ();
 }
 
 bool
-Editor::track_canvas_idle ()
+Editor::track_canvas_size_allocated ()
 {
        if (canvas_idle_queued) {
                canvas_idle_queued = false;
@@ -310,18 +321,12 @@ Editor::track_canvas_idle ()
                for (i = track_views.begin(); i != track_views.end(); ++i) {
                        if ((*i)->control_parent) {
                                height += (*i)->effective_height;
-                               height += track_spacing;
                        }
                }
                
-               if (height) {
-                       height -= track_spacing;
-               }
-
                full_canvas_height = height;
        }
 
-
        zoom_range_clock.set ((nframes_t) floor ((canvas_width * frames_per_unit)));
        edit_cursor->set_position (edit_cursor->current_frame);
        playhead_cursor->set_position (playhead_cursor->current_frame);
@@ -363,7 +368,7 @@ Editor::track_canvas_idle ()
        }
                
        update_fixed_rulers();
-       tempo_map_changed (Change (0));
+       tempo_map_changed (Change (0), true);
        
        Resized (); /* EMIT_SIGNAL */
 
@@ -381,7 +386,6 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
                TimeAxisView *tv = (*i)[route_display_columns.tv];
                if (tv != 0 && !tv->hidden()) {
                        pos += tv->effective_height;
-                       pos += track_spacing;
                }
        }
 
@@ -406,7 +410,6 @@ Editor::controls_layout_size_request (Requisition* req)
                TimeAxisView *tv = (*i)[route_display_columns.tv];
                if (tv != 0) {
                        pos += tv->effective_height;
-                       pos += track_spacing;
                }
        }
 
@@ -701,3 +704,25 @@ Editor::left_track_canvas (GdkEventCrossing *ev)
 }
 
 
+void 
+Editor::canvas_horizontally_scrolled ()
+{
+       /* this is the core function that controls horizontal scrolling of the canvas. it is called
+          whenever the horizontal_adjustment emits its "value_changed" signal. it typically executes in an
+          idle handler, which is important because tempo_map_changed() should issue redraws immediately
+          and not defer them to an idle handler.
+       */
+
+       leftmost_frame = (nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
+       nframes_t rightmost_frame = leftmost_frame + current_page_frames ();
+       
+       if (rightmost_frame > last_canvas_frame) {
+               last_canvas_frame = rightmost_frame;
+               reset_scrolling_region ();
+       }
+       
+       update_fixed_rulers ();
+
+       tempo_map_changed (Change (0), !_dragging_hscrollbar);
+}
+