| 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 |