Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/waveform/waveformrenderer.h

Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines