summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/depends.py1
-rw-r--r--src/skin/legacyskinparser.cpp4
-rw-r--r--src/widget/woverview.cpp103
-rw-r--r--src/widget/woverview.h2
-rw-r--r--src/widget/woverviewlmh.cpp115
-rw-r--r--src/widget/woverviewlmh.h15
6 files changed, 134 insertions, 106 deletions
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<ConfigValue>* 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<ConfigValue>* pConfig, QWidget * parent);
+
+ private:
+ virtual bool drawNextPixmapPart();
+};
+
+#endif // WOVERVIEWLMH_H