23DebugOverlayConsole::DebugOverlayConsole(HINSTANCE module,
44 deviceContext = GetDC(
window);
45 SelectObject(deviceContext,
46 CreateFontA(10, 10, 0, 0, 400, 0, 0, 0, 0, 2, 0, 0,
51 GetTextMetricsA(deviceContext, &metrics);
52 SetTextColor(deviceContext, 0xffffff);
53 SetBkColor(deviceContext, 0);
54 ReleaseDC(
window, deviceContext);
64 HANDLE (WINAPI *createMutex)(LPSECURITY_ATTRIBUTES attributes,
65 BOOL initialOwner, LPCSTR name) = CreateMutexA;
67 mutex = createMutex(0, FALSE, 0);
75DebugOverlayConsole::~DebugOverlayConsole()
101 if ((
int)timeGetTime() > timer + 500) {
102 waitResult = WaitForSingleObject(console->
mutex, 500);
103 if (waitResult == WAIT_FAILED) {
105 }
else if (waitResult == WAIT_TIMEOUT) {
109 deviceContext = GetDC(console->
window);
111 TextOutA(deviceContext,
121 ReleaseDC(console->
window, deviceContext);
123 ReleaseMutex(console->
mutex);
124 timer = timeGetTime();
136 if ((flags & 0x40000000) != 0) {
146 const char *format, ...)
150 signed char character;
153 vsprintf(console->
formatBuffer, format, (
char *)(&format + 1));
159 while (index < length) {
162 if (character >=
' ' && character <=
'~') {
200 console->DrawPendingLines();
204void DebugOverlayConsole::Clear(
void)
213void DebugOverlayConsole::Scroll(
void)
222void DebugOverlayConsole::DrawPendingLines(
void)
227 deviceContext = GetDC(
window);
230 BOOL (WINAPI *drawText)(HDC, int, int, LPCSTR, int) = TextOutA;
238 ReleaseDC(
window, deviceContext);
243char DebugOverlayConsole::WaitForKey(
void)
248 int (WINAPI *showCursor)(BOOL);
249 BOOL (WINAPI *setPriorityClass)(HANDLE, DWORD);
257 showCursor = ShowCursor;
258 setPriorityClass = SetPriorityClass;
259 while (complete == 0) {
260 if (minimized != 0) {
261 if (GetMessageA(&message, 0, 0, 0) != 0) {
262 TranslateMessage(&message);
263 DispatchMessageA(&message);
270 if (minimized == 0) {
277 process = GetCurrentProcess();
278 setPriorityClass(process, HIGH_PRIORITY_CLASS);
286 if (PeekMessageA(&message, 0, 0, 0, PM_NOREMOVE) != 0) {
287 if (GetMessageA(&message, 0, 0, 0) != 0) {
288 TranslateMessage(&message);
289 DispatchMessageA(&message);
300 if (minimized == 0) {
303 process = GetCurrentProcess();
304 setPriorityClass(process, 0x40);
325void DebugOverlayConsole::EnableReverseVideo(
void)
330 deviceContext = GetDC(
window);
334 ReleaseDC(
window, deviceContext);
339void DebugOverlayConsole::DisableReverseVideo(
void)
344 deviceContext = GetDC(
window);
348 ReleaseDC(
window, deviceContext);
353void DebugOverlayConsole::SetOverlayTextColor(
int red,
int green,
int blue)
357 deviceContext = GetDC(
window);
358 textColor = red + (blue * 0x100 + green) * 0x100;
360 ReleaseDC(
window, deviceContext);
364void DebugOverlayConsole::SetOverlayBackgroundColor(
int red,
int green,
369 deviceContext = GetDC(
window);
372 ReleaseDC(
window, deviceContext);
376void DebugOverlayConsole::SetTransparentBackground(
void)
381 deviceContext = GetDC(
window);
383 ReleaseDC(
window, deviceContext);
387void DebugOverlayConsole::SetOpaqueBackground(
void)
392 deviceContext = GetDC(
window);
394 ReleaseDC(
window, deviceContext);
int nDebugOverlayConsoleCount
DWORD dwDebugOverlayKeyLatch
unsigned char * dirtyLines
Umbrella header for the game core.
void ShutdownGameWindow(void)
DWORD WINAPI DebugOverlayWorkerProc(void *parameter)
LRESULT CALLBACK DebugKeyboardHookProc(int code, WPARAM key, LPARAM flags)
void DebugOverlayPrintf(DebugOverlayConsole *console, const char *format,...)