mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 12:55:43 +00:00
[WIN32SS]
- Fix some scrollbar bugs as indicated by user32_apitest:SetScrollInfo - Silence a trace CORE-9553 #resolve svn path=/trunk/; revision=67227
This commit is contained in:
parent
2829ed5afe
commit
d9c9bf096c
2 changed files with 16 additions and 17 deletions
|
@ -347,6 +347,8 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
|
|||
PSBDATA pSBData;
|
||||
DWORD OldPos = 0;
|
||||
BOOL bChangeParams = FALSE; /* Don't show/hide scrollbar if params don't change */
|
||||
UINT MaxPage;
|
||||
int MaxPos;
|
||||
|
||||
ASSERT_REFS_CO(Window);
|
||||
|
||||
|
@ -404,14 +406,12 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
|
|||
/* Set the scroll range */
|
||||
if (lpsi->fMask & SIF_RANGE)
|
||||
{
|
||||
/* Invalid range -> range is set to (0,0) */
|
||||
if ((lpsi->nMin > lpsi->nMax) ||
|
||||
((UINT)(lpsi->nMax - lpsi->nMin) >= 0x80000000))
|
||||
if (lpsi->nMin > lpsi->nMax)
|
||||
{
|
||||
Info->nMin = 0;
|
||||
Info->nMax = 0;
|
||||
pSBData->posMin = 0;
|
||||
pSBData->posMax = 0;
|
||||
Info->nMin = lpsi->nMin;
|
||||
Info->nMax = lpsi->nMin;
|
||||
pSBData->posMin = lpsi->nMin;
|
||||
pSBData->posMax = lpsi->nMin;
|
||||
bChangeParams = TRUE;
|
||||
}
|
||||
else if (Info->nMin != lpsi->nMin || Info->nMax != lpsi->nMax)
|
||||
|
@ -425,23 +425,22 @@ co_IntSetScrollInfo(PWND Window, INT nBar, LPCSCROLLINFO lpsi, BOOL bRedraw)
|
|||
}
|
||||
|
||||
/* Make sure the page size is valid */
|
||||
if (Info->nPage < 0)
|
||||
MaxPage = abs(Info->nMax - Info->nMin) + 1;
|
||||
if (Info->nPage > MaxPage)
|
||||
{
|
||||
pSBData->page = Info->nPage = 0;
|
||||
}
|
||||
else if ((Info->nMax - Info->nMin + 1UL) < Info->nPage)
|
||||
{
|
||||
pSBData->page = Info->nPage = Info->nMax - Info->nMin + 1;
|
||||
pSBData->page = Info->nPage = MaxPage;
|
||||
}
|
||||
|
||||
/* Make sure the pos is inside the range */
|
||||
MaxPos = Info->nMax + 1 - (int)max(Info->nPage, 1);
|
||||
ASSERT(MaxPos >= Info->nMin);
|
||||
if (Info->nPos < Info->nMin)
|
||||
{
|
||||
pSBData->pos = Info->nPos = Info->nMin;
|
||||
}
|
||||
else if (Info->nPos > (Info->nMax - max((int)Info->nPage - 1, 0)))
|
||||
else if (Info->nPos > MaxPos)
|
||||
{
|
||||
pSBData->pos = Info->nPos = Info->nMax - max(Info->nPage - 1, 0);
|
||||
pSBData->pos = Info->nPos = MaxPos;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1043,7 +1043,7 @@ static void IntScrollCreateScrollBar(
|
|||
Info.cbSize = sizeof(SCROLLINFO);
|
||||
Info.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
|
||||
Info.nMin = 0;
|
||||
Info.nMax = 100;
|
||||
Info.nMax = 0;
|
||||
Info.nPage = 0;
|
||||
Info.nPos = 0;
|
||||
Info.nTrackPos = 0;
|
||||
|
@ -1189,7 +1189,7 @@ ScrollBarWndProc_common(WNDPROC DefWindowProc, HWND Wnd, UINT Msg, WPARAM wParam
|
|||
{
|
||||
if (!pWnd->fnid)
|
||||
{
|
||||
ERR("ScrollBar CTL size %d\n",(sizeof(SBWND)-sizeof(WND)));
|
||||
TRACE("ScrollBar CTL size %d\n", (sizeof(SBWND)-sizeof(WND)));
|
||||
if ( pWnd->cbwndExtra != (sizeof(SBWND)-sizeof(WND)) )
|
||||
{
|
||||
ERR("Wrong Extra bytes for Scrollbar!\n");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue