fixed the win32 ShowCursor failure - have to make sureverything runs on the main thread - coroutines no longer count as the main thread

master
Allen Webster 2017-10-31 13:29:52 -04:00
parent bf6db5bf49
commit d25aa1bf62
1 changed files with 40 additions and 9 deletions

View File

@ -133,6 +133,8 @@ struct Win32_Vars{
HCURSOR cursor_arrow; HCURSOR cursor_arrow;
HCURSOR cursor_leftright; HCURSOR cursor_leftright;
HCURSOR cursor_updown; HCURSOR cursor_updown;
i32 cursor_show;
i32 prev_cursor_show;
u8 *clip_buffer; u8 *clip_buffer;
u32 clip_max; u32 clip_max;
@ -232,11 +234,7 @@ win32_toggle_fullscreen(){
// TODO(allen): add a "shown but auto-hides on timer" setting here. // TODO(allen): add a "shown but auto-hides on timer" setting here.
internal internal
Sys_Show_Mouse_Cursor_Sig(system_show_mouse_cursor){ Sys_Show_Mouse_Cursor_Sig(system_show_mouse_cursor){
switch (show){ win32vars.cursor_show = show;
case MouseCursorShow_Never: ShowCursor(false); break;
case MouseCursorShow_Always: ShowCursor(true); break;
// TODO(allen): MouseCursor_HideWhenStill
}
} }
internal internal
@ -678,16 +676,24 @@ internal void
Win32SetCursorFromUpdate(Application_Mouse_Cursor cursor){ Win32SetCursorFromUpdate(Application_Mouse_Cursor cursor){
switch (cursor){ switch (cursor){
case APP_MOUSE_CURSOR_ARROW: case APP_MOUSE_CURSOR_ARROW:
SetCursor(win32vars.cursor_arrow); break; {
SetCursor(win32vars.cursor_arrow);
}break;
case APP_MOUSE_CURSOR_IBEAM: case APP_MOUSE_CURSOR_IBEAM:
SetCursor(win32vars.cursor_ibeam); break; {
SetCursor(win32vars.cursor_ibeam);
}break;
case APP_MOUSE_CURSOR_LEFTRIGHT: case APP_MOUSE_CURSOR_LEFTRIGHT:
SetCursor(win32vars.cursor_leftright); break; {
SetCursor(win32vars.cursor_leftright);
}break;
case APP_MOUSE_CURSOR_UPDOWN: 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(); memory_init();
win32vars.cursor_show = MouseCursorShow_Always;
win32vars.prev_cursor_show = MouseCursorShow_Always;
// //
// HACK(allen): // HACK(allen):
// Previously zipped stuff is here, it should be zipped in the new pattern now. // 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); 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; win32vars.lctrl_lalt_is_altgr = result.lctrl_lalt_is_altgr;
HDC hdc = GetDC(win32vars.window_handle); HDC hdc = GetDC(win32vars.window_handle);