[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 void FreeCurIconObject(PVOID Object);
51
52 #else
53
54 typedef struct tagCURICON_PROCESS
55 {
56 LIST_ENTRY ListEntry;
57 PPROCESSINFO Process;
58 } CURICON_PROCESS, *PCURICON_PROCESS;
59
60 typedef struct _CURICON_OBJECT
61 {
62 PROCMARKHEAD head;
63 LIST_ENTRY ListEntry;
64 HANDLE Self;
65 LIST_ENTRY ProcessList;
66 HMODULE hModule;
67 HRSRC hRsrc;
68 HRSRC hGroupRsrc;
69 SIZE Size;
70 BYTE Shadow;
71 ICONINFO IconInfo;
72 } CURICON_OBJECT, *PCURICON_OBJECT;
73 BOOLEAN FASTCALL IntDestroyCurIconObject(PCURICON_OBJECT CurIcon, PPROCESSINFO ppi);
74 BOOL FASTCALL IntDestroyCursor(HANDLE hCurIcon, BOOL bForce);
75 HCURSOR FASTCALL IntSetCursor(HCURSOR hCursor);
76 #endif
77
78 typedef struct _CURSORACCELERATION_INFO
79 {
80 UINT FirstThreshold;
81 UINT SecondThreshold;
82 UINT Acceleration;
83 } CURSORACCELERATION_INFO, *PCURSORACCELERATION_INFO;
84
85 typedef struct _SYSTEM_CURSORINFO
86 {
87 BOOL Enabled;
88 BOOL ClickLockActive;
89 DWORD ClickLockTime;
90 // BOOL SwapButtons;
91 UINT ButtonsDown;
92 RECTL rcClip;
93 BOOL bClipped;
94 PCURICON_OBJECT CurrentCursorObject;
95 INT ShowingCursor;
96 /*
97 UINT WheelScroLines;
98 UINT WheelScroChars;
99 UINT DblClickSpeed;
100 UINT DblClickWidth;
101 UINT DblClickHeight;
102
103 UINT MouseHoverTime;
104 UINT MouseHoverWidth;
105 UINT MouseHoverHeight;
106
107 UINT MouseSpeed;
108 CURSORACCELERATION_INFO CursorAccelerationInfo;
109 */
110 DWORD LastBtnDown;
111 LONG LastBtnDownX;
112 LONG LastBtnDownY;
113 HANDLE LastClkWnd;
114 BOOL ScreenSaverRunning;
115 } SYSTEM_CURSORINFO, *PSYSTEM_CURSORINFO;
116
117 BOOL InitCursorImpl(VOID);
118 HANDLE IntCreateCurIconHandle(BOOLEAN Anim);
119
120 BOOL UserDrawIconEx(HDC hDc, INT xLeft, INT yTop, PCURICON_OBJECT pIcon, INT cxWidth,
121 INT cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags);
122 PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCurIcon);
123 BOOL UserSetCursorPos( INT x, INT y, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook);
124 BOOL APIENTRY UserClipCursor(RECTL *prcl);
125 PSYSTEM_CURSORINFO IntGetSysCursorInfo(VOID);
126
127 #define IntReleaseCurIconObject(CurIconObj) \
128 UserDereferenceObject(CurIconObj)
129
130 /* EOF */