LibGfx+PDFViewer: Add RotationDirection::Flip and use it in PDFViewer

No behavior change.
This commit is contained in:
Nico Weber 2024-02-25 09:27:28 -05:00 committed by Andreas Kling
parent 5b223080ae
commit 29f5182e51
Notes: sideshowbarker 2024-07-17 09:37:30 +09:00
3 changed files with 22 additions and 10 deletions

View File

@ -350,15 +350,13 @@ PDF::PDFErrorOr<NonnullRefPtr<Gfx::Bitmap>> PDFViewer::render_page(u32 page_inde
return bitmap;
}
if (page.rotate + m_rotations != 0) {
int rotation_count = ((page.rotate + m_rotations) / 90) % 4;
if (rotation_count == 3) {
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::CounterClockwise));
} else {
for (int i = 0; i < rotation_count; i++)
bitmap = TRY(bitmap->rotated(Gfx::RotationDirection::Clockwise));
}
}
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;
}

View File

@ -277,6 +277,19 @@ ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::clone() const
ErrorOr<NonnullRefPtr<Gfx::Bitmap>> Bitmap::rotated(Gfx::RotationDirection rotation_direction) const
{
if (rotation_direction == Gfx::RotationDirection::Flip) {
auto new_bitmap = TRY(Gfx::Bitmap::create(format(), { width(), height() }, scale()));
auto w = this->physical_width();
auto h = this->physical_height();
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++)
new_bitmap->set_pixel(w - i - 1, h - j - 1, this->get_pixel(i, j));
}
return new_bitmap;
}
auto new_bitmap = TRY(Gfx::Bitmap::create(this->format(), { height(), width() }, scale()));
auto w = this->physical_width();

View File

@ -86,7 +86,8 @@ struct BackingStore;
enum class RotationDirection {
CounterClockwise,
Clockwise
Flip,
Clockwise,
};
class Bitmap : public RefCounted<Bitmap> {