diff options
author | David Robillard <d@drobilla.net> | 2013-01-19 07:00:43 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2013-01-19 07:00:43 +0000 |
commit | fc77ae0738565770abde1a25f650a035cf082af0 (patch) | |
tree | f4edb7bcdcddf186fcf5cf4fb033e602580e4008 /gtk2_ardour/midi_streamview.cc | |
parent | d251c68d7676a18ab9ed935e22558e2b18981b41 (diff) |
Replace a bunch of potential crashes with graceful handling of the situation.
We really need some kind of more sophisticated assert macro that can be
switched to non-fatal logging mode for release builds. A log message, which is
often all that would happen, is a lot better than a trainwrecked performance...
git-svn-id: svn://localhost/ardour2/branches/3.0@13892 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_streamview.cc')
-rw-r--r-- | gtk2_ardour/midi_streamview.cc | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 843ca1bfc2..90e6147763 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -17,7 +17,6 @@ */ #include <cmath> -#include <cassert> #include <utility> #include <gtkmm.h> @@ -49,6 +48,8 @@ #include "simplerect.h" #include "utils.h" +#include "i18n.h" + using namespace std; using namespace ARDOUR; using namespace PBD; @@ -400,7 +401,6 @@ MidiStreamView::apply_note_range_to_regions () void MidiStreamView::update_note_range(uint8_t note_num) { - assert(note_num <= 127); _data_note_min = min(_data_note_min, note_num); _data_note_max = max(_data_note_max, note_num); } @@ -461,21 +461,23 @@ MidiStreamView::setup_rec_box () boost::shared_ptr<MidiRegion> region (boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (sources, plist, false))); - - assert(region); - region->set_start (_trackview.track()->current_capture_start() - _trackview.track()->get_capture_start_frame (0)); - region->set_position (_trackview.track()->current_capture_start()); - RegionView* rv = add_region_view_internal (region, false); - MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv); - mrv->begin_write (); - - rec_regions.push_back (make_pair (region, rv)); - - // rec regions are destroyed in setup_rec_box - - /* we add the region later */ - - setup_new_rec_layer_time (region); + if (region) { + region->set_start (_trackview.track()->current_capture_start() + - _trackview.track()->get_capture_start_frame (0)); + region->set_position (_trackview.track()->current_capture_start()); + RegionView* rv = add_region_view_internal (region, false); + MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv); + mrv->begin_write (); + + + /* rec region will be destroyed in setup_rec_box */ + rec_regions.push_back (make_pair (region, rv)); + + /* we add the region later */ + setup_new_rec_layer_time (region); + } else { + error << _("failed to create MIDI region") << endmsg; + } } /* start a new rec box */ @@ -486,8 +488,6 @@ MidiStreamView::setup_rec_box () gdouble const xend = xstart; uint32_t fill_color; - assert(_trackview.midi_track()->mode() == Normal); - fill_color = ARDOUR_UI::config()->canvasvar_RecordingRect.get(); ArdourCanvas::SimpleRect * rec_rect = new Gnome::Canvas::SimpleRect (*_canvas_group); @@ -661,7 +661,8 @@ MidiStreamView::leave_internal_edit_mode () StreamView::leave_internal_edit_mode (); for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) { MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*i); - assert (mrv); - mrv->clear_selection (); + if (mrv) { + mrv->clear_selection (); + } } } |