[PDF Ink Signatures] Plumb page size in points for PdfInkModule
Add plumbing for getting a PDF page's size in points through to PdfInkModuleClient. This makes that size available for PdfInkModule, to use for an upcoming update to the Ink strokes rendering transform. Also define a constant for the conversion factor from pixels to points, which while used once here can be used repeatedly in future CLs. Bug: 380038343 Change-Id: Idfb2c350a00e87644ee1099ccd6b33731803d0c4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6311049 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Alan Screen <awscreen@chromium.org> Cr-Commit-Position: refs/heads/main@{#1426612}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
c70ab27efa
commit
473530ce6f
@@ -53,6 +53,10 @@ class PdfInkModuleClient {
|
|||||||
// non-negative page index returned from `VisiblePageIndexFromPoint()`.
|
// non-negative page index returned from `VisiblePageIndexFromPoint()`.
|
||||||
virtual gfx::Rect GetPageContentsRect(int page_index) = 0;
|
virtual gfx::Rect GetPageContentsRect(int page_index) = 0;
|
||||||
|
|
||||||
|
// Gets the page size in points for `page_index`. Must be non-empty for any
|
||||||
|
// non-negative page index returned from `VisiblePageIndexFromPoint()`.
|
||||||
|
virtual gfx::SizeF GetPageSizeInPoints(int page_index) = 0;
|
||||||
|
|
||||||
// Gets the thumbnail size for `page_index`. The size must be non-empty for
|
// Gets the thumbnail size for `page_index`. The size must be non-empty for
|
||||||
// any valid page index.
|
// any valid page index.
|
||||||
virtual gfx::Size GetThumbnailSize(int page_index) = 0;
|
virtual gfx::Size GetThumbnailSize(int page_index) = 0;
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#include "pdf/test/mouse_event_builder.h"
|
#include "pdf/test/mouse_event_builder.h"
|
||||||
#include "pdf/test/pdf_ink_test_helpers.h"
|
#include "pdf/test/pdf_ink_test_helpers.h"
|
||||||
#include "pdf/ui/thumbnail.h"
|
#include "pdf/ui/thumbnail.h"
|
||||||
|
#include "printing/units.h"
|
||||||
#include "testing/gmock/include/gmock/gmock.h"
|
#include "testing/gmock/include/gmock/gmock.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
#include "third_party/blink/public/common/input/web_mouse_event.h"
|
#include "third_party/blink/public/common/input/web_mouse_event.h"
|
||||||
@@ -267,6 +268,14 @@ class FakeClient : public PdfInkModuleClient {
|
|||||||
return gfx::ToEnclosedRect(page_layouts_[page_index]);
|
return gfx::ToEnclosedRect(page_layouts_[page_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gfx::SizeF GetPageSizeInPoints(int page_index) override {
|
||||||
|
CHECK_GE(page_index, 0);
|
||||||
|
CHECK_LT(static_cast<size_t>(page_index), page_layouts_.size());
|
||||||
|
gfx::SizeF page_size = page_layouts_[page_index].size();
|
||||||
|
page_size.Scale(printing::kUnitConversionFactorPixelsToPoints);
|
||||||
|
return page_size;
|
||||||
|
}
|
||||||
|
|
||||||
float GetZoom() const override { return zoom_; }
|
float GetZoom() const override { return zoom_; }
|
||||||
|
|
||||||
void Invalidate(const gfx::Rect& rect) override {
|
void Invalidate(const gfx::Rect& rect) override {
|
||||||
|
@@ -291,6 +291,13 @@ class PdfViewWebPlugin::PdfInkModuleClientImpl : public PdfInkModuleClient {
|
|||||||
return plugin_->engine_->GetPageContentsRect(page_index);
|
return plugin_->engine_->GetPageContentsRect(page_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gfx::SizeF GetPageSizeInPoints(int page_index) override {
|
||||||
|
if (page_index < 0 || page_index >= plugin_->engine_->GetNumberOfPages()) {
|
||||||
|
return gfx::SizeF();
|
||||||
|
}
|
||||||
|
return plugin_->engine_->GetPageSizeInPoints(page_index).value();
|
||||||
|
}
|
||||||
|
|
||||||
gfx::Size GetThumbnailSize(int page_index) override {
|
gfx::Size GetThumbnailSize(int page_index) override {
|
||||||
return plugin_->engine_->GetThumbnailSize(page_index,
|
return plugin_->engine_->GetThumbnailSize(page_index,
|
||||||
plugin_->device_scale_);
|
plugin_->device_scale_);
|
||||||
|
@@ -2622,6 +2622,8 @@ class PdfViewWebPluginInkTest : public PdfViewWebPluginTest {
|
|||||||
.WillByDefault([](int page_index) -> gfx::Rect {
|
.WillByDefault([](int page_index) -> gfx::Rect {
|
||||||
return gfx::Rect(/*x=*/0, /*y=*/0, /*width=*/100, /*height=*/50);
|
return gfx::Rect(/*x=*/0, /*y=*/0, /*width=*/100, /*height=*/50);
|
||||||
});
|
});
|
||||||
|
ON_CALL(*engine_ptr_, GetPageSizeInPoints)
|
||||||
|
.WillByDefault(Return(gfx::SizeF(/*width=*/75.0f, /*height=*/37.5f)));
|
||||||
ON_CALL(*engine_ptr_, GetThumbnailSize)
|
ON_CALL(*engine_ptr_, GetThumbnailSize)
|
||||||
.WillByDefault(Return(gfx::Size(50, 25)));
|
.WillByDefault(Return(gfx::Size(50, 25)));
|
||||||
ON_CALL(*engine_ptr_, IsPageVisible)
|
ON_CALL(*engine_ptr_, IsPageVisible)
|
||||||
@@ -2782,6 +2784,13 @@ TEST_F(PdfViewWebPluginInkTest, UpdateCursor) {
|
|||||||
EXPECT_EQ(ui::mojom::CursorType::kPointer, cursor.type());
|
EXPECT_EQ(ui::mojom::CursorType::kPointer, cursor.type());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(PdfViewWebPluginInkTest, GetPageSizeInPoints) {
|
||||||
|
SetUpWithTrivialInkStrokes();
|
||||||
|
EXPECT_EQ(gfx::SizeF(75.0f, 37.5f),
|
||||||
|
plugin_->ink_module_client_for_testing()->GetPageSizeInPoints(
|
||||||
|
/*page_index=*/0));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PdfViewWebPluginInkTest, GetThumbnailSize) {
|
TEST_F(PdfViewWebPluginInkTest, GetThumbnailSize) {
|
||||||
SetUpWithTrivialInkStrokes();
|
SetUpWithTrivialInkStrokes();
|
||||||
EXPECT_EQ(gfx::Size(50, 25),
|
EXPECT_EQ(gfx::Size(50, 25),
|
||||||
|
@@ -336,7 +336,7 @@ class PDFiumEngine : public DocumentLoader::Client, public IFSDK_PAUSE {
|
|||||||
// Gets the size of the page in points for the page at `page_index`. Any
|
// Gets the size of the page in points for the page at `page_index`. Any
|
||||||
// fractional portion of the size is retained in the result. Returns
|
// fractional portion of the size is retained in the result. Returns
|
||||||
// `std::nullopt` if the indicated page index is not available.
|
// `std::nullopt` if the indicated page index is not available.
|
||||||
std::optional<gfx::SizeF> GetPageSizeInPoints(int page_index) const;
|
virtual std::optional<gfx::SizeF> GetPageSizeInPoints(int page_index) const;
|
||||||
|
|
||||||
// Returns the uniform page size of the document in points. Returns
|
// Returns the uniform page size of the document in points. Returns
|
||||||
// `std::nullopt` if the document has more than one page size.
|
// `std::nullopt` if the document has more than one page size.
|
||||||
|
@@ -88,6 +88,11 @@ class TestPDFiumEngine : public PDFiumEngine {
|
|||||||
|
|
||||||
MOCK_METHOD(gfx::Rect, GetPageScreenRect, (int), (const override));
|
MOCK_METHOD(gfx::Rect, GetPageScreenRect, (int), (const override));
|
||||||
|
|
||||||
|
MOCK_METHOD(std::optional<gfx::SizeF>,
|
||||||
|
GetPageSizeInPoints,
|
||||||
|
(int),
|
||||||
|
(const override));
|
||||||
|
|
||||||
// Returns an empty bookmark list.
|
// Returns an empty bookmark list.
|
||||||
base::Value::List GetBookmarks() override;
|
base::Value::List GetBookmarks() override;
|
||||||
|
|
||||||
|
@@ -31,6 +31,10 @@ constexpr int kPointsPerInch = 72;
|
|||||||
// http://dev.w3.org/csswg/css3-values/#the-px-unit
|
// http://dev.w3.org/csswg/css3-values/#the-px-unit
|
||||||
constexpr int kPixelsPerInch = 96;
|
constexpr int kPixelsPerInch = 96;
|
||||||
|
|
||||||
|
// Factor to convert from pixels per inch to points per inch.
|
||||||
|
inline constexpr float kUnitConversionFactorPixelsToPoints =
|
||||||
|
static_cast<float>(kPointsPerInch) / kPixelsPerInch;
|
||||||
|
|
||||||
#if BUILDFLAG(IS_MAC)
|
#if BUILDFLAG(IS_MAC)
|
||||||
constexpr int kDefaultMacDpi = 72;
|
constexpr int kDefaultMacDpi = 72;
|
||||||
#endif // BUILDFLAG(IS_MAC)
|
#endif // BUILDFLAG(IS_MAC)
|
||||||
|
Reference in New Issue
Block a user