Files
Work/guitar/ScrollInfo.cpp
2024-08-07 09:16:27 -04:00

137 lines
3.3 KiB
C++

#include <guitar/scrollinfo.hpp>
bool ScrollInfo::pageDown(void)
{
int yDelta;
int yNew;
int xDelta;
xDelta=0;
yNew=currScrolly()+PageIncrement;
yNew=imax(0,yNew);
yNew=imin(maxScrolly(),yNew);
if(yNew==currScrolly())return false;
scrollEvent(TRUE);
yDelta=yNew-currScrolly();
currScrolly(yNew);
::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0);
::UpdateWindow(hwndOwner());
::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE);
return true;
}
bool ScrollInfo::pageUp(void)
{
int yDelta;
int yNew;
int xDelta;
xDelta=0;
yNew=currScrolly()-PageIncrement;
yNew=imax(0,yNew);
yNew=imin(maxScrolly(),yNew);
if(yNew==currScrolly())return false;
scrollEvent(TRUE);
yDelta=yNew-currScrolly();
currScrolly(yNew);
::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0);
::UpdateWindow(hwndOwner());
::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE);
return true;
}
void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData)
{
int xDelta;
int yDelta;
int xNew;
yDelta=0;
switch(LOWORD(someCallbackData.wParam()))
{
case SB_PAGEUP :
xNew=currScrollx()-PageIncrement;
break;
case SB_PAGEDOWN :
xNew=currScrollx()+PageIncrement;
break;
case SB_LINEUP :
xNew=currScrollx()-LineIncrement;
break;
case SB_LINEDOWN :
xNew=currScrollx()+LineIncrement;
break;
case SB_THUMBPOSITION :
xNew= HIWORD(someCallbackData.wParam());
break;
default :
xNew=currScrollx();
break;
}
xNew=imax(0,xNew);
xNew=imin(maxScrollx(),xNew);
if(xNew==currScrollx())return;
scrollEvent(TRUE);
xDelta=xNew-currScrollx();
currScrollx(xNew);
::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0);
::UpdateWindow(hwndOwner());
::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE);
}
void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData)
{
int yDelta;
int yNew;
int xDelta;
xDelta=0;
switch(LOWORD(someCallbackData.wParam()))
{
case SB_PAGEUP :
yNew=currScrolly()-PageIncrement;
break;
case SB_PAGEDOWN :
yNew=currScrolly()+PageIncrement;
break;
case SB_LINEUP :
yNew=currScrolly()-LineIncrement;
break;
case SB_LINEDOWN :
yNew=currScrolly()+LineIncrement;
break;
case SB_THUMBPOSITION :
yNew=HIWORD(someCallbackData.wParam());
break;
default :
yNew=currScrolly();
break;
}
yNew=imax(0,yNew);
yNew=imin(maxScrolly(),yNew);
if(yNew==currScrolly())return;
scrollEvent(TRUE);
yDelta=yNew-currScrolly();
currScrolly(yNew);
::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0);
::UpdateWindow(hwndOwner());
::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE);
}
void ScrollInfo::handleSize(CallbackData &someCallbackData)
{
int xNew(someCallbackData.loWord());
int yNew(someCallbackData.hiWord());
sizeEvent(TRUE);
maxScrollx(imax(scrollableObjectWidth()-xNew,0));
::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE);
currScrollx(imin(currScrollx(),maxScrollx()));
::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE);
maxScrolly(imax(scrollableObjectHeight()-yNew,0));
::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE);
currScrolly(imin(currScrolly(),maxScrolly()));
::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE);
}