From a9160ac5fda5112673c3a99c24ffd08ca4878f09 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Fri, 12 Sep 2003 12:54:26 +0000 Subject: [PATCH] implemented a couple of scrollbar functions and fixed GetDoubleClickTime() svn path=/trunk/; revision=6051 --- reactos/include/win32k/ntuser.h | 5 +- reactos/lib/user32/controls/scrollbar.c | 184 +++++++++++++++------ reactos/lib/user32/windows/input.c | 4 +- reactos/subsys/win32k/ntuser/misc.c | 46 +++--- reactos/subsys/win32k/ntuser/scrollbar.c | 198 ++++++++++++++--------- reactos/subsys/win32k/ntuser/stubs.c | 11 +- 6 files changed, 288 insertions(+), 160 deletions(-) diff --git a/reactos/include/win32k/ntuser.h b/reactos/include/win32k/ntuser.h index 385f266a0c5..388a7845153 100644 --- a/reactos/include/win32k/ntuser.h +++ b/reactos/include/win32k/ntuser.h @@ -156,7 +156,6 @@ NtUserCallNextHookEx( DWORD Unknown2, DWORD Unknown3); -#define NOPARAM_ROUTINE_GETDOUBLECLICKTIME 0x01 DWORD STDCALL NtUserCallNoParam( @@ -675,7 +674,7 @@ NtUserGetDC(HWND hWnd); HDC STDCALL NtUserGetDCEx(HWND hWnd, HANDLE hRegion, ULONG Flags); -DWORD +UINT STDCALL NtUserGetDoubleClickTime(VOID); @@ -1453,7 +1452,7 @@ STDCALL NtUserSetScrollInfo( HWND hwnd, int fnBar, - LPCSCROLLINFO lpsi, + LPSCROLLINFO lpsi, WINBOOL fRedraw); DWORD diff --git a/reactos/lib/user32/controls/scrollbar.c b/reactos/lib/user32/controls/scrollbar.c index a3fc9df0e4f..f9426d8afd0 100644 --- a/reactos/lib/user32/controls/scrollbar.c +++ b/reactos/lib/user32/controls/scrollbar.c @@ -1,10 +1,11 @@ -/* $Id: scrollbar.c,v 1.14 2003/09/08 15:08:56 weiden Exp $ +/* $Id: scrollbar.c,v 1.15 2003/09/12 12:54:26 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: Windows * FILE: subsys/win32k/ntuser/window.c * PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net) + * Thomas Weidenmueller (w3seek@users.sourceforge.net) * REVISION HISTORY: * 06-06-2001 CSH Created */ @@ -41,7 +42,6 @@ static HBITMAP hRgArrowI; #define RIGHT_ARROW(flags,pressed) \ (((flags)&ESB_DISABLE_RIGHT) ? hRgArrowI : ((pressed) ? hRgArrowD:hRgArrow)) -#define SCROLL_ARROW_THUMB_OVERLAP 0 /* Overlap between arrows and thumb */ #define SCROLL_MIN_THUMB 6 /* Minimum size of the thumb in pixels */ #define SCROLL_FIRST_DELAY 200 /* Delay (in ms) before first repetition when holding the button down */ #define SCROLL_REPEAT_DELAY 50 /* Delay (in ms) between scroll repetitions */ @@ -82,6 +82,7 @@ SCROLL_DrawInterior (HWND hwnd, HDC hdc, INT nBar, BOOL vertical, INT arrowSize, PSCROLLBARINFO psbi) { INT thumbSize = psbi->xyThumbBottom - psbi->xyThumbTop; + RECT rc; HPEN hSavePen; HBRUSH hSaveBrush, hBrush; BOOLEAN top_selected = FALSE, bottom_selected = FALSE; @@ -118,23 +119,27 @@ DbgPrint("[SCROLL_DrawInterior:%d]\n", nBar); /* Calculate the scroll rectangle */ if (vertical) { - psbi->rcScrollBar.top += arrowSize - SCROLL_ARROW_THUMB_OVERLAP; - psbi->rcScrollBar.bottom -= (arrowSize - SCROLL_ARROW_THUMB_OVERLAP); + rc.top = psbi->rcScrollBar.top + arrowSize; + rc.bottom = psbi->rcScrollBar.bottom - arrowSize; + rc.left = psbi->rcScrollBar.left; + rc.right = psbi->rcScrollBar.right; } else { - psbi->rcScrollBar.left += arrowSize - SCROLL_ARROW_THUMB_OVERLAP; - psbi->rcScrollBar.right -= (arrowSize - SCROLL_ARROW_THUMB_OVERLAP); + rc.top = psbi->rcScrollBar.top; + rc.bottom = psbi->rcScrollBar.bottom; + rc.left = psbi->rcScrollBar.left + arrowSize; + rc.right = psbi->rcScrollBar.right - arrowSize; } /* Draw the scroll rectangles and thumb */ - if (!psbi->dxyLineButton) /* No thumb to draw */ + if (!psbi->xyThumbBottom) /* No thumb to draw */ { PatBlt (hdc, - psbi->rcScrollBar.left, - psbi->rcScrollBar.top, - psbi->rcScrollBar.right - psbi->rcScrollBar.left, - psbi->rcScrollBar.bottom - psbi->rcScrollBar.top, + rc.left, + rc.top, + rc.right - rc.left, + rc.bottom - rc.top, PATCOPY); /* cleanup and return */ @@ -142,44 +147,46 @@ DbgPrint("[SCROLL_DrawInterior:%d]\n", nBar); SelectObject (hdc, hSaveBrush); return; } + + psbi->xyThumbTop -= arrowSize; if (vertical) { PatBlt (hdc, - psbi->rcScrollBar.left, - psbi->rcScrollBar.top, - psbi->rcScrollBar.right - psbi->rcScrollBar.left, - psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP), + rc.left, + rc.top, + rc.right - rc.left, + psbi->dxyLineButton, top_selected ? 0x0f0000 : PATCOPY); - psbi->rcScrollBar.top += psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP); + rc.top += psbi->xyThumbTop; PatBlt (hdc, - psbi->rcScrollBar.left, - psbi->rcScrollBar.top + thumbSize, - psbi->rcScrollBar.right - psbi->rcScrollBar.left, - psbi->rcScrollBar.bottom - psbi->rcScrollBar.top - thumbSize, + rc.left, + rc.top + thumbSize, + rc.right - rc.left, + rc.bottom - rc.top - thumbSize, bottom_selected ? 0x0f0000 : PATCOPY); - psbi->rcScrollBar.bottom = psbi->rcScrollBar.top + thumbSize; + rc.bottom = rc.top + thumbSize; } else { PatBlt (hdc, - psbi->rcScrollBar.left, - psbi->rcScrollBar.top, - psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP), - psbi->rcScrollBar.bottom - psbi->rcScrollBar.top, + rc.left, + rc.top, + psbi->xyThumbTop, + rc.bottom - rc.top, top_selected ? 0x0f0000 : PATCOPY); - psbi->rcScrollBar.left += psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP); + rc.left += psbi->xyThumbTop; PatBlt (hdc, - psbi->rcScrollBar.left + thumbSize, - psbi->rcScrollBar.top, - psbi->rcScrollBar.right - psbi->rcScrollBar.left - thumbSize, - psbi->rcScrollBar.bottom - psbi->rcScrollBar.top, + rc.left + thumbSize, + rc.top, + rc.right - rc.left - thumbSize, + rc.bottom - rc.top, bottom_selected ? 0x0f0000 : PATCOPY); - psbi->rcScrollBar.right = psbi->rcScrollBar.left + thumbSize; + rc.right = rc.left + thumbSize; } /* Draw the thumb */ - DrawEdge (hdc, &psbi->rcScrollBar, EDGE_RAISED, BF_RECT | BF_MIDDLE); + DrawEdge (hdc, &rc, EDGE_RAISED, BF_RECT | BF_MIDDLE); /* cleanup */ SelectObject (hdc, hSavePen); @@ -198,10 +205,10 @@ SCROLL_DrawMovingThumb (HDC hdc, RECT * rect, BOOL vertical, int arrowSize, int else max_size = psbi->rcScrollBar.right - psbi->rcScrollBar.left; - max_size -= (arrowSize - SCROLL_ARROW_THUMB_OVERLAP) + thumbSize; + max_size -= arrowSize + thumbSize; - if (pos < (arrowSize - SCROLL_ARROW_THUMB_OVERLAP)) - pos = (arrowSize - SCROLL_ARROW_THUMB_OVERLAP); + if (pos < arrowSize) + pos = arrowSize; else if (pos > max_size) pos = max_size; @@ -365,7 +372,7 @@ SCROLL_HitTest( HWND hwnd, INT nBar, POINT pt, BOOL bDragging ) sbi.cbSize = sizeof(SCROLLBARINFO); NtUserGetScrollBarInfo(hwnd, vertical ? OBJID_VSCROLL : OBJID_HSCROLL, &sbi); - + OffsetRect(&sbi.rcScrollBar, wndrect.left, wndrect.top); if ( (bDragging && !SCROLL_PtInRectEx( &sbi.rcScrollBar, pt, vertical )) || @@ -437,35 +444,80 @@ GetScrollBarInfo(HWND hwnd, LONG idObject, PSCROLLBARINFO psbi) /* - * @unimplemented + * @implemented */ WINBOOL STDCALL GetScrollInfo (HWND hwnd, int fnBar, LPSCROLLINFO lpsi) { - UNIMPLEMENTED; - return FALSE; + WINBOOL res; + SCROLLINFO si; + + if(!lpsi || + ((lpsi->cbSize != sizeof(SCROLLINFO)) && (lpsi->cbSize != sizeof(SCROLLINFO)))) + { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + + RtlZeroMemory(&si, sizeof(SCROLLINFO)); + si.cbSize = lpsi->cbSize; + si.fMask = lpsi->fMask; + + res = (WINBOOL)NtUserGetScrollInfo(hwnd, fnBar, &si); + + if(res) + { + RtlCopyMemory(lpsi, &si, lpsi->cbSize); + } + + return res; } /* - * @unimplemented + * @implemented */ int STDCALL GetScrollPos (HWND hWnd, int nBar) { - UNIMPLEMENTED; - return 0; + SCROLLINFO si; + BOOL ret; + int res = 0; + + si.cbSize = sizeof(SCROLLINFO); + si.fMask = SIF_POS; + ret = NtUserGetScrollInfo(hWnd, nBar, &si); + if(ret) + res = si.nPos; + return res; } /* - * @unimplemented + * @implemented */ WINBOOL STDCALL GetScrollRange (HWND hWnd, int nBar, LPINT lpMinPos, LPINT lpMaxPos) { - UNIMPLEMENTED; - return FALSE; + WINBOOL ret; + SCROLLINFO si; + + if(!lpMinPos || !lpMaxPos) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + si.cbSize = sizeof(SCROLLINFO); + si.fMask = SIF_RANGE; + ret = NtUserGetScrollInfo(hWnd, nBar, &si); + if(ret) + { + *lpMinPos = si.nMin; + *lpMaxPos = si.nMax; + } + + return ret; } @@ -488,25 +540,55 @@ SetScrollInfo (HWND hwnd, int fnBar, LPCSCROLLINFO lpsi, WINBOOL fRedraw) /* - * @unimplemented + * @implemented */ int STDCALL SetScrollPos (HWND hWnd, int nBar, int nPos, WINBOOL bRedraw) { - UNIMPLEMENTED; - return 0; + int Res = 0; + BOOL ret; + SCROLLINFO si; + + si.cbSize = sizeof(SCROLLINFO); + si.fMask = SIF_POS; + + /* call NtUserGetScrollInfo() because we need to return the previous position */ + ret = NtUserGetScrollInfo(hWnd, nBar, &si); + + if(ret) + { + Res = si.nPos; + + if(Res != nPos) + { + si.nPos = nPos; + /* finally set the new position */ + NtUserSetScrollInfo(hWnd, nBar, &si, bRedraw); + } + } + + return Res; } /* - * @unimplemented + * @implemented */ WINBOOL STDCALL SetScrollRange (HWND hWnd, int nBar, int nMinPos, int nMaxPos, WINBOOL bRedraw) { - UNIMPLEMENTED; - return FALSE; + SCROLLINFO si; + + si.cbSize = sizeof(SCROLLINFO); + si.fMask = SIF_RANGE; + si.nMin = nMinPos; + si.nMax = nMaxPos; + + NtUserSetScrollInfo(hWnd, nBar, &si, bRedraw); + /* FIXME - check if called successfully */ + + return TRUE; } diff --git a/reactos/lib/user32/windows/input.c b/reactos/lib/user32/windows/input.c index 082e44ea4ef..8542dcc8c74 100644 --- a/reactos/lib/user32/windows/input.c +++ b/reactos/lib/user32/windows/input.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: input.c,v 1.17 2003/08/28 18:04:59 weiden Exp $ +/* $Id: input.c,v 1.18 2003/09/12 12:54:26 weiden Exp $ * * PROJECT: ReactOS user32.dll * FILE: lib/user32/windows/input.c @@ -107,7 +107,7 @@ UINT STDCALL GetDoubleClickTime(VOID) { - return (UINT)NtUserCallNoParam(NOPARAM_ROUTINE_GETDOUBLECLICKTIME); + return NtUserGetDoubleClickTime(); } diff --git a/reactos/subsys/win32k/ntuser/misc.c b/reactos/subsys/win32k/ntuser/misc.c index be20606e299..9d017fa5c83 100644 --- a/reactos/subsys/win32k/ntuser/misc.c +++ b/reactos/subsys/win32k/ntuser/misc.c @@ -1,4 +1,4 @@ -/* $Id: misc.c,v 1.15 2003/08/29 09:29:11 gvg Exp $ +/* $Id: misc.c,v 1.16 2003/09/12 12:54:26 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -24,32 +24,20 @@ /* - * @implemented + * @unimplemented */ DWORD STDCALL NtUserCallNoParam( DWORD Routine) { - NTSTATUS Status; - DWORD Result = 0; - PWINSTATION_OBJECT WinStaObject; - +/* switch(Routine) { - case NOPARAM_ROUTINE_GETDOUBLECLICKTIME: - Status = ValidateWindowStationHandle(PROCESS_WINDOW_STATION(), - KernelMode, - 0, - &WinStaObject); - if (!NT_SUCCESS(Status)) - return (DWORD)FALSE; - - Result = WinStaObject->SystemCursor.DblClickSpeed; - - ObDereferenceObject(WinStaObject); - return Result; + case 0: + break; } +*/ DPRINT1("Calling invalid routine number 0x%x in NtUserCallNoParam()\n", Routine); SetLastWin32Error(ERROR_INVALID_PARAMETER); return 0; @@ -328,3 +316,25 @@ NtUserSystemParametersInfo( } return FALSE; } + +UINT +STDCALL +NtUserGetDoubleClickTime(VOID) +{ + UINT Result; + NTSTATUS Status; + PWINSTATION_OBJECT WinStaObject; + + Status = ValidateWindowStationHandle(PROCESS_WINDOW_STATION(), + KernelMode, + 0, + &WinStaObject); + if (!NT_SUCCESS(Status)) + return (DWORD)FALSE; + + Result = WinStaObject->SystemCursor.DblClickSpeed; + + ObDereferenceObject(WinStaObject); + return Result; +} + diff --git a/reactos/subsys/win32k/ntuser/scrollbar.c b/reactos/subsys/win32k/ntuser/scrollbar.c index 76ff32fb7be..f445402a92f 100644 --- a/reactos/subsys/win32k/ntuser/scrollbar.c +++ b/reactos/subsys/win32k/ntuser/scrollbar.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: scrollbar.c,v 1.13 2003/09/08 18:50:00 weiden Exp $ +/* $Id: scrollbar.c,v 1.14 2003/09/12 12:54:26 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -120,17 +120,15 @@ IntGetScrollBarRect (PWINDOW_OBJECT Window, INT nBar, PRECT lprect) switch (nBar) { case SB_HORZ: - lprect->left = ClientRect.left - WindowRect.left; + lprect->left = ClientRect.left - WindowRect.left + 1; lprect->top = ClientRect.bottom - WindowRect.top; - lprect->right = ClientRect.right - WindowRect.left; + lprect->right = ClientRect.right - WindowRect.left - 1; lprect->bottom = lprect->top + NtUserGetSystemMetrics (SM_CYHSCROLL); if (Window->Style & WS_BORDER) { lprect->left--; lprect->right++; } - else if (Window->Style & WS_VSCROLL) - lprect->right++; vertical = FALSE; break; @@ -166,76 +164,63 @@ IntGetScrollBarRect (PWINDOW_OBJECT Window, INT nBar, PRECT lprect) BOOL FASTCALL IntCalculateThumb(PWINDOW_OBJECT Window, LONG idObject, PSCROLLBARINFO psbi, LPSCROLLINFO psi) { - INT xThumb, yThumb, ThumbBox, cxy; + INT Thumb, ThumbBox, ThumbPos, cxy, mx; switch(idObject) { case SB_HORZ: - xThumb = NtUserGetSystemMetrics(SM_CXHSCROLL); + Thumb = NtUserGetSystemMetrics(SM_CXHSCROLL); cxy = psbi->rcScrollBar.right - psbi->rcScrollBar.left; - if(cxy < (2 * xThumb)) - { - xThumb = cxy / 2; - psbi->xyThumbTop = 0; - psbi->xyThumbBottom = 0; - } - else - { - ThumbBox = psi->nPage ? MINTRACKTHUMB : NtUserGetSystemMetrics(SM_CXHTHUMB); - cxy -= (2 * xThumb); - if(cxy >= ThumbBox) - { - if(psi->nPage) - { - ThumbBox = max(IntMulDiv(cxy, psi->nPage, psi->nMax - psi->nMin + 1), ThumbBox); - } - psbi->xyThumbTop = xThumb; - psbi->xyThumbBottom = xThumb + ThumbBox; - } - else - { - psbi->xyThumbTop = 0; - psbi->xyThumbBottom = 0; - } - } - psbi->dxyLineButton = xThumb; - return TRUE; + break; case SB_VERT: - yThumb = NtUserGetSystemMetrics(SM_CYVSCROLL); + Thumb = NtUserGetSystemMetrics(SM_CYVSCROLL); cxy = psbi->rcScrollBar.bottom - psbi->rcScrollBar.top; - if(cxy < (2 * yThumb)) - { - yThumb = cxy / 2; - psbi->xyThumbTop = 0; - psbi->xyThumbBottom = 0; - } - else - { - ThumbBox = psi->nPage ? MINTRACKTHUMB : NtUserGetSystemMetrics(SM_CYVTHUMB); - cxy -= (2 * yThumb); - if(cxy >= ThumbBox) - { - if(psi->nPage) - { - ThumbBox = max(IntMulDiv(cxy, psi->nPage, psi->nMax - psi->nMin + 1), ThumbBox); - } - psbi->xyThumbTop = yThumb; - psbi->xyThumbBottom = yThumb + ThumbBox; - } - else - { - psbi->xyThumbTop = 0; - psbi->xyThumbBottom = 0; - } - } - psbi->dxyLineButton = yThumb; - return TRUE; + break; case SB_CTL: /* FIXME */ return FALSE; default: return FALSE; } - return FALSE; + + ThumbPos = Thumb; + /* calculate Thumb */ + if(cxy <= (2 * Thumb)) + { + Thumb = cxy / 2; + psbi->xyThumbTop = 0; + psbi->xyThumbBottom = 0; + ThumbPos = Thumb; + } + else + { + ThumbBox = psi->nPage ? MINTRACKTHUMB : NtUserGetSystemMetrics(SM_CXHTHUMB); + cxy -= (2 * Thumb); + if(cxy >= ThumbBox) + { + if(psi->nPage) + { + ThumbBox = max(IntMulDiv(cxy, psi->nPage, psi->nMax - psi->nMin + 1), ThumbBox); + } + + if(cxy > ThumbBox) + { + mx = psi->nMax - max(psi->nPage - 1, 0); + if(psi->nMin < mx) + ThumbPos = Thumb + IntMulDiv(cxy, psi->nPos - psi->nMin, psi->nMax - psi->nMin + 1); + } + + psbi->xyThumbTop = ThumbPos; + psbi->xyThumbBottom = ThumbPos + ThumbBox; + } + else + { + psbi->xyThumbTop = 0; + psbi->xyThumbBottom = 0; + } + } + psbi->dxyLineButton = Thumb; + + return TRUE; } DWORD FASTCALL @@ -443,8 +428,17 @@ STDCALL NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi) { PWINDOW_OBJECT Window; + LPSCROLLINFO psi; + UINT Mask; PSCROLLBARINFO Info = NULL; + if(!lpsi || ((lpsi->cbSize != sizeof(SCROLLINFO)) && + (lpsi->cbSize != sizeof(SCROLLINFO) - sizeof(lpsi->nTrackPos)))) + { + SetLastWin32Error(ERROR_INVALID_PARAMETER); + return 0; + } + Window = IntGetWindowObject(hwnd); if(!Window) @@ -457,20 +451,49 @@ NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi) { case SB_HORZ: Info = Window->pHScroll; - break; + if(Info) + break; + /* fall through */ case SB_VERT: Info = Window->pVScroll; - break; + if(Info) + break; + /* fall through */ case SB_CTL: Info = Window->wExtra; - break; + if(Info) + break; + /* fall through */ default: IntReleaseWindowObject(Window); return FALSE; } + psi = (LPSCROLLINFO)((PSCROLLBARINFO)(Info + 1)); + + if(lpsi->fMask == SIF_ALL) + Mask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_TRACKPOS; + else + Mask = lpsi->fMask; + + if(Mask & SIF_PAGE) + { + lpsi->nPage = psi->nPage; + } + + if(Mask & SIF_POS) + { + lpsi->nPos = psi->nPos; + } + + if(Mask & SIF_RANGE) + { + lpsi->nMin = psi->nMin; + lpsi->nMax = psi->nMax; + } + IntReleaseWindowObject(Window); - return FALSE; + return TRUE; } @@ -547,7 +570,7 @@ STDCALL NtUserSetScrollInfo( HWND hwnd, int fnBar, - LPCSCROLLINFO lpsi, + LPSCROLLINFO lpsi, WINBOOL fRedraw) { PWINDOW_OBJECT Window; @@ -605,24 +628,47 @@ NtUserSetScrollInfo( { /* FIXME */ } - + + if((Mask & SIF_RANGE) && ((psi->nMin != lpsi->nMin) || (psi->nMax != lpsi->nMax))) + { + /* Invalid range -> range is set to (0,0) */ + if((lpsi->nMin > lpsi->nMax) || + ((UINT)(lpsi->nMax - lpsi->nMin) >= 0x80000000)) + { + psi->nMin = 0; + psi->nMax = 0; + Chg = TRUE; + } + else + { + if(psi->nMin != lpsi->nMin || + psi->nMax != lpsi->nMax ) + { + //*action |= SA_SSI_REFRESH; + psi->nMin = lpsi->nMin; + psi->nMax = lpsi->nMax; + Chg = TRUE; + } + } + } + if((Mask & SIF_PAGE) && (psi->nPage != lpsi->nPage)) { psi->nPage = lpsi->nPage; Chg = TRUE; + if(psi->nPage < 0) psi->nPage = 0; + else if(psi->nPage > psi->nMax - psi->nMin + 1) + psi->nPage = psi->nMax - psi->nMin + 1; } if((Mask & SIF_POS) && (psi->nPos != lpsi->nPos)) { psi->nPos = lpsi->nPos; Chg = TRUE; - } - - if((Mask & SIF_RANGE) && ((psi->nMin != lpsi->nMin) || (psi->nMax != lpsi->nMax))) - { - psi->nMin = lpsi->nMin; - psi->nMax = lpsi->nMax; - Chg = TRUE; + if(psi->nPos < psi->nMin) + psi->nPos = psi->nMin; + else if(psi->nPos > psi->nMax - max(psi->nPage - 1, 0)) + psi->nPos = psi->nMax - max(psi->nPage - 1, 0); } /* FIXME check assigned values */ diff --git a/reactos/subsys/win32k/ntuser/stubs.c b/reactos/subsys/win32k/ntuser/stubs.c index 29afe29dea3..42a742ac8b7 100644 --- a/reactos/subsys/win32k/ntuser/stubs.c +++ b/reactos/subsys/win32k/ntuser/stubs.c @@ -1,4 +1,4 @@ -/* $Id: stubs.c,v 1.27 2003/08/28 18:04:59 weiden Exp $ +/* $Id: stubs.c,v 1.28 2003/09/12 12:54:26 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -587,15 +587,6 @@ NtUserGetCPD( return 0; } -DWORD -STDCALL -NtUserGetDoubleClickTime(VOID) -{ - UNIMPLEMENTED - - return 0; -} - DWORD STDCALL NtUserGetGuiResources(