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:
parent
3ecb41b7d9
commit
baac720e13
5 changed files with 15 additions and 9 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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>);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue