mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 15:36:04 +00:00
implemented a couple of scrollbar functions and fixed GetDoubleClickTime()
svn path=/trunk/; revision=6051
This commit is contained in:
parent
fd08241470
commit
a9160ac5fd
6 changed files with 288 additions and 160 deletions
|
@ -156,7 +156,6 @@ NtUserCallNextHookEx(
|
||||||
DWORD Unknown2,
|
DWORD Unknown2,
|
||||||
DWORD Unknown3);
|
DWORD Unknown3);
|
||||||
|
|
||||||
#define NOPARAM_ROUTINE_GETDOUBLECLICKTIME 0x01
|
|
||||||
DWORD
|
DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
NtUserCallNoParam(
|
NtUserCallNoParam(
|
||||||
|
@ -675,7 +674,7 @@ NtUserGetDC(HWND hWnd);
|
||||||
|
|
||||||
HDC STDCALL NtUserGetDCEx(HWND hWnd, HANDLE hRegion, ULONG Flags);
|
HDC STDCALL NtUserGetDCEx(HWND hWnd, HANDLE hRegion, ULONG Flags);
|
||||||
|
|
||||||
DWORD
|
UINT
|
||||||
STDCALL
|
STDCALL
|
||||||
NtUserGetDoubleClickTime(VOID);
|
NtUserGetDoubleClickTime(VOID);
|
||||||
|
|
||||||
|
@ -1453,7 +1452,7 @@ STDCALL
|
||||||
NtUserSetScrollInfo(
|
NtUserSetScrollInfo(
|
||||||
HWND hwnd,
|
HWND hwnd,
|
||||||
int fnBar,
|
int fnBar,
|
||||||
LPCSCROLLINFO lpsi,
|
LPSCROLLINFO lpsi,
|
||||||
WINBOOL fRedraw);
|
WINBOOL fRedraw);
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
|
|
|
@ -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
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* PURPOSE: Windows
|
* PURPOSE: Windows
|
||||||
* FILE: subsys/win32k/ntuser/window.c
|
* FILE: subsys/win32k/ntuser/window.c
|
||||||
* PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
* PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
||||||
|
* Thomas Weidenmueller (w3seek@users.sourceforge.net)
|
||||||
* REVISION HISTORY:
|
* REVISION HISTORY:
|
||||||
* 06-06-2001 CSH Created
|
* 06-06-2001 CSH Created
|
||||||
*/
|
*/
|
||||||
|
@ -41,7 +42,6 @@ static HBITMAP hRgArrowI;
|
||||||
#define RIGHT_ARROW(flags,pressed) \
|
#define RIGHT_ARROW(flags,pressed) \
|
||||||
(((flags)&ESB_DISABLE_RIGHT) ? hRgArrowI : ((pressed) ? hRgArrowD:hRgArrow))
|
(((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_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_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 */
|
#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)
|
arrowSize, PSCROLLBARINFO psbi)
|
||||||
{
|
{
|
||||||
INT thumbSize = psbi->xyThumbBottom - psbi->xyThumbTop;
|
INT thumbSize = psbi->xyThumbBottom - psbi->xyThumbTop;
|
||||||
|
RECT rc;
|
||||||
HPEN hSavePen;
|
HPEN hSavePen;
|
||||||
HBRUSH hSaveBrush, hBrush;
|
HBRUSH hSaveBrush, hBrush;
|
||||||
BOOLEAN top_selected = FALSE, bottom_selected = FALSE;
|
BOOLEAN top_selected = FALSE, bottom_selected = FALSE;
|
||||||
|
@ -118,23 +119,27 @@ DbgPrint("[SCROLL_DrawInterior:%d]\n", nBar);
|
||||||
/* Calculate the scroll rectangle */
|
/* Calculate the scroll rectangle */
|
||||||
if (vertical)
|
if (vertical)
|
||||||
{
|
{
|
||||||
psbi->rcScrollBar.top += arrowSize - SCROLL_ARROW_THUMB_OVERLAP;
|
rc.top = psbi->rcScrollBar.top + arrowSize;
|
||||||
psbi->rcScrollBar.bottom -= (arrowSize - SCROLL_ARROW_THUMB_OVERLAP);
|
rc.bottom = psbi->rcScrollBar.bottom - arrowSize;
|
||||||
|
rc.left = psbi->rcScrollBar.left;
|
||||||
|
rc.right = psbi->rcScrollBar.right;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
psbi->rcScrollBar.left += arrowSize - SCROLL_ARROW_THUMB_OVERLAP;
|
rc.top = psbi->rcScrollBar.top;
|
||||||
psbi->rcScrollBar.right -= (arrowSize - SCROLL_ARROW_THUMB_OVERLAP);
|
rc.bottom = psbi->rcScrollBar.bottom;
|
||||||
|
rc.left = psbi->rcScrollBar.left + arrowSize;
|
||||||
|
rc.right = psbi->rcScrollBar.right - arrowSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw the scroll rectangles and thumb */
|
/* Draw the scroll rectangles and thumb */
|
||||||
if (!psbi->dxyLineButton) /* No thumb to draw */
|
if (!psbi->xyThumbBottom) /* No thumb to draw */
|
||||||
{
|
{
|
||||||
PatBlt (hdc,
|
PatBlt (hdc,
|
||||||
psbi->rcScrollBar.left,
|
rc.left,
|
||||||
psbi->rcScrollBar.top,
|
rc.top,
|
||||||
psbi->rcScrollBar.right - psbi->rcScrollBar.left,
|
rc.right - rc.left,
|
||||||
psbi->rcScrollBar.bottom - psbi->rcScrollBar.top,
|
rc.bottom - rc.top,
|
||||||
PATCOPY);
|
PATCOPY);
|
||||||
|
|
||||||
/* cleanup and return */
|
/* cleanup and return */
|
||||||
|
@ -142,44 +147,46 @@ DbgPrint("[SCROLL_DrawInterior:%d]\n", nBar);
|
||||||
SelectObject (hdc, hSaveBrush);
|
SelectObject (hdc, hSaveBrush);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
psbi->xyThumbTop -= arrowSize;
|
||||||
|
|
||||||
if (vertical)
|
if (vertical)
|
||||||
{
|
{
|
||||||
PatBlt (hdc,
|
PatBlt (hdc,
|
||||||
psbi->rcScrollBar.left,
|
rc.left,
|
||||||
psbi->rcScrollBar.top,
|
rc.top,
|
||||||
psbi->rcScrollBar.right - psbi->rcScrollBar.left,
|
rc.right - rc.left,
|
||||||
psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP),
|
psbi->dxyLineButton,
|
||||||
top_selected ? 0x0f0000 : PATCOPY);
|
top_selected ? 0x0f0000 : PATCOPY);
|
||||||
psbi->rcScrollBar.top += psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP);
|
rc.top += psbi->xyThumbTop;
|
||||||
PatBlt (hdc,
|
PatBlt (hdc,
|
||||||
psbi->rcScrollBar.left,
|
rc.left,
|
||||||
psbi->rcScrollBar.top + thumbSize,
|
rc.top + thumbSize,
|
||||||
psbi->rcScrollBar.right - psbi->rcScrollBar.left,
|
rc.right - rc.left,
|
||||||
psbi->rcScrollBar.bottom - psbi->rcScrollBar.top - thumbSize,
|
rc.bottom - rc.top - thumbSize,
|
||||||
bottom_selected ? 0x0f0000 : PATCOPY);
|
bottom_selected ? 0x0f0000 : PATCOPY);
|
||||||
psbi->rcScrollBar.bottom = psbi->rcScrollBar.top + thumbSize;
|
rc.bottom = rc.top + thumbSize;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PatBlt (hdc,
|
PatBlt (hdc,
|
||||||
psbi->rcScrollBar.left,
|
rc.left,
|
||||||
psbi->rcScrollBar.top,
|
rc.top,
|
||||||
psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP),
|
psbi->xyThumbTop,
|
||||||
psbi->rcScrollBar.bottom - psbi->rcScrollBar.top,
|
rc.bottom - rc.top,
|
||||||
top_selected ? 0x0f0000 : PATCOPY);
|
top_selected ? 0x0f0000 : PATCOPY);
|
||||||
psbi->rcScrollBar.left += psbi->dxyLineButton - (arrowSize - SCROLL_ARROW_THUMB_OVERLAP);
|
rc.left += psbi->xyThumbTop;
|
||||||
PatBlt (hdc,
|
PatBlt (hdc,
|
||||||
psbi->rcScrollBar.left + thumbSize,
|
rc.left + thumbSize,
|
||||||
psbi->rcScrollBar.top,
|
rc.top,
|
||||||
psbi->rcScrollBar.right - psbi->rcScrollBar.left - thumbSize,
|
rc.right - rc.left - thumbSize,
|
||||||
psbi->rcScrollBar.bottom - psbi->rcScrollBar.top,
|
rc.bottom - rc.top,
|
||||||
bottom_selected ? 0x0f0000 : PATCOPY);
|
bottom_selected ? 0x0f0000 : PATCOPY);
|
||||||
psbi->rcScrollBar.right = psbi->rcScrollBar.left + thumbSize;
|
rc.right = rc.left + thumbSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw the thumb */
|
/* Draw the thumb */
|
||||||
DrawEdge (hdc, &psbi->rcScrollBar, EDGE_RAISED, BF_RECT | BF_MIDDLE);
|
DrawEdge (hdc, &rc, EDGE_RAISED, BF_RECT | BF_MIDDLE);
|
||||||
|
|
||||||
/* cleanup */
|
/* cleanup */
|
||||||
SelectObject (hdc, hSavePen);
|
SelectObject (hdc, hSavePen);
|
||||||
|
@ -198,10 +205,10 @@ SCROLL_DrawMovingThumb (HDC hdc, RECT * rect, BOOL vertical, int arrowSize, int
|
||||||
else
|
else
|
||||||
max_size = psbi->rcScrollBar.right - psbi->rcScrollBar.left;
|
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))
|
if (pos < arrowSize)
|
||||||
pos = (arrowSize - SCROLL_ARROW_THUMB_OVERLAP);
|
pos = arrowSize;
|
||||||
else if (pos > max_size)
|
else if (pos > max_size)
|
||||||
pos = max_size;
|
pos = max_size;
|
||||||
|
|
||||||
|
@ -365,7 +372,7 @@ SCROLL_HitTest( HWND hwnd, INT nBar, POINT pt, BOOL bDragging )
|
||||||
|
|
||||||
sbi.cbSize = sizeof(SCROLLBARINFO);
|
sbi.cbSize = sizeof(SCROLLBARINFO);
|
||||||
NtUserGetScrollBarInfo(hwnd, vertical ? OBJID_VSCROLL : OBJID_HSCROLL, &sbi);
|
NtUserGetScrollBarInfo(hwnd, vertical ? OBJID_VSCROLL : OBJID_HSCROLL, &sbi);
|
||||||
|
|
||||||
OffsetRect(&sbi.rcScrollBar, wndrect.left, wndrect.top);
|
OffsetRect(&sbi.rcScrollBar, wndrect.left, wndrect.top);
|
||||||
|
|
||||||
if ( (bDragging && !SCROLL_PtInRectEx( &sbi.rcScrollBar, pt, vertical )) ||
|
if ( (bDragging && !SCROLL_PtInRectEx( &sbi.rcScrollBar, pt, vertical )) ||
|
||||||
|
@ -437,35 +444,80 @@ GetScrollBarInfo(HWND hwnd, LONG idObject, PSCROLLBARINFO psbi)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
WINBOOL STDCALL
|
WINBOOL STDCALL
|
||||||
GetScrollInfo (HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
GetScrollInfo (HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
WINBOOL res;
|
||||||
return FALSE;
|
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
|
int STDCALL
|
||||||
GetScrollPos (HWND hWnd, int nBar)
|
GetScrollPos (HWND hWnd, int nBar)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
SCROLLINFO si;
|
||||||
return 0;
|
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
|
WINBOOL STDCALL
|
||||||
GetScrollRange (HWND hWnd, int nBar, LPINT lpMinPos, LPINT lpMaxPos)
|
GetScrollRange (HWND hWnd, int nBar, LPINT lpMinPos, LPINT lpMaxPos)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
WINBOOL ret;
|
||||||
return FALSE;
|
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
|
int STDCALL
|
||||||
SetScrollPos (HWND hWnd, int nBar, int nPos, WINBOOL bRedraw)
|
SetScrollPos (HWND hWnd, int nBar, int nPos, WINBOOL bRedraw)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
int Res = 0;
|
||||||
return 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
|
WINBOOL STDCALL
|
||||||
SetScrollRange (HWND hWnd,
|
SetScrollRange (HWND hWnd,
|
||||||
int nBar, int nMinPos, int nMaxPos, WINBOOL bRedraw)
|
int nBar, int nMinPos, int nMaxPos, WINBOOL bRedraw)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
SCROLLINFO si;
|
||||||
return FALSE;
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* 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
|
* PROJECT: ReactOS user32.dll
|
||||||
* FILE: lib/user32/windows/input.c
|
* FILE: lib/user32/windows/input.c
|
||||||
|
@ -107,7 +107,7 @@ UINT
|
||||||
STDCALL
|
STDCALL
|
||||||
GetDoubleClickTime(VOID)
|
GetDoubleClickTime(VOID)
|
||||||
{
|
{
|
||||||
return (UINT)NtUserCallNoParam(NOPARAM_ROUTINE_GETDOUBLECLICKTIME);
|
return NtUserGetDoubleClickTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -24,32 +24,20 @@
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @unimplemented
|
||||||
*/
|
*/
|
||||||
DWORD
|
DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
NtUserCallNoParam(
|
NtUserCallNoParam(
|
||||||
DWORD Routine)
|
DWORD Routine)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
/*
|
||||||
DWORD Result = 0;
|
|
||||||
PWINSTATION_OBJECT WinStaObject;
|
|
||||||
|
|
||||||
switch(Routine)
|
switch(Routine)
|
||||||
{
|
{
|
||||||
case NOPARAM_ROUTINE_GETDOUBLECLICKTIME:
|
case 0:
|
||||||
Status = ValidateWindowStationHandle(PROCESS_WINDOW_STATION(),
|
break;
|
||||||
KernelMode,
|
|
||||||
0,
|
|
||||||
&WinStaObject);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
return (DWORD)FALSE;
|
|
||||||
|
|
||||||
Result = WinStaObject->SystemCursor.DblClickSpeed;
|
|
||||||
|
|
||||||
ObDereferenceObject(WinStaObject);
|
|
||||||
return Result;
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
DPRINT1("Calling invalid routine number 0x%x in NtUserCallNoParam()\n", Routine);
|
DPRINT1("Calling invalid routine number 0x%x in NtUserCallNoParam()\n", Routine);
|
||||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -328,3 +316,25 @@ NtUserSystemParametersInfo(
|
||||||
}
|
}
|
||||||
return FALSE;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* 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
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -120,17 +120,15 @@ IntGetScrollBarRect (PWINDOW_OBJECT Window, INT nBar, PRECT lprect)
|
||||||
switch (nBar)
|
switch (nBar)
|
||||||
{
|
{
|
||||||
case SB_HORZ:
|
case SB_HORZ:
|
||||||
lprect->left = ClientRect.left - WindowRect.left;
|
lprect->left = ClientRect.left - WindowRect.left + 1;
|
||||||
lprect->top = ClientRect.bottom - WindowRect.top;
|
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);
|
lprect->bottom = lprect->top + NtUserGetSystemMetrics (SM_CYHSCROLL);
|
||||||
if (Window->Style & WS_BORDER)
|
if (Window->Style & WS_BORDER)
|
||||||
{
|
{
|
||||||
lprect->left--;
|
lprect->left--;
|
||||||
lprect->right++;
|
lprect->right++;
|
||||||
}
|
}
|
||||||
else if (Window->Style & WS_VSCROLL)
|
|
||||||
lprect->right++;
|
|
||||||
vertical = FALSE;
|
vertical = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -166,76 +164,63 @@ IntGetScrollBarRect (PWINDOW_OBJECT Window, INT nBar, PRECT lprect)
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
IntCalculateThumb(PWINDOW_OBJECT Window, LONG idObject, PSCROLLBARINFO psbi, LPSCROLLINFO psi)
|
IntCalculateThumb(PWINDOW_OBJECT Window, LONG idObject, PSCROLLBARINFO psbi, LPSCROLLINFO psi)
|
||||||
{
|
{
|
||||||
INT xThumb, yThumb, ThumbBox, cxy;
|
INT Thumb, ThumbBox, ThumbPos, cxy, mx;
|
||||||
switch(idObject)
|
switch(idObject)
|
||||||
{
|
{
|
||||||
case SB_HORZ:
|
case SB_HORZ:
|
||||||
xThumb = NtUserGetSystemMetrics(SM_CXHSCROLL);
|
Thumb = NtUserGetSystemMetrics(SM_CXHSCROLL);
|
||||||
cxy = psbi->rcScrollBar.right - psbi->rcScrollBar.left;
|
cxy = psbi->rcScrollBar.right - psbi->rcScrollBar.left;
|
||||||
if(cxy < (2 * xThumb))
|
break;
|
||||||
{
|
|
||||||
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;
|
|
||||||
case SB_VERT:
|
case SB_VERT:
|
||||||
yThumb = NtUserGetSystemMetrics(SM_CYVSCROLL);
|
Thumb = NtUserGetSystemMetrics(SM_CYVSCROLL);
|
||||||
cxy = psbi->rcScrollBar.bottom - psbi->rcScrollBar.top;
|
cxy = psbi->rcScrollBar.bottom - psbi->rcScrollBar.top;
|
||||||
if(cxy < (2 * yThumb))
|
break;
|
||||||
{
|
|
||||||
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;
|
|
||||||
case SB_CTL:
|
case SB_CTL:
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
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
|
DWORD FASTCALL
|
||||||
|
@ -443,8 +428,17 @@ STDCALL
|
||||||
NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
||||||
{
|
{
|
||||||
PWINDOW_OBJECT Window;
|
PWINDOW_OBJECT Window;
|
||||||
|
LPSCROLLINFO psi;
|
||||||
|
UINT Mask;
|
||||||
PSCROLLBARINFO Info = NULL;
|
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);
|
Window = IntGetWindowObject(hwnd);
|
||||||
|
|
||||||
if(!Window)
|
if(!Window)
|
||||||
|
@ -457,20 +451,49 @@ NtUserGetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi)
|
||||||
{
|
{
|
||||||
case SB_HORZ:
|
case SB_HORZ:
|
||||||
Info = Window->pHScroll;
|
Info = Window->pHScroll;
|
||||||
break;
|
if(Info)
|
||||||
|
break;
|
||||||
|
/* fall through */
|
||||||
case SB_VERT:
|
case SB_VERT:
|
||||||
Info = Window->pVScroll;
|
Info = Window->pVScroll;
|
||||||
break;
|
if(Info)
|
||||||
|
break;
|
||||||
|
/* fall through */
|
||||||
case SB_CTL:
|
case SB_CTL:
|
||||||
Info = Window->wExtra;
|
Info = Window->wExtra;
|
||||||
break;
|
if(Info)
|
||||||
|
break;
|
||||||
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
IntReleaseWindowObject(Window);
|
IntReleaseWindowObject(Window);
|
||||||
return FALSE;
|
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);
|
IntReleaseWindowObject(Window);
|
||||||
return FALSE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -547,7 +570,7 @@ STDCALL
|
||||||
NtUserSetScrollInfo(
|
NtUserSetScrollInfo(
|
||||||
HWND hwnd,
|
HWND hwnd,
|
||||||
int fnBar,
|
int fnBar,
|
||||||
LPCSCROLLINFO lpsi,
|
LPSCROLLINFO lpsi,
|
||||||
WINBOOL fRedraw)
|
WINBOOL fRedraw)
|
||||||
{
|
{
|
||||||
PWINDOW_OBJECT Window;
|
PWINDOW_OBJECT Window;
|
||||||
|
@ -605,24 +628,47 @@ NtUserSetScrollInfo(
|
||||||
{
|
{
|
||||||
/* FIXME */
|
/* 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))
|
if((Mask & SIF_PAGE) && (psi->nPage != lpsi->nPage))
|
||||||
{
|
{
|
||||||
psi->nPage = lpsi->nPage;
|
psi->nPage = lpsi->nPage;
|
||||||
Chg = TRUE;
|
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))
|
if((Mask & SIF_POS) && (psi->nPos != lpsi->nPos))
|
||||||
{
|
{
|
||||||
psi->nPos = lpsi->nPos;
|
psi->nPos = lpsi->nPos;
|
||||||
Chg = TRUE;
|
Chg = TRUE;
|
||||||
}
|
if(psi->nPos < psi->nMin)
|
||||||
|
psi->nPos = psi->nMin;
|
||||||
if((Mask & SIF_RANGE) && ((psi->nMin != lpsi->nMin) || (psi->nMax != lpsi->nMax)))
|
else if(psi->nPos > psi->nMax - max(psi->nPage - 1, 0))
|
||||||
{
|
psi->nPos = psi->nMax - max(psi->nPage - 1, 0);
|
||||||
psi->nMin = lpsi->nMin;
|
|
||||||
psi->nMax = lpsi->nMax;
|
|
||||||
Chg = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME check assigned values */
|
/* FIXME check assigned values */
|
||||||
|
|
|
@ -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
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -587,15 +587,6 @@ NtUserGetCPD(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD
|
|
||||||
STDCALL
|
|
||||||
NtUserGetDoubleClickTime(VOID)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
STDCALL
|
STDCALL
|
||||||
NtUserGetGuiResources(
|
NtUserGetGuiResources(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue