From c44dd8089812e7991e357a69cb91a704a41b0788 Mon Sep 17 00:00:00 2001 From: xorik Date: Wed, 19 Jun 2013 18:25:46 +0400 Subject: Move WOverview::drawNextPixmapPart() into new class WOverviewLMH --- build/depends.py | 1 + src/skin/legacyskinparser.cpp | 4 +- src/widget/woverview.cpp | 103 ------------------------------------- src/widget/woverview.h | 2 +- src/widget/woverviewlmh.cpp | 115 ++++++++++++++++++++++++++++++++++++++++++ src/widget/woverviewlmh.h | 15 ++++++ 6 files changed, 134 insertions(+), 106 deletions(-) create mode 100644 src/widget/woverviewlmh.cpp create mode 100644 src/widget/woverviewlmh.h diff --git a/build/depends.py b/build/depends.py index e015b0e72f..7ef7b6e2e3 100644 --- a/build/depends.py +++ b/build/depends.py @@ -545,6 +545,7 @@ class MixxxCore(Feature): "widget/wslider.cpp", "widget/wstatuslight.cpp", "widget/woverview.cpp", + "widget/woverviewlmh.cpp", "widget/wspinny.cpp", "widget/wskincolor.cpp", "widget/wabstractcontrol.cpp", diff --git a/src/skin/legacyskinparser.cpp b/src/skin/legacyskinparser.cpp index 3dd9e3deb1..73fe2dcd5f 100644 --- a/src/skin/legacyskinparser.cpp +++ b/src/skin/legacyskinparser.cpp @@ -41,7 +41,7 @@ #include "widget/wnumber.h" #include "widget/wnumberpos.h" #include "widget/wnumberrate.h" -#include "widget/woverview.h" +#include "widget/woverviewlmh.h" #include "widget/wspinny.h" #include "widget/wwaveformviewer.h" #include "waveform/waveformwidgetfactory.h" @@ -595,7 +595,7 @@ QWidget* LegacySkinParser::parseOverview(QDomElement node) { if (pPlayer == NULL) return NULL; - WOverview* overviewWidget = new WOverview(pSafeChannelStr, m_pConfig, m_pParent); + WOverviewLMH* overviewWidget = new WOverviewLMH(pSafeChannelStr, m_pConfig, m_pParent); connect(overviewWidget, SIGNAL(trackDropped(QString, QString)), m_pPlayerManager, SLOT(slotLoadToPlayer(QString, QString))); diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index 5545672df4..58e1d54f2d 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -248,109 +248,6 @@ void WOverview::onMarkRangeChange(double /*v*/) { update(); } -bool WOverview::drawNextPixmapPart() { - ScopedTimer t("WOverview::drawNextPixmapPart"); - - //qDebug() << "WOverview::drawNextPixmapPart() - m_waveform" << m_waveform; - - int currentCompletion; - - if (!m_pWaveform) { - return false; - } - - const int dataSize = m_pWaveform->getDataSize(); - if (dataSize == 0 ) { - return false; - } - - if (!m_pWaveformSourceImage) { - //waveform pixmap twice the height of the viewport to be scalable by total_gain - //we keep full range waveform data to scale it on paint - m_pWaveformSourceImage = new QImage(dataSize / 2, 2 * 255, QImage::Format_ARGB32_Premultiplied); - m_pWaveformSourceImage->fill(QColor(0,0,0,0).value()); - } - - const int waveformCompletion = m_pWaveform->getCompletion(); // always multiple of 2 - // test if there is some new to draw (at least of pixel width) - const int completionIncrement = waveformCompletion - m_actualCompletion; - - int visiblePixelIncrement = completionIncrement * width() / dataSize; - if (completionIncrement < 2 || visiblePixelIncrement == 0) { - return false; - } - - if (!m_pWaveform->getMutex()->tryLock()) { - return false; - } - - const int nextCompletion = m_actualCompletion + completionIncrement; - - //qDebug() << "WOverview::drawNextPixmapPart() - nextCompletion:" << nextCompletion - // << "m_actualCompletion:" << m_actualCompletion - // << "waveformCompletion:" << waveformCompletion - // << "completionIncrement:" << completionIncrement; - - - QPainter painter(m_pWaveformSourceImage); - painter.translate(0.0,(double)m_pWaveformSourceImage->height()/2.0); - - QColor lowColor = m_signalColors.getLowColor(); - QPen lowColorPen(QBrush(lowColor), 1); - - QColor midColor = m_signalColors.getMidColor(); - QPen midColorPen(QBrush(midColor), 1); - - QColor highColor = m_signalColors.getHighColor(); - QPen highColorPen(QBrush(highColor), 1); - - for (currentCompletion = m_actualCompletion; - currentCompletion < nextCompletion; currentCompletion += 2) { - unsigned char lowNeg = m_pWaveform->getLow(currentCompletion); - unsigned char lowPos = m_pWaveform->getLow(currentCompletion+1); - if (lowPos || lowNeg) { - painter.setPen(lowColorPen); - painter.drawLine(QPoint(currentCompletion / 2, -lowNeg), - QPoint(currentCompletion / 2, lowPos)); - } - } - - for (currentCompletion = m_actualCompletion; - currentCompletion < nextCompletion; currentCompletion += 2) { - painter.setPen(midColorPen); - painter.drawLine(QPoint(currentCompletion / 2, - m_pWaveform->getMid(currentCompletion)), - QPoint(currentCompletion / 2, m_pWaveform->getMid(currentCompletion+1))); - } - - for (currentCompletion = m_actualCompletion; - currentCompletion < nextCompletion; currentCompletion += 2) { - painter.setPen(highColorPen); - painter.drawLine(QPoint(currentCompletion / 2, - m_pWaveform->getHigh(currentCompletion)), - QPoint(currentCompletion / 2, m_pWaveform->getHigh(currentCompletion+1))); - } - - //evaluate waveform ratio peak - - for (currentCompletion = m_actualCompletion; - currentCompletion < nextCompletion; currentCompletion += 2) { - m_waveformPeak = math_max(m_waveformPeak, (float)m_pWaveform->getAll(currentCompletion)); - m_waveformPeak = math_max(m_waveformPeak, (float)m_pWaveform->getAll(currentCompletion+1)); - } - - m_actualCompletion = nextCompletion; - m_waveformImageScaled = QImage(); - m_diffGain = 0; - - //test if the complete waveform is done - if (m_actualCompletion >= dataSize - 2) { - m_pixmapDone = true; - //qDebug() << "m_waveformPeakRatio" << m_waveformPeak; - } - - m_pWaveform->getMutex()->unlock(); - return true; -} - void WOverview::mouseMoveEvent(QMouseEvent* e) { m_iPos = e->x(); m_iPos = math_max(0, math_min(m_iPos,width() - 1)); diff --git a/src/widget/woverview.h b/src/widget/woverview.h index 9fa191ee04..2b31517172 100644 --- a/src/widget/woverview.h +++ b/src/widget/woverview.h @@ -87,7 +87,7 @@ class WOverview : public WWidget private: /** append the waveform overview pixmap according to available data in waveform */ - bool drawNextPixmapPart(); + virtual bool drawNextPixmapPart() = 0; void paintText(const QString &text, QPainter *painter); inline int valueToPosition(float value) const { return (int)(m_a * value - m_b + 0.5); diff --git a/src/widget/woverviewlmh.cpp b/src/widget/woverviewlmh.cpp new file mode 100644 index 0000000000..6d1663d7ab --- /dev/null +++ b/src/widget/woverviewlmh.cpp @@ -0,0 +1,115 @@ +#include "woverviewlmh.h" + +#include "util/timer.h" + +#include "waveform/waveform.h" + + +WOverviewLMH::WOverviewLMH(const char *pGroup, ConfigObject* pConfig, QWidget * parent) + : WOverview(pGroup, pConfig, parent) { +} + + +bool WOverviewLMH::drawNextPixmapPart() +{ + ScopedTimer t("WOverview::drawNextPixmapPart"); + + //qDebug() << "WOverview::drawNextPixmapPart() - m_waveform" << m_waveform; + + int currentCompletion; + + if (!m_pWaveform) { + return false; + } + + const int dataSize = m_pWaveform->getDataSize(); + if (dataSize == 0 ) { + return false; + } + + if (!m_pWaveformSourceImage) { + //waveform pixmap twice the height of the viewport to be scalable by total_gain + //we keep full range waveform data to scale it on paint + m_pWaveformSourceImage = new QImage(dataSize / 2, 2 * 255, QImage::Format_ARGB32_Premultiplied); + m_pWaveformSourceImage->fill(QColor(0,0,0,0).value()); + } + + const int waveformCompletion = m_pWaveform->getCompletion(); // always multiple of 2 + // test if there is some new to draw (at least of pixel width) + const int completionIncrement = waveformCompletion - m_actualCompletion; + + int visiblePixelIncrement = completionIncrement * width() / dataSize; + if (completionIncrement < 2 || visiblePixelIncrement == 0) { + return false; + } + + if (!m_pWaveform->getMutex()->tryLock()) { + return false; + } + + const int nextCompletion = m_actualCompletion + completionIncrement; + + //qDebug() << "WOverview::drawNextPixmapPart() - nextCompletion:" << nextCompletion + // << "m_actualCompletion:" << m_actualCompletion + // << "waveformCompletion:" << waveformCompletion + // << "completionIncrement:" << completionIncrement; + + + QPainter painter(m_pWaveformSourceImage); + painter.translate(0.0,(double)m_pWaveformSourceImage->height()/2.0); + + QColor lowColor = m_signalColors.getLowColor(); + QPen lowColorPen(QBrush(lowColor), 1); + + QColor midColor = m_signalColors.getMidColor(); + QPen midColorPen(QBrush(midColor), 1); + + QColor highColor = m_signalColors.getHighColor(); + QPen highColorPen(QBrush(highColor), 1); + + for (currentCompletion = m_actualCompletion; + currentCompletion < nextCompletion; currentCompletion += 2) { + unsigned char lowNeg = m_pWaveform->getLow(currentCompletion); + unsigned char lowPos = m_pWaveform->getLow(currentCompletion+1); + if (lowPos || lowNeg) { + painter.setPen(lowColorPen); + painter.drawLine(QPoint(currentCompletion / 2, -lowNeg), + QPoint(currentCompletion / 2, lowPos)); + } + } + + for (currentCompletion = m_actualCompletion; + currentCompletion < nextCompletion; currentCompletion += 2) { + painter.setPen(midColorPen); + painter.drawLine(QPoint(currentCompletion / 2, - m_pWaveform->getMid(currentCompletion)), + QPoint(currentCompletion / 2, m_pWaveform->getMid(currentCompletion+1))); + } + + for (currentCompletion = m_actualCompletion; + currentCompletion < nextCompletion; currentCompletion += 2) { + painter.setPen(highColorPen); + painter.drawLine(QPoint(currentCompletion / 2, - m_pWaveform->getHigh(currentCompletion)), + QPoint(currentCompletion / 2, m_pWaveform->getHigh(currentCompletion+1))); + } + + //evaluate waveform ratio peak + + for (currentCompletion = m_actualCompletion; + currentCompletion < nextCompletion; currentCompletion += 2) { + m_waveformPeak = math_max(m_waveformPeak, (float)m_pWaveform->getAll(currentCompletion)); + m_waveformPeak = math_max(m_waveformPeak, (float)m_pWaveform->getAll(currentCompletion+1)); + } + + m_actualCompletion = nextCompletion; + m_waveformImageScaled = QImage(); + m_diffGain = 0; + + //test if the complete waveform is done + if (m_actualCompletion >= dataSize - 2) { + m_pixmapDone = true; + //qDebug() << "m_waveformPeakRatio" << m_waveformPeak; + } + + m_pWaveform->getMutex()->unlock(); + return true; +} diff --git a/src/widget/woverviewlmh.h b/src/widget/woverviewlmh.h new file mode 100644 index 0000000000..b0a433e776 --- /dev/null +++ b/src/widget/woverviewlmh.h @@ -0,0 +1,15 @@ +#ifndef WOVERVIEWLMH_H +#define WOVERVIEWLMH_H + +#include "widget/woverview.h" + +class WOverviewLMH : public WOverview +{ + public: + WOverviewLMH(const char *pGroup, ConfigObject* pConfig, QWidget * parent); + + private: + virtual bool drawNextPixmapPart(); +}; + +#endif // WOVERVIEWLMH_H -- cgit v1.2.3