/// Copyright (c) 2010 Ruben Penalva. All rights reserved.
/// Redistribution and use in source and binary forms, with or without modification, 
/// are permitted provided that the following conditions are met:
///    1. Redistributions of source code must retain the above copyright notice, this 
///    list of conditions and the following disclaimer.
///    2. Redistributions in binary form must reproduce the above copyright notice,
///    this list of conditions and the following disclaimer in the documentation and/or
///    other materials provided with the distribution.
///    3. The name of the author may not be used to endorse or promote products derived
///    from this software without specific prior written permission.
///
/// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
/// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
/// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
/// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
/// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
/// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
/// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

/// @file MouseState.cpp
/// This source file is part of CUDA Ray Casting test.
/// The file holds the MouseState class implementation.
/// @author Ruben Penalva (ruben.penalva@rpenalva.com)
#include "MouseState.h"

using namespace GlutWrapper;

MouseState::MouseState(void)	:	m_button(Left), m_buttonState(Up),
									m_x(0), m_y(0), m_oldX(0), m_oldY(0)
{
}

MouseState::MouseState(MouseButton button, MouseButtonState buttonState, 
					   int x, int y, int oldX, int oldY)	:	m_button(button), m_buttonState(buttonState),
																m_x(x), m_y(y), 
																m_oldX(oldX), m_oldY(oldY)
{
}
	
MouseState::MouseState(const MouseState& state)	:	m_button(state.m_button), m_buttonState(state.m_buttonState), 
													m_x(state.m_x), m_y(state.m_y), 
													m_oldX(state.m_oldX), m_oldY(state.m_oldY)
{


}

MouseState::~MouseState(void)
{
}

MouseState& MouseState::operator=(const MouseState& state)
{	
	if (this == &state)
	{
		return *this;
	}

	m_button = state.m_button;
	m_buttonState = state.m_buttonState;
	m_x = state.m_x;
	m_y = state.m_y;
	m_oldX = state.m_oldX;
	m_oldY = state.m_oldY;

	return *this;
}