From 1d120092cff03b40b1396a30b25793acf83386ad Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 3 Nov 2020 19:29:30 +0300 Subject: [PATCH] Fixed previous values resetting in VoiceRecordButton. --- .../history_view_voice_record_button.cpp | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) 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 148496977..e94604f94 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 @@ -126,6 +126,9 @@ public: void start(float64 to) { start(to, _duration); } + void reset() { + _to = _cur = _delta = 0.; + } float64 current() const { return _cur; @@ -201,6 +204,7 @@ public: void setValue(float64 to); void tick(float64 circleRadius, crl::time dt); + void reset(); void paint(Painter &p, QColor c); @@ -250,6 +254,7 @@ class RecordCircle final { public: RecordCircle(rpl::producer animationTicked); + void reset(); void setAmplitude(float64 value); void paint(Painter &p, QColor c); @@ -360,6 +365,21 @@ Wave::Wave( initFlingAnimation(std::move(animationTicked)); } +void Wave::reset() { + _incRandomAdditionals = false; + _isIdle = true; + _wasFling = false; + _flingRadius = 0.; + _idleRadius = 0.; + _idleRotation = 0.; + _lastRadius = 0.; + _rotation = 0.; + _sineAngleMax = 0.; + _waveAngle = 0.; + _waveDiff = 0.; + _levelValue.reset(); +} + void Wave::setValue(float64 to) { const auto duration = (to <= _levelValue.current()) ? _amplitudeOutAnimationDuration @@ -559,6 +579,12 @@ RecordCircle::RecordCircle(rpl::producer animationTicked) + kAmplitudeDiffFactorMax * kAnimationSpeedCircle) { } +void RecordCircle::reset() { + _majorWave->reset(); + _minorWave->reset(); + _levelValue.reset(); +} + void RecordCircle::setAmplitude(float64 value) { const auto to = std::min(kMaxAmplitude, value) / kMaxAmplitude; _levelValue.start(to); @@ -567,7 +593,6 @@ void RecordCircle::setAmplitude(float64 value) { } void RecordCircle::paint(Painter &p, QColor c) { - const auto dt = crl::now() - _lastUpdateTime; _levelValue.update(dt); @@ -655,13 +680,15 @@ void VoiceRecordButton::init() { rpl::merge( shownValue(), - _showProgress.value() | rpl::map(hasProgress) + _showProgress.value( + ) | rpl::map(hasProgress) | rpl::distinct_until_changed() ) | rpl::start_with_next([=](bool show) { setVisible(show); setMouseTracking(show); if (!show) { _recordingAnimation.stop(); _showProgress = 0.; + _recordCircle->reset(); } else { if (!_recordingAnimation.animating()) { _recordingAnimation.start();