mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 23:53:58 +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 =
|
constexpr auto kMaxSamples =
|
||||||
::Media::Player::kDefaultFrequency * kAudioVoiceMaxLength;
|
::Media::Player::kDefaultFrequency * kAudioVoiceMaxLength;
|
||||||
|
|
||||||
|
constexpr auto kPrecision = 10;
|
||||||
|
|
||||||
[[nodiscard]] auto Duration(int samples) {
|
[[nodiscard]] auto Duration(int samples) {
|
||||||
return samples / ::Media::Player::kDefaultFrequency;
|
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
|
} // namespace
|
||||||
|
|
||||||
VoiceRecordBar::VoiceRecordBar(
|
VoiceRecordBar::VoiceRecordBar(
|
||||||
|
@ -67,6 +80,16 @@ void VoiceRecordBar::updateControlsGeometry(QSize size) {
|
||||||
const auto point = _centerY - st::historyRecordSignalMax;
|
const auto point = _centerY - st::historyRecordSignalMax;
|
||||||
_redCircleRect = { point, point, maxD, maxD };
|
_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() {
|
void VoiceRecordBar::init() {
|
||||||
|
@ -197,7 +220,7 @@ void VoiceRecordBar::recordUpdated(quint16 level, int samples) {
|
||||||
stop(samples > 0 && _inField.current());
|
stop(samples > 0 && _inField.current());
|
||||||
}
|
}
|
||||||
Core::App().updateNonIdle();
|
Core::App().updateNonIdle();
|
||||||
update();
|
update(_durationRect);
|
||||||
_sendActionUpdates.fire({ Api::SendProgressType::RecordVoice });
|
_sendActionUpdates.fire({ Api::SendProgressType::RecordVoice });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,25 +278,15 @@ void VoiceRecordBar::drawRecording(Painter &p, float64 recordActive) {
|
||||||
p.drawEllipse(center, radii, radii);
|
p.drawEllipse(center, radii, radii);
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto duration = Ui::FormatDurationText(Duration(_recordingSamples));
|
const auto duration = FormatVoiceDuration(_recordingSamples);
|
||||||
p.setFont(_cancelFont);
|
p.setFont(_cancelFont);
|
||||||
p.setPen(st::historyRecordDurationFg);
|
p.setPen(st::historyRecordDurationFg);
|
||||||
|
|
||||||
const auto durationLeft = _redCircleRect.x()
|
p.fillRect(_durationRect, Qt::red);
|
||||||
+ _redCircleRect.width()
|
p.drawText(_durationRect, style::al_left, duration);
|
||||||
+ st::historyRecordDurationSkip;
|
|
||||||
const auto durationWidth = _cancelFont->width(duration);
|
|
||||||
p.drawText(
|
|
||||||
QRect(
|
|
||||||
durationLeft,
|
|
||||||
_redCircleRect.y(),
|
|
||||||
durationWidth,
|
|
||||||
_redCircleRect.height()),
|
|
||||||
style::al_left,
|
|
||||||
duration);
|
|
||||||
|
|
||||||
const auto leftCancel = durationLeft
|
const auto leftCancel = _durationRect.x()
|
||||||
+ durationWidth
|
+ _durationRect.width()
|
||||||
+ ((_send->width() - st::historyRecordVoice.width()) / 2);
|
+ ((_send->width() - st::historyRecordVoice.width()) / 2);
|
||||||
const auto rightCancel = width() - _send->width();
|
const auto rightCancel = width() - _send->width();
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,7 @@ private:
|
||||||
|
|
||||||
int _centerY = 0;
|
int _centerY = 0;
|
||||||
QRect _redCircleRect;
|
QRect _redCircleRect;
|
||||||
|
QRect _durationRect;
|
||||||
|
|
||||||
rpl::variable<bool> _recording = false;
|
rpl::variable<bool> _recording = false;
|
||||||
rpl::variable<bool> _inField = false;
|
rpl::variable<bool> _inField = false;
|
||||||
|
|
Loading…
Add table
Reference in a new issue