// 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 "../../include/pdfwindow/PDFWindow.h"
#include "../../include/pdfwindow/PWL_Wnd.h"
#include "../../include/pdfwindow/PWL_Button.h"
#include "../../include/pdfwindow/PWL_Utils.h"

/* ------------------------------- CPWL_Button ---------------------------------- */

CPWL_Button::CPWL_Button() :
	m_bMouseDown(false)
{
}

CPWL_Button::~CPWL_Button()
{
//	PWL_TRACE("~CPWL_Button\n");
}

CFX_ByteString CPWL_Button::GetClassName() const
{
	return "CPWL_Button";
}

void CPWL_Button::OnCreate(PWL_CREATEPARAM & cp)
{
	cp.eCursorType = FXCT_HAND;
}

bool CPWL_Button::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
{
	CPWL_Wnd::OnLButtonDown(point, nFlag);

	m_bMouseDown = true;
	SetCapture();

	return true;
}

bool CPWL_Button::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
{
	CPWL_Wnd::OnLButtonUp(point, nFlag);

	ReleaseCapture();
	m_bMouseDown = false;

	return true;
}

