1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:47: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 = [&] {
auto number_opt = text().to_int();
if (number_opt.has_value()) {
set_current_number(number_opt.value(), false);
set_current_number(number_opt.value(), GUI::AllowCallback::No);
return;
}
@ -36,7 +36,7 @@ NumericInput::NumericInput()
}
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 = [&] {
@ -78,13 +78,13 @@ void NumericInput::on_focus_lost()
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)
return;
m_current_number = clamp(number, m_min_number, m_max_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);
}

View file

@ -18,7 +18,7 @@ public:
void set_min_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:
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&)
{
for (auto& map : m_rendered_page_list)

View file

@ -46,7 +46,7 @@ public:
virtual ~PDFViewer() override = default;
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; }
PDF::PDFErrorOr<void> set_document(RefPtr<PDF::Document>);

View file

@ -34,7 +34,7 @@ PDFViewerWidget::PDFViewerWidget()
m_viewer = splitter.add<PDFViewer>();
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);
@ -107,7 +107,6 @@ void PDFViewerWidget::initialize_toolbar(GUI::Toolbar& toolbar)
auto new_page_number = static_cast<u32>(number);
VERIFY(new_page_number >= 1 && new_page_number <= page_count);
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_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_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_go_to_prev_page_action->set_enabled(false);
m_go_to_next_page_action->set_enabled(document->get_page_count() > 1);