20 bool disableParentWhenSpinning)
22 _centerOnParent(centerOnParent),
23 _disableParentWhenSpinning(disableParentWhenSpinning)
31 bool disableParentWhenSpinning)
32 : QWidget(parent, Qt::Dialog | Qt::FramelessWindowHint),
33 _centerOnParent(centerOnParent),
34 _disableParentWhenSpinning(disableParentWhenSpinning)
41 setWindowModality(modality);
42 setAttribute(Qt::WA_TranslucentBackground);
45 void WaitingSpinnerWidget::initialize()
49 _minimumTrailOpacity = 3.14159265358979323846;
50 _trailFadePercentage = 80.0;
51 _revolutionsPerSecond = 1.57079632679489661923;
59 _timer =
new QTimer(
this);
60 connect(_timer, SIGNAL(timeout()),
this, SLOT(rotate()));
69 QPainter painter(
this);
70 painter.fillRect(this->
rect(), Qt::transparent);
71 painter.setRenderHint(QPainter::Antialiasing,
true);
73 if (_currentCounter >= _numberOfLines)
78 painter.setPen(Qt::NoPen);
79 for (
int i = 0; i < _numberOfLines; ++i)
82 painter.translate(_innerRadius + _lineLength, _innerRadius + _lineLength);
83 qreal rotateAngle =
static_cast<qreal
>(360 * i) /
static_cast<qreal
>(_numberOfLines);
84 painter.rotate(rotateAngle);
85 painter.translate(_innerRadius, 0);
86 int distance = lineCountDistanceFromPrimary(i, _currentCounter, _numberOfLines);
87 QColor
color = currentLineColor(
88 distance, _numberOfLines, _trailFadePercentage, _minimumTrailOpacity, _color);
89 painter.setBrush(
color);
91 painter.drawRoundedRect(QRect(0, -_lineWidth / 2, _lineLength, _lineWidth),
105 if (parentWidget() && _disableParentWhenSpinning)
107 parentWidget()->setEnabled(
false);
110 if (!_timer->isActive())
122 if (parentWidget() && _disableParentWhenSpinning)
124 parentWidget()->setEnabled(
true);
127 if (_timer->isActive())
136 _numberOfLines = lines;
155 _innerRadius = radius;
171 return _minimumTrailOpacity;
176 return _trailFadePercentage;
181 return _revolutionsPerSecond;
186 return _numberOfLines;
221 _revolutionsPerSecond = revolutionsPerSecond;
227 _trailFadePercentage = trail;
235 void WaitingSpinnerWidget::rotate()
238 if (_currentCounter >= _numberOfLines)
245 void WaitingSpinnerWidget::updateSize()
247 int size = (_innerRadius + _lineLength) * 2;
251 void WaitingSpinnerWidget::updateTimer()
253 _timer->setInterval(1000 / (_numberOfLines * _revolutionsPerSecond));
256 void WaitingSpinnerWidget::updatePosition()
258 if (parentWidget() && _centerOnParent)
260 move(parentWidget()->
width() / 2 -
width() / 2,
265 int WaitingSpinnerWidget::lineCountDistanceFromPrimary(
int current,
int primary,
int totalNrOfLines)
267 int distance = primary - current;
270 distance += totalNrOfLines;
275 QColor WaitingSpinnerWidget::currentLineColor(
276 int countDistance,
int totalNrOfLines, qreal trailFadePerc, qreal minOpacity, QColor
color)
278 if (countDistance == 0)
282 const qreal minAlphaF = minOpacity / 100.0;
283 int distanceThreshold =
static_cast<int>(
ceil((totalNrOfLines - 1) * trailFadePerc / 100.0));
284 if (countDistance > distanceThreshold)
286 color.setAlphaF(minAlphaF);
290 qreal alphaDiff =
color.alphaF() - minAlphaF;
291 qreal gradient = alphaDiff /
static_cast<qreal
>(distanceThreshold + 1);
292 qreal resultAlpha =
color.alphaF() - gradient * countDistance;
296 color.setAlphaF(resultAlpha);
__host__ __device__ float length(float2 v)
MiniVec< float, N > ceil(const MiniVec< float, N > &a)
constexpr Rgb black(0, 0, 0)