Visual tweaks to Soundcloud panel
[ardour.git] / gtk2_ardour / audio_streamview.cc
index 123cb5eb644369fa90c3c74317fefee82b5a072c..6880c8be5b9212205dd75b24425699ba081ca9af 100644 (file)
 #include "ardour/rc_configuration.h"
 #include "ardour/session.h"
 
+#include "canvas/rectangle.h"
+
 #include "audio_streamview.h"
 #include "audio_region_view.h"
 #include "tape_region_view.h"
 #include "audio_time_axis.h"
-#include "canvas-waveview.h"
-#include "canvas-simplerect.h"
 #include "region_selection.h"
 #include "selection.h"
 #include "public_editor.h"
@@ -60,8 +60,6 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv)
 {
        color_handler ();
        _amplitude_above_axis = 1.0;
-
-       Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioStreamView::parameter_changed, this, _1), gui_context());
 }
 
 int
@@ -100,19 +98,19 @@ AudioStreamView::create_region_view (boost::shared_ptr<Region> r, bool wait_for_
        case Normal:
                if (recording) {
                        region_view = new AudioRegionView (_canvas_group, _trackview, region,
-                                       _samples_per_unit, region_color, recording, TimeAxisViewItem::Visibility(
-                                                       TimeAxisViewItem::ShowFrame |
-                                                       TimeAxisViewItem::HideFrameRight |
-                                                       TimeAxisViewItem::HideFrameLeft |
-                                                       TimeAxisViewItem::HideFrameTB));
+                                                          _samples_per_pixel, region_color, recording, TimeAxisViewItem::Visibility(
+                                                                  TimeAxisViewItem::ShowFrame |
+                                                                  TimeAxisViewItem::HideFrameRight |
+                                                                  TimeAxisViewItem::HideFrameLeft |
+                                                                  TimeAxisViewItem::HideFrameTB));
                } else {
                        region_view = new AudioRegionView (_canvas_group, _trackview, region,
-                                       _samples_per_unit, region_color);
+                                       _samples_per_pixel, region_color);
                }
                break;
        case Destructive:
                region_view = new TapeAudioRegionView (_canvas_group, _trackview, region,
-                               _samples_per_unit, region_color);
+                               _samples_per_pixel, region_color);
                break;
        default:
                fatal << string_compose (_("programming error: %1"), "illegal track mode in ::add_region_view_internal") << endmsg;
@@ -132,10 +130,6 @@ AudioStreamView::create_region_view (boost::shared_ptr<Region> r, bool wait_for_
                region_view->set_sensitive (false);
        }
 
-       region_view->set_waveform_scale (Config->get_waveform_scale ());
-       region_view->set_waveform_shape (Config->get_waveform_shape ());
-       region_view->set_waveform_visible (Config->get_show_waveforms ());
-
        return region_view;
 }
 
@@ -208,38 +202,6 @@ AudioStreamView::redisplay_track ()
        layer_regions();
 }
 
-void
-AudioStreamView::set_show_waveforms (bool yn)
-{
-       for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
-               AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
-               if (arv) {
-                       arv->set_waveform_visible (yn);
-               }
-       }
-}
-
-void
-AudioStreamView::set_waveform_shape (WaveformShape shape)
-{
-       for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
-               AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
-               if (arv)
-                       arv->set_waveform_shape (shape);
-       }
-}
-
-void
-AudioStreamView::set_waveform_scale (WaveformScale scale)
-{
-       for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
-               AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
-               if (arv) {
-                       arv->set_waveform_scale (scale);
-               }
-       }
-}
-
 void
 AudioStreamView::setup_rec_box ()
 {
@@ -301,20 +263,20 @@ AudioStreamView::setup_rec_box ()
 
                        at = _trackview.audio_track(); /* we know what it is already */
                        framepos_t const frame_pos = at->current_capture_start ();
-                       gdouble xstart = _trackview.editor().frame_to_pixel (frame_pos);
-                       gdouble xend;
+                       gdouble xstart = _trackview.editor().sample_to_pixel (frame_pos);
+                       gdouble xend = xstart; /* keeps gcc optimized happy, really set in switch() below */
                        uint32_t fill_color;
 
                        switch (_trackview.audio_track()->mode()) {
                        case Normal:
                        case NonLayered:
                                xend = xstart;
-                               fill_color = ARDOUR_UI::config()->canvasvar_RecordingRect.get();
+                               fill_color = ARDOUR_UI::config()->get_canvasvar_RecordingRect();
                                break;
 
                        case Destructive:
                                xend = xstart + 2;
-                               fill_color = ARDOUR_UI::config()->canvasvar_RecordingRect.get();
+                               fill_color = ARDOUR_UI::config()->get_canvasvar_RecordingRect();
                                /* make the recording rect translucent to allow
                                   the user to see the peak data coming in, etc.
                                */
@@ -322,14 +284,14 @@ AudioStreamView::setup_rec_box ()
                                break;
                        }
 
-                       ArdourCanvas::SimpleRect * rec_rect = new Gnome::Canvas::SimpleRect (*_canvas_group);
-                       rec_rect->property_x1() = xstart;
-                       rec_rect->property_y1() = 1.0;
-                       rec_rect->property_x2() = xend;
-                       rec_rect->property_y2() = child_height ();
-                       rec_rect->property_outline_what() = 0x0;
-                       rec_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_TimeAxisFrame.get();
-                       rec_rect->property_fill_color_rgba() = fill_color;
+                       ArdourCanvas::Rectangle * rec_rect = new ArdourCanvas::Rectangle (_canvas_group);
+                       rec_rect->set_x0 (xstart);
+                       rec_rect->set_y0 (1);
+                       rec_rect->set_x1 (xend);
+                       rec_rect->set_y1 (child_height ());
+                       rec_rect->set_outline_what (ArdourCanvas::Rectangle::What (0));
+                       rec_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_TimeAxisFrame());
+                       rec_rect->set_fill_color (fill_color);
                        rec_rect->lower_to_bottom();
 
                        RecBoxInfo recbox;
@@ -435,7 +397,7 @@ AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt)
 
                assert (n < rec_rects.size());
 
-               if (!canvas_item_visible (rec_rects[n].rectangle)) {
+               if (!rec_rects[n].rectangle->visible()) {
                        /* rect already hidden, this region is done */
                        iter = tmp;
                        continue;
@@ -472,9 +434,9 @@ AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt)
                                        check_record_layers (region, (region->position() - region->start() + start + cnt));
 
                                        /* also update rect */
-                                       ArdourCanvas::SimpleRect * rect = rec_rects[n].rectangle;
-                                       gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length());
-                                       rect->property_x2() = xend;
+                                       ArdourCanvas::Rectangle * rect = rec_rects[n].rectangle;
+                                       gdouble xend = _trackview.editor().sample_to_pixel (region->position() + region->length());
+                                       rect->set_x1 (xend);
                                }
 
                        } else {
@@ -531,12 +493,14 @@ AudioStreamView::hide_all_fades ()
 }
 
 /** Hide xfades for regions that overlap ar.
- *  @return AudioRegionViews that xfades were hidden for.
+ *  @return Pair of lists; first is the AudioRegionViews that start xfades were hidden for,
+ *  second is the AudioRegionViews that end xfades were hidden for.
  */
-list<AudioRegionView*>
+pair<list<AudioRegionView*>, list<AudioRegionView*> >
 AudioStreamView::hide_xfades_with (boost::shared_ptr<AudioRegion> ar)
 {
-       list<AudioRegionView*> hidden;
+       list<AudioRegionView*> start_hidden;
+       list<AudioRegionView*> end_hidden;
        
        for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
                AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
@@ -545,14 +509,19 @@ AudioStreamView::hide_xfades_with (boost::shared_ptr<AudioRegion> ar)
                        case Evoral::OverlapNone:
                                break;
                        default:
+                               if (arv->start_xfade_visible ()) {
+                                       start_hidden.push_back (arv);
+                               }
+                               if (arv->end_xfade_visible ()) {
+                                       end_hidden.push_back (arv);
+                               }
                                arv->hide_xfades ();
-                               hidden.push_back (arv);
                                break;
                        }
                }
        }
 
-       return hidden;
+       return make_pair (start_hidden, end_hidden);
 }
 
 void
@@ -560,28 +529,15 @@ AudioStreamView::color_handler ()
 {
        //case cAudioTrackBase:
        if (_trackview.is_track()) {
-               canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioTrackBase.get();
+               canvas_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_AudioTrackBase());
        }
 
        //case cAudioBusBase:
        if (!_trackview.is_track()) {
                if (Profile->get_sae() && _trackview.route()->is_master()) {
-                       canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioMasterBusBase.get();
+                       canvas_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_AudioMasterBusBase());
                } else {
-                       canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioBusBase.get();
+                       canvas_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_AudioBusBase());
                }
        }
 }
-
-void
-AudioStreamView::parameter_changed (string const & p)
-{
-       if (p == "show-waveforms") {
-               set_show_waveforms (Config->get_show_waveforms ());
-       } else if (p == "waveform-scale") {
-               set_waveform_scale (Config->get_waveform_scale ());
-       } else if (p == "waveform-shape") {
-               set_waveform_shape (Config->get_waveform_shape ());
-       }
-}
-