Superficial code cleanup.
[ardour.git] / gtk2_ardour / region_view.cc
index cb8e7f235bb9185bc846eaa59060019a2dfc83e8..ec6d0dcefc1c3a8c41514ae8229398360cd68ebe 100644 (file)
@@ -64,12 +64,14 @@ RegionView::RegionView (ArdourCanvas::Group*              parent,
                         boost::shared_ptr<ARDOUR::Region> r,
                         double                            spu,
                         Gdk::Color&                       basic_color)
-       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(),
+       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), false,
+
                            TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowNameText|
                                                          TimeAxisViewItem::ShowNameHighlight|
                                                          TimeAxisViewItem::ShowFrame))
          , _region (r)
          , sync_mark(0)
+         , sync_line(0)
          , editor(0)
          , current_visible_sync_position(0.0)
          , valid(false)
@@ -86,11 +88,26 @@ RegionView::RegionView (const RegionView& other)
        /* derived concrete type will call init () */
 
        _region = other._region;
-       editor = other.editor;
        current_visible_sync_position = other.current_visible_sync_position;
        valid = false;
-       _enable_display = false;
        _pixel_width = other._pixel_width;
+       _height = other._height;
+}
+
+RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other_region)
+       : TimeAxisViewItem (other)
+{
+       /* this is a pseudo-copy constructor used when dragging regions 
+          around on the canvas.
+       */
+
+       /* derived concrete type will call init () */
+
+       _region = other_region;
+       current_visible_sync_position = other.current_visible_sync_position;
+       valid = false;
+       _pixel_width = other._pixel_width;
+       _height = other._height;
 }
 
 RegionView::RegionView (ArdourCanvas::Group*         parent, 
@@ -98,10 +115,12 @@ RegionView::RegionView (ArdourCanvas::Group*         parent,
                         boost::shared_ptr<ARDOUR::Region> r,
                         double                       spu,
                         Gdk::Color&                  basic_color,
+                                               bool recording,
                         TimeAxisViewItem::Visibility visibility)
-       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), visibility)
+       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), recording, visibility)
        , _region (r)
        , sync_mark(0)
+       , sync_line(0)
        , editor(0)
        , current_visible_sync_position(0.0)
        , valid(false)
@@ -115,43 +134,35 @@ RegionView::RegionView (ArdourCanvas::Group*         parent,
 void
 RegionView::init (Gdk::Color& basic_color, bool wfd)
 {
-       valid           = true;
-       _enable_display = false;
-       in_destructor   = false;
-       wait_for_data   = wfd;
+       editor        = 0;
+       valid         = true;
+       in_destructor = false;
+       _height       = 0;
+       wait_for_data = wfd;
+       sync_mark     = 0;
+       sync_line     = 0;
+       sync_mark     = 0;
+       sync_line     = 0;
 
        compute_colors (basic_color);
 
-       name_highlight->set_data ("regionview", this);
+       if (name_highlight) {
+               name_highlight->set_data ("regionview", this);
+               name_highlight->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_name_highlight_event), name_highlight, this));
+       }
 
        if (name_text) {
                name_text->set_data ("regionview", this);
        }
 
-       /* an equilateral triangle */
-
-       ArdourCanvas::Points shape;
-       shape.push_back (Gnome::Art::Point (-((sync_mark_width-1)/2), 1));
-       shape.push_back (Gnome::Art::Point ((sync_mark_width - 1)/2, 1));
-       shape.push_back (Gnome::Art::Point (0, sync_mark_width - 1));
-       shape.push_back (Gnome::Art::Point (-((sync_mark_width-1)/2), 1));
-
-       sync_mark =  new ArdourCanvas::Polygon (*group);
-       sync_mark->property_points() = shape;
-       sync_mark->property_fill_color_rgba() = fill_color;
-       sync_mark->hide();
-
-       //reset_width_dependent_items ((double) _region->length() / samples_per_unit);
-
        if (wfd)
                _enable_display = true;
 
-       set_y_position_and_height (0, trackview.height - 2);
+       set_height (trackview.current_height());
 
        _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed));
 
        group->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_event), group, this));
-       name_highlight->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_name_highlight_event), name_highlight, this));
 
        set_colors ();
 
@@ -219,7 +230,8 @@ RegionView::region_changed (Change what_changed)
        */
        /*
        if (what_changed & Region::LayerChanged) {
-               region_layered ();
+               // this is handled by the playlist i believe
+               //region_layered ();
        }
        */
        if (what_changed & Region::LockChanged) {
@@ -274,7 +286,7 @@ RegionView::region_layered ()
 {
        RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*>(&get_time_axis_view());
        assert(rtv);
-       rtv->view()->region_layered (this);
+       //rtv->view()->region_layered (this);
 }
        
 void
@@ -370,6 +382,7 @@ RegionView::set_colors ()
        
        if (sync_mark) {
                sync_mark->property_fill_color_rgba() = fill_color;
+               sync_line->property_fill_color_rgba() = fill_color;
        }
 }
 
@@ -393,8 +406,8 @@ RegionView::fake_set_opaque (bool yn)
        } else {
                fill_opacity = 60;
        }
-
-       TimeAxisViewItem::set_frame_color ();
+       
+       set_frame_color ();
 }
 
 void
@@ -444,15 +457,32 @@ RegionView::region_renamed ()
 void
 RegionView::region_sync_changed ()
 {
-       if (sync_mark == 0) {
-               return;
-       }
-
        int sync_dir;
        nframes_t sync_offset;
 
        sync_offset = _region->sync_offset (sync_dir);
 
+       if (sync_offset == 0) {
+               /* no need for a sync mark */
+               if (sync_mark) {
+                       sync_mark->hide();
+                       sync_line->hide ();
+               }
+               return;
+       }
+
+       if (!sync_mark) {
+
+               /* points set below */
+               
+               sync_mark =  new ArdourCanvas::Polygon (*group);
+               sync_mark->property_fill_color_rgba() = fill_color;
+
+               sync_line = new ArdourCanvas::Line (*group);
+               sync_line->property_fill_color_rgba() = fill_color;
+               sync_line->property_width_pixels() = 1;
+       }
+
        /* this has to handle both a genuine change of position, a change of samples_per_unit,
           and a change in the bounds of the _region->
         */
@@ -460,8 +490,9 @@ RegionView::region_sync_changed ()
        if (sync_offset == 0) {
 
                /* no sync mark - its the start of the region */
-
+               
                sync_mark->hide();
+               sync_line->hide ();
 
        } else {
 
@@ -470,6 +501,7 @@ RegionView::region_sync_changed ()
                        /* no sync mark - its out of the bounds of the region */
 
                        sync_mark->hide();
+                       sync_line->hide ();
 
                } else {
 
@@ -485,8 +517,14 @@ RegionView::region_sync_changed ()
                        points.push_back (Gnome::Art::Point (offset, sync_mark_width - 1));
                        points.push_back (Gnome::Art::Point (offset - ((sync_mark_width-1)/2), 1));     
                        sync_mark->property_points().set_value (points);
-                       sync_mark->show();
+                       sync_mark->show ();
+
+                       points.clear ();
+                       points.push_back (Gnome::Art::Point (offset, 0));
+                       points.push_back (Gnome::Art::Point (offset, trackview.current_height() - NAME_HIGHLIGHT_SIZE));
 
+                       sync_line->property_points().set_value (points);
+                       sync_line->show ();
                }
        }
 }
@@ -512,6 +550,17 @@ RegionView::move (double x_delta, double y_delta)
        }
 }
 
+void
+RegionView::remove_ghost_in (TimeAxisView& tv)
+{
+       for (vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
+               if (&(*i)->trackview == &tv) {
+                       delete *i;
+                       break;
+               }
+       }
+}
+
 void
 RegionView::remove_ghost (GhostRegion* ghost)
 {
@@ -533,3 +582,21 @@ RegionView::get_fill_color ()
        return fill_color;
 }
 
+void
+RegionView::set_height (double h)
+{
+       TimeAxisViewItem::set_height(h);
+
+       if (sync_line) {
+               Points points;
+               int sync_dir;
+               nframes_t sync_offset;
+               sync_offset = _region->sync_offset (sync_dir);
+               double offset = sync_offset / samples_per_unit;
+
+               points.push_back (Gnome::Art::Point (offset, 0));
+               points.push_back (Gnome::Art::Point (offset, h - NAME_HIGHLIGHT_SIZE));
+               sync_line->property_points().set_value (points);
+       }
+}
+