blob: e8391bebb93a44b377f4f0999fea7ac4644edf89 [file] [log] [blame]
dsinclair0b851ff2016-07-21 12:03:01 -07001// Copyright 2016 PDFium Authors. All rights reserved.
Dan Sinclair1770c022016-03-14 14:14:16 -04002// 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
dsinclair0b851ff2016-07-21 12:03:01 -07007#ifndef XFA_FXFA_PARSER_CXFA_LAYOUTPROCESSOR_H_
8#define XFA_FXFA_PARSER_CXFA_LAYOUTPROCESSOR_H_
Dan Sinclair1770c022016-03-14 14:14:16 -04009
tsepez469f6da2017-01-05 19:21:39 -080010#include <memory>
Tom Sepezf8a94392017-03-14 12:13:22 -070011#include <vector>
tsepez469f6da2017-01-05 19:21:39 -080012
dsinclaira52ab742016-09-29 13:59:29 -070013#include "core/fxcrt/fx_system.h"
Dan Sinclairaee0db02017-09-21 16:53:58 -040014#include "core/fxcrt/unowned_ptr.h"
Dan Sinclair1770c022016-03-14 14:14:16 -040015
Dan Sinclair1770c022016-03-14 14:14:16 -040016class CXFA_ContainerLayoutItem;
dsinclair0b851ff2016-07-21 12:03:01 -070017class CXFA_Document;
18class CXFA_ItemLayoutProcessor;
19class CXFA_LayoutItem;
20class CXFA_LayoutPageMgr;
21class CXFA_Node;
Dan Sinclair1770c022016-03-14 14:14:16 -040022
dsinclairdf4bc592016-03-31 20:34:43 -070023class CXFA_LayoutProcessor {
Dan Sinclair1770c022016-03-14 14:14:16 -040024 public:
Dan Sinclair85c8e7f2016-11-21 13:50:32 -050025 explicit CXFA_LayoutProcessor(CXFA_Document* pDocument);
Dan Sinclair1770c022016-03-14 14:14:16 -040026 ~CXFA_LayoutProcessor();
dsinclairdf4bc592016-03-31 20:34:43 -070027
28 CXFA_Document* GetDocument() const;
tsepezd19e9122016-11-02 15:43:18 -070029 int32_t StartLayout(bool bForceRestart = false);
Dan Sinclairdf673c22017-05-04 12:09:52 -040030 int32_t DoLayout();
tsepezd19e9122016-11-02 15:43:18 -070031 bool IncrementLayout();
dsinclairdf4bc592016-03-31 20:34:43 -070032 int32_t CountPages() const;
33 CXFA_ContainerLayoutItem* GetPage(int32_t index) const;
34 CXFA_LayoutItem* GetLayoutItem(CXFA_Node* pFormItem);
Dan Sinclair1770c022016-03-14 14:14:16 -040035 void AddChangedContainer(CXFA_Node* pContainer);
Tom Sepezf8a94392017-03-14 12:13:22 -070036 void SetForceReLayout(bool bForceRestart) { m_bNeedLayout = bForceRestart; }
Dan Sinclair1770c022016-03-14 14:14:16 -040037 CXFA_ContainerLayoutItem* GetRootLayoutItem() const;
tsepez469f6da2017-01-05 19:21:39 -080038 CXFA_ItemLayoutProcessor* GetRootRootItemLayoutProcessor() const {
39 return m_pRootItemLayoutProcessor.get();
Dan Sinclair1770c022016-03-14 14:14:16 -040040 }
tsepez469f6da2017-01-05 19:21:39 -080041 CXFA_LayoutPageMgr* GetLayoutPageMgr() const {
42 return m_pLayoutPageMgr.get();
43 }
Dan Sinclair1770c022016-03-14 14:14:16 -040044
dsinclair0b851ff2016-07-21 12:03:01 -070045 private:
tsepezd19e9122016-11-02 15:43:18 -070046 bool IsNeedLayout();
Dan Sinclair1770c022016-03-14 14:14:16 -040047
Dan Sinclairaee0db02017-09-21 16:53:58 -040048 UnownedPtr<CXFA_Document> const m_pDocument;
tsepez469f6da2017-01-05 19:21:39 -080049 std::unique_ptr<CXFA_ItemLayoutProcessor> m_pRootItemLayoutProcessor;
50 std::unique_ptr<CXFA_LayoutPageMgr> m_pLayoutPageMgr;
Tom Sepezf8a94392017-03-14 12:13:22 -070051 std::vector<CXFA_Node*> m_rgChangedContainers;
Dan Sinclair1770c022016-03-14 14:14:16 -040052 uint32_t m_nProgressCounter;
Tom Sepezf8a94392017-03-14 12:13:22 -070053 bool m_bNeedLayout;
Dan Sinclair1770c022016-03-14 14:14:16 -040054};
55
dsinclair0b851ff2016-07-21 12:03:01 -070056#endif // XFA_FXFA_PARSER_CXFA_LAYOUTPROCESSOR_H_