diff --git a/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp b/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp index db0368f1496..3c1bb578805 100644 --- a/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp +++ b/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -87,21 +88,30 @@ ErrorOr VideoPlayerWidget::setup_interface() find_descendant_of_type_named("fullscreen")->set_action(*m_toggle_fullscreen_action); m_size_fit_action = GUI::Action::create_checkable("&Fit", [&](auto&) { - m_video_display->set_sizing_mode(VideoSizingMode::Fit); + set_sizing_mode(VideoSizingMode::Fit); }); m_size_fill_action = GUI::Action::create_checkable("Fi&ll", [&](auto&) { - m_video_display->set_sizing_mode(VideoSizingMode::Fill); + set_sizing_mode(VideoSizingMode::Fill); }); m_size_stretch_action = GUI::Action::create_checkable("&Stretch", [&](auto&) { - m_video_display->set_sizing_mode(VideoSizingMode::Stretch); + set_sizing_mode(VideoSizingMode::Stretch); }); m_size_fullsize_action = GUI::Action::create_checkable("F&ull Size", [&](auto&) { - m_video_display->set_sizing_mode(VideoSizingMode::FullSize); + set_sizing_mode(VideoSizingMode::FullSize); }); + // Load the current video sizing mode + // The default fallback for `read_u32` is 0, which is also our desired default for the sizing mode, VideoSizingMode::Fit + auto sizing_mode_value = Config::read_u32("VideoPlayer"sv, "Playback"sv, "SizingMode"sv); + if (sizing_mode_value >= to_underlying(VideoSizingMode::Sentinel)) { + sizing_mode_value = 0; + } + + set_sizing_mode(static_cast(sizing_mode_value)); + return {}; } @@ -290,9 +300,12 @@ void VideoPlayerWidget::cycle_sizing_modes() { auto sizing_mode = m_video_display->sizing_mode(); sizing_mode = static_cast((to_underlying(sizing_mode) + 1) % to_underlying(VideoSizingMode::Sentinel)); - m_video_display->set_sizing_mode(sizing_mode); + set_sizing_mode(sizing_mode); +} - switch (sizing_mode) { +void VideoPlayerWidget::set_current_sizing_mode_checked() +{ + switch (m_video_display->sizing_mode()) { case VideoSizingMode::Fit: m_size_fit_action->set_checked(true); break; @@ -349,6 +362,17 @@ void VideoPlayerWidget::set_seek_mode(Video::PlaybackManager::SeekMode seek_mode m_use_fast_seeking->set_checked(seek_mode == Video::PlaybackManager::SeekMode::Fast); } +void VideoPlayerWidget::set_sizing_mode(VideoSizingMode sizing_mode) +{ + if (m_video_display->sizing_mode() == sizing_mode) + return; + + m_video_display->set_sizing_mode(sizing_mode); + Config::write_u32("VideoPlayer"sv, "Playback"sv, "SizingMode"sv, to_underlying(sizing_mode)); + + set_current_sizing_mode_checked(); +} + ErrorOr VideoPlayerWidget::initialize_menubar(GUI::Window& window) { // File menu @@ -385,7 +409,6 @@ ErrorOr VideoPlayerWidget::initialize_menubar(GUI::Window& window) m_sizing_mode_group->add_action(*m_size_fill_action); m_sizing_mode_group->add_action(*m_size_stretch_action); m_sizing_mode_group->add_action(*m_size_fullsize_action); - m_size_fit_action->set_checked(true); TRY(sizing_mode_menu->try_add_action(*m_size_fit_action)); TRY(sizing_mode_menu->try_add_action(*m_size_fill_action)); diff --git a/Userland/Applications/VideoPlayer/VideoPlayerWidget.h b/Userland/Applications/VideoPlayer/VideoPlayerWidget.h index 20fdaacc540..739ec68efd6 100644 --- a/Userland/Applications/VideoPlayer/VideoPlayerWidget.h +++ b/Userland/Applications/VideoPlayer/VideoPlayerWidget.h @@ -35,6 +35,7 @@ public: Video::PlaybackManager::SeekMode seek_mode(); void set_seek_mode(Video::PlaybackManager::SeekMode seek_mode); + void set_sizing_mode(VideoSizingMode sizing_mode); ErrorOr initialize_menubar(GUI::Window&); @@ -48,6 +49,7 @@ private: void on_decoding_error(Video::DecoderError const&); void cycle_sizing_modes(); + void set_current_sizing_mode_checked(); void toggle_fullscreen();