![]() |
Mixxx
|
00001 00002 #ifndef WAVEFORMRENDERER_H 00003 #define WAVEFORMRENDERER_H 00004 00005 #include <QColor> 00006 #include <QDomNode> 00007 #include <QList> 00008 #include <QMutex> 00009 #include <QPainter> 00010 #include <QPaintEvent> 00011 #include <QThread> 00012 #include <QTime> 00013 #include <QVector> 00014 00015 #include "defs.h" 00016 #include "trackinfoobject.h" 00017 00018 class ControlObjectThreadMain; 00019 class RenderObject; 00020 class WaveformRenderBackground; 00021 class WaveformRenderSignal; 00022 class WaveformRenderSignalPixmap; 00023 class WaveformRenderBeat; 00024 class WaveformRenderMark; 00025 class ControlObject; 00026 00027 class WaveformRenderer : public QThread { 00028 Q_OBJECT 00029 public: 00030 WaveformRenderer(const char* group); 00031 virtual ~WaveformRenderer(); 00032 00033 void resize(int w, int h); 00034 void draw(QPainter* pPainter, QPaintEvent *pEvent); 00035 void drawSignalPixmap(QPainter* p); 00036 void setup(QDomNode node); 00037 void precomputePixmap(); 00038 int getSubpixelsPerPixel(); 00039 int getPixelsPerSecond(); 00040 00041 public slots: 00042 void slotNewTrack(TrackPointer pTrack); 00043 void slotUnloadTrack(TrackPointer pTrack); 00044 void slotUpdateLatency(double latency); 00045 void slotUpdatePlayPos(double playpos); 00046 void slotUpdateRate(double rate); 00047 void slotUpdateRateRange(double rate_range); 00048 void slotUpdateRateDir(double rate_dir); 00049 00050 protected: 00051 void run(); 00052 00053 private: 00054 void setupControlObjects(); 00055 bool fetchWaveformFromTrack(); 00056 00057 const char* m_pGroup; 00058 int m_iWidth, m_iHeight; 00059 QColor bgColor, signalColor, colorMarker, colorBeat, colorCue; 00060 int m_iNumSamples; 00061 00062 int m_iPlayPosTime, m_iPlayPosTimeOld; 00063 QTime m_playPosTime, m_playPosTimeOld; 00064 double m_dPlayPos, m_dPlayPosOld, m_dTargetRate, m_dRate, m_dRateRange, m_dRateDir; 00065 int m_iRateAdjusting; 00066 int m_iDupes; 00067 double m_dPlayPosAdjust; 00068 int m_iLatency; 00069 00070 QVector<float> *m_pSampleBuffer; 00071 QPixmap *m_pPixmap; 00072 QImage m_pImage; 00073 00074 ControlObjectThreadMain *m_pLatency; 00075 ControlObjectThreadMain *m_pPlayPos; 00076 ControlObjectThreadMain *m_pRate; 00077 ControlObjectThreadMain *m_pRateRange; 00078 ControlObjectThreadMain *m_pRateDir; 00079 00080 ControlObject *m_pCOVisualResample; 00081 00082 WaveformRenderBackground *m_pRenderBackground; 00083 WaveformRenderSignal *m_pRenderSignal; 00084 WaveformRenderSignalPixmap *m_pRenderSignalPixmap; 00085 WaveformRenderBeat *m_pRenderBeat; 00086 00087 QList<RenderObject*> m_renderObjects; 00088 00089 const int m_iSubpixelsPerPixel; 00090 const int m_iPixelsPerSecond; 00091 TrackPointer m_pTrack; 00092 00093 bool m_bQuit; 00094 }; 00095 00096 #endif