diff --git a/Userland/Applications/PDFViewer/PDFViewer.cpp b/Userland/Applications/PDFViewer/PDFViewer.cpp index f377466ca8..05b744b649 100644 --- a/Userland/Applications/PDFViewer/PDFViewer.cpp +++ b/Userland/Applications/PDFViewer/PDFViewer.cpp @@ -109,9 +109,8 @@ void PDFViewer::mousewheel_event(GUI::MouseEvent& event) scrollbar.decrease_slider_by(20); } } + update(); } - - update(); } void PDFViewer::timer_event(Core::TimerEvent&) @@ -125,14 +124,24 @@ void PDFViewer::timer_event(Core::TimerEvent&) void PDFViewer::zoom_in() { - if (m_zoom_level < number_of_zoom_levels - 1) + if (m_zoom_level < number_of_zoom_levels - 1) { m_zoom_level++; + update(); + } } void PDFViewer::zoom_out() { - if (m_zoom_level > 0) + if (m_zoom_level > 0) { m_zoom_level--; + update(); + } +} + +void PDFViewer::reset_zoom() +{ + m_zoom_level = initial_zoom_level; + update(); } RefPtr PDFViewer::render_page(const PDF::Page& page) diff --git a/Userland/Applications/PDFViewer/PDFViewer.h b/Userland/Applications/PDFViewer/PDFViewer.h index 3b0a04eef8..ab6690b8fd 100644 --- a/Userland/Applications/PDFViewer/PDFViewer.h +++ b/Userland/Applications/PDFViewer/PDFViewer.h @@ -49,6 +49,10 @@ public: Function on_page_change; + void zoom_in(); + void zoom_out(); + void reset_zoom(); + protected: PDFViewer(); @@ -60,9 +64,6 @@ private: RefPtr get_rendered_page(u32 index); RefPtr render_page(const PDF::Page&); - void zoom_in(); - void zoom_out(); - RefPtr m_document; u32 m_current_page_index { 0 }; Vector>> m_rendered_page_list; diff --git a/Userland/Applications/PDFViewer/PDFViewerWidget.cpp b/Userland/Applications/PDFViewer/PDFViewerWidget.cpp index aac25ba043..618dfd63b2 100644 --- a/Userland/Applications/PDFViewer/PDFViewerWidget.cpp +++ b/Userland/Applications/PDFViewer/PDFViewerWidget.cpp @@ -58,6 +58,10 @@ void PDFViewerWidget::initialize_menubar(GUI::Window& window) auto& view_menu = window.add_menu("&View"); view_menu.add_action(*m_toggle_sidebar_action); + view_menu.add_separator(); + view_menu.add_action(*m_zoom_in_action); + view_menu.add_action(*m_zoom_out_action); + view_menu.add_action(*m_reset_zoom_action); auto& help_menu = window.add_menu("&Help"); help_menu.add_action(GUI::CommonActions::make_about_action("PDF Viewer", GUI::Icon::default_icon("app-pdf-viewer"), &window)); @@ -111,6 +115,28 @@ void PDFViewerWidget::create_toolbar() }; m_total_page_label = toolbar.add(); + m_total_page_label->set_fixed_width(30); + toolbar.add_separator(); + + m_zoom_in_action = GUI::CommonActions::make_zoom_in_action([&](auto&) { + m_viewer->zoom_in(); + }); + + m_zoom_out_action = GUI::CommonActions::make_zoom_out_action([&](auto&) { + m_viewer->zoom_out(); + }); + + m_reset_zoom_action = GUI::CommonActions::make_reset_zoom_action([&](auto&) { + m_viewer->reset_zoom(); + }); + + m_zoom_in_action->set_enabled(false); + m_zoom_out_action->set_enabled(false); + m_reset_zoom_action->set_enabled(false); + + toolbar.add_action(*m_zoom_in_action); + toolbar.add_action(*m_zoom_out_action); + toolbar.add_action(*m_reset_zoom_action); } void PDFViewerWidget::open_file(int fd, String const& path) @@ -131,7 +157,6 @@ void PDFViewerWidget::open_file(int fd, String const& path) m_viewer->set_document(document); m_total_page_label->set_text(String::formatted("of {}", document->get_page_count())); - m_total_page_label->set_fixed_width(30); m_page_text_box->set_enabled(true); m_page_text_box->set_current_number(1, false); @@ -139,6 +164,9 @@ void PDFViewerWidget::open_file(int fd, String const& path) m_go_to_prev_page_action->set_enabled(false); m_go_to_next_page_action->set_enabled(document->get_page_count() > 1); m_toggle_sidebar_action->set_enabled(true); + m_zoom_in_action->set_enabled(true); + m_zoom_out_action->set_enabled(true); + m_reset_zoom_action->set_enabled(true); if (document->outline()) { auto outline = document->outline(); diff --git a/Userland/Applications/PDFViewer/PDFViewerWidget.h b/Userland/Applications/PDFViewer/PDFViewerWidget.h index 6fff990536..92840d3852 100644 --- a/Userland/Applications/PDFViewer/PDFViewerWidget.h +++ b/Userland/Applications/PDFViewer/PDFViewerWidget.h @@ -35,6 +35,10 @@ private: RefPtr m_go_to_prev_page_action; RefPtr m_go_to_next_page_action; RefPtr m_toggle_sidebar_action; + RefPtr m_zoom_in_action; + RefPtr m_zoom_out_action; + RefPtr m_reset_zoom_action; + bool m_sidebar_open { false }; ByteBuffer m_buffer; };