Separate input capturing from OSD drawing so that we don't have to wait for the OSD to scroll off the screen to un-grab everything

git-svn-id: https://svn.eduke32.com/eduke32@402 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2006-12-11 03:32:43 +00:00
parent 286dd4b519
commit 5d79272ac2
2 changed files with 23 additions and 7 deletions

View file

@ -51,6 +51,9 @@ int OSD_HandleKey(int sc, int press);
// handles the readjustment when screen resolution changes // handles the readjustment when screen resolution changes
void OSD_ResizeDisplay(int w,int h); void OSD_ResizeDisplay(int w,int h);
// captures and frees osd input
void OSD_CaptureInput(int cap);
// shows or hides the onscreen display // shows or hides the onscreen display
void OSD_ShowDisplay(int onf); void OSD_ShowDisplay(int onf);

View file

@ -51,6 +51,7 @@ static int osdcols=60; // width of onscreen display in text columns
static int osdmaxrows=20; // maximum number of lines which can fit on the screen static int osdmaxrows=20; // maximum number of lines which can fit on the screen
static int osdmaxlines=TEXTSIZE/60; // maximum lines which can fit in the buffer static int osdmaxlines=TEXTSIZE/60; // maximum lines which can fit in the buffer
static char osdvisible=0; // onscreen display visible? static char osdvisible=0; // onscreen display visible?
static char osdinput=0; // capture input?
static int osdhead=0; // topmost visible line number static int osdhead=0; // topmost visible line number
static BFILE *osdlog=NULL; // log filehandle static BFILE *osdlog=NULL; // log filehandle
static char osdinited=0; // text buffer initialised? static char osdinited=0; // text buffer initialised?
@ -199,6 +200,8 @@ static int _internal_osdfunc_vars(const osdfuncparm_t *parm)
osdrows = atoi(parm->parms[0]); osdrows = atoi(parm->parms[0]);
if (osdrows < 1) osdrows = 1; if (osdrows < 1) osdrows = 1;
else if (osdrows > osdmaxrows) osdrows = osdmaxrows; else if (osdrows > osdmaxrows) osdrows = osdmaxrows;
if (osdrowscur < osdrows) osdscroll = 1;
else if (osdrowscur > osdrows) osdscroll = -1;
return OSDCMD_OK; return OSDCMD_OK;
} }
} }
@ -368,10 +371,11 @@ int OSD_HandleKey(int sc, int press)
else if (osdrowscur == osdrows) else if (osdrowscur == osdrows)
osdscroll = -1; osdscroll = -1;
osdrowscur += osdscroll; osdrowscur += osdscroll;
OSD_CaptureInput(osdscroll == 1);
bflushchars(); bflushchars();
} }
return 0;//sc; return 0;//sc;
} else if (!osdvisible) { } else if (!osdinput) {
return sc; return sc;
} }
@ -669,18 +673,27 @@ void OSD_ResizeDisplay(int w, int h)
} }
//
// OSD_CaptureInput()
//
void OSD_CaptureInput(int cap)
{
osdinput = (cap != 0);
osdeditcontrol = 0;
osdeditshift = 0;
grabmouse(osdinput == 0);
onshowosd(osdinput);
if (osdinput) releaseallbuttons();
}
// //
// OSD_ShowDisplay() -- Shows or hides the onscreen display // OSD_ShowDisplay() -- Shows or hides the onscreen display
// //
void OSD_ShowDisplay(int onf) void OSD_ShowDisplay(int onf)
{ {
osdvisible = (onf != 0); osdvisible = (onf != 0);
osdeditcontrol = 0; OSD_CaptureInput(osdvisible);
osdeditshift = 0;
grabmouse(osdvisible == 0);
onshowosd(osdvisible);
if (osdvisible) releaseallbuttons();
} }