comparison layer/NoteLayer.cpp @ 665:ab9fefdaa103

Make scale drawing in log scale a bit less dumb
author Chris Cannam
date Tue, 16 Jul 2013 13:38:53 +0100
parents 4806715f7a19
children 2727bc3aab59 123ebecd12e6
comparison
equal deleted inserted replaced
664:62330d542e1d 665:ab9fefdaa103
36 36
37 #include <iostream> 37 #include <iostream>
38 #include <cmath> 38 #include <cmath>
39 #include <utility> 39 #include <utility>
40 40
41 //#define DEBUG_NOTE_LAYER 1
42
41 NoteLayer::NoteLayer() : 43 NoteLayer::NoteLayer() :
42 SingleColourLayer(), 44 SingleColourLayer(),
43 m_model(0), 45 m_model(0),
44 m_editing(false), 46 m_editing(false),
45 m_originalPoint(0, 0.0, 0, 1.f, tr("New Point")), 47 m_originalPoint(0, 0.0, 0, 1.f, tr("New Point")),
613 if (shouldConvertMIDIToHz()) { 615 if (shouldConvertMIDIToHz()) {
614 min = Pitch::getFrequencyForPitch(lrintf(min)); 616 min = Pitch::getFrequencyForPitch(lrintf(min));
615 max = Pitch::getFrequencyForPitch(lrintf(max + 1)); 617 max = Pitch::getFrequencyForPitch(lrintf(max + 1));
616 } 618 }
617 619
620 #ifdef DEBUG_NOTE_LAYER
618 std::cerr << "NoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl; 621 std::cerr << "NoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl;
622 #endif
619 623
620 } else if (log) { 624 } else if (log) {
621 625
622 LogRange::mapRange(min, max); 626 LogRange::mapRange(min, max);
623 627
628 #ifdef DEBUG_NOTE_LAYER
624 std::cerr << "NoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl; 629 std::cerr << "NoteLayer[" << this << "]::getScaleExtents: min = " << min << ", max = " << max << ", log = " << log << std::endl;
630 #endif
625 631
626 } 632 }
627 633
628 } else { 634 } else {
629 635
653 bool logarithmic = false; 659 bool logarithmic = false;
654 int h = v->height(); 660 int h = v->height();
655 661
656 getScaleExtents(v, min, max, logarithmic); 662 getScaleExtents(v, min, max, logarithmic);
657 663
658 // std::cerr << "NoteLayer[" << this << "]::getYForValue(" << val << "): min = " << min << ", max = " << max << ", log = " << logarithmic << std::endl; 664 #ifdef DEBUG_NOTE_LAYER
665 std::cerr << "NoteLayer[" << this << "]::getYForValue(" << val << "): min = " << min << ", max = " << max << ", log = " << logarithmic << std::endl;
666 #endif
659 667
660 if (shouldConvertMIDIToHz()) { 668 if (shouldConvertMIDIToHz()) {
661 val = Pitch::getFrequencyForPitch(lrintf(val), 669 val = Pitch::getFrequencyForPitch(lrintf(val),
662 lrintf((val - lrintf(val)) * 100)); 670 lrintf((val - lrintf(val)) * 100));
663 // std::cerr << "shouldConvertMIDIToHz true, val now = " << val << std::endl; 671 #ifdef DEBUG_NOTE_LAYER
672 std::cerr << "shouldConvertMIDIToHz true, val now = " << val << std::endl;
673 #endif
664 } 674 }
665 675
666 if (logarithmic) { 676 if (logarithmic) {
667 val = LogRange::map(val); 677 val = LogRange::map(val);
668 // std::cerr << "logarithmic true, val now = " << val << std::endl; 678 #ifdef DEBUG_NOTE_LAYER
679 std::cerr << "logarithmic true, val now = " << val << std::endl;
680 #endif
669 } 681 }
670 682
671 int y = int(h - ((val - min) * h) / (max - min)) - 1; 683 int y = int(h - ((val - min) * h) / (max - min)) - 1;
672 // std::cerr << "y = " << y << std::endl; 684 #ifdef DEBUG_NOTE_LAYER
685 std::cerr << "y = " << y << std::endl;
686 #endif
673 return y; 687 return y;
674 } 688 }
675 689
676 float 690 float
677 NoteLayer::getValueForY(View *v, int y) const 691 NoteLayer::getValueForY(View *v, int y) const