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