// GUIScroll.cpp: implementation of the CGUIScroll class. // ////////////////////////////////////////////////////////////////////// #include "WinInput.h" #include "GUIScroll.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CGUIScroll::CGUIScroll() { m_bShow = TRUE; m_lValue = 0; m_lNowPos = 0; lMove = 0; bScroll = FALSE; m_lpBarButton = NULL; m_lpUpArrowButton = NULL; m_lpDownArrowButton = NULL; m_bScrollKind = SCROLL_VSCROLL; } CGUIScroll::~CGUIScroll() { if(m_lpDownArrowButton) { delete m_lpDownArrowButton; m_lpDownArrowButton = NULL; } if(m_lpUpArrowButton) { delete m_lpUpArrowButton; m_lpUpArrowButton = NULL; } if(m_lpBarButton) { delete m_lpBarButton; m_lpBarButton = NULL; } } void CGUIScroll::Update(void) { if(m_lMin == m_lMax) return; POINT *ptMousePos = g_DeviceInput.GetMousePosition(); m_lpBarButton->Update(); if(m_lpUpArrowButton) m_lpUpArrowButton->Update(); if(m_lpDownArrowButton) m_lpDownArrowButton->Update(); if(m_lpUpArrowButton && m_lpUpArrowButton->m_nState == BUTTON_CLICK) { (*m_lValue)--; if(*m_lValue < m_lMin) (*m_lValue) = m_lMin; } else if(m_lpDownArrowButton && m_lpDownArrowButton->m_nState == BUTTON_CLICK) { (*m_lValue)++; if(*m_lValue > m_lMax) (*m_lValue) = m_lMax; } if(m_bScrollKind == SCROLL_VSCROLL) { float fRate = ((float)m_rcEdge.bottom / (m_lMax - m_lMin)); if(m_lpBarButton->m_nState == BUTTON_PRESS && g_DeviceInput.GetIsLeftMouseDown()) { lMove = ptMousePos->y - (m_lpBarButton->m_lMoveY + m_ptPosition.y + m_lNowPos); bScroll = TRUE; } if(bScroll) { if(m_lpBarButton->m_nState == BUTTON_NONE) { bScroll = FALSE; } /* g_DeviceInput.GetIsLeftMouseUp() || !g_DeviceInput.GetIsFocus() || !g_DeviceInput.InRect(m_rcEdge.left + m_lpBarButton->m_lMoveX + m_ptPosition.x - 3, m_rcEdge.top + m_lpBarButton->m_lMoveY + m_ptPosition.y + lMove - 5, m_rcEdge.right + m_lpBarButton->m_lMoveX + m_ptPosition.x + 3, m_rcEdge.bottom + m_lpBarButton->m_lMoveY + m_ptPosition.y + lMove + 5) ) { }*/ if(ptMousePos->y < m_lpBarButton->m_lMoveY + m_ptPosition.y + lMove) { m_lNowPos = 0; } else if(ptMousePos->y > m_lpBarButton->m_lMoveY + m_ptPosition.y + m_rcEdge.bottom + lMove) { m_lNowPos = m_rcEdge.bottom; } else { m_lNowPos = (ptMousePos->y - (m_lpBarButton->m_lMoveY + m_ptPosition.y)) - lMove; if(m_lNowPos < 0) m_lNowPos = 0; } (*m_lValue) = (m_lNowPos / fRate) + m_lMin; } /* else { m_lNowPos = (*m_lValue) * fRate; }*/ if(m_lpBarButton->m_lpNormalButton) m_lpBarButton->m_lpNormalButton->m_nPutY = m_ptPosition.y + m_lNowPos; if(m_lpBarButton->m_lpOnMouseButton) m_lpBarButton->m_lpOnMouseButton->m_nPutY = m_ptPosition.y + m_lNowPos; if(m_lpBarButton->m_lpClickMouseButton) m_lpBarButton->m_lpClickMouseButton->m_nPutY = m_ptPosition.y + m_lNowPos; } else if(m_bScrollKind == SCROLL_HSCROLL) { float fRate = ((float)m_rcEdge.right / (m_lMax - m_lMin)); if(m_lpBarButton->m_nState == BUTTON_PRESS && g_DeviceInput.GetIsLeftMouseDown()) { lMove = ptMousePos->x - (m_lpBarButton->m_lMoveX + m_ptPosition.x + m_lNowPos); bScroll = TRUE; } if(bScroll) { if( g_DeviceInput.GetIsLeftMouseUp() || !g_DeviceInput.GetIsFocus() || !g_DeviceInput.InRect(m_rcEdge.left + m_lpBarButton->m_lMoveX + m_ptPosition.x + lMove - 3, m_rcEdge.top + m_lpBarButton->m_lMoveY + m_ptPosition.y - 5, m_rcEdge.right + m_lpBarButton->m_lMoveX + m_ptPosition.x + lMove + 3, m_rcEdge.bottom + m_lpBarButton->m_lMoveY + m_ptPosition.y + 5) ) { bScroll = FALSE; } if(ptMousePos->x < m_lpBarButton->m_lMoveX + m_ptPosition.x + lMove) { m_lNowPos = 0; } else if(ptMousePos->x > m_lpBarButton->m_lMoveX + m_ptPosition.x + m_rcEdge.right + lMove) { m_lNowPos = m_rcEdge.right; } else { m_lNowPos = (ptMousePos->x - (m_lpBarButton->m_lMoveX + m_ptPosition.x)) - lMove; if(m_lNowPos < 0) m_lNowPos = 0; } (*m_lValue) = (m_lNowPos / fRate) + m_lMin; } else { m_lNowPos = (*m_lValue) * fRate; } if(m_lpBarButton->m_lpNormalButton) m_lpBarButton->m_lpNormalButton->m_nPutX = m_ptPosition.x + m_lNowPos; if(m_lpBarButton->m_lpOnMouseButton) m_lpBarButton->m_lpOnMouseButton->m_nPutX = m_ptPosition.x + m_lNowPos; if(m_lpBarButton->m_lpClickMouseButton) m_lpBarButton->m_lpClickMouseButton->m_nPutX = m_ptPosition.x + m_lNowPos; } } void CGUIScroll::Render(LPDIRECT3DDEVICE8 lpD3DDevice, unsigned char cAlpha) { if(m_lpUpArrowButton) m_lpUpArrowButton->Render(lpD3DDevice, cAlpha); if(m_lMin != m_lMax) m_lpBarButton->Render(lpD3DDevice, cAlpha); if(m_lpDownArrowButton) m_lpDownArrowButton->Render(lpD3DDevice, cAlpha); }