4 * Copyright 1993 David Metcalfe
6 static char Copyright[] = "Copyright David Metcalfe, 1993";
10 #include "selectors.h"
12 /* #define DEBUG_CARET */
32 static BOOL LockCaret
;
34 static void CARET_HideCaret();
37 /*****************************************************************
40 WORD
CARET_Callback(HWND hwnd
, WORD msg
, WORD timerid
, LONG ctime
)
46 dprintf_caret(stddeb
,"CARET_Callback: id=%d: LockCaret=%d, hidden=%d, on=%d\n",
47 timerid
, LockCaret
, Caret
.hidden
, Caret
.on
);
48 if (!LockCaret
&& (!Caret
.hidden
|| Caret
.on
))
50 Caret
.on
= (Caret
.on
? FALSE
: TRUE
);
51 hdc
= GetDC(Caret
.hwnd
);
52 if (Caret
.bitmap
== 0 || Caret
.bitmap
== 1)
53 hBrush
= CreateSolidBrush(Caret
.color
);
55 hBrush
= CreatePatternBrush(Caret
.bitmap
);
56 SelectObject(hdc
, (HANDLE
)hBrush
);
57 SetROP2(hdc
, R2_XORPEN
);
58 rgn
= CreateRectRgn(Caret
.x
, Caret
.y
,
59 Caret
.x
+ Caret
.width
,
60 Caret
.y
+ Caret
.height
);
61 FillRgn(hdc
, rgn
, hBrush
);
62 DeleteObject((HANDLE
)rgn
);
63 DeleteObject((HANDLE
)hBrush
);
64 ReleaseDC(Caret
.hwnd
, hdc
);
70 /*****************************************************************
74 static void CARET_HideCaret()
81 hdc
= GetDC(Caret
.hwnd
);
82 if (Caret
.bitmap
== 0 || Caret
.bitmap
== 1)
83 hBrush
= CreateSolidBrush(Caret
.color
);
85 hBrush
= CreatePatternBrush(Caret
.bitmap
);
86 SelectObject(hdc
, (HANDLE
)hBrush
);
87 SetROP2(hdc
, R2_XORPEN
);
88 rgn
= CreateRectRgn(Caret
.x
, Caret
.y
,
89 Caret
.x
+ Caret
.width
,
90 Caret
.y
+ Caret
.height
);
91 FillRgn(hdc
, rgn
, hBrush
);
92 DeleteObject((HANDLE
)rgn
);
93 DeleteObject((HANDLE
)hBrush
);
94 ReleaseDC(Caret
.hwnd
, hdc
);
98 /*****************************************************************
99 * CreateCaret (USER.163)
102 void CreateCaret(HWND hwnd
, HBITMAP bitmap
, short width
, short height
)
107 /* if cursor already exists, destroy it */
111 if (bitmap
&& bitmap
!= 1)
112 Caret
.bitmap
= bitmap
;
117 Caret
.width
= GetSystemMetrics(SM_CXBORDER
);
120 Caret
.height
= height
;
122 Caret
.height
= GetSystemMetrics(SM_CYBORDER
);
130 Caret
.color
= GetSysColor(COLOR_GRAYTEXT
);
132 Caret
.color
= GetSysColor(COLOR_WINDOWTEXT
);
136 Caret
.timerid
= SetSystemTimer( (HWND
)0, 0, Caret
.timeout
,
137 (FARPROC
)GetWndProcEntry16("CARET_Callback"));
139 dprintf_caret(stddeb
,"CreateCaret: hwnd=%d, timerid=%d\n",
140 hwnd
, Caret
.timerid
);
144 /*****************************************************************
145 * DestroyCaret (USER.164)
150 /* if (!Caret.hwnd) return;
152 dprintf_caret(stddeb
,"DestroyCaret: timerid=%d\n", Caret
.timerid
);
154 KillSystemTimer( (HWND
)0, Caret
.timerid
);
159 Caret
.hwnd
= 0; /* cursor marked as not existing */
163 /*****************************************************************
164 * SetCaretPos (USER.165)
167 void SetCaretPos(short x
, short y
)
169 if (!Caret
.hwnd
) return;
171 dprintf_caret(stddeb
,"SetCaretPos: x=%d, y=%d\n", x
, y
);
182 /*****************************************************************
183 * HideCaret (USER.166)
186 void HideCaret(HWND hwnd
)
188 if (!Caret
.hwnd
) return;
189 if (hwnd
&& (Caret
.hwnd
!= hwnd
)) return;
200 /*****************************************************************
201 * ShowCaret (USER.167)
204 void ShowCaret(HWND hwnd
)
206 if (!Caret
.hwnd
) return;
207 if (hwnd
&& (Caret
.hwnd
!= hwnd
)) return;
209 dprintf_caret(stddeb
,"ShowCaret: hidden=%d\n", Caret
.hidden
);
215 /*****************************************************************
216 * SetCaretBlinkTime (USER.168)
219 void SetCaretBlinkTime(WORD msecs
)
221 if (!Caret
.hwnd
) return;
223 KillSystemTimer( (HWND
)0, Caret
.timerid
);
224 Caret
.timeout
= msecs
;
225 Caret
.timerid
= SetSystemTimer( (HWND
)0, 0, Caret
.timeout
,
226 (FARPROC
)GetWndProcEntry16("CARET_Callback"));
230 /*****************************************************************
231 * GetCaretBlinkTime (USER.169)
234 WORD
GetCaretBlinkTime()
236 if (!Caret
.hwnd
) return 0;
237 return Caret
.timeout
;
241 /*****************************************************************
242 * GetCaretPos (USER.183)
245 void GetCaretPos(LPPOINT pt
)
247 if (!Caret
.hwnd
|| !pt
) return;