/*********************************************************************
*	Button
*	SOURCE FILE
*	Autor:	Michal Jirouš
*	Datum: 30.6.2008
*	Soubor: button.cpp
*	Popis: Implementace obycejneho tlacitka
**********************************************************************/

#include "gfg.h"

/*Vykreslovani*/
void Button::draw( ScissorBox &scissorBox )
{
	if( !m_bVisible )
		return;

	glPushAttrib( GL_CURRENT_BIT | GL_ENABLE_BIT | GL_SCISSOR_BIT );
	glEnable( GL_TEXTURE_2D );
	glEnable(GL_BLEND);
	glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
	if( m_pTexture_down && m_pTexture_up )
	{
		if( m_bPushed )
			glBindTexture( GL_TEXTURE_2D, m_pTexture_down->texture_id );
		else
			glBindTexture( GL_TEXTURE_2D, m_pTexture_up->texture_id );
	}

	//V ruznych svatech se pouzivaji jine textury a barvy
	if( m_bMouseOver && m_bPushed)
		setColor( m_ColorPushedMouseOver );
	else if( m_bMouseOver )
		setColor( m_ColorMouseOver );
	else if( m_bPushed )
		setColor( m_ColorPushed );
	else
		setColor( m_ColorIdle );

	//ctverec
	glBegin( GL_QUADS );
		glTexCoord2i(0,0);	glVertex2f( m_fGlobalXpos, m_fGlobalYpos );
		glTexCoord2i(1,0);	glVertex2f( m_fGlobalXpos + m_fWidth, m_fGlobalYpos );
		glTexCoord2i(1,1);	glVertex2f( m_fGlobalXpos + m_fWidth, m_fGlobalYpos + m_fHeight );
		glTexCoord2i(0,1);	glVertex2f( m_fGlobalXpos , m_fGlobalYpos + m_fHeight );
	glEnd();
	
	if( m_bFocused )
	{
		setColor( m_ColorBackGround );
		glBegin( GL_LINE_STRIP );	//obdelnik
			glVertex2f( m_fGlobalXpos, m_fGlobalYpos );
			glVertex2f( m_fGlobalXpos + m_fWidth, m_fGlobalYpos );
			glVertex2f( m_fGlobalXpos + m_fWidth, m_fGlobalYpos + m_fHeight );
			glVertex2f( m_fGlobalXpos , m_fGlobalYpos + m_fHeight );
			glVertex2f( m_fGlobalXpos, m_fGlobalYpos );
		glEnd();
	}


	if( m_bMouseOver )
	{
		//setColor( m_ColorCaptionMouseOver );
		setColor( Color4I( 50,50,50,255 ) );
	}
	else
		setColor( m_ColorCaptionIdle );
	//prunik orezavacich boxu, text muze byt vykreslen jen v oblasti teto komponenty
	ScissorBox intersected = m_ScissorBox.intersection( scissorBox );
	glScissor( (int)intersected.x, (int)intersected.y, (int)intersected.w, (int)intersected.h );
	if( !m_dsCaption.empty() )
		m_dsCaption.draw( m_fGlobalXpos + m_fWidth/2, m_fGlobalYpos + m_fHeight / 2.0f );
	glPopAttrib();
}

/*Inicializace*/
void Button::init()
{	
	//nastaveni textury v klidovem stavu
	m_pTexture_up = textureLibrary.applyTexture( "GFG_BUTTON_UP" );

	//nastaveni textury v stisknutem stavu
	m_pTexture_down = textureLibrary.applyTexture( "GFG_BUTTON_DOWN" );
	
	//nastaveni barev
	m_ColorCaptionMouseOver = GFG_COLOR_BUTTON_CAPTION_MOUSEOVER;
	m_ColorCaptionIdle = GFG_COLOR_BUTTON_CAPTION_IDLE;
	m_ColorMouseOver = GFG_COLOR_BUTTON_MOUSEOVER;
	m_ColorIdle = GFG_COLOR_BUTTON_IDLE;
	
	m_ColorPushed = m_ColorIdle;
	m_ColorPushedMouseOver = m_ColorMouseOver;
	m_ColorBackGround = GFG_COLOR_PROGRESSBAR_CAPTION;
}

Button::~Button()
{
	
}





