[WIN32K]
[reactos.git] / reactos / win32ss / user / ntuser / cursoricon.h
1 #pragma once
2
3 #define MAXCURICONHANDLES 4096
4
5 #ifdef NEW_CURSORICON
6 typedef struct _CURICON_OBJECT
7 {
8 PROCMARKHEAD head;
9 struct _CURICON_OBJECT* pcurNext;
10 UNICODE_STRING strName;
11 USHORT atomModName;
12 USHORT rt;
13 ULONG CURSORF_flags;
14 SHORT xHotspot;
15 SHORT yHotspot;
16 HBITMAP hbmMask;
17 HBITMAP hbmColor;
18 HBITMAP hbmAlpha;
19 RECT rcBounds;
20 HBITMAP hbmUserAlpha;
21 ULONG bpp;
22 ULONG cx;
23 ULONG cy;
24 } CURICON_OBJECT, *PCURICON_OBJECT;
25
26 typedef struct tagACON
27 {
28 PROCMARKHEAD head;
29 struct _CURICON_OBJECT* pcurNext;
30 UNICODE_STRING strName;
31 USHORT atomModName;
32 USHORT rt;
33 ULONG CURSORF_flags;
34 INT cpcur;
35 INT cicur;
36 PCURICON_OBJECT * aspcur;
37 DWORD * aicur;
38 INT * ajifRate;
39 INT iicur;
40 } ACON, *PACON;
41
42 C_ASSERT(FIELD_OFFSET(ACON, cpcur) == FIELD_OFFSET(CURICON_OBJECT, xHotspot));
43
44 BOOLEAN
45 IntDestroyCurIconObject(PVOID Object);
46
47 VOID FASTCALL
48 IntCleanupCurIconCache(PPROCESSINFO Win32Process);
49
50 #else
51
52 typedef struct tagCURICON_PROCESS
53 {
54 LIST_ENTRY ListEntry;
55 PPROCESSINFO Process;
56 } CURICON_PROCESS, *PCURICON_PROCESS;
57
58 typedef struct _CURICON_OBJECT
59 {
60 PROCMARKHEAD head;
61 LIST_ENTRY ListEntry;
62 HANDLE Self;
63 LIST_ENTRY ProcessList;
64 HMODULE hModule;
65 HRSRC hRsrc;
66 HRSRC hGroupRsrc;
67 SIZE Size;
68 BYTE Shadow;
69 ICONINFO IconInfo;
70 } CURICON_OBJECT, *PCURICON_OBJECT;
71 BOOLEAN FASTCALL IntDestroyCurIconObject(PCURICON_OBJECT CurIcon, PPROCESSINFO ppi);
72 BOOL FASTCALL IntDestroyCursor(HANDLE hCurIcon, BOOL bForce);
73 HCURSOR FASTCALL IntSetCursor(HCURSOR hCursor);
74 #endif
75
76 typedef struct _CURSORACCELERATION_INFO
77 {
78 UINT FirstThreshold;
79 UINT SecondThreshold;
80 UINT Acceleration;
81 } CURSORACCELERATION_INFO, *PCURSORACCELERATION_INFO;
82
83 typedef struct _SYSTEM_CURSORINFO
84 {
85 BOOL Enabled;
86 BOOL ClickLockActive;
87 DWORD ClickLockTime;
88 // BOOL SwapButtons;
89 UINT ButtonsDown;
90 RECTL rcClip;
91 BOOL bClipped;
92 PCURICON_OBJECT CurrentCursorObject;
93 INT ShowingCursor;
94 /*
95 UINT WheelScroLines;
96 UINT WheelScroChars;
97 UINT DblClickSpeed;
98 UINT DblClickWidth;
99 UINT DblClickHeight;
100
101 UINT MouseHoverTime;
102 UINT MouseHoverWidth;
103 UINT MouseHoverHeight;
104
105 UINT MouseSpeed;
106 CURSORACCELERATION_INFO CursorAccelerationInfo;
107 */
108 DWORD LastBtnDown;
109 LONG LastBtnDownX;
110 LONG LastBtnDownY;
111 HANDLE LastClkWnd;
112 BOOL ScreenSaverRunning;
113 } SYSTEM_CURSORINFO, *PSYSTEM_CURSORINFO;
114
115 BOOL InitCursorImpl(VOID);
116 HANDLE IntCreateCurIconHandle(BOOLEAN Anim);
117
118 BOOL UserDrawIconEx(HDC hDc, INT xLeft, INT yTop, PCURICON_OBJECT pIcon, INT cxWidth,
119 INT cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags);
120 PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCurIcon);
121 BOOL UserSetCursorPos( INT x, INT y, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook);
122 BOOL APIENTRY UserClipCursor(RECTL *prcl);
123 PSYSTEM_CURSORINFO IntGetSysCursorInfo(VOID);
124
125 #define IntReleaseCurIconObject(CurIconObj) \
126 UserDereferenceObject(CurIconObj)
127
128 /* EOF */