mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-06 08:56:40 +00:00
VideoPlayer: Create submenu to set sizing mode
Also add icon to the sizing mode cycling button.
This commit is contained in:
parent
b33b950e45
commit
eef07a411b
|
@ -31,6 +31,15 @@ void VideoFrameWidget::set_bitmap(Gfx::Bitmap const* bitmap)
|
|||
update();
|
||||
}
|
||||
|
||||
void VideoFrameWidget::set_sizing_mode(VideoSizingMode value)
|
||||
{
|
||||
if (value == m_sizing_mode)
|
||||
return;
|
||||
m_sizing_mode = value;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void VideoFrameWidget::set_auto_resize(bool value)
|
||||
{
|
||||
m_auto_resize = value;
|
||||
|
|
|
@ -28,7 +28,7 @@ public:
|
|||
void set_bitmap(Gfx::Bitmap const*);
|
||||
Gfx::Bitmap const* bitmap() const { return m_bitmap.ptr(); }
|
||||
|
||||
void set_sizing_mode(VideoSizingMode value) { m_sizing_mode = value; }
|
||||
void set_sizing_mode(VideoSizingMode value);
|
||||
VideoSizingMode sizing_mode() const { return m_sizing_mode; }
|
||||
|
||||
void set_auto_resize(bool value);
|
||||
|
|
|
@ -69,9 +69,10 @@ ErrorOr<void> VideoPlayerWidget::setup_interface()
|
|||
toggle_pause();
|
||||
});
|
||||
|
||||
m_cycle_sizing_modes_action = GUI::Action::create("Sizing", [&](auto&) {
|
||||
cycle_sizing_modes();
|
||||
});
|
||||
m_cycle_sizing_modes_action = GUI::Action::create(
|
||||
"Sizing", TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/fit-image-to-view.png"sv)), [&](auto&) {
|
||||
cycle_sizing_modes();
|
||||
});
|
||||
|
||||
m_toggle_fullscreen_action = GUI::CommonActions::make_fullscreen_action([&](auto&) {
|
||||
toggle_fullscreen();
|
||||
|
@ -83,6 +84,22 @@ ErrorOr<void> VideoPlayerWidget::setup_interface()
|
|||
find_descendant_of_type_named<GUI::Button>("sizing")->set_action(*m_cycle_sizing_modes_action);
|
||||
find_descendant_of_type_named<GUI::Button>("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);
|
||||
});
|
||||
|
||||
m_size_fill_action = GUI::Action::create_checkable("Fi&ll", [&](auto&) {
|
||||
m_video_display->set_sizing_mode(VideoSizingMode::Fill);
|
||||
});
|
||||
|
||||
m_size_stretch_action = GUI::Action::create_checkable("&Stretch", [&](auto&) {
|
||||
m_video_display->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);
|
||||
});
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
|
@ -253,7 +270,27 @@ void VideoPlayerWidget::cycle_sizing_modes()
|
|||
auto sizing_mode = m_video_display->sizing_mode();
|
||||
sizing_mode = static_cast<VideoSizingMode>((to_underlying(sizing_mode) + 1) % to_underlying(VideoSizingMode::Sentinel));
|
||||
m_video_display->set_sizing_mode(sizing_mode);
|
||||
m_video_display->update();
|
||||
|
||||
switch (sizing_mode) {
|
||||
case VideoSizingMode::Fit:
|
||||
m_size_fit_action->set_checked(true);
|
||||
break;
|
||||
|
||||
case VideoSizingMode::Fill:
|
||||
m_size_fill_action->set_checked(true);
|
||||
break;
|
||||
|
||||
case VideoSizingMode::Stretch:
|
||||
m_size_stretch_action->set_checked(true);
|
||||
break;
|
||||
|
||||
case VideoSizingMode::FullSize:
|
||||
m_size_fullsize_action->set_checked(true);
|
||||
break;
|
||||
|
||||
case VideoSizingMode::Sentinel:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void VideoPlayerWidget::toggle_fullscreen()
|
||||
|
@ -318,6 +355,22 @@ ErrorOr<void> VideoPlayerWidget::initialize_menubar(GUI::Window& window)
|
|||
auto view_menu = TRY(window.try_add_menu("&View"));
|
||||
TRY(view_menu->try_add_action(*m_toggle_fullscreen_action));
|
||||
|
||||
auto sizing_mode_menu = TRY(view_menu->try_add_submenu("&Sizing mode"));
|
||||
sizing_mode_menu->set_icon(TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/fit-image-to-view.png"sv)));
|
||||
|
||||
m_sizing_mode_group = make<GUI::ActionGroup>();
|
||||
m_sizing_mode_group->set_exclusive(true);
|
||||
m_sizing_mode_group->add_action(*m_size_fit_action);
|
||||
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));
|
||||
TRY(sizing_mode_menu->try_add_action(*m_size_stretch_action));
|
||||
TRY(sizing_mode_menu->try_add_action(*m_size_fullsize_action));
|
||||
|
||||
// Help menu
|
||||
auto help_menu = TRY(window.try_add_menu("&Help"));
|
||||
TRY(help_menu->try_add_action(GUI::CommonActions::make_about_action("Video Player", TRY(GUI::Icon::try_create_default_icon("app-video-player"sv)), &window)));
|
||||
|
|
|
@ -70,6 +70,12 @@ private:
|
|||
|
||||
RefPtr<GUI::Action> m_toggle_fullscreen_action;
|
||||
|
||||
OwnPtr<GUI::ActionGroup> m_sizing_mode_group;
|
||||
RefPtr<GUI::Action> m_size_fit_action;
|
||||
RefPtr<GUI::Action> m_size_fill_action;
|
||||
RefPtr<GUI::Action> m_size_stretch_action;
|
||||
RefPtr<GUI::Action> m_size_fullsize_action;
|
||||
|
||||
OwnPtr<Video::PlaybackManager> m_playback_manager;
|
||||
|
||||
bool m_was_playing_before_seek { false };
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
@GUI::Button {
|
||||
name: "sizing"
|
||||
text: "..."
|
||||
icon: "/res/icons/16x16/fit-image-to-view.png"
|
||||
fixed_width: 24
|
||||
button_style: "Coolbar"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue