diff options
author | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2021-06-01 23:40:01 +0200 |
---|---|---|
committer | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2021-06-06 02:38:28 +0200 |
commit | e9a6080a172198b12106ae3830c9c34012f1c210 (patch) | |
tree | 589756b31807538b05e131f2ed7da40a259d08d3 /src/skin | |
parent | 64ef0680a3c9470adf17431453ad3d2e342b58a7 (diff) |
QmlWaveformOverview: Add basic support for multiple renderer styles
Diffstat (limited to 'src/skin')
-rw-r--r-- | src/skin/qml/qmlwaveformoverview.cpp | 52 | ||||
-rw-r--r-- | src/skin/qml/qmlwaveformoverview.h | 14 |
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; |