using namespace std;
using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
using namespace PBD;
using namespace Editing;
, _updates_suspended (false)
{
/* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */
- midi_underlay_group = new ArdourCanvas::Group (_canvas_group);
+ midi_underlay_group = new ArdourCanvas::Container (_canvas_group);
midi_underlay_group->lower_to_bottom();
/* put the note lines in the timeaxisview's group, so it
can be put below ghost regions from MIDI underlays
*/
- _note_lines = new ArdourCanvas::LineSet (_canvas_group);
-
+ _note_lines = new ArdourCanvas::LineSet (_canvas_group, ArdourCanvas::LineSet::Horizontal);
+
_note_lines->Event.connect(
sigc::bind(sigc::mem_fun(_trackview.editor(),
&PublicEditor::canvas_stream_view_event),
RegionView* region_view = new MidiRegionView (_canvas_group, _trackview, region,
_samples_per_pixel, region_color);
- region_view->init (region_color, false);
+ region_view->init (false);
return region_view;
}
RegionView*
-MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wfd, bool recording)
+MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait_for_data, bool recording)
{
boost::shared_ptr<MidiRegion> region = boost::dynamic_pointer_cast<MidiRegion> (r);
- if (region == 0) {
+ if (!region) {
return 0;
}
(*i)->set_valid (true);
- display_region(dynamic_cast<MidiRegionView*>(*i), wfd);
+ display_region(dynamic_cast<MidiRegionView*>(*i), wait_for_data);
return 0;
}
}
- MidiRegionView* region_view = dynamic_cast<MidiRegionView*> (create_region_view (r, wfd, recording));
+ MidiRegionView* region_view = dynamic_cast<MidiRegionView*> (create_region_view (r, wait_for_data, recording));
if (region_view == 0) {
return 0;
}
}
/* display events and find note range */
- display_region (region_view, wfd);
+ display_region (region_view, wait_for_data);
/* fit note range if we are importing */
if (_trackview.session()->operation_in_progress (Operations::insert_file)) {
return;
}
- region_view->enable_display(true);
+ region_view->enable_display (true);
+ region_view->set_height (child_height());
boost::shared_ptr<MidiSource> source(region_view->midi_region()->midi_source(0));
+ if (!source) {
+ error << _("attempt to display MIDI region with no source") << endmsg;
+ return;
+ }
if (load_model) {
source->load_model();
}
+ if (!source->model()) {
+ error << _("attempt to display MIDI region with no model") << endmsg;
+ return;
+ }
+
_range_dirty = update_data_note_range(
source->model()->lowest_note(),
source->model()->highest_note());
// Display region contents
- region_view->set_height (child_height());
region_view->display_model(source->model());
}
+
void
MidiStreamView::display_track (boost::shared_ptr<Track> tr)
{
MidiStreamView::update_contents_height ()
{
StreamView::update_contents_height();
- _note_lines->set_height (child_height ());
+
+ _note_lines->set_extent (ArdourCanvas::COORD_MAX);
apply_note_range (lowest_note(), highest_note(), true);
}
}
double y;
- double prev_y = 0;
+ double prev_y = .5;
uint32_t color;
_note_lines->clear();
* coordinate system in which y=0 is at the top
*/
- for (int i = highest_note(); i >= lowest_note(); --i) {
+ for (int i = highest_note() + 1; i >= lowest_note(); --i) {
- y = note_to_y (i);
+ y = floor(note_to_y (i)) + .5;
/* this is the line actually corresponding to the division
* between notes
*/
- _note_lines->add (y, 1.0, ARDOUR_UI::config()->get_canvasvar_PianoRollBlackOutline());
+ if (i <= highest_note()) {
+ _note_lines->add (y, 1.0, ARDOUR_UI::config()->color ("piano roll black outline"));
+ }
/* now add a thicker line/bar which covers the entire vertical
* height of this note.
case 6:
case 8:
case 10:
- color = ARDOUR_UI::config()->get_canvasvar_PianoRollBlack();
+ color = ARDOUR_UI::config()->color_mod ("piano roll black", "piano roll black");
break;
default:
- color = ARDOUR_UI::config()->get_canvasvar_PianoRollWhite();
+ color = ARDOUR_UI::config()->color_mod ("piano roll white", "piano roll white");
break;
}
double h = y - prev_y;
double mid = y + (h/2.0);
- if (height > 1.0) {
+ if (height > 1.0) { // XXX ? should that not be h >= 1 ?
_note_lines->add (mid, h, color);
}
gdouble const xend = xstart;
uint32_t fill_color;
- fill_color = ARDOUR_UI::config()->get_canvasvar_RecordingRect();
+ fill_color = ARDOUR_UI::config()->color ("recording rect");
ArdourCanvas::Rectangle * rec_rect = new ArdourCanvas::Rectangle (_canvas_group);
rec_rect->set (ArdourCanvas::Rect (xstart, 1, xend, _trackview.current_height() - 1));
- rec_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_RecordingRect());
+ rec_rect->set_outline_color (ARDOUR_UI::config()->color ("recording rect"));
rec_rect->set_fill_color (fill_color);
rec_rect->lower_to_bottom();
draw_note_lines ();
if (_trackview.is_midi_track()) {
- canvas_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_MidiTrackBase());
+ canvas_rect->set_fill_color (ARDOUR_UI::config()->color_mod ("midi track base", "midi track base"));
} else {
- canvas_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_MidiBusBase());
+ canvas_rect->set_fill_color (ARDOUR_UI::config()->color ("midi bus base"));
}
}