Draw some simple time axis labels

This commit is contained in:
Mike
2015-08-16 14:18:56 +02:00
parent 72d2ab0d3f
commit 37a49e80a5
2 changed files with 34 additions and 0 deletions

View File

@@ -133,6 +133,8 @@ void Spectrogram::paintEvent(QPaintEvent *event)
painter.drawPixmap(QRect(0, rect.y(), fftSize, height), pixmap);
free(line);
paintTimeAxis(&painter, rect);
}
qDebug() << "Paint: " << timer.elapsed() << "ms";
@@ -162,6 +164,24 @@ void Spectrogram::getLine(float *dest, int y)
}
}
void Spectrogram::paintTimeAxis(QPainter *painter, QRect rect)
{
// Round up for firstLine and round each to nearest linesPerGraduation
int firstLine = ((rect.y() + linesPerGraduation - 1) / linesPerGraduation) * linesPerGraduation;
int lastLine = ((rect.y() + rect.height()) / linesPerGraduation) * linesPerGraduation;
painter->save();
QPen pen(Qt::white, 1, Qt::SolidLine);
painter->setPen(pen);
QFontMetrics fm(painter->font());
int textOffset = fm.ascent() / 2 - 1;
for (int line = firstLine; line <= lastLine; line += linesPerGraduation) {
painter->drawLine(0, line, 10, line);
painter->drawText(12, line + textOffset, sampleToTime(lineToSample(line)));
}
painter->restore();
}
void Spectrogram::setSampleRate(int rate)
{
sampleRate = rate;
@@ -212,3 +232,12 @@ int Spectrogram::getStride()
{
return fftSize / pow(2, zoomLevel);
}
off_t Spectrogram::lineToSample(int line) {
return line * getStride();
}
QString Spectrogram::sampleToTime(off_t sample)
{
return QString::number((float)sample / sampleRate).append("s");
}