summaryrefslogtreecommitdiffstats
path: root/src/skin
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2021-06-01 23:40:01 +0200
committerJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2021-06-06 02:38:28 +0200
commite9a6080a172198b12106ae3830c9c34012f1c210 (patch)
tree589756b31807538b05e131f2ed7da40a259d08d3 /src/skin
parent64ef0680a3c9470adf17431453ad3d2e342b58a7 (diff)
QmlWaveformOverview: Add basic support for multiple renderer styles
Diffstat (limited to 'src/skin')
-rw-r--r--src/skin/qml/qmlwaveformoverview.cpp52
-rw-r--r--src/skin/qml/qmlwaveformoverview.h14
2 files changed, 45 insertions, 21 deletions
diff --git a/src/skin/qml/qmlwaveformoverview.cpp b/src/skin/qml/qmlwaveformoverview.cpp
index 7df43d2aa3..59f4f52dba 100644
--- a/src/skin/qml/qmlwaveformoverview.cpp
+++ b/src/skin/qml/qmlwaveformoverview.cpp
@@ -15,6 +15,7 @@ QmlWaveformOverview::QmlWaveformOverview(QQuickItem* parent)
: QQuickPaintedItem(parent),
m_pPlayer(nullptr),
m_channels(ChannelFlag::BothChannels),
+ m_renderer(Renderer::RGB),
m_colorHigh(0xFF0000),
m_colorMid(0x00FF00),
m_colorLow(0x0000FF) {
@@ -162,35 +163,46 @@ void QmlWaveformOverview::paint(QPainter* pPainter) {
pPainter->scale(width() / desiredWidth, height() / (2 * kDesiredChannelHeight));
}
+ Renderer renderer = m_renderer;
for (int currentCompletion = actualCompletion;
currentCompletion < nextCompletion;
currentCompletion += 2) {
- const double offsetX = currentCompletion / 2.0;
-
- if (channels.testFlag(ChannelFlag::LeftChannel)) {
- // Draw left channel
- const QColor leftColor = getPenColor(pWaveform, currentCompletion);
- if (leftColor.isValid()) {
- const uint8_t leftValue = pWaveform->getAll(currentCompletion);
- pPainter->setPen(leftColor);
- pPainter->drawLine(QPointF(offsetX, -leftValue), QPointF(offsetX, 0.0));
- }
+ switch (renderer) {
+ default:
+ drawRgb(pPainter, channels, pWaveform, currentCompletion);
}
+ }
+ pPainter->restore();
+}
- if (channels.testFlag(ChannelFlag::RightChannel)) {
- // Draw right channel
- QColor rightColor = getPenColor(pWaveform, currentCompletion + 1);
- if (rightColor.isValid()) {
- const uint8_t rightValue = pWaveform->getAll(currentCompletion + 1);
- pPainter->setPen(rightColor);
- pPainter->drawLine(QPointF(offsetX, 0.0), QPointF(offsetX, rightValue));
- }
+void QmlWaveformOverview::drawRgb(QPainter* pPainter,
+ Channels channels,
+ ConstWaveformPointer pWaveform,
+ int completion) const {
+ const double offsetX = completion / 2.0;
+
+ if (channels.testFlag(ChannelFlag::LeftChannel)) {
+ // Draw left channel
+ const QColor leftColor = getRgbPenColor(pWaveform, completion);
+ if (leftColor.isValid()) {
+ const uint8_t leftValue = pWaveform->getAll(completion);
+ pPainter->setPen(leftColor);
+ pPainter->drawLine(QPointF(offsetX, -leftValue), QPointF(offsetX, 0.0));
+ }
+ }
+
+ if (channels.testFlag(ChannelFlag::RightChannel)) {
+ // Draw right channel
+ QColor rightColor = getRgbPenColor(pWaveform, completion + 1);
+ if (rightColor.isValid()) {
+ const uint8_t rightValue = pWaveform->getAll(completion + 1);
+ pPainter->setPen(rightColor);
+ pPainter->drawLine(QPointF(offsetX, 0.0), QPointF(offsetX, rightValue));
}
}
- pPainter->restore();
}
-QColor QmlWaveformOverview::getPenColor(ConstWaveformPointer pWaveform, int completion) const {
+QColor QmlWaveformOverview::getRgbPenColor(ConstWaveformPointer pWaveform, int completion) const {
// Retrieve "raw" LMH values from waveform
qreal low = static_cast<qreal>(pWaveform->getLow(completion));
qreal mid = static_cast<qreal>(pWaveform->getMid(completion));
diff --git a/src/skin/qml/qmlwaveformoverview.h b/src/skin/qml/qmlwaveformoverview.h
index e12beb0396..de93fd4b54 100644
--- a/src/skin/qml/qmlwaveformoverview.h
+++ b/src/skin/qml/qmlwaveformoverview.h
@@ -19,6 +19,7 @@ class QmlWaveformOverview : public QQuickPaintedItem {
Q_PROPERTY(mixxx::skin::qml::QmlPlayerProxy* player READ getPlayer
WRITE setPlayer NOTIFY playerChanged)
Q_PROPERTY(Channels channels READ getChannels WRITE setChannels NOTIFY channelsChanged)
+ Q_PROPERTY(Renderer renderer MEMBER m_renderer NOTIFY rendererChanged)
Q_PROPERTY(QColor colorHigh MEMBER m_colorHigh NOTIFY colorHighChanged)
Q_PROPERTY(QColor colorMid MEMBER m_colorMid NOTIFY colorMidChanged)
Q_PROPERTY(QColor colorLow MEMBER m_colorLow NOTIFY colorLowChanged)
@@ -31,6 +32,11 @@ class QmlWaveformOverview : public QQuickPaintedItem {
};
Q_DECLARE_FLAGS(Channels, ChannelFlag)
+ enum class Renderer {
+ RGB = 1,
+ };
+ Q_ENUM(Renderer)
+
QmlWaveformOverview(QQuickItem* parent = nullptr);
void paint(QPainter* painter);
@@ -48,17 +54,23 @@ class QmlWaveformOverview : public QQuickPaintedItem {
signals:
void playerChanged();
void channelsChanged(mixxx::skin::qml::QmlWaveformOverview::Channels channels);
+ void rendererChanged(mixxx::skin::qml::QmlWaveformOverview::Renderer renderer);
void colorHighChanged(const QColor& color);
void colorMidChanged(const QColor& color);
void colorLowChanged(const QColor& color);
private:
void setCurrentTrack(TrackPointer pTrack);
- QColor getPenColor(ConstWaveformPointer pWaveform, int completion) const;
+ void drawRgb(QPainter* pPainter,
+ Channels channels,
+ ConstWaveformPointer pWaveform,
+ int completion) const;
+ QColor getRgbPenColor(ConstWaveformPointer pWaveform, int completion) const;
QmlPlayerProxy* m_pPlayer;
TrackPointer m_pCurrentTrack;
Channels m_channels;
+ Renderer m_renderer;
QColor m_colorHigh;
QColor m_colorMid;
QColor m_colorLow;