make verbose canvas cursor color be set in its constructor rather than explicitly
[ardour.git] / gtk2_ardour / editor_canvas.cc
index 73bc7d1884fe5a447c32035f6c634d07cdf7db11..d0107c789ed2dfb114a59a7fa77d66f3a0b5c3e6 100644 (file)
@@ -56,6 +56,7 @@
 
 using namespace std;
 using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
@@ -68,6 +69,11 @@ Editor::initialize_canvas ()
        _track_canvas_viewport = new ArdourCanvas::GtkCanvasViewport (horizontal_adjustment, vertical_adjustment);
        _track_canvas = _track_canvas_viewport->canvas ();
 
+       /* scroll group for items that should not automatically scroll
+        *  (e.g verbose cursor). It shares the canvas coordinate space.
+       */
+       no_scroll_group = new ArdourCanvas::Container (_track_canvas->root());
+
        ArdourCanvas::ScrollGroup* hsg; 
        ArdourCanvas::ScrollGroup* hg;
        ArdourCanvas::ScrollGroup* vg;
@@ -101,7 +107,7 @@ Editor::initialize_canvas ()
        }
 
        /*a group to hold global rects like punch/loop indicators */
-       global_rect_group = new ArdourCanvas::Group (hv_scroll_group);
+       global_rect_group = new ArdourCanvas::Container (hv_scroll_group);
        CANVAS_DEBUG_NAME (global_rect_group, "global rect group");
 
         transport_loop_range_rect = new ArdourCanvas::Rectangle (global_rect_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, ArdourCanvas::COORD_MAX));
@@ -113,10 +119,10 @@ Editor::initialize_canvas ()
        transport_punch_range_rect->hide();
 
        /*a group to hold time (measure) lines */
-       time_line_group = new ArdourCanvas::Group (hv_scroll_group);
+       time_line_group = new ArdourCanvas::Container (hv_scroll_group);
        CANVAS_DEBUG_NAME (time_line_group, "time line group");
 
-       _trackview_group = new ArdourCanvas::Group (hv_scroll_group);
+       _trackview_group = new ArdourCanvas::Container (hv_scroll_group);
        CANVAS_DEBUG_NAME (_trackview_group, "Canvas TrackViews");
        
        // used to show zoom mode active zooming
@@ -131,30 +137,30 @@ Editor::initialize_canvas ()
        /* a group to hold stuff while it gets dragged around. Must be the
         * uppermost (last) group with hv_scroll_group as a parent
         */
-       _drag_motion_group = new ArdourCanvas::Group (hv_scroll_group);                                                                                                                                     
+       _drag_motion_group = new ArdourCanvas::Container (hv_scroll_group);                                                                                                                                     
         CANVAS_DEBUG_NAME (_drag_motion_group, "Canvas Drag Motion");
 
        /* TIME BAR CANVAS */
        
-       _time_markers_group = new ArdourCanvas::Group (h_scroll_group);
+       _time_markers_group = new ArdourCanvas::Container (h_scroll_group);
        CANVAS_DEBUG_NAME (_time_markers_group, "time bars");
 
-       cd_marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0));
+       cd_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0));
        CANVAS_DEBUG_NAME (cd_marker_group, "cd marker group");
        /* the vide is temporarily placed a the same location as the
           cd_marker_group, but is moved later.
        */
-       videotl_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple(0.0, 0.0));
+       videotl_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple(0.0, 0.0));
        CANVAS_DEBUG_NAME (videotl_group, "videotl group");
-       marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, timebar_height + 1.0));
+       marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, timebar_height + 1.0));
        CANVAS_DEBUG_NAME (marker_group, "marker group");
-       transport_marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 2.0) + 1.0));
+       transport_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 2.0) + 1.0));
        CANVAS_DEBUG_NAME (transport_marker_group, "transport marker group");
-       range_marker_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 3.0) + 1.0));
+       range_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 3.0) + 1.0));
        CANVAS_DEBUG_NAME (range_marker_group, "range marker group");
-       tempo_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0));
+       tempo_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0));
        CANVAS_DEBUG_NAME (tempo_group, "tempo group");
-       meter_group = new ArdourCanvas::Group (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0));
+       meter_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0));
        CANVAS_DEBUG_NAME (meter_group, "meter group");
 
        meter_bar = new ArdourCanvas::Rectangle (meter_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
@@ -413,7 +419,7 @@ Editor::drop_paths_part_two (const vector<string>& paths, framepos_t frame, doub
        }
 
 
-       std::pair<TimeAxisView*, int> const tvp = trackview_by_y_position (ypos);
+       std::pair<TimeAxisView*, int> const tvp = trackview_by_y_position (ypos, false);
        if (tvp.first == 0) {
 
                /* drop onto canvas background: create new tracks */
@@ -862,7 +868,6 @@ Editor::color_handler()
        bbt_ruler->set_outline_color (text);
        
        playhead_cursor->set_color (ARDOUR_UI::config()->get_canvasvar_PlayHead());
-       _verbose_cursor->set_color (ARDOUR_UI::config()->get_canvasvar_VerboseCanvasCursor());
 
        meter_bar->set_fill_color (ARDOUR_UI::config()->get_canvasvar_MeterBar());
        meter_bar->set_outline_color (ARDOUR_UI::config()->get_canvasvar_MarkerBarSeparator());
@@ -982,8 +987,8 @@ Editor::set_canvas_cursor (Gdk::Cursor* cursor, bool save)
 
        Glib::RefPtr<Gdk::Window> win = _track_canvas->get_window();
 
-       if (win) {
-               _track_canvas->get_window()->set_cursor (*cursor);
+       if (win && cursor) {
+               win->set_cursor (*cursor);
        }
 }
 
@@ -1153,7 +1158,7 @@ Editor::which_mode_cursor () const
 }
 
 Gdk::Cursor*
-Editor::which_region_cursor () const
+Editor::which_track_cursor () const
 {
        Gdk::Cursor* cursor = 0;
 
@@ -1215,7 +1220,9 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ
                case RegionViewNameHighlight:
                case RegionViewName:
                case WaveItem:
-                       cursor = which_region_cursor ();
+               case StreamItem:
+               case AutomationTrackItem:
+                       cursor = which_track_cursor ();
                        break;
                case PlayheadCursorItem:
                        switch (_edit_point) {
@@ -1240,11 +1247,10 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ
                        cursor = _cursors->cross_hair;
                        break;
                case StartSelectionTrimItem:
+                       cursor = _cursors->left_side_trim;
                        break;
                case EndSelectionTrimItem:
-                       break;
-               case AutomationTrackItem:
-                       cursor = _cursors->cross_hair;
+                       cursor = _cursors->right_side_trim;
                        break;
                case FadeInItem:
                        cursor = _cursors->fade_in;