| // Copyright 2014 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 _AUTOREFLOW_H |
| #define _AUTOREFLOW_H |
| #include "../../include/reflow/reflowengine.h" |
| #include "reflowedpage.h" |
| class CPDF_AutoReflowElement; |
| class CPDF_AutoReflowLayoutProvider; |
| typedef CFX_ArrayTemplate<CPDF_AutoReflowElement*> CAR_ElmPtrArray; |
| typedef CFX_ArrayTemplate<CPDF_PageObject*> CAR_ObjPtrArray; |
| class CRF_CELL : public CFX_Object |
| { |
| public: |
| CRF_CELL() { }; |
| ~CRF_CELL() { }; |
| CFX_PtrList m_ObjList; |
| int m_CellWritingMode; |
| FX_RECT m_BBox; |
| }; |
| class CPDF_AutoReflowElement : public IPDF_LayoutElement, public CFX_Object |
| { |
| public: |
| CPDF_AutoReflowElement(LayoutType layoutType = LayoutUnknown , CPDF_AutoReflowElement* pParent = NULL) ; |
| ~CPDF_AutoReflowElement(); |
| LayoutType GetType() |
| { |
| return m_ElmType; |
| } |
| void GetRect(CFX_FloatRect& rcRect) {}; |
| |
| int CountAttrValues(LayoutAttr attr_type); |
| LayoutEnum GetEnumAttr(LayoutAttr attr_type, int index); |
| FX_FLOAT GetNumberAttr(LayoutAttr attr_type, int index); |
| FX_COLORREF GetColorAttr(LayoutAttr attr_type, int index); |
| |
| int CountChildren() |
| { |
| return m_ChildArray.GetSize(); |
| } |
| IPDF_LayoutElement* GetChild(int index) |
| { |
| return m_ChildArray.GetAt(index); |
| } |
| |
| IPDF_LayoutElement* GetParent() |
| { |
| return m_pParentElm; |
| } |
| int CountObjects() |
| { |
| return m_ObjArray.GetSize(); |
| } |
| CPDF_PageObject* GetObject(int index) |
| { |
| return m_ObjArray.GetAt(index); |
| } |
| CPDF_AutoReflowElement* m_pParentElm; |
| LayoutType m_ElmType; |
| CAR_ElmPtrArray m_ChildArray; |
| CAR_ObjPtrArray m_ObjArray; |
| FX_FLOAT m_SpaceBefore; |
| }; |
| #define AUTOREFLOW_STEP_GENERATELINE 1 |
| #define AUTOREFLOW_STEP_GENERATEParagraph 2 |
| #define AUTOREFLOW_STEP_CREATEELEMENT 3 |
| #define AUTOREFLOW_STEP_REMOVEDATA 4 |
| class CPDF_AutoReflowLayoutProvider : public IPDF_LayoutProvider, public CFX_Object |
| { |
| public: |
| CPDF_AutoReflowLayoutProvider(CPDF_PageObjects* pPage, FX_BOOL bReadOrder); |
| ~CPDF_AutoReflowLayoutProvider(); |
| void SetLayoutProviderStyle(LAYOUTPROVIDER_STYLE Style) |
| { |
| m_Style = Style; |
| } |
| LayoutStatus StartLoad(IFX_Pause* pPause = NULL); |
| LayoutStatus Continue(); |
| int GetPosition(); |
| IPDF_LayoutElement* GetRoot() |
| { |
| return m_pRoot; |
| } |
| FX_FLOAT GetObjMinCell(CPDF_PageObject* pObj); |
| void Conver2AppreceOrder(const CPDF_PageObjects* pStreamOrderObjs, CPDF_PageObjects* pAppraceOrderObjs); |
| void ReleaseElm(CPDF_AutoReflowElement*& pElm, FX_BOOL bReleaseChildren = TRUE); |
| void GenerateCell(); |
| void GenerateStructTree(); |
| void GenerateLine(CFX_PtrArray& cellArray); |
| void GenerateParagraph(CFX_PtrArray& cellArray); |
| void CreateElement(); |
| void AddObjectArray(CPDF_AutoReflowElement* pElm, CFX_PtrList& ObjList); |
| FX_FLOAT GetLayoutOrderHeight(CPDF_PageObject* pCurObj); |
| FX_FLOAT GetLayoutOrderWidth(CPDF_PageObject* pCurObj); |
| int GetWritingMode(CPDF_PageObject* pPreObj, CPDF_PageObject* pCurObj); |
| int GetRectStart(FX_RECT rect); |
| int GetRectEnd(FX_RECT rect); |
| int GetRectTop(FX_RECT rect); |
| int GetRectBottom(FX_RECT rect); |
| int GetRectHeight(FX_RECT rect); |
| int GetRectWidth(FX_RECT rect); |
| void ProcessObj(CFX_PtrArray& cellArray, CPDF_PageObject* pObj, CFX_AffineMatrix matrix); |
| FX_INT32 LogicPreObj(CPDF_PageObject* pObj); |
| |
| CPDF_AutoReflowElement* m_pRoot; |
| CPDF_AutoReflowElement* m_pCurrElm; |
| CPDF_Page* m_pPDFPage; |
| IFX_Pause* m_pPause; |
| CFX_AffineMatrix m_PDFDisplayMatrix; |
| CPDF_PageObject* m_pPreObj; |
| LayoutStatus m_Status; |
| int m_WritingMode; |
| CFX_PtrArray m_CellArray; |
| FX_BOOL m_bReadOrder; |
| LAYOUTPROVIDER_STYLE m_Style; |
| CFX_PtrArray m_cellArray; |
| int m_Step; |
| }; |
| #endif |