aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-12-15 17:43:33 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-12-15 17:43:33 +0000
commit51d1d6b83ebe4c235b23aeea78ae4f3ace12acfd (patch)
treeb904f10595d5fbdd5b9cf6eb6499ad47f9642a1f /src/plugins
parent5d2325d2e4915a0d33c942c35fbb32b9dc535b80 (diff)
downloadqmmp-51d1d6b83ebe4c235b23aeea78ae4f3ace12acfd.tar.gz
qmmp-51d1d6b83ebe4c235b23aeea78ae4f3ace12acfd.tar.bz2
qmmp-51d1d6b83ebe4c235b23aeea78ae4f3ace12acfd.zip
qsui: added scope visualization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9140 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Ui/qsui/qsuivisualization.cpp85
-rw-r--r--src/plugins/Ui/qsui/qsuivisualization.h20
2 files changed, 95 insertions, 10 deletions
diff --git a/src/plugins/Ui/qsui/qsuivisualization.cpp b/src/plugins/Ui/qsui/qsuivisualization.cpp
index f9757add9..880e8651c 100644
--- a/src/plugins/Ui/qsui/qsuivisualization.cpp
+++ b/src/plugins/Ui/qsui/qsuivisualization.cpp
@@ -34,7 +34,8 @@
QSUIVisualization::QSUIVisualization(QWidget *parent) : Visual (parent)
{
m_pixLabel = new QLabel(this);
- m_drawer = new QSUiAnalyzer;
+ //m_drawer = new QSUiAnalyzer;
+ m_drawer = new QSUiScope;
createMenu();
m_timer = new QTimer (this);
@@ -266,6 +267,78 @@ void QSUIVisualization::stop()
clear();
}
+QSUiScope::~QSUiScope()
+{
+ if(m_intern_vis_data)
+ delete [] m_intern_vis_data;
+}
+
+void QSUiScope::process(float *buffer, int width, int height)
+{
+ int step = (QMMP_VISUAL_NODE_SIZE << 8) / width;
+ int pos = 0;
+
+ if(m_width != width )
+ {
+ m_width = width;
+
+ if(m_intern_vis_data)
+ delete [] m_intern_vis_data;
+
+ m_intern_vis_data = new int[m_width]{ 0 };
+ }
+
+ m_heigt = height;
+
+ for(int i = 0; i < width; ++i)
+ {
+ pos += step;
+ m_intern_vis_data[i] = int(buffer[pos >> 8] * height / 2);
+ m_intern_vis_data[i] = qBound(-height / 2, m_intern_vis_data[i], height / 2);
+ }
+}
+
+void QSUiScope::draw(QPainter *p, int offset)
+{
+ p->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+
+ for (int i = 0; i < m_width - 1; ++i)
+ {
+ int h1 = m_heigt / 2 - m_intern_vis_data[i];
+ int h2 = m_heigt / 2 - m_intern_vis_data[i+1];
+ QPen pen;
+ pen.setWidthF(1.5);
+ pen.setJoinStyle(Qt::RoundJoin);
+ pen.setCapStyle(Qt::RoundCap);
+
+ if (abs(m_intern_vis_data[i]) <= m_heigt / 6)
+ pen.setColor(m_color1);
+ else if (abs(m_intern_vis_data[i]) > m_heigt / 6 && abs(m_intern_vis_data[i]) <= m_heigt / 3)
+ pen.setColor(m_color2);
+ else
+ pen.setColor(m_color3);
+
+ p->setPen(pen);
+ p->drawLine(i + offset, h1, offset + i + 1, h2);
+ }
+}
+
+void QSUiScope::clear()
+{
+ m_width = 0;
+ m_heigt = 0;
+}
+
+void QSUiScope::readSettings()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("Simple");
+ m_color1.setNamedColor(settings.value("vis_color1", "#BECBFF").toString());
+ m_color2.setNamedColor(settings.value("vis_color2", "#BECBFF").toString());
+ m_color3.setNamedColor(settings.value("vis_color3", "#BECBFF").toString());
+ settings.endGroup();
+}
+
QSUiVisualDrawer::~QSUiVisualDrawer()
{}
@@ -295,14 +368,9 @@ void QSUiAnalyzer::process(float *buffer, int width, int height)
if(m_x_scale)
delete [] m_x_scale;
m_peaks = new double[m_cols];
- m_intern_vis_data = new double[m_cols];
- m_x_scale = new int[m_cols + 1];
+ m_intern_vis_data = new double[m_cols] { 0 };
+ m_x_scale = new int[m_cols + 1] { 0 };
- for(int i = 0; i < m_cols; ++i)
- {
- m_peaks[i] = 0;
- m_intern_vis_data[i] = 0;
- }
for(int i = 0; i < m_cols + 1; ++i)
m_x_scale[i] = pow(pow(255.0, 1.0 / m_cols), i);
}
@@ -390,7 +458,6 @@ void QSUiAnalyzer::readSettings()
m_color1.setNamedColor(settings.value("vis_color1", "#BECBFF").toString());
m_color2.setNamedColor(settings.value("vis_color2", "#BECBFF").toString());
m_color3.setNamedColor(settings.value("vis_color3", "#BECBFF").toString());
- m_bgColor.setNamedColor(settings.value("vis_bg_color", "Black").toString());
m_peakColor.setNamedColor(settings.value("vis_peak_color", "#DDDDDD").toString());
m_cell_size = QSize(14, 8);
m_peaks_falloff = settings.value("vis_peaks_falloff", 0.2).toDouble();
diff --git a/src/plugins/Ui/qsui/qsuivisualization.h b/src/plugins/Ui/qsui/qsuivisualization.h
index 7884ea242..a8a4b67a5 100644
--- a/src/plugins/Ui/qsui/qsuivisualization.h
+++ b/src/plugins/Ui/qsui/qsuivisualization.h
@@ -90,6 +90,25 @@ public:
virtual void readSettings() = 0;
};
+class QSUiScope : public QSUiVisualDrawer
+{
+public:
+ QSUiScope() {}
+ virtual ~QSUiScope();
+ void process(float *buffer, int width, int height) override;
+ void draw(QPainter *p, int offset) override;
+ void clear() override;
+ void readSettings() override;
+
+private:
+ int m_width = 0;
+ int m_heigt = 0;
+ int *m_intern_vis_data = nullptr;
+ QColor m_color1;
+ QColor m_color2;
+ QColor m_color3;
+};
+
class QSUiAnalyzer : public QSUiVisualDrawer
{
public:
@@ -105,7 +124,6 @@ private:
QColor m_color1;
QColor m_color2;
QColor m_color3;
- QColor m_bgColor;
QColor m_peakColor;
QSize m_cell_size;
double m_peaks_falloff;