Ejemplo n.º 1
0
//--------------------------------------------------------------------------------------
void CButton::Draw ( void )
{
	if ( !m_bVisible )
		return;

	if ( !m_bEnabledStateColor )
		m_eState = SControlColor::STATE_NORMAL;
	else if ( !m_bEnabled )
		m_eState = SControlColor::STATE_DISABLED;
	else if ( m_bPressed )
		m_eState = SControlColor::STATE_PRESSED;
	else if ( m_bMouseOver )
		m_eState = SControlColor::STATE_MOUSE_OVER;
	else
		m_eState = SControlColor::STATE_NORMAL;

	std::string str = GetText ();
	m_pFont->CutString ( m_rBoundingBox.size.cx - 4, str );

	m_pDialog->DrawBox ( m_rBoundingBox, m_sControlColor.d3dColorBox [ m_eState ], m_sControlColor.d3dColorOutline );
	m_pDialog->DrawFont ( SControlRect ( m_rBoundingBox.pos.GetX () + m_rBoundingBox.size.cx / 2, m_rBoundingBox.pos.GetY () + m_rBoundingBox.size.cy / 2 ),
						  m_sControlColor.d3dColorFont, str.c_str (), D3DFONT_CENTERED_X | D3DFONT_CENTERED_Y, m_pFont );
}
void CScrollBarVertical::Draw ( void )
{
	if ( !m_bVisible )
		return;

	CVector mPos = m_pDialog->GetMouse ()->GetPos ();

	// Check if the arrow button has been held for a while.
	// If so, update the thumb position to simulate repeated
	// scroll.
	if ( m_Arrow == CLICKED_UP &&
		 m_rUpButton.ContainsPoint ( m_LastMouse ) &&
		 !m_timer.Running () )
	{
		Scroll ( -m_nStep );
		m_timer.Start ( SCROLLBAR_ARROWCLICK_START );
	}
	else if ( m_Arrow == CLICKED_DOWN &&
			  m_rDownButton.ContainsPoint ( m_LastMouse ) &&
			  !m_timer.Running () )
	{
		Scroll ( m_nStep );
		m_timer.Start ( SCROLLBAR_ARROWCLICK_START );
	}

	// Check for click on track
	if ( m_bPressed &&
		 !m_timer.Running () &&
		 m_rBoundingBox.ContainsPoint ( m_LastMouse ) )
	{
		if ( m_Arrow == HELD_UP &&
			 m_rThumb.m_pos.m_nY > m_LastMouse.m_nY &&
			 m_rBoundingBox.m_pos.m_nY <= m_LastMouse.m_nY)
		{
			Scroll ( -( m_nPageSize - 1 ) );
			m_timer.Start ( SCROLLBAR_ARROWCLICK_START );
		}
		else if ( m_Arrow == HELD_DOWN &&
				  m_rThumb.m_pos.m_nY + m_rThumb.m_size.cy <= m_LastMouse.m_nY &&
				  ( m_rBoundingBox.m_pos.m_nY + m_rBoundingBox.m_size.cx ) + m_rBoundingBox.m_size.cy > m_LastMouse.m_nY)
		{
			Scroll ( m_nPageSize - 1 );
			m_timer.Start ( SCROLLBAR_ARROWCLICK_START );
		}
	}

	CWidget::Draw ();

	SControlColor::SControlState eState = m_bShowThumb && m_bEnabled ?
		SControlColor::STATE_NORMAL :
		SControlColor::STATE_DISABLED;

	D3DCOLOR d3dColorThumb = m_sControlColor.d3dColorBox [ CMPSTATE ( m_Arrow, CLICKED_THUMB, SControlColor::STATE_PRESSED, eState ) ];
	D3DCOLOR d3dColorUp = m_sControlColor.d3dColorBox [ CMPSTATE ( m_Arrow, CLICKED_UP, SControlColor::STATE_PRESSED, eState ) ];
	D3DCOLOR d3dColorDown = m_sControlColor.d3dColorBox [ CMPSTATE ( m_Arrow, CLICKED_DOWN, SControlColor::STATE_PRESSED, eState ) ];

	if ( m_bShowThumb &&
		 !m_bPressed )
	{
		if ( m_rThumb.ContainsPoint ( mPos ) )
			d3dColorThumb = m_sControlColor.d3dColorBox [ m_eState ];
		else if ( m_rUpButton.ContainsPoint ( mPos ) )
			d3dColorUp = m_sControlColor.d3dColorBox [ m_eState ];
		else if ( m_rDownButton.ContainsPoint ( mPos ) )
			d3dColorDown = m_sControlColor.d3dColorBox [ m_eState ];
	}

	// Background track layer
	m_pDialog->DrawBox ( m_rBoundingBox, m_sControlColor.d3dColorBoxBack, m_sControlColor.d3dColorOutline, m_bAntAlias );

	// Up Arrow
	m_pDialog->DrawBox ( m_rUpButton, d3dColorUp, m_sControlColor.d3dColorOutline, m_bAntAlias );

	SControlRect rShape = m_rUpButton;
	rShape.m_pos.m_nX = m_rUpButton.m_pos.m_nX + m_rUpButton.m_size.cx / 2 ;
	rShape.m_pos.m_nY = m_rUpButton.m_pos.m_nY + m_rUpButton.m_size.cx / 2 + 4;
	rShape.m_size.cx = m_rUpButton.m_size.cx / 2 - 3;

	m_pDialog->DrawTriangle ( rShape, 0.f, m_sControlColor.d3dColorShape, 0 );

	// Down Arrow
	m_pDialog->DrawBox ( m_rDownButton, d3dColorDown, m_sControlColor.d3dColorOutline, m_bAntAlias );

	rShape.m_pos.m_nX = m_rDownButton.m_pos.m_nX + m_rDownButton.m_size.cx / 2;
	rShape.m_pos.m_nY = m_rDownButton.m_pos.m_nY + m_rDownButton.m_size.cx / 2 - 4;
	m_pDialog->DrawTriangle ( SControlRect ( rShape.m_pos, rShape.m_size ), 180.f, m_sControlColor.d3dColorShape, 0 );

	// Thumb button
	m_pDialog->DrawBox ( m_rThumb, d3dColorThumb, m_sControlColor.d3dColorOutline, m_bAntAlias );
}