1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #ifndef CORE_FPDFAPI_PAGE_CPDF_PAGE_H_
8 #define CORE_FPDFAPI_PAGE_CPDF_PAGE_H_
9 
10 #include <memory>
11 
12 #include "core/fpdfapi/page/cpdf_pageobjectholder.h"
13 #include "core/fxcrt/fx_coordinates.h"
14 #include "core/fxcrt/fx_system.h"
15 
16 class CPDF_Dictionary;
17 class CPDF_Document;
18 class CPDF_Object;
19 class CPDF_PageRenderCache;
20 class CPDF_PageRenderContext;
21 
22 class CPDF_Page : public CPDF_PageObjectHolder {
23  public:
24   class View {};  // Caller implements as desired, empty here due to layering.
25 
26   CPDF_Page(CPDF_Document* pDocument,
27             CPDF_Dictionary* pPageDict,
28             bool bPageCache);
29   ~CPDF_Page() override;
30 
31   // CPDF_PageObjectHolder
32   bool IsPage() const override;
33 
34   void ParseContent();
35 
36   CFX_Matrix GetDisplayMatrix(int xPos,
37                               int yPos,
38                               int xSize,
39                               int ySize,
40                               int iRotate) const;
41 
GetPageWidth()42   float GetPageWidth() const { return m_PageWidth; }
GetPageHeight()43   float GetPageHeight() const { return m_PageHeight; }
GetPageBBox()44   CFX_FloatRect GetPageBBox() const { return m_BBox; }
45   int GetPageRotation() const;
GetRenderCache()46   CPDF_PageRenderCache* GetRenderCache() const { return m_pPageRender.get(); }
47 
GetRenderContext()48   CPDF_PageRenderContext* GetRenderContext() const {
49     return m_pRenderContext.get();
50   }
51   void SetRenderContext(std::unique_ptr<CPDF_PageRenderContext> pContext);
52 
GetView()53   View* GetView() const { return m_pView; }
SetView(View * pView)54   void SetView(View* pView) { m_pView = pView; }
55 
56  private:
57   void StartParse();
58 
59   CPDF_Object* GetPageAttr(const ByteString& name) const;
60   CFX_FloatRect GetBox(const ByteString& name) const;
61 
62   float m_PageWidth;
63   float m_PageHeight;
64   CFX_Matrix m_PageMatrix;
65   View* m_pView;
66   std::unique_ptr<CPDF_PageRenderCache> m_pPageRender;
67   std::unique_ptr<CPDF_PageRenderContext> m_pRenderContext;
68 };
69 
70 #endif  // CORE_FPDFAPI_PAGE_CPDF_PAGE_H_
71