| 105 | } |
| 106 | |
| 107 | void CircleFillAnimator::fillOut() |
| 108 | { |
| 109 | // |
| 110 | // Прерываем выполнение, если клиент хочет повторить его |
| 111 | // |
| 112 | if (isAnimated() && isAnimatedBackward()) return; |
| 113 | setAnimatedBackward(); |
| 114 | |
| 115 | // |
| 116 | // Определим стартовые и финальные позиции для декораций |
| 117 | // |
| 118 | int startRadius = sqrt(widgetForFill()->height()*widgetForFill()->height() + widgetForFill()->width()*widgetForFill()->width()); |
| 119 | int finalRadius = 0; |
| 120 | |
| 121 | // |
| 122 | // Позиционируем декораторы |
| 123 | // |
| 124 | m_decorator->resize(widgetForFill()->size()); |
| 125 | m_decorator->move(0, 0); |
| 126 | m_decorator->show(); |
| 127 | m_decorator->raise(); |
| 128 | |
| 129 | // |
| 130 | // Анимируем виджет |
| 131 | // |
| 132 | if (m_animation->state() == QPropertyAnimation::Running) { |
| 133 | // |
| 134 | // ... если ещё не закончилась предыдущая анимация реверсируем её |
| 135 | // |
| 136 | m_animation->pause(); |
| 137 | m_animation->setDirection(QPropertyAnimation::Backward); |
| 138 | m_animation->resume(); |
| 139 | } else { |
| 140 | // |
| 141 | // ... если предыдущая анимация закончилась, запускаем новую анимацию |
| 142 | // |
| 143 | m_animation->setEasingCurve(QEasingCurve::OutQuart); |
| 144 | m_animation->setDirection(QPropertyAnimation::Forward); |
| 145 | m_animation->setStartValue(startRadius); |
| 146 | m_animation->setEndValue(finalRadius); |
| 147 | m_animation->start(); |
| 148 | } |
| 149 | } |
| 150 | |
| 151 | void CircleFillAnimator::hideDecorator() |
| 152 | { |