OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/parser/xfa_layout_itemlayout.h" | 7 #include "xfa/fxfa/parser/xfa_layout_itemlayout.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
11 | 11 |
12 #include "xfa/fgas/crt/fgas_algorithm.h" | 12 #include "xfa/fgas/crt/fgas_algorithm.h" |
| 13 #include "xfa/fxfa/app/xfa_ffnotify.h" |
13 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 14 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
14 #include "xfa/fxfa/parser/xfa_docdata.h" | 15 #include "xfa/fxfa/parser/xfa_docdata.h" |
15 #include "xfa/fxfa/parser/xfa_doclayout.h" | 16 #include "xfa/fxfa/parser/xfa_doclayout.h" |
16 #include "xfa/fxfa/parser/xfa_document.h" | 17 #include "xfa/fxfa/parser/xfa_document.h" |
17 #include "xfa/fxfa/parser/xfa_document_layout_imp.h" | 18 #include "xfa/fxfa/parser/xfa_document_layout_imp.h" |
18 #include "xfa/fxfa/parser/xfa_layout_appadapter.h" | 19 #include "xfa/fxfa/parser/xfa_layout_appadapter.h" |
19 #include "xfa/fxfa/parser/xfa_layout_pagemgr_new.h" | 20 #include "xfa/fxfa/parser/xfa_layout_pagemgr_new.h" |
20 #include "xfa/fxfa/parser/xfa_localemgr.h" | 21 #include "xfa/fxfa/parser/xfa_localemgr.h" |
21 #include "xfa/fxfa/parser/xfa_object.h" | 22 #include "xfa/fxfa/parser/xfa_object.h" |
22 #include "xfa/fxfa/parser/xfa_parser.h" | 23 #include "xfa/fxfa/parser/xfa_parser.h" |
| 24 #include "xfa/fxfa/parser/xfa_parser_imp.h" |
23 #include "xfa/fxfa/parser/xfa_script.h" | 25 #include "xfa/fxfa/parser/xfa_script.h" |
24 #include "xfa/fxfa/parser/xfa_utils.h" | 26 #include "xfa/fxfa/parser/xfa_utils.h" |
25 | 27 |
26 CXFA_ItemLayoutProcessor::CXFA_ItemLayoutProcessor(CXFA_Node* pNode, | 28 CXFA_ItemLayoutProcessor::CXFA_ItemLayoutProcessor(CXFA_Node* pNode, |
27 CXFA_LayoutPageMgr* pPageMgr) | 29 CXFA_LayoutPageMgr* pPageMgr) |
28 : m_bKeepBreakFinish(FALSE), | 30 : m_bKeepBreakFinish(FALSE), |
29 m_bIsProcessKeep(FALSE), | 31 m_bIsProcessKeep(FALSE), |
30 m_pKeepHeadNode(nullptr), | 32 m_pKeepHeadNode(nullptr), |
31 m_pKeepTailNode(nullptr), | 33 m_pKeepTailNode(nullptr), |
32 m_pFormNode(pNode), | 34 m_pFormNode(pNode), |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 FX_BOOL& bAppChange, | 86 FX_BOOL& bAppChange, |
85 FX_BOOL bCalculateMargin) { | 87 FX_BOOL bCalculateMargin) { |
86 CXFA_Node* pFormNode = pLayoutItem->m_pFormNode; | 88 CXFA_Node* pFormNode = pLayoutItem->m_pFormNode; |
87 if (fProposedSplitPos > fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION && | 89 if (fProposedSplitPos > fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION && |
88 fProposedSplitPos <= fCurVerticalOffset + pLayoutItem->m_sSize.y - | 90 fProposedSplitPos <= fCurVerticalOffset + pLayoutItem->m_sSize.y - |
89 XFA_LAYOUT_FLOAT_PERCISION) { | 91 XFA_LAYOUT_FLOAT_PERCISION) { |
90 switch (pFormNode->GetIntact()) { | 92 switch (pFormNode->GetIntact()) { |
91 case XFA_ATTRIBUTEENUM_None: { | 93 case XFA_ATTRIBUTEENUM_None: { |
92 FX_BOOL bAnyChanged = FALSE; | 94 FX_BOOL bAnyChanged = FALSE; |
93 CXFA_Document* pDocument = pFormNode->GetDocument(); | 95 CXFA_Document* pDocument = pFormNode->GetDocument(); |
94 IXFA_Notify* pNotify = pDocument->GetParser()->GetNotify(); | 96 CXFA_FFNotify* pNotify = pDocument->GetParser()->GetNotify(); |
95 FX_FLOAT fCurTopMargin = 0, fCurBottomMargin = 0; | 97 FX_FLOAT fCurTopMargin = 0, fCurBottomMargin = 0; |
96 CXFA_Node* pMarginNode = | 98 CXFA_Node* pMarginNode = |
97 pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); | 99 pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin); |
98 if (pMarginNode && bCalculateMargin) { | 100 if (pMarginNode && bCalculateMargin) { |
99 fCurTopMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset) | 101 fCurTopMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset) |
100 .ToUnit(XFA_UNIT_Pt); | 102 .ToUnit(XFA_UNIT_Pt); |
101 fCurBottomMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset) | 103 fCurBottomMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset) |
102 .ToUnit(XFA_UNIT_Pt); | 104 .ToUnit(XFA_UNIT_Pt); |
103 } | 105 } |
104 FX_BOOL bChanged = TRUE; | 106 FX_BOOL bChanged = TRUE; |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 fAddMarginHeight = pSecondLayoutItem->m_sSize.y - fOldHeight; | 348 fAddMarginHeight = pSecondLayoutItem->m_sSize.y - fOldHeight; |
347 pLayoutItem->AddChild(pChildItem); | 349 pLayoutItem->AddChild(pChildItem); |
348 } | 350 } |
349 } | 351 } |
350 } | 352 } |
351 void CXFA_ItemLayoutProcessor::SplitLayoutItem(FX_FLOAT fSplitPos) { | 353 void CXFA_ItemLayoutProcessor::SplitLayoutItem(FX_FLOAT fSplitPos) { |
352 ASSERT(m_pLayoutItem); | 354 ASSERT(m_pLayoutItem); |
353 SplitLayoutItem(m_pLayoutItem, NULL, fSplitPos); | 355 SplitLayoutItem(m_pLayoutItem, NULL, fSplitPos); |
354 } | 356 } |
355 | 357 |
356 IXFA_LayoutPage* CXFA_LayoutItem::GetPage() const { | 358 CXFA_ContainerLayoutItem* CXFA_LayoutItem::GetPage() const { |
357 for (CXFA_LayoutItem* pCurNode = const_cast<CXFA_LayoutItem*>(this); pCurNode; | 359 for (CXFA_LayoutItem* pCurNode = const_cast<CXFA_LayoutItem*>(this); pCurNode; |
358 pCurNode = pCurNode->m_pParent) { | 360 pCurNode = pCurNode->m_pParent) { |
359 if (pCurNode->m_pFormNode->GetClassID() == XFA_ELEMENT_PageArea) | 361 if (pCurNode->m_pFormNode->GetClassID() == XFA_ELEMENT_PageArea) |
360 return static_cast<CXFA_ContainerLayoutItem*>(pCurNode); | 362 return static_cast<CXFA_ContainerLayoutItem*>(pCurNode); |
361 } | 363 } |
362 return nullptr; | 364 return nullptr; |
363 } | 365 } |
364 | 366 |
365 CXFA_Node* CXFA_LayoutItem::GetFormNode() const { | 367 CXFA_Node* CXFA_LayoutItem::GetFormNode() const { |
366 return m_pFormNode; | 368 return m_pFormNode; |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 CXFA_ContentLayoutItem* pLayoutItem = m_pLayoutItem; | 546 CXFA_ContentLayoutItem* pLayoutItem = m_pLayoutItem; |
545 if (pLayoutItem) { | 547 if (pLayoutItem) { |
546 m_pLayoutItem = (CXFA_ContentLayoutItem*)pLayoutItem->m_pNextSibling; | 548 m_pLayoutItem = (CXFA_ContentLayoutItem*)pLayoutItem->m_pNextSibling; |
547 pLayoutItem->m_pNextSibling = NULL; | 549 pLayoutItem->m_pNextSibling = NULL; |
548 } | 550 } |
549 if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done && | 551 if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done && |
550 ToContentLayoutItem(m_pOldLayoutItem)) { | 552 ToContentLayoutItem(m_pOldLayoutItem)) { |
551 if (m_pOldLayoutItem->m_pPrev) { | 553 if (m_pOldLayoutItem->m_pPrev) { |
552 m_pOldLayoutItem->m_pPrev->m_pNext = NULL; | 554 m_pOldLayoutItem->m_pPrev->m_pNext = NULL; |
553 } | 555 } |
554 IXFA_Notify* pNotify = | 556 CXFA_FFNotify* pNotify = |
555 m_pOldLayoutItem->m_pFormNode->GetDocument()->GetParser()->GetNotify(); | 557 m_pOldLayoutItem->m_pFormNode->GetDocument()->GetParser()->GetNotify(); |
556 IXFA_DocLayout* pDocLayout = | 558 CXFA_LayoutProcessor* pDocLayout = |
557 m_pOldLayoutItem->m_pFormNode->GetDocument()->GetDocLayout(); | 559 m_pOldLayoutItem->m_pFormNode->GetDocument()->GetDocLayout(); |
558 CXFA_ContentLayoutItem* pOldLayoutItem = m_pOldLayoutItem; | 560 CXFA_ContentLayoutItem* pOldLayoutItem = m_pOldLayoutItem; |
559 while (pOldLayoutItem) { | 561 while (pOldLayoutItem) { |
560 CXFA_ContentLayoutItem* pNextOldLayoutItem = pOldLayoutItem->m_pNext; | 562 CXFA_ContentLayoutItem* pNextOldLayoutItem = pOldLayoutItem->m_pNext; |
561 pNotify->OnLayoutEvent(pDocLayout, pOldLayoutItem, | 563 pNotify->OnLayoutEvent(pDocLayout, pOldLayoutItem, |
562 XFA_LAYOUTEVENT_ItemRemoving); | 564 XFA_LAYOUTEVENT_ItemRemoving); |
563 delete pOldLayoutItem; | 565 delete pOldLayoutItem; |
564 pOldLayoutItem = pNextOldLayoutItem; | 566 pOldLayoutItem = pNextOldLayoutItem; |
565 } | 567 } |
566 m_pOldLayoutItem = NULL; | 568 m_pOldLayoutItem = NULL; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 default: | 609 default: |
608 break; | 610 break; |
609 } | 611 } |
610 if (bFindRs) { | 612 if (bFindRs) { |
611 break; | 613 break; |
612 } | 614 } |
613 } | 615 } |
614 return bFindRs; | 616 return bFindRs; |
615 } | 617 } |
616 static void XFA_DeleteLayoutGeneratedNode(CXFA_Node* pGenerateNode) { | 618 static void XFA_DeleteLayoutGeneratedNode(CXFA_Node* pGenerateNode) { |
617 IXFA_Notify* pNotify = pGenerateNode->GetDocument()->GetParser()->GetNotify(); | 619 CXFA_FFNotify* pNotify = |
618 IXFA_DocLayout* pDocLayout = pGenerateNode->GetDocument()->GetDocLayout(); | 620 pGenerateNode->GetDocument()->GetParser()->GetNotify(); |
| 621 CXFA_LayoutProcessor* pDocLayout = |
| 622 pGenerateNode->GetDocument()->GetDocLayout(); |
619 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> sIterator( | 623 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> sIterator( |
620 pGenerateNode); | 624 pGenerateNode); |
621 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; | 625 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; |
622 pNode = sIterator.MoveToNext()) { | 626 pNode = sIterator.MoveToNext()) { |
623 CXFA_ContentLayoutItem* pCurLayoutItem = | 627 CXFA_ContentLayoutItem* pCurLayoutItem = |
624 (CXFA_ContentLayoutItem*)pNode->GetUserData(XFA_LAYOUTITEMKEY); | 628 (CXFA_ContentLayoutItem*)pNode->GetUserData(XFA_LAYOUTITEMKEY); |
625 CXFA_ContentLayoutItem* pNextLayoutItem = NULL; | 629 CXFA_ContentLayoutItem* pNextLayoutItem = NULL; |
626 while (pCurLayoutItem) { | 630 while (pCurLayoutItem) { |
627 pNextLayoutItem = pCurLayoutItem->m_pNext; | 631 pNextLayoutItem = pCurLayoutItem->m_pNext; |
628 pNotify->OnLayoutEvent(pDocLayout, pCurLayoutItem, | 632 pNotify->OnLayoutEvent(pDocLayout, pCurLayoutItem, |
(...skipping 2227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2856 void CXFA_ItemLayoutProcessor::DoLayoutField() { | 2860 void CXFA_ItemLayoutProcessor::DoLayoutField() { |
2857 if (m_pLayoutItem) | 2861 if (m_pLayoutItem) |
2858 return; | 2862 return; |
2859 | 2863 |
2860 ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE); | 2864 ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE); |
2861 m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); | 2865 m_pLayoutItem = CreateContentLayoutItem(m_pFormNode); |
2862 if (!m_pLayoutItem) { | 2866 if (!m_pLayoutItem) { |
2863 return; | 2867 return; |
2864 } | 2868 } |
2865 CXFA_Document* pDocument = m_pFormNode->GetDocument(); | 2869 CXFA_Document* pDocument = m_pFormNode->GetDocument(); |
2866 IXFA_Notify* pNotify = pDocument->GetParser()->GetNotify(); | 2870 CXFA_FFNotify* pNotify = pDocument->GetParser()->GetNotify(); |
2867 FX_FLOAT fHeight = -1; | 2871 FX_FLOAT fHeight = -1; |
2868 FX_FLOAT fWidth = -1; | 2872 FX_FLOAT fWidth = -1; |
2869 pNotify->StartFieldDrawLayout(m_pFormNode, fWidth, fHeight); | 2873 pNotify->StartFieldDrawLayout(m_pFormNode, fWidth, fHeight); |
2870 int32_t nRotate = | 2874 int32_t nRotate = |
2871 FXSYS_round(m_pFormNode->GetMeasure(XFA_ATTRIBUTE_Rotate).GetValue()); | 2875 FXSYS_round(m_pFormNode->GetMeasure(XFA_ATTRIBUTE_Rotate).GetValue()); |
2872 nRotate = XFA_MapRotation(nRotate); | 2876 nRotate = XFA_MapRotation(nRotate); |
2873 if (nRotate == 90 || nRotate == 270) { | 2877 if (nRotate == 90 || nRotate == 270) { |
2874 FX_FLOAT fTmp = fWidth; | 2878 FX_FLOAT fTmp = fWidth; |
2875 fWidth = fHeight; | 2879 fWidth = fHeight; |
2876 fHeight = fTmp; | 2880 fHeight = fTmp; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2959 (int32_t)(uintptr_t)m_PendingNodesCount.GetValueAt(pTemplate); | 2963 (int32_t)(uintptr_t)m_PendingNodesCount.GetValueAt(pTemplate); |
2960 if (iCount >= iMax) { | 2964 if (iCount >= iMax) { |
2961 return FALSE; | 2965 return FALSE; |
2962 } | 2966 } |
2963 iCount++; | 2967 iCount++; |
2964 m_PendingNodesCount.SetAt(pTemplate, (void*)(uintptr_t)(iCount)); | 2968 m_PendingNodesCount.SetAt(pTemplate, (void*)(uintptr_t)(iCount)); |
2965 return TRUE; | 2969 return TRUE; |
2966 } | 2970 } |
2967 return TRUE; | 2971 return TRUE; |
2968 } | 2972 } |
OLD | NEW |