1
1
/*
2
- * Copyright (c) 2021, Matthew Olsson <mattco@serenityos.org>
2
+ * Copyright (c) 2021-2022 , Matthew Olsson <mattco@serenityos.org>
3
3
* Copyright (c) 2022, the SerenityOS developers.
4
4
*
5
5
* SPDX-License-Identifier: BSD-2-Clause
8
8
#include " PDFViewer.h"
9
9
#include < AK/Array.h>
10
10
#include < LibGUI/Action.h>
11
+ #include < LibGUI/MessageBox.h>
11
12
#include < LibGUI/Painter.h>
12
13
#include < LibPDF/Renderer.h>
13
14
@@ -56,15 +57,15 @@ void PDFViewer::set_document(RefPtr<PDF::Document> document)
56
57
update ();
57
58
}
58
59
59
- RefPtr< Gfx::Bitmap> PDFViewer::get_rendered_page (u32 index)
60
+ PDF::PDFErrorOr<NonnullRefPtr< Gfx::Bitmap> > PDFViewer::get_rendered_page (u32 index)
60
61
{
61
62
auto & rendered_page_map = m_rendered_page_list[index];
62
63
auto existing_rendered_page = rendered_page_map.get (m_zoom_level);
63
64
if (existing_rendered_page.has_value () && existing_rendered_page.value ().rotation == m_rotations)
64
65
return existing_rendered_page.value ().bitmap ;
65
66
66
- // FIXME: Propogate errors in the Renderer
67
- auto rendered_page = render_page (MUST (m_document-> get_page (index) ));
67
+ auto page = TRY (m_document-> get_page (index));
68
+ auto rendered_page = TRY ( render_page (page ));
68
69
rendered_page_map.set (m_zoom_level, { rendered_page, m_rotations });
69
70
return rendered_page;
70
71
}
@@ -81,7 +82,14 @@ void PDFViewer::paint_event(GUI::PaintEvent& event)
81
82
if (!m_document)
82
83
return ;
83
84
84
- auto page = get_rendered_page (m_current_page_index);
85
+ auto maybe_page = get_rendered_page (m_current_page_index);
86
+ if (maybe_page.is_error ()) {
87
+ auto error = maybe_page.release_error ();
88
+ GUI::MessageBox::show_error (nullptr , String::formatted (" Error rendering page:\n {}" , error.message ()));
89
+ return ;
90
+ }
91
+
92
+ auto page = maybe_page.release_value ();
85
93
set_content_size (page->size ());
86
94
87
95
painter.translate (frame_thickness (), frame_thickness ());
@@ -196,7 +204,7 @@ void PDFViewer::rotate(int degrees)
196
204
update ();
197
205
}
198
206
199
- RefPtr< Gfx::Bitmap> PDFViewer::render_page (const PDF::Page& page)
207
+ PDF::PDFErrorOr<NonnullRefPtr< Gfx::Bitmap> > PDFViewer::render_page (const PDF::Page& page)
200
208
{
201
209
auto zoom_scale_factor = static_cast <float >(zoom_levels[m_zoom_level]) / 100 .0f ;
202
210
@@ -208,7 +216,7 @@ RefPtr<Gfx::Bitmap> PDFViewer::render_page(const PDF::Page& page)
208
216
auto width = height / page_scale_factor;
209
217
auto bitmap = Gfx::Bitmap::try_create (Gfx::BitmapFormat::BGRA8888, { width, height }).release_value_but_fixme_should_propagate_errors ();
210
218
211
- PDF::Renderer::render (*m_document, page, bitmap);
219
+ TRY ( PDF::Renderer::render (*m_document, page, bitmap) );
212
220
213
221
if (page.rotate + m_rotations != 0 ) {
214
222
int rotation_count = ((page.rotate + m_rotations) / 90 ) % 4 ;
0 commit comments