From d25aa1bf620167862e374c88aef0bedbb0a4408c Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 31 Oct 2017 13:29:52 -0400 Subject: [PATCH] fixed the win32 ShowCursor failure - have to make sureverything runs on the main thread - coroutines no longer count as the main thread --- platform_win32/win32_4ed.cpp | 49 +++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/platform_win32/win32_4ed.cpp b/platform_win32/win32_4ed.cpp index 8ec8c053..26d920f8 100644 --- a/platform_win32/win32_4ed.cpp +++ b/platform_win32/win32_4ed.cpp @@ -133,6 +133,8 @@ struct Win32_Vars{ HCURSOR cursor_arrow; HCURSOR cursor_leftright; HCURSOR cursor_updown; + i32 cursor_show; + i32 prev_cursor_show; u8 *clip_buffer; u32 clip_max; @@ -232,11 +234,7 @@ win32_toggle_fullscreen(){ // TODO(allen): add a "shown but auto-hides on timer" setting here. internal Sys_Show_Mouse_Cursor_Sig(system_show_mouse_cursor){ - switch (show){ - case MouseCursorShow_Never: ShowCursor(false); break; - case MouseCursorShow_Always: ShowCursor(true); break; - // TODO(allen): MouseCursor_HideWhenStill - } + win32vars.cursor_show = show; } internal @@ -678,16 +676,24 @@ internal void Win32SetCursorFromUpdate(Application_Mouse_Cursor cursor){ switch (cursor){ case APP_MOUSE_CURSOR_ARROW: - SetCursor(win32vars.cursor_arrow); break; + { + SetCursor(win32vars.cursor_arrow); + }break; case APP_MOUSE_CURSOR_IBEAM: - SetCursor(win32vars.cursor_ibeam); break; + { + SetCursor(win32vars.cursor_ibeam); + }break; case APP_MOUSE_CURSOR_LEFTRIGHT: - SetCursor(win32vars.cursor_leftright); break; + { + SetCursor(win32vars.cursor_leftright); + }break; case APP_MOUSE_CURSOR_UPDOWN: - SetCursor(win32vars.cursor_updown); break; + { + SetCursor(win32vars.cursor_updown); + }break; } } @@ -985,6 +991,9 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS memory_init(); + win32vars.cursor_show = MouseCursorShow_Always; + win32vars.prev_cursor_show = MouseCursorShow_Always; + // // HACK(allen): // Previously zipped stuff is here, it should be zipped in the new pattern now. @@ -1362,6 +1371,28 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS } Win32SetCursorFromUpdate(result.mouse_cursor_type); + if (win32vars.cursor_show != win32vars.prev_cursor_show){ + win32vars.prev_cursor_show = win32vars.cursor_show; + switch (win32vars.cursor_show){ + case MouseCursorShow_Never: + { + i32 counter = 0; + do{ + counter = ShowCursor(false); + }while(counter >= 0); + }break; + + case MouseCursorShow_Always: + { + i32 counter = 0; + do{ + counter = ShowCursor(true); + }while(counter <= 0); + }break; + + // TODO(allen): MouseCursorShow_HideWhenStill + } + } win32vars.lctrl_lalt_is_altgr = result.lctrl_lalt_is_altgr; HDC hdc = GetDC(win32vars.window_handle);