void M2Object::update(size_t deltaTime, size_t accumTime) { deltaTime_ = deltaTime; globalTime = accumTime; if (animManager->IsPaused()) deltaTime = 0; if (!animManager->IsParticlePaused()) deltaTime = animManager->GetTimeDiff(); if (animated) animManager->Tick(deltaTime); if (animated) { if (ind) { animating(animManager->GetAnim()); } else { if (!animcalc) { animating(animManager->GetAnim()); } } } UpdateParticles(deltaTime/1000.0f); }
void IntroPwdCheck::paintEvent(QPaintEvent *e) { bool trivial = (rect() == e->rect()); QPainter p(this); if (!trivial) { p.setClipRect(e->rect()); } if (trivial || e->rect().intersects(textRect)) { p.setFont(st::introHeaderFont->f); p.drawText(textRect, lang(lng_signin_title), style::al_top); p.setFont(st::introFont->f); p.drawText(textRect, lang(_pwdField.isHidden() ? lng_signin_recover_desc : lng_signin_desc), style::al_bottom); } if (_pwdField.isHidden()) { if (!_emailPattern.isEmpty()) { p.drawText(QRect(textRect.x(), _pwdField.y() + _pwdField.height() + st::introFinishSkip, textRect.width(), st::introFont->height), _emailPattern, style::al_top); } } else if (!_hint.isEmpty()) { _hintText.drawElided(p, _pwdField.x(), _pwdField.y() + _pwdField.height() + st::introFinishSkip, _pwdField.width(), 1, style::al_top); } if (animating() || error.length()) { p.setOpacity(errorAlpha.current()); QRect errRect((width() - st::introErrWidth) / 2, (_pwdField.y() + _pwdField.height() + st::introFinishSkip + st::introFont->height + _next.y() - st::introErrHeight) / 2, st::introErrWidth, st::introErrHeight); p.setFont(st::introErrFont->f); p.setPen(st::introErrColor->p); p.drawText(errRect, error, QTextOption(style::al_center)); p.setOpacity(1); } }
void IntroPhone::paintEvent(QPaintEvent *e) { bool trivial = (rect() == e->rect()); QPainter p(this); if (!trivial) { p.setClipRect(e->rect()); } if (trivial || e->rect().intersects(textRect)) { p.setFont(st::introHeaderFont->f); p.drawText(textRect, lang(lng_phone_title), style::al_top); p.setFont(st::introFont->f); p.drawText(textRect, lang(lng_phone_desc), style::al_bottom); } if (animating() || error.length()) { int32 errorY = _showSignup ? ((phone.y() + phone.height() + next.y() - st::introErrFont->height) / 2) : (next.y() + next.height() + st::introErrTop); p.setOpacity(errorAlpha.current()); p.setFont(st::introErrFont->f); p.setPen(st::introErrColor->p); p.drawText(QRect(textRect.x(), errorY, textRect.width(), st::introErrFont->height), error, style::al_top); if (_signup.isHidden() && _showSignup) { p.drawPixmap(_signup.x(), _signup.y(), _signupCache); } } }
void IntroCode::paintEvent(QPaintEvent *e) { bool trivial = (rect() == e->rect()); QPainter p(this); if (!trivial) { p.setClipRect(e->rect()); } if (trivial || e->rect().intersects(textRect)) { p.setFont(st::introHeaderFont->f); p.drawText(textRect, intro()->getPhone(), style::al_top); p.setFont(st::introFont->f); p.drawText(textRect, lang(lng_code_desc), style::al_bottom); } QString callText = lang(lng_code_calling); if (waitTillCall >= 3600) { callText = lang(lng_code_call).arg(QString("%1:%2").arg(waitTillCall / 3600).arg((waitTillCall / 60) % 60, 2, 10, QChar('0'))).arg(waitTillCall % 60, 2, 10, QChar('0')); } else if (waitTillCall > 0) { callText = lang(lng_code_call).arg(waitTillCall / 60).arg(waitTillCall % 60, 2, 10, QChar('0')); } else if (waitTillCall < 0) { callText = lang(lng_code_called); } p.drawText(QRect(textRect.left(), code.y() + code.height() + st::introCallSkip, st::introTextSize.width(), st::introErrHeight), callText, style::al_center); if (animating() || error.length()) { p.setOpacity(errorAlpha.current()); p.setFont(st::introErrFont->f); p.setPen(st::introErrColor->p); p.drawText(QRect(textRect.left(), next.y() + next.height() + st::introErrTop, st::introTextSize.width(), st::introErrHeight), error, style::al_center); } }
void PasscodeWidget::paintEvent(QPaintEvent *e) { bool trivial = (rect() == e->rect()); setMouseTracking(true); QPainter p(this); if (!trivial) { p.setClipRect(e->rect()); } if (animating()) { p.setOpacity(a_bgAlpha.current()); p.drawPixmap(a_bgCoord.current(), 0, _bgAnimCache); p.setOpacity(a_alpha.current()); p.drawPixmap(a_coord.current(), 0, _animCache); } else { p.fillRect(rect(), st::setBG->b); p.setFont(st::passcodeHeaderFont->f); p.drawText(QRect(0, _passcode.y() - st::passcodeHeaderHeight, width(), st::passcodeHeaderHeight), lang(lng_passcode_enter), style::al_center); if (!_error.isEmpty()) { p.setFont(st::boxFont->f); p.setPen(st::setErrColor->p); p.drawText(QRect(0, _passcode.y() + _passcode.height(), width(), st::usernameSkip), _error, style::al_center); } } }
void FlatInput::paintEvent(QPaintEvent *e) { QPainter p(this); p.fillRect(rect(), a_bgColor.current()); if (_st.borderWidth) { p.setPen(a_borderColor.current()); for (uint32 i = 0; i < _st.borderWidth; ++i) { p.drawRect(i, i, width() - 2 * i - 1, height() - 2 * i - 1); } } if (_st.imgRect.pxWidth()) { p.drawPixmap(_st.imgPos, App::sprite(), _st.imgRect); } bool phDraw = _phVisible; if (animating()) { p.setOpacity(a_phAlpha.current()); phDraw = true; } if (phDraw) { p.save(); p.setClipRect(rect()); QRect phRect(_st.textMrg.left() + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); p.setFont(_st.font->f); p.setPen(a_phColor.current()); p.drawText(phRect, _ph, QTextOption(_st.phAlign)); p.restore(); } QLineEdit::paintEvent(e); }
void ContextMenu::fastHide() { if (animating()) { anim::stop(this); } a_opacity = anim::fvalue(0, 0); hideFinish(); }
void FlatInput::paintEvent(QPaintEvent *e) { Painter p(this); p.fillRect(rect(), a_bgColor.current()); if (_st.borderWidth) { QBrush b(a_borderColor.current()); p.fillRect(0, 0, width() - _st.borderWidth, _st.borderWidth, b); p.fillRect(width() - _st.borderWidth, 0, _st.borderWidth, height() - _st.borderWidth, b); p.fillRect(_st.borderWidth, height() - _st.borderWidth, width() - _st.borderWidth, _st.borderWidth, b); p.fillRect(0, _st.borderWidth, _st.borderWidth, height() - _st.borderWidth, b); } if (_st.imgRect.pxWidth()) { p.drawPixmap(_st.imgPos, App::sprite(), _st.imgRect); } bool phDraw = _phVisible; if (animating()) { p.setOpacity(a_phAlpha.current()); phDraw = true; } if (phDraw) { p.save(); p.setClipRect(rect()); QRect phRect(placeholderRect()); phRect.moveLeft(phRect.left() + a_phLeft.current()); phPrepare(p); p.drawText(phRect, _ph, QTextOption(_st.phAlign)); p.restore(); } QLineEdit::paintEvent(e); }
void CountrySelect::paintEvent(QPaintEvent *e) { bool trivial = (rect() == e->rect()); QPainter p(this); if (!trivial) { p.setClipRect(e->rect()); } p.setOpacity(st::layerAlpha * a_bgAlpha.current()); p.fillRect(rect(), st::layerBG->b); if (animating()) { p.setOpacity(a_alpha.current()); p.drawPixmap(a_coord.current() + _innerLeft, _innerTop, _cache); } else { p.setOpacity(1); QRect inner(_innerLeft, _innerTop, _innerWidth, _innerHeight); _shadow.paint(p, inner); if (trivial || e->rect().intersects(inner)) { // fill bg p.fillRect(inner, st::white->b); // paint shadows p.fillRect(_innerLeft, _innerTop + st::participantFilter.height, _innerWidth, st::scrollDef.topsh, st::scrollDef.shColor->b); // paint button sep p.fillRect(_innerLeft + st::btnSelectCancel.width, _innerTop + _innerHeight - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setPen(st::black->p); p.setFont(st::addContactTitleFont->f); p.drawText(_innerLeft + st::addContactTitlePos.x(), _innerTop + st::addContactTitlePos.y() + st::addContactTitleFont->ascent, lang(lng_country_select)); } } }
void SlideAnimation::paintFrame(Painter &p, int x, int y, int outerWidth) { auto dt = _animation.value(1.); if (!animating()) return; auto easeOut = anim::easeOutCirc(1., dt); auto easeIn = anim::easeInCirc(1., dt); auto arrivingAlpha = easeIn; auto departingAlpha = 1. - easeOut; auto leftCoord = (_slideLeft ? anim::interpolate(-_leftSnapshotWidth, 0, easeOut) : anim::interpolate(0, -_leftSnapshotWidth, easeIn)); auto leftAlpha = (_slideLeft ? arrivingAlpha : departingAlpha); auto rightCoord = (_slideLeft ? anim::interpolate(0, _rightSnapshotWidth, easeIn) : anim::interpolate(_rightSnapshotWidth, 0, easeOut)); auto rightAlpha = (_slideLeft ? departingAlpha : arrivingAlpha); if (_overflowHidden) { auto leftWidth = (_leftSnapshotWidth + leftCoord); if (leftWidth > 0) { p.setOpacity(leftAlpha); p.drawPixmap(x, y, leftWidth, _leftSnapshotHeight, _leftSnapshot, (_leftSnapshot.width() - leftWidth * cIntRetinaFactor()), 0, leftWidth * cIntRetinaFactor(), _leftSnapshot.height()); } auto rightWidth = _rightSnapshotWidth - rightCoord; if (rightWidth > 0) { p.setOpacity(rightAlpha); p.drawPixmap(x + rightCoord, y, _rightSnapshot, 0, 0, rightWidth * cIntRetinaFactor(), _rightSnapshot.height()); } } else { p.setOpacity(leftAlpha); p.drawPixmap(x + leftCoord, y, _leftSnapshot); p.setOpacity(rightAlpha); p.drawPixmap(x + rightCoord, y, _rightSnapshot); } }
void IntroWidget::keyPressEvent(QKeyEvent *e) { if (animating()) return; if (e->key() == Qt::Key_Escape) { stages[current]->onBack(); } else if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return || e->key() == Qt::Key_Space) { stages[current]->onNext(); } }
void IntroPwdCheck::showError(const QString &err) { if (!animating() && err == error) return; if (err.length()) { error = err; errorAlpha.start(1); } else { errorAlpha.start(0); } anim::start(this); }
void ProfileWidget::paintEvent(QPaintEvent *e) { QPainter p(this); if (animating() && _showing) { p.setOpacity(a_bgAlpha.current()); p.drawPixmap(a_bgCoord.current(), 0, _bgAnimCache); p.setOpacity(a_alpha.current()); p.drawPixmap(a_coord.current(), 0, _animCache); } else { p.fillRect(e->rect(), st::white->b); } }
void IntroCode::showError(const QString &err) { if (!err.isEmpty()) code.notaBene(); if (!animating() && err == error) return; if (err.length()) { error = err; errorAlpha.start(1); } else { errorAlpha.start(0); } anim::start(this); }
void IntroWidget::onDoneStateChanged(int oldState, ButtonStateChangeSource source) { if (animating()) return; if (source == ButtonByPress) { if (oldState & Button::StateDown) { cacheForHide = QPixmap(); } else { makeHideCache(); } } else if (source == ButtonByHover) { if (!createNext()) return; if (!cacheForShow) makeShowCache(current + 1); } }
void ProfileWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { if (animating() && _showing) { p.setOpacity(a_bgAlpha.current()); p.drawPixmap(a_bgCoord.current(), 0, _bgAnimTopBarCache); p.setOpacity(a_alpha.current()); p.drawPixmap(a_coord.current(), 0, _animTopBarCache); } else { p.setOpacity(st::topBarBackAlpha + (1 - st::topBarBackAlpha) * over); p.drawPixmap(QPoint(st::topBarBackPadding.left(), (st::topBarHeight - st::topBarBackImg.height()) / 2), App::sprite(), st::topBarBackImg); p.setFont(st::topBarBackFont->f); p.setPen(st::topBarBackColor->p); p.drawText(st::topBarBackPadding.left() + st::topBarBackImg.width() + st::topBarBackPadding.right(), (st::topBarHeight - st::titleFont->height) / 2 + st::titleFont->ascent, lang(peer()->chat ? lng_profile_group_info : lng_profile_info)); } }
void ContextMenu::paintEvent(QPaintEvent *e) { QPainter p(this); QPainter::CompositionMode m = p.compositionMode(); p.setCompositionMode(QPainter::CompositionMode_Source); p.fillRect(e->rect(), st::transparent->b); p.setCompositionMode(m); if (animating()) { p.setOpacity(a_opacity.current()); } QRect r(st::dropdownPadding.left(), st::dropdownPadding.top(), _width - st::dropdownPadding.left() - st::dropdownPadding.right(), _height - st::dropdownPadding.top() - st::dropdownPadding.bottom()); // draw shadow _shadow.paint(p, r); }
void IntroPhone::showError(const QString &err, bool signUp) { if (!err.isEmpty()) { phone.notaBene(); _showSignup = signUp; } if (!animating() && err == error) return; if (err.length()) { error = err; errorAlpha.start(1); } else { errorAlpha.start(0); } _signup.hide(); anim::start(this); }
void Settings::paintEvent(QPaintEvent *e) { QRect r(e->rect()); bool trivial = (rect() == r); QPainter p(this); if (!trivial) { p.setClipRect(r); } if (animating()) { p.setOpacity(a_bgAlpha.current()); p.drawPixmap(a_bgCoord.current(), 0, _bgAnimCache); p.setOpacity(a_alpha.current()); p.drawPixmap(a_coord.current(), 0, _animCache); } else { p.fillRect(rect(), st::setBG->b); } }
void FlatTextarea::paintEvent(QPaintEvent *e) { QPainter p(viewport()); p.fillRect(rect(), _st.bgColor->b); bool phDraw = _phVisible; if (animating()) { p.setOpacity(a_phAlpha.current()); phDraw = true; } if (phDraw) { p.save(); p.setClipRect(rect()); QRect phRect(_st.textMrg.left() - _fakeMargin + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() - _fakeMargin + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); p.setFont(_st.font->f); p.setPen(a_phColor.current()); p.drawText(phRect, _ph, QTextOption(_st.phAlign)); p.restore(); } QTextEdit::paintEvent(e); }
ProgressOverlay::ProgressOverlay(QWidget *parent) : QWidget(parent), prevAnimationDirection(QAbstractAnimation::Backward) { setAttribute(Qt::WA_TransparentForMouseEvents); bar = new QProgressBar(this); bar->setTextVisible(true); hide(); effect = new QGraphicsOpacityEffect(this); setGraphicsEffect(effect); effect->setOpacity(0.0); animation = new QPropertyAnimation(effect, "opacity", effect); animation->setDuration(1000); animation->setStartValue(0.0); animation->setEndValue(1.0); connect(animation, SIGNAL(valueChanged(QVariant)), SLOT(animating(QVariant))); }
void CodeWidget::updateCallText() { auto text = ([this]() -> QString { if (getData()->codeByTelegram) { return QString(); } switch (_callStatus) { case Widget::Data::CallStatus::Waiting: { if (_callTimeout >= 3600) { return lng_code_call(lt_minutes, qsl("%1:%2").arg(_callTimeout / 3600).arg((_callTimeout / 60) % 60, 2, 10, QChar('0')), lt_seconds, qsl("%1").arg(_callTimeout % 60, 2, 10, QChar('0'))); } else { return lng_code_call(lt_minutes, QString::number(_callTimeout / 60), lt_seconds, qsl("%1").arg(_callTimeout % 60, 2, 10, QChar('0'))); } } break; case Widget::Data::CallStatus::Calling: return lang(lng_code_calling); case Widget::Data::CallStatus::Called: return lang(lng_code_called); } return QString(); })(); _callLabel->setText(text); _callLabel->setVisible(!text.isEmpty() && !animating()); }
void IntroWidget::paintEvent(QPaintEvent *e) { bool trivial = (rect() == e->rect()); setMouseTracking(true); QPainter p(this); if (!trivial) { p.setClipRect(e->rect()); } if (animating()) { if (visibilityChanging) { p.setOpacity(a_bgAlpha.current()); p.drawPixmap(a_bgCoord.current(), 0, _bgAnimCache); p.setOpacity(a_alpha.current()); p.drawPixmap(a_coord.current(), 0, _animCache); } else { p.setOpacity(cAlphaHide.current()); p.drawPixmap(stages[current]->x() + st::introSlideShift + xCoordHide.current(), stages[current]->y(), cacheForHide.width(), cacheForHide.height(), cacheForHide); p.setOpacity(cAlphaShow.current()); p.drawPixmap(stages[current + moving]->x() + st::introSlideShift + xCoordShow.current(), stages[current + moving]->y(), cacheForShow.width(), cacheForShow.height(), cacheForShow); } } }
void ProgressOverlay::animationDone() { animating(QVariant(effect->opacity())); }