Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
157 lines
4.8 KiB
C++
157 lines
4.8 KiB
C++
// 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);
|
|
}
|