# HG changeset patch # User Chris Cannam # Date 1202314889 0 # Node ID a9dfa2d6d5acb5cee7b6bc80f0c18d8ae7baa746 # Parent 67834ac56f2bfaaaaef794b3416831efbfa573e3 * Add pitch range in octaves, semitones and cents to the measurement rect as well as in Hz * Avoid crash when adding time ruler This commit contains a lot of debug output (will be slow) diff -r 67834ac56f2b -r a9dfa2d6d5ac layer/WaveformLayer.cpp --- a/layer/WaveformLayer.cpp Wed Feb 06 14:25:46 2008 +0000 +++ b/layer/WaveformLayer.cpp Wed Feb 06 16:21:29 2008 +0000 @@ -664,8 +664,13 @@ if (int(modelZoomLevel) != zoomLevel) { + std::cerr << "WaveformLayer::paint: zoom level " << zoomLevel << " differs from model zoom level " << modelZoomLevel << std::endl; + std::cerr << "index from " << index; + index = size_t((double(index) * zoomLevel) / modelZoomLevel); + std::cerr << " to " << index << std::endl; + if (int(modelZoomLevel) < zoomLevel) { // Peaks may be missed! The model should avoid // this by rounding zoom levels up rather than @@ -675,6 +680,8 @@ maxIndex = size_t((double(index + 1) * zoomLevel) / modelZoomLevel) - 1; } + + std::cerr << "maxIndex = " << maxIndex << std::endl; } if (ranges && index < ranges->size()) { diff -r 67834ac56f2b -r a9dfa2d6d5ac view/View.cpp --- a/view/View.cpp Wed Feb 06 14:25:46 2008 +0000 +++ b/view/View.cpp Wed Feb 06 16:21:29 2008 +0000 @@ -1910,6 +1910,8 @@ int labelCount = 0; + // top-left point, x-coord + if ((b0 = topLayer->getXScaleValue(this, r.x(), v0, u0))) { axs = QString("%1 %2").arg(v0).arg(u0); if (u0 == "Hz" && Pitch::isFrequencyInMidiRange(v0)) { @@ -1919,6 +1921,8 @@ aw = paint.fontMetrics().width(axs); ++labelCount; } + + // bottom-right point, x-coord if (r.width() > 0) { if ((b1 = topLayer->getXScaleValue(this, r.x() + r.width(), v1, u1))) { @@ -1930,15 +1934,19 @@ bw = paint.fontMetrics().width(bxs); } } + + // dimension, width if (b0 && b1 && v1 != v0 && u0 == u1) { - dxs = QString("(%1 %2)").arg(fabs(v1 - v0)).arg(u1); + dxs = QString("[%1 %2]").arg(fabs(v1 - v0)).arg(u1); dw = paint.fontMetrics().width(dxs); } b0 = false; b1 = false; + // top-left point, y-coord + if ((b0 = topLayer->getYScaleValue(this, r.y(), v0, u0))) { ays = QString("%1 %2").arg(v0).arg(u0); if (u0 == "Hz" && Pitch::isFrequencyInMidiRange(v0)) { @@ -1949,6 +1957,8 @@ ++labelCount; } + // bottom-right point, y-coord + if (r.height() > 0) { if ((b1 = topLayer->getYScaleValue(this, r.y() + r.height(), v1, u1))) { bys = QString("%1 %2").arg(v1).arg(u1); @@ -1964,13 +1974,24 @@ float dy = 0.f; QString du; + // dimension, height + if ((bd = topLayer->getYScaleDifference(this, r.y(), r.y() + r.height(), dy, du)) && dy != 0) { if (du != "") { - dys = QString("(%1 %2)").arg(dy).arg(du); + if (du == "Hz") { + int semis; + float cents; + semis = Pitch::getPitchForFrequencyDifference(v0, v1, ¢s); + dys = QString("[%1 %2 (%3)]") + .arg(dy).arg(du) + .arg(Pitch::getLabelForPitchRange(semis, cents)); + } else { + dys = QString("[%1 %2]").arg(dy).arg(du); + } } else { - dys = QString("(%1)").arg(dy); + dys = QString("[%1]").arg(dy); } dw = std::max(dw, paint.fontMetrics().width(dys)); } diff -r 67834ac56f2b -r a9dfa2d6d5ac view/ViewManager.cpp --- a/view/ViewManager.cpp Wed Feb 06 14:25:46 2008 +0000 +++ b/view/ViewManager.cpp Wed Feb 06 16:21:29 2008 +0000 @@ -24,7 +24,7 @@ #include -//#define DEBUG_VIEW_MANAGER 1 +#define DEBUG_VIEW_MANAGER 1 ViewManager::ViewManager() : m_playSource(0),