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(