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:
parent
9208598c26
commit
dab0dacc66
@ -299,7 +299,7 @@ MidiStreamView::update_contents_height ()
|
|||||||
StreamView::update_contents_height();
|
StreamView::update_contents_height();
|
||||||
_note_lines->property_y2() = height;
|
_note_lines->property_y2() = height;
|
||||||
|
|
||||||
draw_note_lines();
|
apply_note_range (lowest_note(), highest_note(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -362,13 +362,42 @@ MidiStreamView::apply_note_range(uint8_t lowest, uint8_t highest, bool to_region
|
|||||||
{
|
{
|
||||||
_highest_note = highest;
|
_highest_note = highest;
|
||||||
_lowest_note = lowest;
|
_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_page_size(_highest_note - _lowest_note);
|
||||||
note_range_adjustment.set_value(_lowest_note);
|
note_range_adjustment.set_value(_lowest_note);
|
||||||
|
|
||||||
draw_note_lines();
|
draw_note_lines();
|
||||||
|
|
||||||
if (to_region_views) {
|
if (to_region_views) {
|
||||||
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user