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

#include "fpdfsdk/include/fsdk_rendercontext.h"

#include "core/fpdfapi/fpdf_render/include/cpdf_renderoptions.h"

void CRenderContext::Clear() {
  m_pDevice = NULL;
  m_pContext = NULL;
  m_pRenderer = NULL;
  m_pAnnots = NULL;
  m_pOptions = NULL;
#ifdef _WIN32_WCE
  m_pBitmap = NULL;
  m_hBitmap = NULL;
#endif
}

CRenderContext::~CRenderContext() {
  delete m_pRenderer;
  delete m_pContext;
  delete m_pDevice;
  delete m_pAnnots;
  delete m_pOptions->m_pOCContext;
  delete m_pOptions;
#ifdef _WIN32_WCE
  delete m_pBitmap;
  if (m_hBitmap)
    DeleteObject(m_hBitmap);
#endif
}

IFSDK_PAUSE_Adapter::IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause) {
  m_IPause = IPause;
}

IFSDK_PAUSE_Adapter::~IFSDK_PAUSE_Adapter() {}

FX_BOOL IFSDK_PAUSE_Adapter::NeedToPauseNow() {
  if (m_IPause->NeedToPauseNow) {
    return m_IPause->NeedToPauseNow(m_IPause);
  }
  return FALSE;
}
