Vuo  2.0.2
VuoActivityIndicator.cc
Go to the documentation of this file.
1 
10 #include "VuoActivityIndicator.hh"
11 
19 {
20  this->ticks = ticks;
21 }
22 
26 QPixmap VuoActivityIndicator::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
27 {
28  QPixmap pixmap(size);
29 
30  // Allow paint() to set a transparent background.
31  QBitmap bitmap(size);
32  bitmap.clear();
33  pixmap.setMask(bitmap);
34 
35  QPainter painter(&pixmap);
36  paint(&painter, QRect(QPoint(0,0),size), mode, state);
37  return pixmap;
38 }
39 
45 void VuoActivityIndicator::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state)
46 {
47  painter->setRenderHint(QPainter::Antialiasing, true);
48 
49  painter->setBackground(Qt::transparent);
50  painter->eraseRect(rect);
51 
52  float outerRadius = 0.7f * std::min(rect.width(), rect.height()) / 2;
53  float innerRadius = 0.7f * outerRadius;
54  float penWidth = 0.3f * innerRadius;
55  int numLines = 12;
56 
57  for (int i = 0; i < numLines; ++i)
58  {
59  int alpha = (i + 1) / (float)numLines * 255.0f;
60  QPen pen(QColor(0, 0, 0, alpha), penWidth);
61  painter->setPen(pen);
62 
63  float radiansForSpoke = (i + ticks) / (float)numLines * 2.0f * M_PI;
64  QPointF innerRectCenter(innerRadius * cos(radiansForSpoke), innerRadius * sin(radiansForSpoke));
65  QPointF outerRectCenter(outerRadius * cos(radiansForSpoke), outerRadius * sin(radiansForSpoke));
66  painter->drawLine(rect.center() + innerRectCenter, rect.center() + outerRectCenter);
67  }
68 }
69 
73 QIconEngine * VuoActivityIndicator::clone() const
74 {
75  return NULL;
76 }