137 lines
3.3 KiB
C++
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);
|
|
}
|
|
|