Processing the NoRotate flag when displaying annotations
Bug: pdfium:1883
Change-Id: Ibd7694d00733e09929c77c5a28c31ed9b7093ebd
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/97171
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/AUTHORS b/AUTHORS
index 4c4b287..b7e8252 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -11,6 +11,7 @@
# Please keep the list sorted.
# BEGIN individuals section.
+Aleksei Skotnikov <fineaskotnikov@gmail.com>
Antonio Gomes <tonikitoo@igalia.com>
Chery Cherian <cherycherian@gmail.com>
Claudio DeSouza <claudiomdsjr@gmail.com>
diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index 9a0ba1a..baf8d42 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -53,6 +53,21 @@
CFX_FloatRect form_bbox =
form_matrix.TransformRect(pForm->GetDict()->GetRectFor("BBox"));
matrix->MatchRect(pAnnot->GetRect(), form_bbox);
+
+ // Compensate for page rotation.
+ if ((pAnnot->GetFlags() & pdfium::annotation_flags::kNoRotate) &&
+ pPage->GetPageRotation() != 0) {
+ // Rotate annotation rect around top-left angle (according to the
+ // specification).
+ const float offset_x = pAnnot->GetRect().Left();
+ const float offset_y = pAnnot->GetRect().Top();
+ matrix->Concat({1, 0, 0, 1, -offset_x, -offset_y});
+ // GetPageRotation returns value in fractions of pi/2.
+ const float angle = FXSYS_PI / 2 * pPage->GetPageRotation();
+ matrix->Rotate(angle);
+ matrix->Concat({1, 0, 0, 1, offset_x, offset_y});
+ }
+
matrix->Concat(mtUser2Device);
return pForm;
}
diff --git a/testing/resources/pixel/bug_1883_expected.pdf.1.png b/testing/resources/pixel/bug_1883_expected.pdf.1.png
index 219cadd..f18c1d7 100644
--- a/testing/resources/pixel/bug_1883_expected.pdf.1.png
+++ b/testing/resources/pixel/bug_1883_expected.pdf.1.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1883_expected.pdf.2.png b/testing/resources/pixel/bug_1883_expected.pdf.2.png
index 1037f55..a3093ff 100644
--- a/testing/resources/pixel/bug_1883_expected.pdf.2.png
+++ b/testing/resources/pixel/bug_1883_expected.pdf.2.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1883_expected.pdf.3.png b/testing/resources/pixel/bug_1883_expected.pdf.3.png
index b8036f8..e6e3988 100644
--- a/testing/resources/pixel/bug_1883_expected.pdf.3.png
+++ b/testing/resources/pixel/bug_1883_expected.pdf.3.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1883_expected_skia.pdf.1.png b/testing/resources/pixel/bug_1883_expected_skia.pdf.1.png
index 543bf2a..84f2696 100644
--- a/testing/resources/pixel/bug_1883_expected_skia.pdf.1.png
+++ b/testing/resources/pixel/bug_1883_expected_skia.pdf.1.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1883_expected_skia.pdf.2.png b/testing/resources/pixel/bug_1883_expected_skia.pdf.2.png
index 0b71a4d..e991b81 100644
--- a/testing/resources/pixel/bug_1883_expected_skia.pdf.2.png
+++ b/testing/resources/pixel/bug_1883_expected_skia.pdf.2.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1883_expected_skia.pdf.3.png b/testing/resources/pixel/bug_1883_expected_skia.pdf.3.png
index dea2ab8..8e1ecc7 100644
--- a/testing/resources/pixel/bug_1883_expected_skia.pdf.3.png
+++ b/testing/resources/pixel/bug_1883_expected_skia.pdf.3.png
Binary files differ