1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:17:45 +00:00

PDFViewer: Respect page navigation features in multi-page mode

This includes the text box and the page up/down arrows.
This commit is contained in:
Matthew Olsson 2022-03-31 18:01:07 -07:00 committed by Andreas Kling
parent 3ecb41b7d9
commit baac720e13
5 changed files with 15 additions and 9 deletions

View file

@ -14,7 +14,7 @@ NumericInput::NumericInput()
on_change = [&] { on_change = [&] {
auto number_opt = text().to_int(); auto number_opt = text().to_int();
if (number_opt.has_value()) { if (number_opt.has_value()) {
set_current_number(number_opt.value(), false); set_current_number(number_opt.value(), GUI::AllowCallback::No);
return; return;
} }
@ -36,7 +36,7 @@ NumericInput::NumericInput()
} }
set_text(builder.to_string()); set_text(builder.to_string());
set_current_number(new_number_opt.value(), false); set_current_number(new_number_opt.value(), GUI::AllowCallback::No);
}; };
on_up_pressed = [&] { on_up_pressed = [&] {
@ -78,13 +78,13 @@ void NumericInput::on_focus_lost()
on_number_changed(m_current_number); on_number_changed(m_current_number);
} }
void NumericInput::set_current_number(i32 number, bool call_change_handler) void NumericInput::set_current_number(i32 number, GUI::AllowCallback allow_callback)
{ {
if (number == m_current_number) if (number == m_current_number)
return; return;
m_current_number = clamp(number, m_min_number, m_max_number); m_current_number = clamp(number, m_min_number, m_max_number);
set_text(String::number(m_current_number)); set_text(String::number(m_current_number));
if (on_number_changed && call_change_handler) if (on_number_changed && allow_callback == GUI::AllowCallback::Yes)
on_number_changed(m_current_number); on_number_changed(m_current_number);
} }

View file

@ -18,7 +18,7 @@ public:
void set_min_number(i32 number); void set_min_number(i32 number);
void set_max_number(i32 number); void set_max_number(i32 number);
void set_current_number(i32 number, bool call_change_handler = true); void set_current_number(i32 number, GUI::AllowCallback allow_callback = GUI::AllowCallback::Yes);
private: private:
NumericInput(); NumericInput();

View file

@ -155,6 +155,13 @@ void PDFViewer::paint_event(GUI::PaintEvent& event)
} }
} }
void PDFViewer::set_current_page(u32 current_page)
{
m_current_page_index = current_page;
vertical_scrollbar().set_value(m_page_dimension_cache.render_info[current_page].total_height_before_this_page);
update();
}
void PDFViewer::resize_event(GUI::ResizeEvent&) void PDFViewer::resize_event(GUI::ResizeEvent&)
{ {
for (auto& map : m_rendered_page_list) for (auto& map : m_rendered_page_list)

View file

@ -46,7 +46,7 @@ public:
virtual ~PDFViewer() override = default; virtual ~PDFViewer() override = default;
ALWAYS_INLINE u32 current_page() const { return m_current_page_index; } ALWAYS_INLINE u32 current_page() const { return m_current_page_index; }
ALWAYS_INLINE void set_current_page(u32 current_page) { m_current_page_index = current_page; } void set_current_page(u32 current_page);
ALWAYS_INLINE RefPtr<PDF::Document> const& document() const { return m_document; } ALWAYS_INLINE RefPtr<PDF::Document> const& document() const { return m_document; }
PDF::PDFErrorOr<void> set_document(RefPtr<PDF::Document>); PDF::PDFErrorOr<void> set_document(RefPtr<PDF::Document>);

View file

@ -34,7 +34,7 @@ PDFViewerWidget::PDFViewerWidget()
m_viewer = splitter.add<PDFViewer>(); m_viewer = splitter.add<PDFViewer>();
m_viewer->on_page_change = [&](auto new_page) { m_viewer->on_page_change = [&](auto new_page) {
m_page_text_box->set_current_number(new_page + 1); m_page_text_box->set_current_number(new_page + 1, GUI::AllowCallback::No);
}; };
initialize_toolbar(toolbar); initialize_toolbar(toolbar);
@ -107,7 +107,6 @@ void PDFViewerWidget::initialize_toolbar(GUI::Toolbar& toolbar)
auto new_page_number = static_cast<u32>(number); auto new_page_number = static_cast<u32>(number);
VERIFY(new_page_number >= 1 && new_page_number <= page_count); VERIFY(new_page_number >= 1 && new_page_number <= page_count);
m_viewer->set_current_page(new_page_number - 1); m_viewer->set_current_page(new_page_number - 1);
m_viewer->update();
m_go_to_prev_page_action->set_enabled(new_page_number > 1); m_go_to_prev_page_action->set_enabled(new_page_number > 1);
m_go_to_next_page_action->set_enabled(new_page_number < page_count); m_go_to_next_page_action->set_enabled(new_page_number < page_count);
}; };
@ -201,7 +200,7 @@ void PDFViewerWidget::open_file(Core::File& file)
m_total_page_label->set_text(String::formatted("of {}", document->get_page_count())); m_total_page_label->set_text(String::formatted("of {}", document->get_page_count()));
m_page_text_box->set_enabled(true); m_page_text_box->set_enabled(true);
m_page_text_box->set_current_number(1, false); m_page_text_box->set_current_number(1, GUI::AllowCallback::No);
m_page_text_box->set_max_number(document->get_page_count()); m_page_text_box->set_max_number(document->get_page_count());
m_go_to_prev_page_action->set_enabled(false); m_go_to_prev_page_action->set_enabled(false);
m_go_to_next_page_action->set_enabled(document->get_page_count() > 1); m_go_to_next_page_action->set_enabled(document->get_page_count() > 1);