diff --git a/res/skins/LateNight/library.xml b/res/skins/LateNight/library.xml index dbcf6bd6c2de..2986825cd4e8 100644 --- a/res/skins/LateNight/library.xml +++ b/res/skins/LateNight/library.xml @@ -110,6 +110,10 @@ false 0.175 + + + diff --git a/src/library/tabledelegates/overviewdelegate.cpp b/src/library/tabledelegates/overviewdelegate.cpp index 5a03ef28271a..b2011a6731d0 100644 --- a/src/library/tabledelegates/overviewdelegate.cpp +++ b/src/library/tabledelegates/overviewdelegate.cpp @@ -59,6 +59,9 @@ void OverviewDelegate::slotTypeControlChanged(double v) { } m_type = type; + // Instantly update visible overviews so we get a live preview + // when changing the type in the preferences. + m_pTableView->update(); } /// Maybe request repaint via dataChanged() by BaseTrackTableModel diff --git a/src/skin/legacy/legacyskinparser.cpp b/src/skin/legacy/legacyskinparser.cpp index 4f4013412595..adf531e488d7 100644 --- a/src/skin/legacy/legacyskinparser.cpp +++ b/src/skin/legacy/legacyskinparser.cpp @@ -27,6 +27,8 @@ #include "util/timer.h" #include "util/valuetransformer.h" #include "util/xml.h" +#include "waveform/overviews/waveformoverviewrenderer.h" +#include "waveform/renderers/waveformsignalcolors.h" #include "waveform/vsyncthread.h" #include "waveform/waveformwidgetfactory.h" #include "widget/controlwidgetconnection.h" @@ -1580,6 +1582,17 @@ QWidget* LegacySkinParser::parseLibrary(const QDomElement& node) { BaseTrackTableModel::kApplyPlayedTrackColorDefault); BaseTrackTableModel::setApplyPlayedTrackColor(applyPlayedTrackColor); + // Get colors for the different render modes of the Overview column + WaveformSignalColors* pSignalColors = new WaveformSignalColors(); + pSignalColors->setup(node, *m_pContext); + WaveformOverviewRenderer::setRgbLowColor(pSignalColors->getRgbLowColor()); + WaveformOverviewRenderer::setRgbMidColor(pSignalColors->getRgbMidColor()); + WaveformOverviewRenderer::setRgbHighColor(pSignalColors->getRgbHighColor()); + WaveformOverviewRenderer::setFilteredLowColor(pSignalColors->getLowColor()); + WaveformOverviewRenderer::setFilteredMidColor(pSignalColors->getMidColor()); + WaveformOverviewRenderer::setFilteredHighColor(pSignalColors->getHighColor()); + WaveformOverviewRenderer::setSignalColor(pSignalColors->getSignalColor()); + // Connect Library search signals to the WLibrary connect(m_pLibrary, &Library::search, diff --git a/src/waveform/overviews/waveformoverviewrenderer.cpp b/src/waveform/overviews/waveformoverviewrenderer.cpp index dc4576aae3bb..959dbec3ca5c 100644 --- a/src/waveform/overviews/waveformoverviewrenderer.cpp +++ b/src/waveform/overviews/waveformoverviewrenderer.cpp @@ -5,6 +5,44 @@ #include "util/colorcomponents.h" #include "util/math.h" +QColor WaveformOverviewRenderer::s_rgbLowColor = defaultLowColor; +QColor WaveformOverviewRenderer::s_rgbMidColor = defaultMidColor; +QColor WaveformOverviewRenderer::s_rgbHighColor = defaultHighColor; + +QColor WaveformOverviewRenderer::s_filteredLowColor = defaultLowColor; +QColor WaveformOverviewRenderer::s_filteredMidColor = defaultMidColor; +QColor WaveformOverviewRenderer::s_filteredHighColor = defaultHighColor; + +QColor WaveformOverviewRenderer::s_signalColor = defaultSignalColor; + +void WaveformOverviewRenderer::setRgbLowColor(QColor color) { + s_rgbLowColor = color; +} + +void WaveformOverviewRenderer::setRgbMidColor(QColor color) { + s_rgbMidColor = color; +} + +void WaveformOverviewRenderer::setRgbHighColor(QColor color) { + s_rgbHighColor = color; +} + +void WaveformOverviewRenderer::setFilteredLowColor(QColor color) { + s_filteredLowColor = color; +} + +void WaveformOverviewRenderer::setFilteredMidColor(QColor color) { + s_filteredMidColor = color; +} + +void WaveformOverviewRenderer::setFilteredHighColor(QColor color) { + s_filteredHighColor = color; +} + +void WaveformOverviewRenderer::setSignalColor(QColor color) { + s_signalColor = color; +} + QImage WaveformOverviewRenderer::render(ConstWaveformPointer pWaveform, WOverview::Type type) { const int dataSize = pWaveform->getDataSize(); @@ -19,11 +57,27 @@ QImage WaveformOverviewRenderer::render(ConstWaveformPointer pWaveform, painter.translate(0.0, static_cast(image.height()) / 2.0); if (type == WOverview::Type::HSV) { - drawWaveformPartHSV(&painter, pWaveform, nullptr, dataSize); + drawWaveformPartHSV(&painter, + pWaveform, + nullptr, + dataSize, + s_signalColor); } else if (type == WOverview::Type::Filtered) { - drawWaveformPartLMH(&painter, pWaveform, nullptr, dataSize); + drawWaveformPartLMH(&painter, + pWaveform, + nullptr, + dataSize, + s_filteredLowColor, + s_filteredMidColor, + s_filteredHighColor); } else { - drawWaveformPartRGB(&painter, pWaveform, nullptr, dataSize); + drawWaveformPartRGB(&painter, + pWaveform, + nullptr, + dataSize, + s_rgbLowColor, + s_rgbMidColor, + s_rgbHighColor); } return image; diff --git a/src/waveform/overviews/waveformoverviewrenderer.h b/src/waveform/overviews/waveformoverviewrenderer.h index 3975d1c9e8bb..df1e1127df4b 100644 --- a/src/waveform/overviews/waveformoverviewrenderer.h +++ b/src/waveform/overviews/waveformoverviewrenderer.h @@ -16,21 +16,45 @@ class WaveformOverviewRenderer : public Singleton { ConstWaveformPointer pWaveform, int* start, int end, - QColor lowColor = Qt::red, - QColor midColor = Qt::green, - QColor highColor = Qt::blue); + QColor rgbLowColor, + QColor rgbMidColor, + QColor rgbHighColor); void drawWaveformPartLMH( QPainter* pPainter, ConstWaveformPointer pWaveform, int* start, int end, - QColor lowColor = Qt::red, - QColor midColor = Qt::green, - QColor highColor = Qt::blue); + QColor lowColor, + QColor midColor, + QColor highColor); void drawWaveformPartHSV( QPainter* pPainter, ConstWaveformPointer pWaveform, int* start, int end, - QColor lowColor = Qt::lightGray); + QColor lowColor); + + static void setRgbLowColor(QColor rgbLow); + static void setRgbMidColor(QColor color); + static void setRgbHighColor(QColor color); + static void setFilteredLowColor(QColor color); + static void setFilteredMidColor(QColor color); + static void setFilteredHighColor(QColor color); + static void setSignalColor(QColor color); + + static constexpr QColor defaultLowColor = QColor(255, 0, 0); + static constexpr QColor defaultMidColor = QColor(0, 255, 0); + static constexpr QColor defaultHighColor = QColor(0, 0, 255); + + static constexpr QColor defaultSignalColor = QColor(200, 200, 200); + + static QColor s_rgbLowColor; + static QColor s_rgbMidColor; + static QColor s_rgbHighColor; + + static QColor s_filteredLowColor; + static QColor s_filteredMidColor; + static QColor s_filteredHighColor; + + static QColor s_signalColor; }; diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index 102b058c3602..12269ca680d9 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -1438,7 +1438,7 @@ bool WOverview::drawNextPixmapPart() { pWaveform, &m_actualCompletion, nextCompletion, - m_signalColors.getLowColor()); + m_signalColors.getSignalColor()); } else { // Type::RGB: ScopedTimer t(QStringLiteral("WOverview::drawNextPixmapPartRGB")); WaveformOverviewRenderer::instance()->drawWaveformPartRGB(