mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 15:43:55 +02:00
Improved duration text paint in VoiceRecordBar.
This commit is contained in:
parent
5c006002b6
commit
ebe1fa7408
2 changed files with 30 additions and 16 deletions
|
@ -30,10 +30,23 @@ constexpr auto kAudioVoiceMaxLength = 100 * 60; // 100 minutes
|
|||
constexpr auto kMaxSamples =
|
||||
::Media::Player::kDefaultFrequency * kAudioVoiceMaxLength;
|
||||
|
||||
constexpr auto kPrecision = 10;
|
||||
|
||||
[[nodiscard]] auto Duration(int samples) {
|
||||
return samples / ::Media::Player::kDefaultFrequency;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto FormatVoiceDuration(int samples) {
|
||||
const int duration = kPrecision
|
||||
* (float64(samples) / ::Media::Player::kDefaultFrequency);
|
||||
const auto durationString = Ui::FormatDurationText(duration / kPrecision);
|
||||
const auto decimalPart = duration % kPrecision;
|
||||
return QString("%1%2%3")
|
||||
.arg(durationString)
|
||||
.arg(QLocale::system().decimalPoint())
|
||||
.arg(decimalPart);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
VoiceRecordBar::VoiceRecordBar(
|
||||
|
@ -67,6 +80,16 @@ void VoiceRecordBar::updateControlsGeometry(QSize size) {
|
|||
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());
|
||||
}
|
||||
}
|
||||
|
||||
void VoiceRecordBar::init() {
|
||||
|
@ -197,7 +220,7 @@ void VoiceRecordBar::recordUpdated(quint16 level, int samples) {
|
|||
stop(samples > 0 && _inField.current());
|
||||
}
|
||||
Core::App().updateNonIdle();
|
||||
update();
|
||||
update(_durationRect);
|
||||
_sendActionUpdates.fire({ Api::SendProgressType::RecordVoice });
|
||||
}
|
||||
|
||||
|
@ -255,25 +278,15 @@ void VoiceRecordBar::drawRecording(Painter &p, float64 recordActive) {
|
|||
p.drawEllipse(center, radii, radii);
|
||||
}
|
||||
|
||||
const auto duration = Ui::FormatDurationText(Duration(_recordingSamples));
|
||||
const auto duration = FormatVoiceDuration(_recordingSamples);
|
||||
p.setFont(_cancelFont);
|
||||
p.setPen(st::historyRecordDurationFg);
|
||||
|
||||
const auto durationLeft = _redCircleRect.x()
|
||||
+ _redCircleRect.width()
|
||||
+ st::historyRecordDurationSkip;
|
||||
const auto durationWidth = _cancelFont->width(duration);
|
||||
p.drawText(
|
||||
QRect(
|
||||
durationLeft,
|
||||
_redCircleRect.y(),
|
||||
durationWidth,
|
||||
_redCircleRect.height()),
|
||||
style::al_left,
|
||||
duration);
|
||||
p.fillRect(_durationRect, Qt::red);
|
||||
p.drawText(_durationRect, style::al_left, duration);
|
||||
|
||||
const auto leftCancel = durationLeft
|
||||
+ durationWidth
|
||||
const auto leftCancel = _durationRect.x()
|
||||
+ _durationRect.width()
|
||||
+ ((_send->width() - st::historyRecordVoice.width()) / 2);
|
||||
const auto rightCancel = width() - _send->width();
|
||||
|
||||
|
|
|
@ -79,6 +79,7 @@ private:
|
|||
|
||||
int _centerY = 0;
|
||||
QRect _redCircleRect;
|
||||
QRect _durationRect;
|
||||
|
||||
rpl::variable<bool> _recording = false;
|
||||
rpl::variable<bool> _inField = false;
|
||||
|
|
Loading…
Add table
Reference in a new issue