[PDF Ink Signatures] Add orientation param to GetInkThumbnailTransform()
Take orientation into account in GetInkThumbnailTransform(). Although the thumbnail is not rotated, its content is. Bug: 381727385 Change-Id: Ia424c0415e3d2bed94b482230ef58b1272b6b7c5 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6078053 Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com> Reviewed-by: Alan Screen <awscreen@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org> Cr-Commit-Position: refs/heads/main@{#1393844}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
d132542b3d
commit
f8fd1a6f3f
@ -165,7 +165,8 @@ bool PdfInkModule::DrawThumbnail(SkCanvas& canvas, int page_index) {
|
||||
|
||||
const ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
gfx::SkISizeToSize(canvas.imageInfo().dimensions()),
|
||||
client_->GetPageContentsRect(page_index), client_->GetZoom());
|
||||
client_->GetOrientation(), client_->GetPageContentsRect(page_index),
|
||||
client_->GetZoom());
|
||||
|
||||
ink::SkiaRenderer skia_renderer;
|
||||
for (const FinishedStrokeState& finished_stroke : it->second) {
|
||||
|
@ -127,15 +127,24 @@ ink::AffineTransform GetInkRenderTransform(
|
||||
|
||||
ink::AffineTransform GetInkThumbnailTransform(
|
||||
const gfx::Size& canvas_size,
|
||||
PageOrientation orientation,
|
||||
const gfx::Rect& page_content_rect,
|
||||
float scale_factor) {
|
||||
// Since thumbnails are always drawn without any rotation, the transform only
|
||||
// needs to perform scaling.
|
||||
//
|
||||
// However, `page_content_rect` may be rotated, so normalize it as needed.
|
||||
gfx::Size content_size = page_content_rect.size();
|
||||
if (orientation == PageOrientation::kClockwise90 ||
|
||||
orientation == PageOrientation::kClockwise270) {
|
||||
content_size.Transpose();
|
||||
}
|
||||
|
||||
const float ratio =
|
||||
scale_factor * std::min(static_cast<float>(canvas_size.width()) /
|
||||
page_content_rect.width(),
|
||||
static_cast<float>(canvas_size.height()) /
|
||||
page_content_rect.height());
|
||||
scale_factor *
|
||||
std::min(
|
||||
static_cast<float>(canvas_size.width()) / content_size.width(),
|
||||
static_cast<float>(canvas_size.height()) / content_size.height());
|
||||
return {ratio, 0, 0, 0, ratio, 0};
|
||||
}
|
||||
|
||||
|
@ -106,9 +106,9 @@ ink::AffineTransform GetInkRenderTransform(
|
||||
// GetInkRenderTransform(), the transformation is simpler because there is no
|
||||
// origin offset, and the thumbnail canvas is never rotated. Note that the
|
||||
// thumbnail content may be rotated.
|
||||
// TODO(crbug.com/377528733): Add a PageOrientation parameter.
|
||||
ink::AffineTransform GetInkThumbnailTransform(
|
||||
const gfx::Size& canvas_size,
|
||||
PageOrientation orientation,
|
||||
const gfx::Rect& page_content_rect,
|
||||
float scale_factor);
|
||||
|
||||
|
@ -290,15 +290,15 @@ TEST(PdfInkTransformTest, RenderTransformOffsetZoomScrolledClockwise90) {
|
||||
TEST(PdfInkTransformTest, ThumbnailTransformNoZoom) {
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, kPageContentAreaPortraitNoOffset,
|
||||
kScaleFactor1x);
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kOriginal,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, kPageContentAreaPortraitNoOffset,
|
||||
kScaleFactor1x);
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kOriginal,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(1.6666666f, 0.0f, 0.0f, 0.0f,
|
||||
1.6666666f, 0.0f));
|
||||
}
|
||||
@ -307,20 +307,110 @@ TEST(PdfInkTransformTest, ThumbnailTransformNoZoom) {
|
||||
TEST(PdfInkTransformTest, ThumbnailTransformZoom) {
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, kPageContentAreaPortraitNoOffset,
|
||||
kScaleFactor2x);
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kOriginal,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(2.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, kPageContentAreaPortraitNoOffset,
|
||||
kScaleFactor2x);
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kOriginal,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(3.333333f, 0.0f, 0.0f, 0.0f,
|
||||
3.333333f, 0.0f));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PdfInkTransformTest, ThumbnailTransformRotate) {
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kClockwise90,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(0.8333333f, 0.0f, 0.0f, 0.0f,
|
||||
0.8333333f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kClockwise90,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(2.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kClockwise180,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kClockwise180,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(1.6666666f, 0.0f, 0.0f, 0.0f,
|
||||
1.6666666f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kClockwise270,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(0.8333333f, 0.0f, 0.0f, 0.0f,
|
||||
0.8333333f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kClockwise270,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor1x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(2.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PdfInkTransformTest, ThumbnailTransformRotateAndZoom) {
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kClockwise90,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(1.6666666f, 0.0f, 0.0f, 0.0f,
|
||||
1.6666666f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kClockwise90,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(4.0f, 0.0f, 0.0f, 0.0f, 4.0f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kClockwise180,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(2.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kClockwise180,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(3.333333f, 0.0f, 0.0f, 0.0f,
|
||||
3.333333f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{50, 60}, PageOrientation::kClockwise270,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform, InkAffineTransformEq(1.6666666f, 0.0f, 0.0f, 0.0f,
|
||||
1.6666666f, 0.0f));
|
||||
}
|
||||
{
|
||||
ink::AffineTransform transform = GetInkThumbnailTransform(
|
||||
/*canvas_size=*/{120, 100}, PageOrientation::kClockwise270,
|
||||
kPageContentAreaPortraitNoOffset, kScaleFactor2x);
|
||||
EXPECT_THAT(transform,
|
||||
InkAffineTransformEq(4.0f, 0.0f, 0.0f, 0.0f, 4.0f, 0.0f));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PdfInkTransformTest,
|
||||
CanonicalInkEnvelopeToInvalidationScreenRectIdentity) {
|
||||
// Representation of page contents in screen coordinates without scale or
|
||||
|
Reference in New Issue
Block a user