Files
Client/GameTools/NeoRylClient/GUIScroll.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
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>
2025-11-29 20:17:20 +09:00

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