summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authortimre13 <itorteli13@gmail.com>2023-02-24 18:18:01 +0100
committerLinus Groh <mail@linusgroh.de>2023-02-24 19:16:46 +0100
commitd7f348ab50f10bc06cfe2420bf0b10616ecc3c2a (patch)
treee301606243a1c46a16d18731aab6c1ef8c359251 /Userland
parent137972074277f0e782728d98267970dd5247cab1 (diff)
downloadserenity-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')
-rw-r--r--Userland/Applications/VideoPlayer/VideoFrameWidget.cpp6
-rw-r--r--Userland/Applications/VideoPlayer/VideoFrameWidget.h2
-rw-r--r--Userland/Applications/VideoPlayer/VideoPlayerWidget.cpp20
-rw-r--r--Userland/Applications/VideoPlayer/VideoPlayerWidget.h4
-rw-r--r--Userland/Applications/VideoPlayer/VideoPlayerWindow.gml10
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"
+ }
}
}
}