| 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/fde/fde_iterator.h" | 7 #include "xfa/fde/fde_iterator.h" |
| 8 | 8 |
| 9 #include "xfa/fgas/crt/fgas_utils.h" | 9 #include "xfa/fgas/crt/fgas_utils.h" |
| 10 | 10 |
| 11 IFDE_VisualSetIterator* IFDE_VisualSetIterator::Create() { | |
| 12 return new CFDE_VisualSetIterator; | |
| 13 } | |
| 14 CFDE_VisualSetIterator::CFDE_VisualSetIterator() : m_dwFilter(0) {} | 11 CFDE_VisualSetIterator::CFDE_VisualSetIterator() : m_dwFilter(0) {} |
| 12 |
| 15 CFDE_VisualSetIterator::~CFDE_VisualSetIterator() { | 13 CFDE_VisualSetIterator::~CFDE_VisualSetIterator() { |
| 16 m_CanvasStack.RemoveAll(); | 14 m_CanvasStack.RemoveAll(); |
| 17 } | 15 } |
| 16 |
| 18 FX_BOOL CFDE_VisualSetIterator::AttachCanvas(IFDE_CanvasSet* pCanvas) { | 17 FX_BOOL CFDE_VisualSetIterator::AttachCanvas(IFDE_CanvasSet* pCanvas) { |
| 19 FXSYS_assert(pCanvas != NULL); | 18 FXSYS_assert(pCanvas); |
| 19 |
| 20 m_CanvasStack.RemoveAll(); | 20 m_CanvasStack.RemoveAll(); |
| 21 FDE_CANVASITEM canvas; | 21 FDE_CANVASITEM canvas; |
| 22 canvas.hCanvas = NULL; | 22 canvas.hCanvas = nullptr; |
| 23 canvas.pCanvas = pCanvas; | 23 canvas.pCanvas = pCanvas; |
| 24 canvas.hPos = pCanvas->GetFirstPosition(NULL); | 24 canvas.hPos = pCanvas->GetFirstPosition(nullptr); |
| 25 if (canvas.hPos == NULL) { | 25 if (!canvas.hPos) |
| 26 return FALSE; | 26 return FALSE; |
| 27 } | 27 |
| 28 return m_CanvasStack.Push(canvas) == 0; | 28 return m_CanvasStack.Push(canvas) == 0; |
| 29 } | 29 } |
| 30 |
| 30 FX_BOOL CFDE_VisualSetIterator::FilterObjects(uint32_t dwObjects) { | 31 FX_BOOL CFDE_VisualSetIterator::FilterObjects(uint32_t dwObjects) { |
| 31 if (m_CanvasStack.GetSize() == 0) | 32 if (m_CanvasStack.GetSize() == 0) |
| 32 return FALSE; | 33 return FALSE; |
| 33 | 34 |
| 34 while (m_CanvasStack.GetSize() > 1) | 35 while (m_CanvasStack.GetSize() > 1) |
| 35 m_CanvasStack.Pop(); | 36 m_CanvasStack.Pop(); |
| 36 | 37 |
| 37 m_dwFilter = dwObjects; | 38 m_dwFilter = dwObjects; |
| 38 | 39 |
| 39 FDE_CANVASITEM* pCanvas = m_CanvasStack.GetTopElement(); | 40 FDE_CANVASITEM* pCanvas = m_CanvasStack.GetTopElement(); |
| 40 FXSYS_assert(pCanvas != NULL && pCanvas->pCanvas != NULL); | 41 FXSYS_assert(pCanvas && pCanvas->pCanvas); |
| 41 pCanvas->hPos = pCanvas->pCanvas->GetFirstPosition(NULL); | 42 |
| 42 return pCanvas->hPos != NULL; | 43 pCanvas->hPos = pCanvas->pCanvas->GetFirstPosition(nullptr); |
| 44 return !!pCanvas->hPos; |
| 43 } | 45 } |
| 46 |
| 44 void CFDE_VisualSetIterator::Reset() { | 47 void CFDE_VisualSetIterator::Reset() { |
| 45 FilterObjects(m_dwFilter); | 48 FilterObjects(m_dwFilter); |
| 46 } | 49 } |
| 50 |
| 47 FDE_HVISUALOBJ CFDE_VisualSetIterator::GetNext(IFDE_VisualSet*& pVisualSet, | 51 FDE_HVISUALOBJ CFDE_VisualSetIterator::GetNext(IFDE_VisualSet*& pVisualSet, |
| 48 FDE_HVISUALOBJ* phCanvasObj, | 52 FDE_HVISUALOBJ* phCanvasObj, |
| 49 IFDE_CanvasSet** ppCanvasSet) { | 53 IFDE_CanvasSet** ppCanvasSet) { |
| 50 while (m_CanvasStack.GetSize() > 0) { | 54 while (m_CanvasStack.GetSize() > 0) { |
| 51 FDE_CANVASITEM* pCanvas = m_CanvasStack.GetTopElement(); | 55 FDE_CANVASITEM* pCanvas = m_CanvasStack.GetTopElement(); |
| 52 FXSYS_assert(pCanvas != NULL && pCanvas->pCanvas != NULL); | 56 FXSYS_assert(pCanvas && pCanvas->pCanvas); |
| 53 if (pCanvas->hPos == NULL) { | 57 |
| 54 if (m_CanvasStack.GetSize() == 1) { | 58 if (!pCanvas->hPos) { |
| 59 if (m_CanvasStack.GetSize() == 1) |
| 55 break; | 60 break; |
| 56 } | 61 |
| 57 m_CanvasStack.Pop(); | 62 m_CanvasStack.Pop(); |
| 58 continue; | 63 continue; |
| 59 } | 64 } |
| 60 do { | 65 do { |
| 61 FDE_HVISUALOBJ hObj = pCanvas->pCanvas->GetNext( | 66 FDE_HVISUALOBJ hObj = pCanvas->pCanvas->GetNext( |
| 62 pCanvas->hCanvas, pCanvas->hPos, pVisualSet); | 67 pCanvas->hCanvas, pCanvas->hPos, pVisualSet); |
| 63 FXSYS_assert(hObj != NULL); | 68 FXSYS_assert(hObj); |
| 69 |
| 64 FDE_VISUALOBJTYPE eType = pVisualSet->GetType(); | 70 FDE_VISUALOBJTYPE eType = pVisualSet->GetType(); |
| 65 if (eType == FDE_VISUALOBJ_Canvas) { | 71 if (eType == FDE_VISUALOBJ_Canvas) { |
| 66 FDE_CANVASITEM canvas; | 72 FDE_CANVASITEM canvas; |
| 67 canvas.hCanvas = hObj; | 73 canvas.hCanvas = hObj; |
| 68 canvas.pCanvas = (IFDE_CanvasSet*)pVisualSet; | 74 canvas.pCanvas = (IFDE_CanvasSet*)pVisualSet; |
| 69 canvas.hPos = canvas.pCanvas->GetFirstPosition(hObj); | 75 canvas.hPos = canvas.pCanvas->GetFirstPosition(hObj); |
| 70 m_CanvasStack.Push(canvas); | 76 m_CanvasStack.Push(canvas); |
| 71 break; | 77 break; |
| 72 } | 78 } |
| 73 uint32_t dwObj = (uint32_t)eType; | 79 uint32_t dwObj = (uint32_t)eType; |
| 74 if ((m_dwFilter & dwObj) != 0) { | 80 if ((m_dwFilter & dwObj) != 0) { |
| 75 if (ppCanvasSet) { | 81 if (ppCanvasSet) |
| 76 *ppCanvasSet = pCanvas->pCanvas; | 82 *ppCanvasSet = pCanvas->pCanvas; |
| 77 } | 83 if (phCanvasObj) |
| 78 if (phCanvasObj) { | |
| 79 *phCanvasObj = pCanvas->hCanvas; | 84 *phCanvasObj = pCanvas->hCanvas; |
| 80 } | |
| 81 return hObj; | 85 return hObj; |
| 82 } | 86 } |
| 83 } while (pCanvas->hPos != NULL); | 87 } while (pCanvas->hPos); |
| 84 } | 88 } |
| 85 if (ppCanvasSet) { | 89 if (ppCanvasSet) |
| 86 *ppCanvasSet = NULL; | 90 *ppCanvasSet = nullptr; |
| 87 } | 91 if (phCanvasObj) |
| 88 if (phCanvasObj) { | 92 *phCanvasObj = nullptr; |
| 89 *phCanvasObj = NULL; | 93 |
| 90 } | 94 pVisualSet = nullptr; |
| 91 pVisualSet = NULL; | 95 return nullptr; |
| 92 return NULL; | |
| 93 } | 96 } |
| OLD | NEW |