mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 22:48:11 +00:00
LibPDF/PDFViewer: Support rotated pages
This commit is contained in:
parent
fbe712e265
commit
d5f94aaa7b
3 changed files with 22 additions and 3 deletions
|
@ -87,5 +87,16 @@ RefPtr<Gfx::Bitmap> PDFViewer::render_page(const PDF::Page& page)
|
|||
auto bitmap = Gfx::Bitmap::create(Gfx::BitmapFormat::BGRA8888, { width, height });
|
||||
|
||||
PDF::Renderer::render(*m_document, page, bitmap);
|
||||
|
||||
if (page.rotate != 0) {
|
||||
int rotation_count = (page.rotate / 90) % 4;
|
||||
if (rotation_count == 3) {
|
||||
bitmap = bitmap->rotated(Gfx::RotationDirection::CounterClockwise);
|
||||
} else {
|
||||
for (int i = 0; i < rotation_count; i++)
|
||||
bitmap = bitmap->rotated(Gfx::RotationDirection::Clockwise);
|
||||
}
|
||||
}
|
||||
|
||||
return bitmap;
|
||||
}
|
||||
|
|
|
@ -88,7 +88,13 @@ Page Document::get_page(u32 index)
|
|||
if (raw_page_object->contains("UserUnit"))
|
||||
user_unit = raw_page_object->get_value("UserUnit").to_float();
|
||||
|
||||
Page page { move(resources), move(contents), media_box, crop_box, user_unit };
|
||||
int rotate = 0;
|
||||
if (raw_page_object->contains("Rotate")) {
|
||||
rotate = raw_page_object->get_value("Rotate").as_int();
|
||||
VERIFY(rotate % 90 == 0);
|
||||
}
|
||||
|
||||
Page page { move(resources), move(contents), media_box, crop_box, user_unit, rotate };
|
||||
m_pages.set(index, page);
|
||||
return page;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ struct Page {
|
|||
Rectangle media_box;
|
||||
Rectangle crop_box;
|
||||
float user_unit;
|
||||
int rotate;
|
||||
};
|
||||
|
||||
class Document final : public RefCounted<Document> {
|
||||
|
@ -121,13 +122,14 @@ template<>
|
|||
struct Formatter<PDF::Page> : Formatter<StringView> {
|
||||
void format(FormatBuilder& builder, const PDF::Page& page)
|
||||
{
|
||||
constexpr auto fmt_string = "Page {{\n resources={}\n contents={}\n media_box={}\n crop_box={}\n user_unit={}\n}}";
|
||||
constexpr auto fmt_string = "Page {{\n resources={}\n contents={}\n media_box={}\n crop_box={}\n user_unit={}\n rotate={}\n}}";
|
||||
auto str = String::formatted(fmt_string,
|
||||
page.resources->to_string(1),
|
||||
page.contents->to_string(1),
|
||||
page.media_box,
|
||||
page.crop_box,
|
||||
page.user_unit);
|
||||
page.user_unit,
|
||||
page.rotate);
|
||||
Formatter<StringView>::format(builder, str);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue