summaryrefslogtreecommitdiffstats
path: root/qt-ui/qtwaitingspinner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/qtwaitingspinner.cpp')
-rw-r--r--qt-ui/qtwaitingspinner.cpp288
1 files changed, 0 insertions, 288 deletions
diff --git a/qt-ui/qtwaitingspinner.cpp b/qt-ui/qtwaitingspinner.cpp
deleted file mode 100644
index 14e8669b0..000000000
--- a/qt-ui/qtwaitingspinner.cpp
+++ /dev/null
@@ -1,288 +0,0 @@
-
-/* Original Work Copyright (c) 2012-2014 Alexander Turkin
- Modified 2014 by William Hallatt
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-#include <cmath>
-#include <algorithm>
-
-#include <QPainter>
-#include <QTimer>
-
-#include "qtwaitingspinner.h"
-
-/*----------------------------------------------------------------------------*/
-
-// Defaults
-const QColor c_color(Qt::black);
-const qreal c_roundness(70.0);
-const qreal c_minTrailOpacity(15.0);
-const qreal c_trailFadePercentage(70.0);
-const int c_lines(12);
-const int c_lineLength(10);
-const int c_lineWidth(5);
-const int c_innerRadius(10);
-const int c_revPerSec(1);
-
-/*----------------------------------------------------------------------------*/
-
-QtWaitingSpinner::QtWaitingSpinner(QWidget *parent)
- : QWidget(parent),
-
- // Configurable settings.
- m_color(c_color), m_roundness(c_roundness),
- m_minTrailOpacity(c_minTrailOpacity),
- m_trailFadePercentage(c_trailFadePercentage), m_revPerSec(c_revPerSec),
- m_numberOfLines(c_lines), m_lineLength(c_lineLength + c_lineWidth),
- m_lineWidth(c_lineWidth), m_innerRadius(c_innerRadius),
-
- // Other
- m_timer(NULL), m_parent(parent), m_centreOnParent(false),
- m_currentCounter(0), m_isSpinning(false) {
- initialise();
-}
-
-/*----------------------------------------------------------------------------*/
-
-QtWaitingSpinner::QtWaitingSpinner(Qt::WindowModality modality, QWidget *parent,
- bool centreOnParent)
- : QWidget(parent, Qt::Dialog | Qt::FramelessWindowHint),
-
- // Configurable settings.
- m_color(c_color), m_roundness(c_roundness),
- m_minTrailOpacity(c_minTrailOpacity),
- m_trailFadePercentage(c_trailFadePercentage), m_revPerSec(c_revPerSec),
- m_numberOfLines(c_lines), m_lineLength(c_lineLength + c_lineWidth),
- m_lineWidth(c_lineWidth), m_innerRadius(c_innerRadius),
-
- // Other
- m_timer(NULL), m_parent(parent), m_centreOnParent(centreOnParent),
- m_currentCounter(0) {
- initialise();
-
- // We need to set the window modality AFTER we've hidden the
- // widget for the first time since changing this property while
- // the widget is visible has no effect.
- this->setWindowModality(modality);
- this->setAttribute(Qt::WA_TranslucentBackground);
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::initialise() {
- m_timer = new QTimer(this);
- connect(m_timer, SIGNAL(timeout()), this, SLOT(rotate()));
- updateSize();
- updateTimer();
- this->hide();
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::paintEvent(QPaintEvent * /*ev*/) {
- QPainter painter(this);
- painter.fillRect(this->rect(), Qt::transparent);
- painter.setRenderHint(QPainter::Antialiasing, true);
-
- if (m_currentCounter >= m_numberOfLines) {
- m_currentCounter = 0;
- }
- painter.setPen(Qt::NoPen);
- for (int i = 0; i < m_numberOfLines; ++i) {
- painter.save();
- painter.translate(m_innerRadius + m_lineLength,
- m_innerRadius + m_lineLength);
- qreal rotateAngle =
- static_cast<qreal>(360 * i) / static_cast<qreal>(m_numberOfLines);
- painter.rotate(rotateAngle);
- painter.translate(m_innerRadius, 0);
- int distance =
- lineCountDistanceFromPrimary(i, m_currentCounter, m_numberOfLines);
- QColor color =
- currentLineColor(distance, m_numberOfLines, m_trailFadePercentage,
- m_minTrailOpacity, m_color);
- painter.setBrush(color);
- // TODO improve the way rounded rect is painted
- painter.drawRoundedRect(
- QRect(0, -m_lineWidth / 2, m_lineLength, m_lineWidth), m_roundness,
- m_roundness, Qt::RelativeSize);
- painter.restore();
- }
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::start() {
- updatePosition();
- m_isSpinning = true;
- this->show();
- if (!m_timer->isActive()) {
- m_timer->start();
- m_currentCounter = 0;
- }
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::stop() {
- m_isSpinning = false;
- this->hide();
- if (m_timer->isActive()) {
- m_timer->stop();
- m_currentCounter = 0;
- }
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setNumberOfLines(int lines) {
- m_numberOfLines = lines;
- m_currentCounter = 0;
- updateTimer();
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setLineLength(int length) {
- m_lineLength = length;
- updateSize();
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setLineWidth(int width) {
- m_lineWidth = width;
- updateSize();
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setInnerRadius(int radius) {
- m_innerRadius = radius;
- updateSize();
-}
-
-/*----------------------------------------------------------------------------*/
-
-bool QtWaitingSpinner::isSpinning() const { return m_isSpinning; }
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setRoundness(qreal roundness) {
- m_roundness = std::max(0.0, std::min(100.0, roundness));
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setColor(QColor color) { m_color = color; }
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setRevolutionsPerSecond(int rps) {
- m_revPerSec = rps;
- updateTimer();
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setTrailFadePercentage(qreal trail) {
- m_trailFadePercentage = trail;
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::setMinimumTrailOpacity(qreal minOpacity) {
- m_minTrailOpacity = minOpacity;
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::rotate() {
- ++m_currentCounter;
- if (m_currentCounter >= m_numberOfLines) {
- m_currentCounter = 0;
- }
- update();
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::updateSize() {
- int size = (m_innerRadius + m_lineLength) * 2;
- setFixedSize(size, size);
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::updateTimer() {
- m_timer->setInterval(calculateTimerInterval(m_numberOfLines, m_revPerSec));
-}
-
-/*----------------------------------------------------------------------------*/
-
-void QtWaitingSpinner::updatePosition() {
- if (m_parent && m_centreOnParent) {
- this->move(m_parent->frameGeometry().topLeft() + m_parent->rect().center() -
- this->rect().center());
- }
-}
-
-/*----------------------------------------------------------------------------*/
-
-int QtWaitingSpinner::calculateTimerInterval(int lines, int speed) {
- return 1000 / (lines * speed);
-}
-
-/*----------------------------------------------------------------------------*/
-
-int QtWaitingSpinner::lineCountDistanceFromPrimary(int current, int primary,
- int totalNrOfLines) {
- int distance = primary - current;
- if (distance < 0) {
- distance += totalNrOfLines;
- }
- return distance;
-}
-
-/*----------------------------------------------------------------------------*/
-
-QColor QtWaitingSpinner::currentLineColor(int countDistance, int totalNrOfLines,
- qreal trailFadePerc, qreal minOpacity,
- QColor color) {
- if (countDistance == 0) {
- return color;
- }
- const qreal minAlphaF = minOpacity / 100.0;
- int distanceThreshold =
- static_cast<int>(ceil((totalNrOfLines - 1) * trailFadePerc / 100.0));
- if (countDistance > distanceThreshold) {
- color.setAlphaF(minAlphaF);
- } else {
- qreal alphaDiff = color.alphaF() - minAlphaF;
- qreal gradient = alphaDiff / static_cast<qreal>(distanceThreshold + 1);
- qreal resultAlpha = color.alphaF() - gradient * countDistance;
-
- // If alpha is out of bounds, clip it.
- resultAlpha = std::min(1.0, std::max(0.0, resultAlpha));
- color.setAlphaF(resultAlpha);
- }
- return color;
-}
-
-/*----------------------------------------------------------------------------*/