X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstreamview.cc;h=404b934562b60cf0d53d50db33247b8c24f843b4;hb=33cadc0ef1cb3bd3f2468b8ac085ae1cf55b009e;hp=5dd58deb2628721d21f088d7edf4e27479e8e9b8;hpb=ec1ef5d6b574258d6451aa60749c4241f3c42f5f;p=ardour.git diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index 5dd58deb26..404b934562 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -25,16 +25,18 @@ #include "ardour/playlist.h" #include "ardour/region.h" -#include "ardour/source.h" #include "ardour/track.h" #include "ardour/session.h" +#include "pbd/compose.h" + +#include "canvas/rectangle.h" +#include "canvas/debug.h" + #include "streamview.h" #include "global_signals.h" #include "region_view.h" #include "route_time_axis.h" -#include "canvas-waveview.h" -#include "canvas-simplerect.h" #include "region_selection.h" #include "selection.h" #include "public_editor.h" @@ -43,41 +45,36 @@ #include "gui_thread.h" #include "utils.h" +#include "i18n.h" + using namespace std; using namespace ARDOUR; using namespace PBD; using namespace Editing; -StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* background_group, ArdourCanvas::Group* canvas_group) +StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* canvas_group) : _trackview (tv) - , owns_background_group (background_group == 0) - , owns_canvas_group (canvas_group == 0) - , _background_group (background_group ? background_group : new ArdourCanvas::Group (*_trackview.canvas_background())) - , _canvas_group (canvas_group ? canvas_group : new ArdourCanvas::Group(*_trackview.canvas_display())) - , _samples_per_unit (_trackview.editor().get_current_zoom ()) + , _canvas_group (canvas_group ? canvas_group : new ArdourCanvas::Group (_trackview.canvas_display())) + , _samples_per_pixel (_trackview.editor().get_current_zoom ()) , rec_updating(false) , rec_active(false) , stream_base_color(0xFFFFFFFF) , _layers (1) , _layer_display (Overlaid) - , height(tv.height) + , height (tv.height) , last_rec_data_frame(0) { + CANVAS_DEBUG_NAME (_canvas_group, string_compose ("SV canvas group %1", _trackview.name())); + /* set_position() will position the group */ - canvas_rect = new ArdourCanvas::SimpleRect (*_background_group); - canvas_rect->property_x1() = 0.0; - canvas_rect->property_y1() = 0.0; - canvas_rect->property_x2() = Gtkmm2ext::physical_screen_width (_trackview.editor().get_window()); - canvas_rect->property_y2() = (double) tv.current_height(); - canvas_rect->raise(1); // raise above tempo lines - - canvas_rect->property_outline_what() = (guint32) (0x2|0x8); // outline RHS and bottom - canvas_rect->property_outline_color_rgba() = RGBA_TO_UINT (0, 0, 0, 255); - - canvas_rect->signal_event().connect (sigc::bind ( - sigc::mem_fun (_trackview.editor(), &PublicEditor::canvas_stream_view_event), - canvas_rect, &_trackview)); + canvas_rect = new ArdourCanvas::Rectangle (_canvas_group); + CANVAS_DEBUG_NAME (canvas_rect, string_compose ("SV canvas rectangle %1", _trackview.name())); + canvas_rect->set (ArdourCanvas::Rect (0, 0, ArdourCanvas::COORD_MAX, tv.current_height ())); + canvas_rect->set_outline_what (ArdourCanvas::Rectangle::BOTTOM); + canvas_rect->set_outline_color (RGBA_TO_UINT (0, 0, 0, 255)); + canvas_rect->set_fill (true); + canvas_rect->Event.connect (sigc::bind (sigc::mem_fun (_trackview.editor(), &PublicEditor::canvas_stream_view_event), canvas_rect, &_trackview)); if (_trackview.is_track()) { _trackview.track()->DiskstreamChanged.connect (*this, invalidator (*this), boost::bind (&StreamView::diskstream_changed, this), gui_context()); @@ -96,14 +93,6 @@ StreamView::~StreamView () undisplay_track (); delete canvas_rect; - - if (owns_background_group) { - delete _background_group; - } - - if (owns_canvas_group) { - delete _canvas_group; - } } void @@ -117,8 +106,7 @@ StreamView::attach () int StreamView::set_position (gdouble x, gdouble y) { - _canvas_group->property_x() = x; - _canvas_group->property_y() = y; + _canvas_group->set_position (ArdourCanvas::Duple (x, y)); return 0; } @@ -130,40 +118,40 @@ StreamView::set_height (double h) return -1; } - if (canvas_rect->property_y2() == h) { + if (canvas_rect->y1() == h) { return 0; } height = h; - canvas_rect->property_y2() = height; + canvas_rect->set_y1 (height); update_contents_height (); return 0; } int -StreamView::set_samples_per_unit (gdouble spp) +StreamView::set_samples_per_pixel (double fpp) { RegionViewList::iterator i; - if (spp < 1.0) { + if (fpp < 1.0) { return -1; } - _samples_per_unit = spp; + _samples_per_pixel = fpp; for (i = region_views.begin(); i != region_views.end(); ++i) { - (*i)->set_samples_per_unit (spp); + (*i)->set_samples_per_pixel (fpp); } for (vector::iterator xi = rec_rects.begin(); xi != rec_rects.end(); ++xi) { RecBoxInfo &recbox = (*xi); - gdouble xstart = _trackview.editor().frame_to_pixel (recbox.start); - gdouble xend = _trackview.editor().frame_to_pixel (recbox.start + recbox.length); + ArdourCanvas::Coord const xstart = _trackview.editor().sample_to_pixel (recbox.start); + ArdourCanvas::Coord const xend = _trackview.editor().sample_to_pixel (recbox.start + recbox.length); - recbox.rectangle->property_x1() = xstart; - recbox.rectangle->property_x2() = xend; + recbox.rectangle->set_x0 (xstart); + recbox.rectangle->set_x1 (xend); } update_coverage_frames (); @@ -368,9 +356,8 @@ StreamView::apply_color (Gdk::Color color, ColorTarget target) break; case StreamBaseColor: - stream_base_color = RGBA_TO_UINT ( - color.get_red_p(), color.get_green_p(), color.get_blue_p(), 255); - canvas_rect->property_fill_color_rgba() = stream_base_color; + stream_base_color = RGBA_TO_UINT (color.get_red_p(), color.get_green_p(), color.get_blue_p(), 255); + canvas_rect->set_fill_color (stream_base_color); break; } } @@ -425,19 +412,24 @@ StreamView::update_rec_box () case NonLayered: case Normal: rect.length = at - rect.start; - xstart = _trackview.editor().frame_to_pixel (rect.start); - xend = _trackview.editor().frame_to_pixel (at); + xstart = _trackview.editor().sample_to_pixel (rect.start); + xend = _trackview.editor().sample_to_pixel (at); break; case Destructive: rect.length = 2; - xstart = _trackview.editor().frame_to_pixel (_trackview.track()->current_capture_start()); - xend = _trackview.editor().frame_to_pixel (at); + xstart = _trackview.editor().sample_to_pixel (_trackview.track()->current_capture_start()); + xend = _trackview.editor().sample_to_pixel (at); break; + + default: + fatal << string_compose (_("programming error: %1"), "illegal track mode") << endmsg; + /*NOTREACHED*/ + return; } - rect.rectangle->property_x1() = xstart; - rect.rectangle->property_x2() = xend; + rect.rectangle->set_x0 (xstart); + rect.rectangle->set_x1 (xend); } } @@ -604,16 +596,18 @@ StreamView::update_contents_height () for (vector::iterator i = rec_rects.begin(); i != rec_rects.end(); ++i) { switch (_layer_display) { case Overlaid: - i->rectangle->property_y2() = height; + i->rectangle->set_y1 (height); break; case Stacked: case Expanded: /* In stacked displays, the recregion is always at the top */ - i->rectangle->property_y1() = 0; - i->rectangle->property_y2() = h; + i->rectangle->set_y0 (0); + i->rectangle->set_y1 (h); break; } } + + ContentsHeightChanged (); /* EMIT SIGNAL */ } void