Ilya Olevsky <info valengames.com> writes:
Thanks for the advice.
I put this check in my main code loop, and when the program starts up now,
the
cursor is hidden.
However, if later something happens on the system that causes the cursor to
become an hourglass (disk access, etc), it causes the cursor to reappear.
I
would think this code would correctly re-hide the cursor, but it does not.
Any
other ideas?
Hmm… That’s weird, but then again I’ve seen Win98/ME do stranger
things. Try calling SDL_WM_GrabInput(SDL_GRAB_ON) after you init
everything, if you don’t do it already. If that doesn’t help, try hiding
the cursor when the app gains mouse focus (on SDL_APPMOUSEFOCUS instead
of SDL_APPINPUTFOCUS) or just check against SDL_APPACTIVE when you get
an SDL_ACTIVEEVENT. That’s pretty much all I can think of other than
checking every frame if the mouse is visible.
Ilya
Ok, it seems that it’s a crap shoot whether or not the mouse is already
visible upon startup…sometimes it is there, sometimes not. I tried the
SDL_WM_GrabInput, but that seemed to make it worse.
This is basically the logic I have (I don’t use the mouse at all in this app,
just joystick and keyboard):
int main()
{
if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
{
// report error
}
input_startup() (initialize keyboard, joystick)
graphics_startup (set video mode, etc)
while (!finished)
{
if (ready to draw)
{
// draw screen
}
while(frame_count > 0)
{
next_frame();
handle_events(); (keyboard events)
update_screen();
frame_count–;
}
if ((SDL_GetAppState() & SDL_APPMOUSEFOCUS)
|| (SDL_GetAppState() & SDL_APPINPUTFOCUS)
|| (SDL_GetAppStaet() & SDL_APPACTIVE))
{
SDL_ShowCursor(SDL_DISABLE);
}
}
}
If the app starts with the cursor hidden, the cursor appears later at a random
time (seems like it may be due to the system doing some background processing).
But I would think the above code would hide it if it appeared later?
Again, simply pressing a button on the mouse or moving the mouse causes the
cursor to disappear again.
Any other suggestions?