//-------------------------------------------------------------------------------------- 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 ); }