diff options
-rw-r--r-- | xfa/fxfa/parser/cxfa_layoutprocessor.cpp | 27 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_layoutprocessor.h | 19 |
2 files changed, 19 insertions, 27 deletions
diff --git a/xfa/fxfa/parser/cxfa_layoutprocessor.cpp b/xfa/fxfa/parser/cxfa_layoutprocessor.cpp index ad1c2a936a..ea1064a4bc 100644 --- a/xfa/fxfa/parser/cxfa_layoutprocessor.cpp +++ b/xfa/fxfa/parser/cxfa_layoutprocessor.cpp @@ -6,6 +6,7 @@ #include "xfa/fxfa/parser/cxfa_layoutprocessor.h" +#include "third_party/base/ptr_util.h" #include "xfa/fxfa/parser/cxfa_contentlayoutitem.h" #include "xfa/fxfa/parser/cxfa_document.h" #include "xfa/fxfa/parser/cxfa_layoutpagemgr.h" @@ -30,14 +31,10 @@ CXFA_LayoutProcessor* CXFA_Document::GetDocLayout() { CXFA_LayoutProcessor::CXFA_LayoutProcessor(CXFA_Document* pDocument) : m_pDocument(pDocument), - m_pRootItemLayoutProcessor(nullptr), - m_pLayoutPageMgr(nullptr), m_nProgressCounter(0), m_bNeeLayout(true) {} -CXFA_LayoutProcessor::~CXFA_LayoutProcessor() { - ClearLayoutData(); -} +CXFA_LayoutProcessor::~CXFA_LayoutProcessor() {} CXFA_Document* CXFA_LayoutProcessor::GetDocument() const { return m_pDocument; @@ -47,8 +44,7 @@ int32_t CXFA_LayoutProcessor::StartLayout(bool bForceRestart) { if (!bForceRestart && !IsNeedLayout()) return 100; - delete m_pRootItemLayoutProcessor; - m_pRootItemLayoutProcessor = nullptr; + m_pRootItemLayoutProcessor.reset(); m_nProgressCounter = 0; CXFA_Node* pFormPacketNode = ToNode(m_pDocument->GetXFAObject(XFA_HASHCODE_Form)); @@ -59,14 +55,17 @@ int32_t CXFA_LayoutProcessor::StartLayout(bool bForceRestart) { pFormPacketNode->GetFirstChildByClass(XFA_Element::Subform); if (!pFormRoot) return -1; + if (!m_pLayoutPageMgr) - m_pLayoutPageMgr = new CXFA_LayoutPageMgr(this); + m_pLayoutPageMgr = pdfium::MakeUnique<CXFA_LayoutPageMgr>(this); if (!m_pLayoutPageMgr->InitLayoutPage(pFormRoot)) return -1; + if (!m_pLayoutPageMgr->PrepareFirstPage(pFormRoot)) return -1; - m_pRootItemLayoutProcessor = - new CXFA_ItemLayoutProcessor(pFormRoot, m_pLayoutPageMgr); + + m_pRootItemLayoutProcessor = pdfium::MakeUnique<CXFA_ItemLayoutProcessor>( + pFormRoot, m_pLayoutPageMgr.get()); m_nProgressCounter = 1; return 0; } @@ -150,14 +149,6 @@ CXFA_ContainerLayoutItem* CXFA_LayoutProcessor::GetRootLayoutItem() const { return m_pLayoutPageMgr ? m_pLayoutPageMgr->GetRootLayoutItem() : nullptr; } -void CXFA_LayoutProcessor::ClearLayoutData() { - delete m_pLayoutPageMgr; - m_pLayoutPageMgr = nullptr; - delete m_pRootItemLayoutProcessor; - m_pRootItemLayoutProcessor = nullptr; - m_nProgressCounter = 0; -} - bool CXFA_LayoutProcessor::IsNeedLayout() { return m_bNeeLayout || m_rgChangedContainers.GetSize() > 0; } diff --git a/xfa/fxfa/parser/cxfa_layoutprocessor.h b/xfa/fxfa/parser/cxfa_layoutprocessor.h index cf1b1e83b4..5861bf7048 100644 --- a/xfa/fxfa/parser/cxfa_layoutprocessor.h +++ b/xfa/fxfa/parser/cxfa_layoutprocessor.h @@ -7,6 +7,8 @@ #ifndef XFA_FXFA_PARSER_CXFA_LAYOUTPROCESSOR_H_ #define XFA_FXFA_PARSER_CXFA_LAYOUTPROCESSOR_H_ +#include <memory> + #include "core/fxcrt/fx_system.h" #include "xfa/fxfa/parser/xfa_object.h" @@ -30,23 +32,22 @@ class CXFA_LayoutProcessor { int32_t CountPages() const; CXFA_ContainerLayoutItem* GetPage(int32_t index) const; CXFA_LayoutItem* GetLayoutItem(CXFA_Node* pFormItem); - void AddChangedContainer(CXFA_Node* pContainer); void SetForceReLayout(bool bForceRestart) { m_bNeeLayout = bForceRestart; } CXFA_ContainerLayoutItem* GetRootLayoutItem() const; - CXFA_ItemLayoutProcessor* GetRootRootItemLayoutProcessor() { - return m_pRootItemLayoutProcessor; + CXFA_ItemLayoutProcessor* GetRootRootItemLayoutProcessor() const { + return m_pRootItemLayoutProcessor.get(); + } + CXFA_LayoutPageMgr* GetLayoutPageMgr() const { + return m_pLayoutPageMgr.get(); } - CXFA_LayoutPageMgr* GetLayoutPageMgr() { return m_pLayoutPageMgr; } private: - void ClearLayoutData(); - bool IsNeedLayout(); - CXFA_Document* m_pDocument; - CXFA_ItemLayoutProcessor* m_pRootItemLayoutProcessor; - CXFA_LayoutPageMgr* m_pLayoutPageMgr; + CXFA_Document* const m_pDocument; + std::unique_ptr<CXFA_ItemLayoutProcessor> m_pRootItemLayoutProcessor; + std::unique_ptr<CXFA_LayoutPageMgr> m_pLayoutPageMgr; CXFA_NodeArray m_rgChangedContainers; uint32_t m_nProgressCounter; bool m_bNeeLayout; |