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