QImage Waveform::renderGfxScope(uint accelFactor, const QImage &qimage) { QTime start = QTime::currentTime(); start.start(); const int paintmode = ui->paintMode->itemData(ui->paintMode->currentIndex()).toInt(); WaveformGenerator::Rec rec = m_aRec601->isChecked() ? WaveformGenerator::Rec_601 : WaveformGenerator::Rec_709; QImage wave = m_waveformGenerator->calculateWaveform(scopeRect().size() - m_textWidth - QSize(0,m_paddingBottom), qimage, (WaveformGenerator::PaintMode) paintmode, true, rec, accelFactor); emit signalScopeRenderingFinished(start.elapsed(), 1); return wave; }
void AbstractScopeWidget::showEvent(QShowEvent *event) { QWidget::showEvent(event); m_scopeRect = scopeRect(); }
QImage Waveform::renderHUD(uint) { QImage hud(m_scopeRect.size(), QImage::Format_ARGB32); hud.fill(qRgba(0,0,0,0)); QPainter davinci(&hud); davinci.setPen(penLight); QMap< QString, QString > values = ProfilesDialog::getSettingsFromFile(KdenliveSettings::current_profile()); // qDebug() << values.value("width"); const int rightX = scopeRect().width()-m_textWidth.width()+3; const int x = m_mousePos.x() - scopeRect().x(); const int y = m_mousePos.y() - scopeRect().y(); if (scopeRect().height() > 0 && m_mouseWithinWidget) { int val = 255*(1-(float)y/scopeRect().height()); if (val >= 0 && val <= 255) { // Draw a horizontal line through the current mouse position // and show the value of the waveform there davinci.drawLine(0, y, scopeRect().size().width()-m_textWidth.width(), y); // Make the value stick to the line unless it is at the top/bottom of the scope int valY = y+5; const int top = 30; const int bottom = 20; if (valY < top) { valY = top; } else if (valY > scopeRect().height()-bottom) { valY = scopeRect().height()-bottom; } davinci.drawText(rightX, valY, QVariant(val).toString()); } if (scopeRect().width() > 0) { // Draw a vertical line and the x position of the source clip bool ok; const int profileWidth = values.value("width").toInt(&ok); if (ok) { const int clipX = (float)x/(scopeRect().width()-m_textWidth.width()-1)*(profileWidth-1); if (clipX >= 0 && clipX <= profileWidth) { int valX = x-15; if (valX < 0) { valX = 0; } if (valX > scopeRect().width()-55-m_textWidth.width()) { valX = scopeRect().width()-55-m_textWidth.width(); } davinci.drawLine(x, y, x, scopeRect().height()-m_paddingBottom); davinci.drawText(valX, scopeRect().height()-5, QVariant(clipX).toString() + " px"); } } } } davinci.drawText(rightX, scopeRect().height()-m_paddingBottom, "0"); davinci.drawText(rightX, 10, "255"); emit signalHUDRenderingFinished(0, 1); return hud; }