LibPDF+PDFViewer: Extract Renderer::apply_page_rotation()

No behavior change.
This commit is contained in:
Nico Weber 2024-02-25 09:36:21 -05:00 committed by Andreas Kling
parent 5e9395b808
commit 03fab7089a
3 changed files with 15 additions and 9 deletions

View file

@ -350,15 +350,7 @@ PDF::PDFErrorOr<NonnullRefPtr<Gfx::Bitmap>> PDFViewer::render_page(u32 page_inde
return bitmap;
}
int rotation_count = ((page.rotate + m_rotations) / 90) % 4;
if (rotation_count == 1)
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::Clockwise));
else if (rotation_count == 2)
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::Flip));
else if (rotation_count == 3)
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::CounterClockwise));
return bitmap;
return TRY(PDF::Renderer::apply_page_rotation(bitmap, page, m_rotations));
}
PDF::PDFErrorOr<void> PDFViewer::cache_page_dimensions(bool recalculate_fixed_info)

View file

@ -50,6 +50,18 @@ PDFErrorsOr<void> Renderer::render(Document& document, Page const& page, RefPtr<
return Renderer(document, page, bitmap, background_color, rendering_preferences).render();
}
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Renderer::apply_page_rotation(NonnullRefPtr<Gfx::Bitmap> bitmap, Page const& page, int extra_degrees)
{
int rotation_count = ((page.rotate + extra_degrees) / 90) % 4;
if (rotation_count == 1)
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::Clockwise));
else if (rotation_count == 2)
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::Flip));
else if (rotation_count == 3)
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::CounterClockwise));
return bitmap;
}
static void rect_path(Gfx::Path& path, float x, float y, float width, float height)
{
path.move_to({ x, y });

View file

@ -104,6 +104,8 @@ class Renderer {
public:
static PDFErrorsOr<void> render(Document&, Page const&, RefPtr<Gfx::Bitmap>, Color background_color, RenderingPreferences preferences);
static ErrorOr<NonnullRefPtr<Gfx::Bitmap>> apply_page_rotation(NonnullRefPtr<Gfx::Bitmap>, Page const&, int extra_degrees = 0);
struct FontCacheKey {
NonnullRefPtr<DictObject> font_dictionary;
float font_size;