use ArdourCanvas::TimeRectangle for regions, notes, markers
[ardour.git] / gtk2_ardour / audio_streamview.cc
index fee25569f850d22dd9aed0e74bdf6e918af46a83..68757c256b1b1cc3169d0ccba5a7743c674b9ad5 100644 (file)
@@ -46,7 +46,6 @@
 #include "ardour_ui.h"
 #include "rgb_macros.h"
 #include "gui_thread.h"
-#include "utils.h"
 
 #include "i18n.h"
 
@@ -98,27 +97,27 @@ AudioStreamView::create_region_view (boost::shared_ptr<Region> r, bool wait_for_
        case Normal:
                if (recording) {
                        region_view = new AudioRegionView (_canvas_group, _trackview, region,
-                                                          _frames_per_pixel, region_color, recording, TimeAxisViewItem::Visibility(
+                                                          _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,
-                                       _frames_per_pixel, region_color);
+                                       _samples_per_pixel, region_color);
                }
                break;
        case Destructive:
                region_view = new TapeAudioRegionView (_canvas_group, _trackview, region,
-                               _frames_per_pixel, region_color);
+                                                      _samples_per_pixel, region_color);
                break;
        default:
-               fatal << string_compose (_("programming error: %1"), "illegal track mode in ::add_region_view_internal") << endmsg;
+               fatal << string_compose (_("programming error: %1"), "illegal track mode in ::create_region_view()") << endmsg;
                /*NOTREACHED*/
 
        }
 
-       region_view->init (region_color, wait_for_waves);
+       region_view->init (wait_for_waves);
        region_view->set_amplitude_above_axis(_amplitude_above_axis);
        region_view->set_height (child_height ());
 
@@ -142,27 +141,6 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
                return 0;
        }
 
-//     if(!recording){
-//             for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
-//                     if ((*i)->region() == r) {
-//                             cerr << "audio_streamview in add_region_view_internal region found" << endl;
-                               /* great. we already have a AudioRegionView for this Region. use it again. */
-
-//                             (*i)->set_valid (true);
-
-                               // this might not be necessary
-//                             AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
-
-//                             if (arv) {
-//                                     arv->set_waveform_scale (_waveform_scale);
-//                                     arv->set_waveform_shape (_waveform_shape);
-//                             }
-
-//                             return NULL;
-//                     }
-//             }
-//     }
-
        region_views.push_front (region_view);
 
         if (_trackview.editor().internal_editing()) {
@@ -263,20 +241,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_RecordingRect();
                                break;
 
                        case Destructive:
                                xend = xstart + 2;
-                               fill_color = ARDOUR_UI::config()->canvasvar_RecordingRect.get();
+                               fill_color = ARDOUR_UI::config()->get_RecordingRect();
                                /* make the recording rect translucent to allow
                                   the user to see the peak data coming in, etc.
                                */
@@ -284,19 +262,23 @@ AudioStreamView::setup_rec_box ()
                                break;
                        }
 
-                       ArdourCanvas::Rectangle * rec_rect = new ArdourCanvas::Rectangle (_canvas_group);
+                       ArdourCanvas::Rectangle * rec_rect = new ArdourCanvas::TimeRectangle (_canvas_group);
                        rec_rect->set_x0 (xstart);
-                       rec_rect->set_y0 (1);
+                       rec_rect->set_y0 (0);
                        rec_rect->set_x1 (xend);
                        rec_rect->set_y1 (child_height ());
-                       rec_rect->set_outline_what (0);
-                       rec_rect->set_outline_color (ARDOUR_UI::config()->canvasvar_TimeAxisFrame.get());
+                       rec_rect->set_outline_what (ArdourCanvas::Rectangle::What (0));
+                       rec_rect->set_outline_color (ARDOUR_UI::config()->get_TimeAxisFrame());
                        rec_rect->set_fill_color (fill_color);
-                       rec_rect->lower_to_bottom();
 
                        RecBoxInfo recbox;
                        recbox.rectangle = rec_rect;
-                       recbox.start = _trackview.session()->transport_frame();
+                       
+                       if (rec_rects.empty()) {
+                               recbox.start = _trackview.session()->record_location ();
+                       } else {
+                               recbox.start = _trackview.session()->transport_frame ();
+                       }
                        recbox.length = 0;
 
                        rec_rects.push_back (recbox);
@@ -435,7 +417,7 @@ AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt)
 
                                        /* also update rect */
                                        ArdourCanvas::Rectangle * rect = rec_rects[n].rectangle;
-                                       gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length());
+                                       gdouble xend = _trackview.editor().sample_to_pixel (region->position() + region->length());
                                        rect->set_x1 (xend);
                                }
 
@@ -529,15 +511,15 @@ AudioStreamView::color_handler ()
 {
        //case cAudioTrackBase:
        if (_trackview.is_track()) {
-               canvas_rect->set_fill_color (ARDOUR_UI::config()->canvasvar_AudioTrackBase.get());
+               canvas_rect->set_fill_color (ARDOUR_UI::config()->get_AudioTrackBase());
        }
 
        //case cAudioBusBase:
        if (!_trackview.is_track()) {
                if (Profile->get_sae() && _trackview.route()->is_master()) {
-                       canvas_rect->set_fill_color (ARDOUR_UI::config()->canvasvar_AudioMasterBusBase.get());
+                       canvas_rect->set_fill_color (ARDOUR_UI::config()->get_AudioMasterBusBase());
                } else {
-                       canvas_rect->set_fill_color (ARDOUR_UI::config()->canvasvar_AudioBusBase.get());
+                       canvas_rect->set_fill_color (ARDOUR_UI::config()->get_AudioBusBase());
                }
        }
 }