• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 CORE_SRC_REFLOW_AUTOREFLOW_H_
8  #define CORE_SRC_REFLOW_AUTOREFLOW_H_
9  
10  #include "../../include/reflow/reflowengine.h"
11  #include "reflowedpage.h"
12  
13  class CPDF_AutoReflowElement;
14  class CPDF_AutoReflowLayoutProvider;
15  typedef CFX_ArrayTemplate<CPDF_AutoReflowElement*> CAR_ElmPtrArray;
16  typedef CFX_ArrayTemplate<CPDF_PageObject*> CAR_ObjPtrArray;
17  class CRF_CELL
18  {
19  public:
CRF_CELL()20      CRF_CELL() { };
~CRF_CELL()21      ~CRF_CELL() { };
22      CFX_PtrList		m_ObjList;
23      int			m_CellWritingMode;
24      FX_RECT		m_BBox;
25  };
26  class CPDF_AutoReflowElement : public IPDF_LayoutElement
27  {
28  public:
29      CPDF_AutoReflowElement(LayoutType layoutType = LayoutUnknown , CPDF_AutoReflowElement* pParent = NULL) ;
30      ~CPDF_AutoReflowElement();
GetType()31      LayoutType GetType()
32      {
33          return m_ElmType;
34      }
GetRect(CFX_FloatRect & rcRect)35      void	GetRect(CFX_FloatRect& rcRect) {};
36  
37      int  CountAttrValues(LayoutAttr attr_type);
38      LayoutEnum  GetEnumAttr(LayoutAttr attr_type, int index);
39      FX_FLOAT GetNumberAttr(LayoutAttr attr_type, int index);
40      FX_COLORREF GetColorAttr(LayoutAttr attr_type, int index);
41  
CountChildren()42      int  CountChildren()
43      {
44          return m_ChildArray.GetSize();
45      }
GetChild(int index)46      IPDF_LayoutElement* GetChild(int index)
47      {
48          return m_ChildArray.GetAt(index);
49      }
50  
GetParent()51      IPDF_LayoutElement* GetParent()
52      {
53          return m_pParentElm;
54      }
CountObjects()55      int		CountObjects()
56      {
57          return m_ObjArray.GetSize();
58      }
GetObject(int index)59      CPDF_PageObject*	GetObject(int index)
60      {
61          return m_ObjArray.GetAt(index);
62      }
63      CPDF_AutoReflowElement* m_pParentElm;
64      LayoutType		m_ElmType;
65      CAR_ElmPtrArray m_ChildArray;
66      CAR_ObjPtrArray m_ObjArray;
67      FX_FLOAT		m_SpaceBefore;
68  };
69  #define AUTOREFLOW_STEP_GENERATELINE		1
70  #define AUTOREFLOW_STEP_GENERATEParagraph	2
71  #define AUTOREFLOW_STEP_CREATEELEMENT		3
72  #define AUTOREFLOW_STEP_REMOVEDATA			4
73  class CPDF_AutoReflowLayoutProvider : public IPDF_LayoutProvider
74  {
75  public:
76      CPDF_AutoReflowLayoutProvider(CPDF_PageObjects* pPage, FX_BOOL bReadOrder);
77      ~CPDF_AutoReflowLayoutProvider();
SetLayoutProviderStyle(LAYOUTPROVIDER_STYLE Style)78      void	SetLayoutProviderStyle(LAYOUTPROVIDER_STYLE Style)
79      {
80          m_Style = Style;
81      }
82      LayoutStatus StartLoad(IFX_Pause* pPause = NULL);
83      LayoutStatus Continue();
84      int	 		GetPosition();
GetRoot()85      IPDF_LayoutElement* GetRoot()
86      {
87          return m_pRoot;
88      }
89      FX_FLOAT GetObjMinCell(CPDF_PageObject* pObj);
90      void Conver2AppreceOrder(const CPDF_PageObjects* pStreamOrderObjs, CPDF_PageObjects* pAppraceOrderObjs);
91      void	ReleaseElm(CPDF_AutoReflowElement*& pElm, FX_BOOL bReleaseChildren = TRUE);
92      void GenerateCell();
93      void GenerateStructTree();
94      void GenerateLine(CFX_PtrArray& cellArray);
95      void GenerateParagraph(CFX_PtrArray& cellArray);
96      void CreateElement();
97      void AddObjectArray(CPDF_AutoReflowElement* pElm, CFX_PtrList& ObjList);
98      FX_FLOAT GetLayoutOrderHeight(CPDF_PageObject* pCurObj);
99      FX_FLOAT GetLayoutOrderWidth(CPDF_PageObject* pCurObj);
100      int GetWritingMode(CPDF_PageObject* pPreObj, CPDF_PageObject* pCurObj);
101      int GetRectStart(FX_RECT rect);
102      int GetRectEnd(FX_RECT rect);
103      int GetRectTop(FX_RECT rect);
104      int GetRectBottom(FX_RECT rect);
105      int GetRectHeight(FX_RECT rect);
106      int GetRectWidth(FX_RECT rect);
107      void ProcessObj(CFX_PtrArray& cellArray, CPDF_PageObject* pObj, CFX_AffineMatrix matrix);
108      FX_INT32 LogicPreObj(CPDF_PageObject* pObj);
109  
110      CPDF_AutoReflowElement* m_pRoot;
111      CPDF_AutoReflowElement* m_pCurrElm;
112      CPDF_Page*	m_pPDFPage;
113      IFX_Pause*	m_pPause;
114      CFX_AffineMatrix m_PDFDisplayMatrix;
115      CPDF_PageObject* m_pPreObj;
116      LayoutStatus m_Status;
117      int m_WritingMode;
118      CFX_PtrArray m_CellArray;
119      FX_BOOL		 m_bReadOrder;
120      LAYOUTPROVIDER_STYLE m_Style;
121      CFX_PtrArray m_cellArray;
122      int			m_Step;
123  };
124  
125  #endif  // CORE_SRC_REFLOW_AUTOREFLOW_H_
126