strawberry-audio-player-win.../src/analyzer/blockanalyzer.h

86 lines
2.3 KiB
C
Raw Normal View History

2019-02-04 21:34:12 +01:00
/*
Strawberry Music Player
This file was part of Amarok.
Copyright 2003-2005, Max Howell <max.howell@methylblue.com>
Copyright 2005, Mark Kretschmann <markey@web.de>
Copyright 2009-2010, David Sansome <davidsansome@gmail.com>
Copyright 2010, 2014, John Maguire <john.maguire@gmail.com>
Strawberry is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Strawberry is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Strawberry. If not, see <http://www.gnu.org/licenses/>.
*/
2018-02-27 18:06:05 +01:00
#ifndef BLOCKANALYZER_H
#define BLOCKANALYZER_H
#include <QtGlobal>
#include <QObject>
2019-02-04 21:34:12 +01:00
#include <QVector>
#include <QString>
#include <QPixmap>
#include <QPainter>
#include <QPalette>
2018-02-27 18:06:05 +01:00
#include "analyzerbase.h"
2020-02-08 03:40:30 +01:00
class QWidget;
2018-02-27 18:06:05 +01:00
class QResizeEvent;
2023-04-22 19:45:21 +02:00
class BlockAnalyzer : public AnalyzerBase {
2018-02-27 18:06:05 +01:00
Q_OBJECT
2020-06-15 21:55:05 +02:00
2018-02-27 18:06:05 +01:00
public:
2020-06-26 22:41:38 +02:00
Q_INVOKABLE explicit BlockAnalyzer(QWidget*);
2018-02-27 18:06:05 +01:00
2021-03-21 18:53:02 +01:00
static const int kHeight;
static const int kWidth;
static const int kMinRows;
static const int kMinColumns;
static const int kMaxColumns;
static const int kFadeSize;
2018-02-27 18:06:05 +01:00
static const char *kName;
protected:
2023-04-22 19:45:21 +02:00
void transform(Scope&) override;
void analyze(QPainter &p, const Scope&, bool new_frame) override;
2020-06-15 21:55:05 +02:00
void resizeEvent(QResizeEvent*) override;
2018-02-27 18:06:05 +01:00
virtual void paletteChange(const QPalette&);
2020-06-15 21:55:05 +02:00
void framerateChanged() override;
2018-02-27 18:06:05 +01:00
void drawBackground();
void determineStep();
private:
QPixmap *bar() { return &barpixmap_; }
2018-02-27 18:06:05 +01:00
2022-03-22 21:09:05 +01:00
int columns_, rows_; // number of rows and columns of blocks
int y_; // y-offset from top of widget
QPixmap barpixmap_;
QPixmap topbarpixmap_;
QPixmap background_;
2018-02-27 18:06:05 +01:00
QPixmap canvas_;
2023-04-22 19:45:21 +02:00
Scope scope_; // so we don't create a vector every frame
2022-03-22 21:09:05 +01:00
QVector<double> store_; // current bar heights
2021-03-21 18:53:02 +01:00
QVector<double> yscale_;
2018-02-27 18:06:05 +01:00
2019-02-04 21:34:12 +01:00
QVector<QPixmap> fade_bars_;
2021-03-21 18:53:02 +01:00
QVector<int> fade_pos_;
2019-02-04 21:34:12 +01:00
QVector<int> fade_intensity_;
2018-02-27 18:06:05 +01:00
2021-03-21 18:53:02 +01:00
double step_; // rows to fall per frame
2018-02-27 18:06:05 +01:00
};
2019-02-04 21:34:12 +01:00
#endif // BLOCKANALYZER_H