diff options
author | timre13 <itorteli13@gmail.com> | 2023-02-24 18:18:01 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2023-02-24 19:16:46 +0100 |
commit | d7f348ab50f10bc06cfe2420bf0b10616ecc3c2a (patch) | |
tree | e301606243a1c46a16d18731aab6c1ef8c359251 /Userland | |
parent | 137972074277f0e782728d98267970dd5247cab1 (diff) | |
download | serenity-d7f348ab50f10bc06cfe2420bf0b10616ecc3c2a.zip |
VideoPlayer: Add button and menu item to toggle fullscreen
Add a button to the bottom toolbar and a menu item to toggle fullscreen.
Also implement toggling fullscreen mode by double-clicking the video.
Diffstat (limited to 'Userland')
5 files changed, 42 insertions, 0 deletions
diff --git a/Userland/Applications/VideoPlayer/VideoFrameWidget.cpp b/Userland/Applications/VideoPlayer/VideoFrameWidget.cpp index a1602c1e9e..ce136e942f 100644 --- a/Userland/Applications/VideoPlayer/VideoFrameWidget.cpp +++ b/Userland/Applications/VideoPlayer/VideoFrameWidget.cpp @@ -45,6 +45,12 @@ void VideoFrameWidget::mousedown_event(GUI::MouseEvent&) on_click(); } +void VideoFrameWidget::doubleclick_event(GUI::MouseEvent&) +{ + if (on_doubleclick) + on_doubleclick(); +} + void VideoFrameWidget::paint_event(GUI::PaintEvent& event) { Frame::paint_event(event); diff --git a/Userland/Applications/VideoPlayer/VideoFrameWidget.h b/Userland/Applications/VideoPlayer/VideoFrameWidget.h index 0a59e662a3..e1f66d0356 100644 --- a/Userland/Applications/VideoPlayer/VideoFrameWidget.h +++ b/Userland/Applications/VideoPlayer/VideoFrameWidget.h @@ -35,11 +35,13 @@ public: bool auto_resize() const { return m_auto_resize; } Function<void()> on_click; + Function<void()> on_doubleclick; protected: explicit VideoFrameWidget(); virtual void mousedown_event(GUI::MouseEvent&) override; + virtual void doubleclick_event(GUI::MouseEvent&) override; virtual void paint_event(GUI::PaintEvent&) override; private: diff --git a/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp b/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp index 57e7ffe51d..ec17ebd676 100644 --- a/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp +++ b/Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp @@ -35,6 +35,7 @@ ErrorOr<void> VideoPlayerWidget::setup_interface() { m_video_display = find_descendant_of_type_named<VideoPlayer::VideoFrameWidget>("video_frame"); m_video_display->on_click = [&]() { toggle_pause(); }; + m_video_display->on_doubleclick = [&]() { toggle_fullscreen(); }; m_seek_slider = find_descendant_of_type_named<GUI::HorizontalSlider>("seek_slider"); m_seek_slider->on_drag_start = [&]() { @@ -72,10 +73,15 @@ ErrorOr<void> VideoPlayerWidget::setup_interface() cycle_sizing_modes(); }); + m_toggle_fullscreen_action = GUI::CommonActions::make_fullscreen_action([&](auto&) { + toggle_fullscreen(); + }); + m_timestamp_label = find_descendant_of_type_named<GUI::Label>("timestamp"); m_volume_slider = find_descendant_of_type_named<GUI::HorizontalSlider>("volume_slider"); find_descendant_of_type_named<GUI::Button>("playback")->set_action(*m_play_pause_action); 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); return {}; } @@ -250,6 +256,16 @@ void VideoPlayerWidget::cycle_sizing_modes() m_video_display->update(); } +void VideoPlayerWidget::toggle_fullscreen() +{ + auto* parent_window = window(); + parent_window->set_fullscreen(!parent_window->is_fullscreen()); + auto* bottom_container = find_descendant_of_type_named<GUI::Widget>("bottom_container"); + bottom_container->set_visible(!parent_window->is_fullscreen()); + auto* video_frame = find_descendant_of_type_named<VideoFrameWidget>("video_frame"); + video_frame->set_frame_thickness(parent_window->is_fullscreen() ? 0 : 2); +} + void VideoPlayerWidget::update_title() { StringBuilder string_builder; @@ -298,6 +314,10 @@ ErrorOr<void> VideoPlayerWidget::initialize_menubar(GUI::Window& window) TRY(playback_menu->try_add_action(*m_use_fast_seeking)); set_seek_mode(Video::PlaybackManager::DEFAULT_SEEK_MODE); + // View menu + auto view_menu = TRY(window.try_add_menu("&View")); + TRY(view_menu->try_add_action(*m_toggle_fullscreen_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))); diff --git a/Userland/Applications/VideoPlayer/VideoPlayerWidget.h b/Userland/Applications/VideoPlayer/VideoPlayerWidget.h index a72590d95e..9cd28be60c 100644 --- a/Userland/Applications/VideoPlayer/VideoPlayerWidget.h +++ b/Userland/Applications/VideoPlayer/VideoPlayerWidget.h @@ -49,6 +49,8 @@ private: void cycle_sizing_modes(); + void toggle_fullscreen(); + void event(Core::Event&) override; DeprecatedString m_path; @@ -66,6 +68,8 @@ private: RefPtr<GUI::Action> m_use_fast_seeking; + RefPtr<GUI::Action> m_toggle_fullscreen_action; + OwnPtr<Video::PlaybackManager> m_playback_manager; bool m_was_playing_before_seek { false }; diff --git a/Userland/Applications/VideoPlayer/VideoPlayerWindow.gml b/Userland/Applications/VideoPlayer/VideoPlayerWindow.gml index cf38f5307c..0a8ec72f6e 100644 --- a/Userland/Applications/VideoPlayer/VideoPlayerWindow.gml +++ b/Userland/Applications/VideoPlayer/VideoPlayerWindow.gml @@ -8,6 +8,7 @@ } @GUI::Widget { + name: "bottom_container" max_height: 50 layout: @GUI::VerticalBoxLayout {} @@ -53,6 +54,15 @@ max: 100 fixed_width: 100 } + + @GUI::VerticalSeparator {} + + @GUI::Button { + name: "fullscreen" + icon: "/res/icons/16x16/fullscreen.png" + fixed_width: 24 + button_style: "Coolbar" + } } } } |