Added dialog to allow adding any Midi CC track.
[ardour.git] / gtk2_ardour / crossfade_view.cc
index ef43ee987346bbf4b174641bd6a370f041d8a775..cf19137d988271c55faf64d9c7e8cfe0499147b4 100644 (file)
@@ -61,14 +61,14 @@ CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent,
        _visible = true;
 
        fade_in = new Line (*group);
-       fade_in->property_fill_color_rgba() = color_map[cCrossfadeLine];
+       fade_in->property_fill_color_rgba() = Config->canvasvar_CrossfadeLine.get();
        fade_in->property_width_pixels() = 1;
 
        fade_out = new Line (*group);
-       fade_out->property_fill_color_rgba() = color_map[cCrossfadeLine];
+       fade_out->property_fill_color_rgba() = Config->canvasvar_CrossfadeLine.get();
        fade_out->property_width_pixels() = 1;
        
-       set_height (get_time_axis_view().height);
+       set_y_position_and_height (0, get_time_axis_view().height);
 
        /* no frame around the xfade or overlap rects */
 
@@ -84,6 +84,7 @@ CrossfadeView::CrossfadeView (ArdourCanvas::Group *parent,
        crossfade_changed (Change (~0));
 
        crossfade->StateChanged.connect (mem_fun(*this, &CrossfadeView::crossfade_changed));
+       ColorsChanged.connect (mem_fun (*this, &CrossfadeView::color_handler));
 }
 
 CrossfadeView::~CrossfadeView ()
@@ -105,13 +106,16 @@ CrossfadeView::reset_width_dependent_items (double pixel_width)
 }
 
 void
-CrossfadeView::set_height (double height)
+CrossfadeView::set_y_position_and_height (double y, double h)
 {
-       if (height == TimeAxisView::hSmaller ||
-           height == TimeAxisView::hSmall)
-               TimeAxisViewItem::set_height (height - 3 );
-       else
-               TimeAxisViewItem::set_height (height - NAME_HIGHLIGHT_SIZE - 3 );
+       if (h == TimeAxisView::hSmaller || h == TimeAxisView::hSmall) {
+               TimeAxisViewItem::set_y_position_and_height (y, h - 3 );
+       } else {
+               TimeAxisViewItem::set_y_position_and_height (y, h - NAME_HIGHLIGHT_SIZE - 3 );
+       }
+
+       _y_position = y;
+       _height = h;
 
        redraw_curves ();
 }
@@ -158,9 +162,8 @@ CrossfadeView::redraw_curves ()
         At "height - 3.0" the bottom of the crossfade touches the name highlight or the bottom of the track (if the
         track is either Small or Smaller.
         */
-       double tav_height = get_time_axis_view().height;
-       if (tav_height == TimeAxisView::hSmaller ||
-           tav_height == TimeAxisView::hSmall) {
+       double const tav_height = get_time_axis_view().height;
+       if (tav_height == TimeAxisView::hSmaller || tav_height == TimeAxisView::hSmall) {
                h = tav_height - 3.0;
        } else {
                h = tav_height - NAME_HIGHLIGHT_SIZE - 3.0;
@@ -186,19 +189,19 @@ CrossfadeView::redraw_curves ()
        points = get_canvas_points ("xfade edit redraw", npoints);
        vec = new float[npoints];
 
-       crossfade->fade_in().get_vector (0, crossfade->length(), vec, npoints);
+       crossfade->fade_in().curve().get_vector (0, crossfade->length(), vec, npoints);
        for (int i = 0, pci = 0; i < npoints; ++i) {
                Art::Point &p = (*points)[pci++];
                p.set_x(i);
-               p.set_y(2.0 + h - (h * vec[i]));
+               p.set_y(_y_position + 2.0 + h - (h * vec[i]));
        }
        fade_in->property_points() = *points;
 
-       crossfade->fade_out().get_vector (0, crossfade->length(), vec, npoints);
+       crossfade->fade_out().curve().get_vector (0, crossfade->length(), vec, npoints);
        for (int i = 0, pci = 0; i < npoints; ++i) {
                Art::Point &p = (*points)[pci++];
                p.set_x(i);
-               p.set_y(2.0 + h - (h * vec[i]));
+               p.set_y(_y_position + 2.0 + h - (h * vec[i]));
        }
        fade_out->property_points() = *points;
 
@@ -217,14 +220,20 @@ void
 CrossfadeView::active_changed ()
 {
        if (crossfade->active()) {
-               frame->property_fill_color_rgba() = color_map[cActiveCrossfade];
+               frame->property_fill_color_rgba() = Config->canvasvar_ActiveCrossfade.get();
        } else {
-               frame->property_fill_color_rgba() = color_map[cInactiveCrossfade];
+               frame->property_fill_color_rgba() = Config->canvasvar_InactiveCrossfade.get();
        }
 
        redraw_curves ();
 }
 
+void
+CrossfadeView::color_handler ()
+{
+       active_changed ();
+}
+
 void
 CrossfadeView::set_valid (bool yn)
 {
@@ -260,3 +269,4 @@ CrossfadeView::fake_hide ()
 {
        group->hide();
 }
+