cpdfxfa_page.h revision 5ae9d0c6fd838a2967cca72aa5751b51dadc2769
1// Copyright 2014 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 FPDFSDK_FPDFXFA_CPDFXFA_PAGE_H_
8#define FPDFSDK_FPDFXFA_CPDFXFA_PAGE_H_
9
10#include <memory>
11
12#include "core/fxcrt/fx_system.h"
13
14class CFX_Matrix;
15class CPDFXFA_Context;
16class CPDF_Dictionary;
17class CPDF_Page;
18class CXFA_FFPageView;
19
20class CPDFXFA_Page {
21 public:
22  CPDFXFA_Page(CPDFXFA_Context* pContext, int page_index);
23
24  void Retain() { m_iRef++; }
25  void Release() {
26    if (--m_iRef <= 0)
27      delete this;
28  }
29
30  bool LoadPage();
31  bool LoadPDFPage(CPDF_Dictionary* pageDict);
32  CPDFXFA_Context* GetContext() const { return m_pContext; }
33  int GetPageIndex() const { return m_iPageIndex; }
34  CPDF_Page* GetPDFPage() const { return m_pPDFPage.get(); }
35  CXFA_FFPageView* GetXFAPageView() const { return m_pXFAPageView; }
36
37  void SetXFAPageView(CXFA_FFPageView* pPageView) {
38    m_pXFAPageView = pPageView;
39  }
40
41  FX_FLOAT GetPageWidth() const;
42  FX_FLOAT GetPageHeight() const;
43
44  void DeviceToPage(int start_x,
45                    int start_y,
46                    int size_x,
47                    int size_y,
48                    int rotate,
49                    int device_x,
50                    int device_y,
51                    double* page_x,
52                    double* page_y);
53  void PageToDevice(int start_x,
54                    int start_y,
55                    int size_x,
56                    int size_y,
57                    int rotate,
58                    double page_x,
59                    double page_y,
60                    int* device_x,
61                    int* device_y);
62
63  CFX_Matrix GetDisplayMatrix(int xPos,
64                              int yPos,
65                              int xSize,
66                              int ySize,
67                              int iRotate) const;
68
69 protected:
70  // Refcounted class.
71  ~CPDFXFA_Page();
72
73  bool LoadPDFPage();
74  bool LoadXFAPageView();
75
76 private:
77  std::unique_ptr<CPDF_Page> m_pPDFPage;
78  CXFA_FFPageView* m_pXFAPageView;
79  CPDFXFA_Context* const m_pContext;
80  const int m_iPageIndex;
81  int m_iRef;
82};
83
84#endif  // FPDFSDK_FPDFXFA_CPDFXFA_PAGE_H_
85