Fix menu in case speed isn't controlled.

This commit is contained in:
John Preston 2024-10-28 10:58:30 +04:00
parent cbd2b8f428
commit 4d2cda0692
3 changed files with 43 additions and 21 deletions

View file

@ -740,9 +740,10 @@ SpeedController::SpeedController(
current->otherEnter();
}
});
setSpeed(_lookup(false));
_speed = _lookup(true);
if (const auto lookup = _lookup) {
setSpeed(lookup(false));
_speed = lookup(true);
}
}
rpl::producer<> SpeedController::saved() const {
@ -778,7 +779,9 @@ void SpeedController::setSpeed(float64 newSpeed) {
}
void SpeedController::save() {
_change(speed());
if (const auto change = _change) {
change(speed());
}
_saved.fire({});
}
@ -788,26 +791,33 @@ void SpeedController::setQuality(int quality) {
}
void SpeedController::fillMenu(not_null<Ui::DropdownMenu*> menu) {
FillSpeedMenu(
menu->menu(),
_st.menu,
_speedChanged.events_starting_with(speed()),
[=](float64 speed) { setSpeed(speed); save(); },
!_qualities.empty());
if (_lookup) {
FillSpeedMenu(
menu->menu(),
_st.menu,
_speedChanged.events_starting_with(speed()),
[=](float64 speed) { setSpeed(speed); save(); },
!_qualities.empty());
}
if (_qualities.empty()) {
return;
}
_quality = _lookupQuality();
const auto raw = menu->menu();
const auto &st = _st.menu;
raw->addSeparator(&st.dropdown.menu.separator);
if (_lookup) {
raw->addSeparator(&st.dropdown.menu.separator);
}
const auto add = [&](int quality) {
const auto text = quality ? u"%1p"_q.arg(quality) : u"Original"_q;
auto action = base::make_unique_q<Ui::Menu::Action>(
raw,
st.qualityMenu,
Ui::Menu::CreateAction(raw, text, [=] { _changeQuality(quality); }),
Ui::Menu::CreateAction(
raw,
text,
[=] { _changeQuality(quality); }),
nullptr,
nullptr);
const auto raw = action.get();

View file

@ -29,13 +29,14 @@ PlaybackControls::PlaybackControls(
not_null<Delegate*> delegate)
: RpWidget(parent)
, _delegate(delegate)
, _speedControllable(Media::Audio::SupportsSpeedControl())
, _qualitiesList(_delegate->playbackControlsQualities())
, _playPauseResume(this, st::mediaviewPlayButton)
, _playbackSlider(this, st::mediaviewPlayback)
, _playbackProgress(std::make_unique<PlaybackProgress>())
, _volumeToggle(this, st::mediaviewVolumeToggle)
, _volumeController(this, st::mediaviewPlayback)
, _speedToggle((Media::Audio::SupportsSpeedControl()
|| !_delegate->playbackControlsQualities().empty())
, _speedToggle((_speedControllable || !_qualitiesList.empty())
? object_ptr<Player::SettingsButton>(this, st::mediaviewSpeedButton)
: nullptr)
, _fullScreenToggle(this, st::mediaviewFullScreenButton)
@ -48,9 +49,15 @@ PlaybackControls::PlaybackControls(
_speedToggle->st(),
parent,
[=](bool) {},
[=](bool lastNonDefault) { return speedLookup(lastNonDefault); },
[=](float64 speed) { saveSpeed(speed); },
_delegate->playbackControlsQualities(),
(_speedControllable
? [=](bool lastNonDefault) {
return speedLookup(lastNonDefault);
}
: Fn<float64(bool)>()),
(_speedControllable
? [=](float64 speed) { saveSpeed(speed); }
: Fn<void(float64)>()),
_qualitiesList,
[=] { return _delegate->playbackControlsCurrentQuality(); },
[=](int quality) { saveQuality(quality); })
: nullptr)
@ -63,10 +70,12 @@ PlaybackControls::PlaybackControls(
fadeUpdated(opacity);
});
_speedController->menuToggledValue(
) | rpl::start_with_next([=](bool toggled) {
_speedToggle->setActive(toggled);
}, _speedToggle->lifetime());
if (const auto controller = _speedController.get()) {
controller->menuToggledValue(
) | rpl::start_with_next([=](bool toggled) {
_speedToggle->setActive(toggled);
}, _speedToggle->lifetime());
}
_pictureInPicture->addClickHandler([=] {
_delegate->playbackControlsToPictureInPicture();

View file

@ -98,6 +98,9 @@ private:
const not_null<Delegate*> _delegate;
bool _speedControllable = false;
std::vector<int> _qualitiesList;
bool _inFullScreen = false;
bool _showPause = false;
bool _childrenHidden = false;