diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.cpp b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.cpp index 2cd2da1637..68ff4f3022 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.cpp @@ -16,8 +16,6 @@ namespace HistoryView::Controls { namespace { -constexpr auto kRecordingUpdateDelta = crl::time(100); - constexpr auto kSegmentsCount = 12; constexpr auto kMajorDegreeOffset = 360 / kSegmentsCount; constexpr auto kSixtyDegrees = 60; @@ -196,7 +194,6 @@ private: bool _wasFling = false; float64 _amplitude = 0.; float64 _animateAmplitudeDiff = 0.; - float64 _animateAmplitudeSlowDiff = 0.; float64 _animateToAmplitude = 0.; float64 _flingRadius = 0.; float64 _idleRadius = 0.; @@ -204,7 +201,6 @@ private: float64 _lastRadius = 0.; float64 _rotation = 0.; float64 _sineAngleMax = 0.; - float64 _slowAmplitude = 0.; float64 _waveAngle = 0.; float64 _waveDiff = 0.; @@ -336,14 +332,11 @@ void Wave::setValue(float64 value) { _animateToAmplitude = value; const auto amplitudeDelta = (_animateToAmplitude - _amplitude); - const auto amplitudeSlowDelta = (_animateToAmplitude - _slowAmplitude); const auto factor = (_animateToAmplitude <= _amplitude) ? kAmplitudeDiffFactorMax : _amplitudeDiffFactor; _animateAmplitudeDiff = amplitudeDelta / (kMinDivider + factor * _amplitudeDiffSpeed); - _animateAmplitudeSlowDiff = amplitudeSlowDelta - / (kMinDivider + kAmplitudeDiffFactorMax * _amplitudeDiffSpeed); const auto idle = value < 0.1; if (_isIdle != idle && idle) { @@ -439,17 +432,6 @@ void Wave::tick(float64 circleRadius, crl::time lastUpdateTime) { } } - if (_animateToAmplitude != _slowAmplitude) { - _slowAmplitude += _animateAmplitudeSlowDiff * dt; - if (std::abs(_slowAmplitude - _amplitude) > 0.2) { - _slowAmplitude = _amplitude + (_slowAmplitude > _amplitude ? - 0.2 : -0.2); - } - ApplyTo(_slowAmplitude, - _animateToAmplitude, - _animateAmplitudeSlowDiff); - } - _idleRadius = circleRadius * kIdleRadiusFactor; { @@ -589,14 +571,14 @@ VoiceRecordButton::VoiceRecordButton( : AbstractButton(parent) , _recordCircle(std::make_unique( _recordAnimationTicked.events())) -, _height(st::historyRecordLevelMaxRadius * 2) -, _center(_height / 2) +, _center(st::historyRecordLevelMaxRadius) , _recordingAnimation([=](crl::time now) { update(); _recordAnimationTicked.fire_copy(now); return true; }) { - resize(_height, _height); + const auto h = st::historyRecordLevelMaxRadius * 2; + resize(h, h); std::move( leaveWindowEventProducer ) | rpl::start_with_next([=] { @@ -612,22 +594,6 @@ void VoiceRecordButton::requestPaintLevel(quint16 level) { update(); } -bool VoiceRecordButton::recordingAnimationCallback(crl::time now) { - const auto dt = anim::Disabled() - ? 1. - : ((now - _recordingAnimation.started()) - / float64(kRecordingUpdateDelta)); - if (dt >= 1.) { - _recordingLevel.finish(); - } else { - _recordingLevel.update(dt, anim::sineInOut); - } - if (!anim::Disabled()) { - update(); - } - return (dt < 1.); -} - void VoiceRecordButton::init() { const auto hasProgress = [](auto value) { return value != 0.; }; @@ -664,9 +630,7 @@ void VoiceRecordButton::init() { setVisible(show); setMouseTracking(show); if (!show) { - _recordingLevel = anim::value(); _recordingAnimation.stop(); - _showingLifetime.destroy(); _showProgress = 0.; } else { if (!_recordingAnimation.animating()) { @@ -714,33 +678,6 @@ bool VoiceRecordButton::inCircle(const QPoint &localPos) const { return ((dx * dx + dy * dy) <= (radii * radii)); } -void VoiceRecordButton::drawProgress(Painter &p) { - PainterHighQualityEnabler hq(p); - p.setPen(Qt::NoPen); - const auto color = anim::color( - st::historyRecordSignalColor, - st::historyRecordVoiceFgActive, - _colorProgress.current()); - p.setBrush(color); - - const auto progress = _showProgress.current(); - - const auto center = QPoint(_center, _center); - const int mainRadii = progress * st::historyRecordLevelMainRadius; - - { - p.setOpacity(.5); - const auto min = progress * st::historyRecordLevelMinRadius; - const auto max = progress * st::historyRecordLevelMaxRadius; - const auto delta = std::min(_recordingLevel.current() / 0x4000, 1.); - const auto radii = qRound(min + (delta * (max - min))); - p.drawEllipse(center, radii, radii); - p.setOpacity(1.); - } - - p.drawEllipse(center, mainRadii, mainRadii); -} - void VoiceRecordButton::requestPaintProgress(float64 progress) { _showProgress = progress; update(); diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.h b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.h index e44573d811..27d0068eba 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_button.h @@ -33,26 +33,18 @@ public: private: void init(); - void drawProgress(Painter &p); - rpl::event_stream _recordAnimationTicked; std::unique_ptr _recordCircle; - const int _height; const int _center; rpl::variable _showProgress = 0.; rpl::variable _colorProgress = 0.; rpl::variable _inCircle = false; - bool recordingAnimationCallback(crl::time now); - // This can animate for a very long time (like in music playing), // so it should be a Basic, not a Simple animation. Ui::Animations::Basic _recordingAnimation; - anim::value _recordingLevel; - - rpl::lifetime _showingLifetime; }; } // namespace HistoryView::Controls