diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp index ccd2ddf486..7240cd0e1e 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp @@ -236,26 +236,6 @@ VoiceRecordBar::~VoiceRecordBar() { } } -void VoiceRecordBar::updateControlsGeometry(QSize size) { - _centerY = size.height() / 2; - { - const auto maxD = st::historyRecordSignalMax * 2; - const auto point = _centerY - st::historyRecordSignalMax; - _redCircleRect = { point, point, maxD, maxD }; - } - { - const auto durationLeft = _redCircleRect.x() - + _redCircleRect.width() - + st::historyRecordDurationSkip; - _durationRect = QRect( - durationLeft, - _redCircleRect.y(), - _cancelFont->width(FormatVoiceDuration(kMaxSamples)), - _redCircleRect.height()); - } - updateMessageGeometry(); -} - void VoiceRecordBar::updateMessageGeometry() { const auto left = _durationRect.x() + _durationRect.width() @@ -276,6 +256,14 @@ void VoiceRecordBar::updateMessageGeometry() { textHeight); } +void VoiceRecordBar::updateLockGeometry() { + const auto right = anim::interpolate( + -_lock->width(), + st::historyRecordLockPosition.x(), + _showLockAnimation.value(_lockShowing.current() ? 1. : 0.)); + _lock->moveToRight(right, _lock->y()); +} + void VoiceRecordBar::init() { hide(); // Keep VoiceRecordBar behind SendButton. @@ -291,7 +279,25 @@ void VoiceRecordBar::init() { sizeValue( ) | rpl::start_with_next([=](QSize size) { - updateControlsGeometry(size); + _centerY = size.height() / 2; + { + const auto maxD = st::historyRecordSignalMax * 2; + const auto point = _centerY - st::historyRecordSignalMax; + _redCircleRect = { point, point, maxD, maxD }; + } + { + const auto durationLeft = _redCircleRect.x() + + _redCircleRect.width() + + st::historyRecordDurationSkip; + const auto &ascent = _cancelFont->ascent; + _durationRect = QRect( + durationLeft, + _redCircleRect.y() - (ascent - _redCircleRect.height()) / 2, + _cancelFont->width(FormatVoiceDuration(kMaxSamples)), + ascent); + } + updateMessageGeometry(); + updateLockGeometry(); }, lifetime()); paintRequest( @@ -326,11 +332,7 @@ void VoiceRecordBar::init() { const auto duration = st::historyRecordLockShowDuration; _lock->show(); auto callback = [=](auto value) { - const auto right = anim::interpolate( - -_lock->width(), - st::historyRecordLockPosition.x(), - value); - _lock->moveToRight(right, _lock->y()); + updateLockGeometry(); if (value == 0. && !show) { _lock->hide(); } else if (value == 1. && show) { diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h index e96ea6583a..dfe60f1112 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h @@ -54,8 +54,8 @@ public: private: void init(); - void updateControlsGeometry(QSize size); void updateMessageGeometry(); + void updateLockGeometry(); void recordError(); void recordUpdated(quint16 level, int samples);