comparison layer/TimeValueLayer.cpp @ 669:123ebecd12e6 tonioni

Merge from default branch
author Chris Cannam
date Tue, 16 Jul 2013 14:45:55 +0100
parents ab9fefdaa103
children d52751e2728b
comparison
equal deleted inserted replaced
663:1a0fdad4af4d 669:123ebecd12e6
744 { 744 {
745 min = 0.0; 745 min = 0.0;
746 max = 0.0; 746 max = 0.0;
747 log = false; 747 log = false;
748 748
749 bool haveAutoAlignment = false;
750
749 if (shouldAutoAlign()) { 751 if (shouldAutoAlign()) {
750 752
751 if (!v->getValueExtents(m_model->getScaleUnits(), min, max, log)) { 753 if (!v->getValueExtents(m_model->getScaleUnits(), min, max, log)) {
752 min = m_model->getValueMinimum(); 754 min = m_model->getValueMinimum();
753 max = m_model->getValueMaximum(); 755 max = m_model->getValueMaximum();
754 } else if (log) { 756 } else {
755 LogRange::mapRange(min, max); 757 haveAutoAlignment = true;
758 if (log) {
759 LogRange::mapRange(min, max);
760 }
756 } 761 }
757 762
758 } else if (m_verticalScale == PlusMinusOneScale) { 763 } else if (m_verticalScale == PlusMinusOneScale) {
759 764
760 min = -1.0; 765 min = -1.0;
772 777
773 #ifdef DEBUG_TIME_VALUE_LAYER 778 #ifdef DEBUG_TIME_VALUE_LAYER
774 std::cerr << "TimeValueLayer::getScaleExtents: min = " << min << ", max = " << max << std::endl; 779 std::cerr << "TimeValueLayer::getScaleExtents: min = " << min << ", max = " << max << std::endl;
775 #endif 780 #endif
776 781
777 if (max == min) { 782 if (!haveAutoAlignment) {
778 max = max + 0.5; 783
779 min = min - 0.5; 784 if (max == min) {
780 } else { 785 max = max + 0.5;
781 float margin = (max - min) / 10.0; 786 min = min - 0.5;
782 max = max + margin; 787 } else {
783 min = min - margin; 788 float margin = (max - min) / 10.0;
784 } 789 max = max + margin;
785 790 min = min - margin;
786 #ifdef DEBUG_TIME_VALUE_LAYER 791 }
787 std::cerr << "TimeValueLayer::getScaleExtents: min = " << min << ", max = " << max << " (after adjustment)" << std::endl; 792
788 #endif 793 #ifdef DEBUG_TIME_VALUE_LAYER
794 std::cerr << "TimeValueLayer::getScaleExtents: min = " << min << ", max = " << max << " (after adjustment)" << std::endl;
795 #endif
796 }
789 } 797 }
790 798
791 int 799 int
792 TimeValueLayer::getYForValue(View *v, float val) const 800 TimeValueLayer::getYForValue(View *v, float val) const
793 { 801 {
1253 int prec = trunc(log10f(inc)); 1261 int prec = trunc(log10f(inc));
1254 prec -= 1; 1262 prec -= 1;
1255 if (prec < 0) dp = -prec; 1263 if (prec < 0) dp = -prec;
1256 round = powf(10.f, prec); 1264 round = powf(10.f, prec);
1257 #ifdef DEBUG_TIME_VALUE_LAYER 1265 #ifdef DEBUG_TIME_VALUE_LAYER
1258 std::cerr << "inc = " << inc << ", round = " << round << std::endl; 1266 std::cerr << "inc = " << inc << ", round = " << round << ", dp = " << dp << std::endl;
1259 #endif 1267 #endif
1260 } 1268 }
1261 1269
1262 int prevy = -1; 1270 int prevy = -1;
1263 1271
1293 continue; 1301 continue;
1294 } 1302 }
1295 } 1303 }
1296 1304
1297 if (logarithmic) { 1305 if (logarithmic) {
1298 sprintf(buffer, "%.*g", dp < 2 ? 2 : dp, LogRange::unmap(dispval)); 1306 double dv = LogRange::unmap(dispval);
1307 int digits = trunc(log10f(dv));
1308 int sf = dp + (digits > 0 ? digits : 0);
1309 if (sf < 2) sf = 2;
1310 sprintf(buffer, "%.*g", sf, dv);
1299 } else { 1311 } else {
1300 sprintf(buffer, "%.*f", dp, dispval); 1312 sprintf(buffer, "%.*f", dp, dispval);
1301 } 1313 }
1302 QString label = QString(buffer); 1314 QString label = QString(buffer);
1303 1315