diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-12-15 17:43:33 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-12-15 17:43:33 +0000 |
| commit | 51d1d6b83ebe4c235b23aeea78ae4f3ace12acfd (patch) | |
| tree | b904f10595d5fbdd5b9cf6eb6499ad47f9642a1f | |
| parent | 5d2325d2e4915a0d33c942c35fbb32b9dc535b80 (diff) | |
| download | qmmp-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
| -rw-r--r-- | src/plugins/Ui/qsui/qsuivisualization.cpp | 85 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/qsuivisualization.h | 20 |
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; |
