
#include "stdafx.h"
#include "CButtonGUI.h"
#include "CButtonText.h"

std::string g_ButtonText;
POINT g_ButtonTextPos;
bool g_bText;
//////////////////////////////////////////////////////////////////////////
// Construktor - 
//////////////////////////////////////////////////////////////////////////
C_BUTTON_0::C_BUTTON_0(std::string name, uint tex_sta, uint tex_move, uint tex_click, TRect rect, TRGBi color)
: _texture_id(tex_sta), _tex_sta(tex_sta), _tex_move(tex_move), _tex_click(tex_click)
{
	SetState(true);
	SetVisible(true);
	SetColor(color);
	SetRect(rect);
	SetName(name);
	_clickMouse = false;
	_mouseMove = false;
}

//////////////////////////////////////////////////////////////////////////
// Keyboard - odchytava poslane zpravy
//////////////////////////////////////////////////////////////////////////
void C_BUTTON_0::Keyboard(bool keys[255])
{
	if( !GetState() ) return;	
}

//////////////////////////////////////////////////////////////////////////
// MouseClick - odchytava zpravu mysi
//////////////////////////////////////////////////////////////////////////
void C_BUTTON_0::MouseClick(int button, int x, int y)
{
	if( !GetState() ) return;
	if(button == W_MOUSE_LEFT)
	{
		_clickMouse = true;
	}
	if(button == W_MOUSE_UNLEFT)
	{
		_clickMouse = false;
	}
}

//////////////////////////////////////////////////////////////////////////
// MouseMove - odchytava pohyb mysi
//////////////////////////////////////////////////////////////////////////
void C_BUTTON_0::MouseMove(int x, int y)
{
	_mouseMove = 1;
	_mousePos.x = x;
	_mousePos.y = y;
	if( !GetState() ) return;
	this->_texture_id = _tex_move;
}

//////////////////////////////////////////////////////////////////////////
// MouseMoveEx - odchytava pohyb mysi i pokud se mys nenachayi nad objektem
//////////////////////////////////////////////////////////////////////////
void C_BUTTON_0::MouseMoveEx(int x,int y)
{
	POINT t = {x, y};
	TRect rect = GetRect();
	if( !ColPointToRect( t, rect ) ) _mouseMove=0;
	if( !GetState() ) return;
	if(!ColPointToRect(t,rect))
	{ 
		_texture_id = _tex_sta;
		_clickMouse = false;
	}
}

//////////////////////////////////////////////////////////////////////////
// Render - vykresleni objektu
//////////////////////////////////////////////////////////////////////////
void C_BUTTON_0::Render(bool focus)
{
	if( !GetVisible() ) return;
	this->doOrtho();
	glLoadIdentity();
	TRGBi color = GetColor();
	glColor3ub(color.r, color.g, color.b);

	(_texture_id == 0) ? glDisable(GL_TEXTURE_2D) :	glEnable(GL_TEXTURE_2D);
	if(_clickMouse) _texture_id = _tex_click;
	if( !GetState() ) 
	{
		glColor3f(0.4f, 0.4f, 0.4f);
		_texture_id = _tex_sta;
	}
	glBindTexture(GL_TEXTURE_2D,_texture_id);
	TRect rect = GetRect();
	glEnable(GL_ALPHA_TEST);
	glBegin(GL_QUADS);
		glTexCoord2i(0,1);		glVertex2f(rect.x,rect.y);
		glTexCoord2i(1,1);		glVertex2f(rect.x+rect.width,rect.y);
		glTexCoord2i(1,0);		glVertex2f(rect.x+rect.width,rect.y+rect.height);
		glTexCoord2i(0,0);		glVertex2f(rect.x,rect.y+rect.height);
	glEnd();
	glDisable(GL_TEXTURE_2D);

	if( _mouseMove && _textMouseMove.size() != 0 )
	{
		g_ButtonText = _textMouseMove;
		g_ButtonTextPos = _mousePos;
		g_bText=1;
	}
	this->backOrtho();
}

void C_BUTTON_0::SetTextMouseMove( std::string text )
{
	_textMouseMove = text;
}
