// 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 "xfa/fwl/cfwl_timer.h"

#include "xfa/fwl/cfwl_app.h"
#include "xfa/fwl/cfwl_timerinfo.h"
#include "xfa/fwl/cfwl_widget.h"
#include "xfa/fwl/ifwl_adaptertimermgr.h"
#include "xfa/fxfa/cxfa_ffapp.h"

CFWL_Timer::CFWL_Timer(CFWL_Widget* parent) : m_pWidget(parent) {}

CFWL_Timer::~CFWL_Timer() {}

CFWL_TimerInfo* CFWL_Timer::StartTimer(uint32_t dwElapse, bool bImmediately) {
  const CFWL_App* pApp = m_pWidget->GetOwnerApp();
  if (!pApp)
    return nullptr;

  CXFA_FFApp* pAdapterNative = pApp->GetAdapterNative();
  if (!pAdapterNative)
    return nullptr;

  if (!m_pAdapterTimerMgr)
    m_pAdapterTimerMgr = pAdapterNative->NewTimerMgr();

  if (!m_pAdapterTimerMgr)
    return nullptr;

  CFWL_TimerInfo* pTimerInfo = nullptr;
  m_pAdapterTimerMgr->Start(this, dwElapse, bImmediately, &pTimerInfo);
  return pTimerInfo;
}
