// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_FDE_FDE_ITERATOR_H_
#define XFA_FDE_FDE_ITERATOR_H_

#include "xfa/fde/fde_visualset.h"
#include "xfa/fgas/crt/fgas_memory.h"
#include "xfa/fgas/crt/fgas_utils.h"

struct FDE_CANVASITEM {
  IFDE_CanvasSet* pCanvas;
  FDE_HVISUALOBJ hCanvas;
  FX_POSITION hPos;
};

class CFDE_VisualSetIterator : public CFX_Target {
 public:
  CFDE_VisualSetIterator();
  ~CFDE_VisualSetIterator();

  void Release() { delete this; }

  FX_BOOL AttachCanvas(IFDE_CanvasSet* pCanvas);
  FX_BOOL FilterObjects(uint32_t dwObjects = 0xFFFFFFFF);

  void Reset();
  FDE_HVISUALOBJ GetNext(IFDE_VisualSet*& pVisualSet,
                         FDE_HVISUALOBJ* phCanvasObj = NULL,
                         IFDE_CanvasSet** ppCanvasSet = NULL);

 protected:
  uint32_t m_dwFilter;
  CFX_StackTemplate<FDE_CANVASITEM> m_CanvasStack;
};

#endif  // XFA_FDE_FDE_ITERATOR_H_
