diff options
author | Tom Sepez <tsepez@chromium.org> | 2018-06-12 13:36:05 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-06-12 13:36:05 +0000 |
commit | 101535f463dda5766f99b66f383672d5898556fe (patch) | |
tree | 04ca2226b850756c67dd29444545f4b91682835c /core/fpdfapi | |
parent | 755b0e5f71518488456e7cffc64fd7ba89692e68 (diff) | |
download | pdfium-101535f463dda5766f99b66f383672d5898556fe.tar.xz |
Rework "Make common page base class."
Re-landing of https://pdfium-review.googlesource.com/c/pdfium/+/32892
This time, however, we do not build on the previous CL which cached
pages. This CL by itself should be OK but was reverted only because
it was blocking earlier reverts.
Change-Id: I067d5f07373eeac6cced5d0c113ea40e5f8dcd15
Reviewed-on: https://pdfium-review.googlesource.com/34910
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'core/fpdfapi')
-rw-r--r-- | core/fpdfapi/page/cpdf_page.cpp | 20 | ||||
-rw-r--r-- | core/fpdfapi/page/cpdf_page.h | 38 | ||||
-rw-r--r-- | core/fpdfapi/page/ipdf_page.h | 52 |
3 files changed, 90 insertions, 20 deletions
diff --git a/core/fpdfapi/page/cpdf_page.cpp b/core/fpdfapi/page/cpdf_page.cpp index e730aee668..4cd58dddaa 100644 --- a/core/fpdfapi/page/cpdf_page.cpp +++ b/core/fpdfapi/page/cpdf_page.cpp @@ -75,6 +75,26 @@ CPDF_Page::CPDF_Page(CPDF_Document* pDocument, CPDF_Page::~CPDF_Page() {} +CPDF_Page* CPDF_Page::AsPDFPage() { + return this; +} + +CPDFXFA_Page* CPDF_Page::AsXFAPage() { + return nullptr; +} + +CPDF_Document* CPDF_Page::GetDocument() const { + return GetPDFDocument(); +} + +float CPDF_Page::GetPageWidth() const { + return m_PageSize.width; +} + +float CPDF_Page::GetPageHeight() const { + return m_PageSize.height; +} + bool CPDF_Page::IsPage() const { return true; } diff --git a/core/fpdfapi/page/cpdf_page.h b/core/fpdfapi/page/cpdf_page.h index 1d0186181a..44bb6d8798 100644 --- a/core/fpdfapi/page/cpdf_page.h +++ b/core/fpdfapi/page/cpdf_page.h @@ -10,6 +10,7 @@ #include <memory> #include "core/fpdfapi/page/cpdf_pageobjectholder.h" +#include "core/fpdfapi/page/ipdf_page.h" #include "core/fxcrt/fx_coordinates.h" #include "core/fxcrt/fx_system.h" #include "core/fxcrt/retain_ptr.h" @@ -22,45 +23,43 @@ class CPDF_Object; class CPDF_PageRenderCache; class CPDF_PageRenderContext; -class CPDF_Page : public Retainable, public CPDF_PageObjectHolder { +class CPDF_Page : public IPDF_Page, public CPDF_PageObjectHolder { public: class View {}; // Caller implements as desired, empty here due to layering. - class Extension : public Retainable {}; // XFA page parent class, layering. template <typename T, typename... Args> friend RetainPtr<T> pdfium::MakeRetain(Args&&... args); + // IPDF_Page: + CPDF_Page* AsPDFPage() override; + CPDFXFA_Page* AsXFAPage() override; + CPDF_Document* GetDocument() const override; + float GetPageWidth() const override; + float GetPageHeight() const override; + CFX_Matrix GetDisplayMatrix(const FX_RECT& rect, int iRotate) const override; + Optional<CFX_PointF> DeviceToPage( + const FX_RECT& rect, + int rotate, + const CFX_PointF& device_point) const override; + Optional<CFX_PointF> PageToDevice( + const FX_RECT& rect, + int rotate, + const CFX_PointF& page_point) const override; + // CPDF_PageObjectHolder: bool IsPage() const override; void ParseContent(); - - Optional<CFX_PointF> DeviceToPage(const FX_RECT& rect, - int rotate, - const CFX_PointF& device_point) const; - Optional<CFX_PointF> PageToDevice(const FX_RECT& rect, - int rotate, - const CFX_PointF& page_point) const; - - CFX_Matrix GetDisplayMatrix(const FX_RECT& rect, int iRotate) const; - - float GetPageWidth() const { return m_PageSize.width; } - float GetPageHeight() const { return m_PageSize.height; } const CFX_SizeF& GetPageSize() const { return m_PageSize; } - int GetPageRotation() const; CPDF_PageRenderCache* GetRenderCache() const { return m_pPageRender.get(); } - CPDF_PageRenderContext* GetRenderContext() const { return m_pRenderContext.get(); } void SetRenderContext(std::unique_ptr<CPDF_PageRenderContext> pContext); - CPDF_Document* GetPDFDocument() const { return m_pPDFDocument.Get(); } View* GetView() const { return m_pView.Get(); } void SetView(View* pView) { m_pView = pView; } - Extension* GetPageExtension() const { return m_pPageExtension.Get(); } - void SetPageExtension(Extension* pExt) { m_pPageExtension = pExt; } private: CPDF_Page(CPDF_Document* pDocument, @@ -74,7 +73,6 @@ class CPDF_Page : public Retainable, public CPDF_PageObjectHolder { CFX_SizeF m_PageSize; CFX_Matrix m_PageMatrix; UnownedPtr<CPDF_Document> m_pPDFDocument; - UnownedPtr<Extension> m_pPageExtension; std::unique_ptr<CPDF_PageRenderCache> m_pPageRender; std::unique_ptr<CPDF_PageRenderContext> m_pRenderContext; UnownedPtr<View> m_pView; diff --git a/core/fpdfapi/page/ipdf_page.h b/core/fpdfapi/page/ipdf_page.h new file mode 100644 index 0000000000..7c9fce7726 --- /dev/null +++ b/core/fpdfapi/page/ipdf_page.h @@ -0,0 +1,52 @@ +// Copyright 2018 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef CORE_FPDFAPI_PAGE_IPDF_PAGE_H_ +#define CORE_FPDFAPI_PAGE_IPDF_PAGE_H_ + +#include "core/fxcrt/fx_coordinates.h" +#include "core/fxcrt/retain_ptr.h" +#include "third_party/base/optional.h" + +class CPDF_Document; +class CPDF_Page; + +// Small layering violation, incomplete type and always null if non-XFA. +class CPDFXFA_Page; + +// Interface implemented by both page types (CPDF_Page and CPDFXFA_Page). +class IPDF_Page : public Retainable { + public: + virtual CPDF_Page* AsPDFPage() = 0; + virtual CPDFXFA_Page* AsXFAPage() = 0; + + virtual CPDF_Document* GetDocument() const = 0; + + virtual float GetPageWidth() const = 0; + virtual float GetPageHeight() const = 0; + virtual CFX_Matrix GetDisplayMatrix(const FX_RECT& rect, + int iRotate) const = 0; + + virtual Optional<CFX_PointF> DeviceToPage( + const FX_RECT& rect, + int rotate, + const CFX_PointF& device_point) const = 0; + + virtual Optional<CFX_PointF> PageToDevice( + const FX_RECT& rect, + int rotate, + const CFX_PointF& page_point) const = 0; +}; + +inline CPDF_Page* ToPDFPage(IPDF_Page* pBase) { + return pBase ? pBase->AsPDFPage() : nullptr; +} + +inline CPDFXFA_Page* ToXFAPage(IPDF_Page* pBase) { + return pBase ? pBase->AsXFAPage() : nullptr; +} + +#endif // CORE_FPDFAPI_PAGE_IPDF_PAGE_H_ |