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