13
0

patch from lincoln to make MIDI track height changes no longer just grow note height, but instead expand the visible note range once notes hit a given height

git-svn-id: svn://localhost/ardour2/branches/3.0@7222 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2010-06-03 16:02:49 +00:00
parent 9208598c26
commit dab0dacc66

View File

@ -299,7 +299,7 @@ MidiStreamView::update_contents_height ()
StreamView::update_contents_height();
_note_lines->property_y2() = height;
draw_note_lines();
apply_note_range (lowest_note(), highest_note(), true);
}
void
@ -362,13 +362,42 @@ MidiStreamView::apply_note_range(uint8_t lowest, uint8_t highest, bool to_region
{
_highest_note = highest;
_lowest_note = lowest;
int range = _highest_note - _lowest_note;
int pixels_per_note = floor (height/range);
/* do not grow note display beyont 10 pixels */
if (pixels_per_note > 10){
int available_note_range = floor ((height)/10);
int additional_notes = available_note_range - range;
/* distribute additional notes to higher and lower ranges, clamp at 0 and 127 */
for (int i = 0; i < additional_notes; i++){
if (i % 2 && _highest_note < 127){
_highest_note++;
}
else if (i % 2) {
_lowest_note--;
}
else if (_lowest_note > 0){
_lowest_note--;
}
else {
_highest_note++;
}
}
}
note_range_adjustment.set_page_size(_highest_note - _lowest_note);
note_range_adjustment.set_value(_lowest_note);
draw_note_lines();
if (to_region_views) {
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
((MidiRegionView*)(*i))->apply_note_range(lowest, highest);
((MidiRegionView*)(*i))->apply_note_range(_lowest_note, _highest_note);
}
}