00001 #include <QPen>
00002 #include "videovisualcircles.h"
00003
00004 VideoVisualCircles::VideoVisualCircles(AudioPlayer *audio, MythRender *render)
00005 : VideoVisualSpectrum(audio, render)
00006 {
00007 m_numSamples = 32;
00008 }
00009
00010 void VideoVisualCircles::DrawPriv(MythPainter *painter, QPaintDevice* device)
00011 {
00012 if (!painter)
00013 return;
00014
00015 static const QBrush nobrush(Qt::NoBrush);
00016 int red = 0, green = 200;
00017 QPen pen(QColor(red, green, 0, 255));
00018 int count = m_scale.range();
00019 int incr = 200 / count;
00020 int rad = m_range;
00021 QRect circ(m_area.x() + m_area.width() / 2, m_area.y() + m_area.height() / 2,
00022 rad, rad);
00023 painter->Begin(device);
00024 for (int i = 0; i < count; i++, rad += m_range, red += incr, green -= incr)
00025 {
00026 double mag = abs((m_magnitudes[i] + m_magnitudes[i + count]) / 2.0);
00027 if (mag > 1.0)
00028 {
00029 pen.setWidth((int)mag);
00030 painter->DrawRoundRect(circ, rad, nobrush, pen, 200);
00031 }
00032 circ.adjust(-m_range, -m_range, m_range, m_range);
00033 pen.setColor(QColor(red, green, 0, 255));
00034 }
00035 painter->End();
00036 }
00037
00038 bool VideoVisualCircles::InitialisePriv(void)
00039 {
00040 m_range = (m_area.height() / 2) / (m_scale.range() -10);
00041 m_scaleFactor = 10.0;
00042 m_falloff = 1.0;
00043
00044 LOG(VB_GENERAL, LOG_INFO, DESC +
00045 QString("Initialised Circles with %1 circles.") .arg(m_scale.range()));
00046 return true;
00047 }
00048
00049 static class VideoVisualCirclesFactory : public VideoVisualFactory
00050 {
00051 public:
00052 const QString &name(void) const
00053 {
00054 static QString name("Circles");
00055 return name;
00056 }
00057
00058 VideoVisual *Create(AudioPlayer *audio,
00059 MythRender *render) const
00060 {
00061 return new VideoVisualCircles(audio, render);
00062 }
00063
00064 virtual bool SupportedRenderer(RenderType type)
00065 {
00066 return (type == kRenderOpenGL2 ||
00067 type == kRenderOpenGL2ES);
00068 }
00069 } VideoVisualCirclesFactory;