diff options
Diffstat (limited to 'plugins/dfxvideo/menu.c')
| -rw-r--r-- | plugins/dfxvideo/menu.c | 487 |
1 files changed, 245 insertions, 242 deletions
diff --git a/plugins/dfxvideo/menu.c b/plugins/dfxvideo/menu.c index 4867ca0b..1c742668 100644 --- a/plugins/dfxvideo/menu.c +++ b/plugins/dfxvideo/menu.c @@ -1,242 +1,245 @@ -/*************************************************************************** - menu.c - description - ------------------- - begin : Sun Oct 28 2001 - copyright : (C) 2001 by Pete Bernert - email : BlackDove@addcom.de - ***************************************************************************/ -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. See also the license.txt file for * - * additional informations. * - * * - ***************************************************************************/ - -#define _IN_MENU - -#include "externals.h" -#include "draw.h" -#include "menu.h" -#include "gpu.h" - -#ifdef _WINDOWS - -#include "record.h" - -HFONT hGFont=NULL; -BOOL bTransparent=FALSE; - -#endif - -unsigned long dwCoreFlags = 0; - -// create lists/stuff for fonts (actually there are no more lists, but I am too lazy to change the func names ;) -void InitMenu(void) -{ -#ifdef _WINDOWS - hGFont=CreateFont(//-8, - 13,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE, - ANSI_CHARSET,OUT_DEFAULT_PRECIS, - CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, - DEFAULT_PITCH, - //"Courier New"); - //"MS Sans Serif"); - "Arial"); -#endif -} - -// kill existing lists/fonts -void CloseMenu(void) -{ -#ifdef _WINDOWS - if(hGFont) DeleteObject(hGFont); - hGFont=NULL; -#else - DestroyPic(); -#endif -} - -// DISPLAY FPS/MENU TEXT - -int iMPos=0; // menu arrow pos - -void DisplayText(void) // DISPLAY TEXT -{ -#ifdef _WINDOWS - HDC hdc;HFONT hFO; - - IDirectDrawSurface_GetDC(DX.DDSRender,&hdc); - hFO=(HFONT)SelectObject(hdc,hGFont); - - SetTextColor(hdc,RGB(0,255,0)); - if(bTransparent) - SetBkMode(hdc,TRANSPARENT); - else SetBkColor(hdc,RGB(0,0,0)); - - if(szDebugText[0] && ((time(NULL) - tStart) < 2)) // special debug text? show it - { - RECT r={0,0,1024,1024}; - DrawText(hdc,szDebugText,lstrlen(szDebugText),&r,DT_LEFT|DT_NOCLIP); - } - else // else standard gpu menu - { - szDebugText[0]=0; - lstrcat(szDispBuf,szMenuBuf); - ExtTextOut(hdc,0,0,0,NULL,szDispBuf,lstrlen(szDispBuf),NULL); - } - - SelectObject(hdc,hFO); - IDirectDrawSurface_ReleaseDC(DX.DDSRender,hdc); -#endif -} - -// Build Menu buffer (== Dispbuffer without FPS)... -void BuildDispMenu(int iInc) -{ - if(!(ulKeybits&KEY_SHOWFPS)) return; // mmm, cheater ;) - - iMPos+=iInc; // up or down - if(iMPos<0) iMPos=3; // wrap around - if(iMPos>3) iMPos=0; - - strcpy(szMenuBuf," FL FS DI GF "); // main menu items - - if(UseFrameLimit) // set marks - { - if(iFrameLimit==1) szMenuBuf[2] = '+'; - else szMenuBuf[2] = '*'; - } - if(iFastFwd) szMenuBuf[7] = '~'; - else - if(UseFrameSkip) szMenuBuf[7] = '*'; - - if(iUseDither) // set marks - { - if(iUseDither==1) szMenuBuf[12] = '+'; - else szMenuBuf[12] = '*'; - } - - if(dwActFixes) szMenuBuf[17] = '*'; - - if(dwCoreFlags&1) szMenuBuf[23] = 'A'; - if(dwCoreFlags&2) szMenuBuf[23] = 'M'; - - if(dwCoreFlags&0xff00) //A/M/G/D - { - if((dwCoreFlags&0x0f00)==0x0000) // D - szMenuBuf[23] = 'D'; - else - if((dwCoreFlags&0x0f00)==0x0100) // A - szMenuBuf[23] = 'A'; - else - if((dwCoreFlags&0x0f00)==0x0200) // M - szMenuBuf[23] = 'M'; - else - if((dwCoreFlags&0x0f00)==0x0300) // G - szMenuBuf[23] = 'G'; - - szMenuBuf[24]='0'+(char)((dwCoreFlags&0xf000)>>12); // number - } - -#ifdef _WINDOWS - if(bVsync_Key) szMenuBuf[25] = 'V'; -#endif - - if(lSelectedSlot) szMenuBuf[26] = '0'+(char)lSelectedSlot; - - szMenuBuf[(iMPos+1)*5]='<'; // set arrow - -#ifdef _WINDOWS - if(RECORD_RECORDING) - { - szMenuBuf[27] = ' '; - szMenuBuf[28] = ' '; - szMenuBuf[29] = ' '; - szMenuBuf[30] = 'R'; - szMenuBuf[31] = 'e'; - szMenuBuf[32] = 'c'; - szMenuBuf[33] = 0; - } - - if(DX.DDSScreenPic) ShowTextGpuPic(); -#endif -} - -// Some menu action... -void SwitchDispMenu(int iStep) // SWITCH DISP MENU -{ - if(!(ulKeybits&KEY_SHOWFPS)) return; // tststs - - switch(iMPos) - { - case 0: // frame limit - { - int iType=0; - bInitCap = TRUE; - -#ifdef _WINDOWS - if(iFrameLimit==1 && UseFrameLimit && - GetAsyncKeyState(VK_SHIFT)&32768) - { - fFrameRate+=iStep; - if(fFrameRate<3.0f) fFrameRate=3.0f; - SetAutoFrameCap(); - break; - } -#endif - - if(UseFrameLimit) iType=iFrameLimit; - iType+=iStep; - if(iType<0) iType=2; - if(iType>2) iType=0; - if(iType==0) UseFrameLimit=0; - else - { - UseFrameLimit=1; - iFrameLimit=iType; - SetAutoFrameCap(); - } - } break; - - case 1: // frame skip - bInitCap = TRUE; - if(iStep>0) - { - if(!UseFrameSkip) {UseFrameSkip=1;iFastFwd = 0;} - else - { - if(!iFastFwd) iFastFwd=1; - else {UseFrameSkip=0;iFastFwd = 0;} - } - } - else - { - if(!UseFrameSkip) {UseFrameSkip=1;iFastFwd = 1;} - else - { - if(iFastFwd) iFastFwd=0; - else {UseFrameSkip=0;iFastFwd = 0;} - } - } - bSkipNextFrame=FALSE; - break; - - case 2: // dithering - iUseDither+=iStep; - if(iUseDither<0) iUseDither=2; - if(iUseDither>2) iUseDither=0; - break; - - case 3: // special fixes - if(iUseFixes) {iUseFixes=0;dwActFixes=0;} - else {iUseFixes=1;dwActFixes=dwCfgFixes;} - SetFixes(); - if(iFrameLimit==2) SetAutoFrameCap(); - break; - } - - BuildDispMenu(0); // update info -} +/***************************************************************************
+ menu.c - description
+ -------------------
+ begin : Sun Oct 28 2001
+ copyright : (C) 2001 by Pete Bernert
+ email : BlackDove@addcom.de
+ ***************************************************************************/
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. See also the license.txt file for *
+ * additional informations. *
+ * *
+ ***************************************************************************/
+
+#define _IN_MENU
+
+#include "externals.h"
+#include "draw.h"
+#include "menu.h"
+#include "gpu.h"
+
+#ifdef _WINDOWS
+
+#include "record.h"
+
+HFONT hGFont=NULL;
+BOOL bTransparent=FALSE;
+
+#endif
+
+unsigned long dwCoreFlags = 0;
+
+// create lists/stuff for fonts (actually there are no more lists, but I am too lazy to change the func names ;)
+void InitMenu(void)
+{
+#ifdef _WINDOWS
+ hGFont=CreateFont(//-8,
+ 13,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
+ ANSI_CHARSET,OUT_DEFAULT_PRECIS,
+ CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
+ DEFAULT_PITCH,
+ //"Courier New");
+ //"MS Sans Serif");
+ "Arial");
+#endif
+}
+
+// kill existing lists/fonts
+void CloseMenu(void)
+{
+#ifdef _WINDOWS
+ if(hGFont) DeleteObject(hGFont);
+ hGFont=NULL;
+#else
+ DestroyPic();
+#endif
+}
+
+// DISPLAY FPS/MENU TEXT
+
+#include <time.h>
+extern time_t tStart;
+
+int iMPos=0; // menu arrow pos
+
+void DisplayText(void) // DISPLAY TEXT
+{
+#ifdef _WINDOWS
+ HDC hdc;HFONT hFO;
+
+ IDirectDrawSurface_GetDC(DX.DDSRender,&hdc);
+ hFO=(HFONT)SelectObject(hdc,hGFont);
+
+ SetTextColor(hdc,RGB(0,255,0));
+ if(bTransparent)
+ SetBkMode(hdc,TRANSPARENT);
+ else SetBkColor(hdc,RGB(0,0,0));
+
+ if(szDebugText[0] && ((time(NULL) - tStart) < 2)) // special debug text? show it
+ {
+ RECT r={0,0,1024,1024};
+ DrawText(hdc,szDebugText,lstrlen(szDebugText),&r,DT_LEFT|DT_NOCLIP);
+ }
+ else // else standard gpu menu
+ {
+ szDebugText[0]=0;
+ lstrcat(szDispBuf,szMenuBuf);
+ ExtTextOut(hdc,0,0,0,NULL,szDispBuf,lstrlen(szDispBuf),NULL);
+ }
+
+ SelectObject(hdc,hFO);
+ IDirectDrawSurface_ReleaseDC(DX.DDSRender,hdc);
+#endif
+}
+
+// Build Menu buffer (== Dispbuffer without FPS)...
+void BuildDispMenu(int iInc)
+{
+ if(!(ulKeybits&KEY_SHOWFPS)) return; // mmm, cheater ;)
+
+ iMPos+=iInc; // up or down
+ if(iMPos<0) iMPos=3; // wrap around
+ if(iMPos>3) iMPos=0;
+
+ strcpy(szMenuBuf," FL FS DI GF "); // main menu items
+
+ if(UseFrameLimit) // set marks
+ {
+ if(iFrameLimit==1) szMenuBuf[2] = '+';
+ else szMenuBuf[2] = '*';
+ }
+ if(iFastFwd) szMenuBuf[7] = '~';
+ else
+ if(UseFrameSkip) szMenuBuf[7] = '*';
+
+ if(iUseDither) // set marks
+ {
+ if(iUseDither==1) szMenuBuf[12] = '+';
+ else szMenuBuf[12] = '*';
+ }
+
+ if(dwActFixes) szMenuBuf[17] = '*';
+
+ if(dwCoreFlags&1) szMenuBuf[23] = 'A';
+ if(dwCoreFlags&2) szMenuBuf[23] = 'M';
+
+ if(dwCoreFlags&0xff00) //A/M/G/D
+ {
+ if((dwCoreFlags&0x0f00)==0x0000) // D
+ szMenuBuf[23] = 'D';
+ else
+ if((dwCoreFlags&0x0f00)==0x0100) // A
+ szMenuBuf[23] = 'A';
+ else
+ if((dwCoreFlags&0x0f00)==0x0200) // M
+ szMenuBuf[23] = 'M';
+ else
+ if((dwCoreFlags&0x0f00)==0x0300) // G
+ szMenuBuf[23] = 'G';
+
+ szMenuBuf[24]='0'+(char)((dwCoreFlags&0xf000)>>12); // number
+ }
+
+#ifdef _WINDOWS
+ if(bVsync_Key) szMenuBuf[25] = 'V';
+#endif
+
+ if(lSelectedSlot) szMenuBuf[26] = '0'+(char)lSelectedSlot;
+
+ szMenuBuf[(iMPos+1)*5]='<'; // set arrow
+
+#ifdef _WINDOWS
+ if(RECORD_RECORDING)
+ {
+ szMenuBuf[27] = ' ';
+ szMenuBuf[28] = ' ';
+ szMenuBuf[29] = ' ';
+ szMenuBuf[30] = 'R';
+ szMenuBuf[31] = 'e';
+ szMenuBuf[32] = 'c';
+ szMenuBuf[33] = 0;
+ }
+
+ if(DX.DDSScreenPic) ShowTextGpuPic();
+#endif
+}
+
+// Some menu action...
+void SwitchDispMenu(int iStep) // SWITCH DISP MENU
+{
+ if(!(ulKeybits&KEY_SHOWFPS)) return; // tststs
+
+ switch(iMPos)
+ {
+ case 0: // frame limit
+ {
+ int iType=0;
+ bInitCap = TRUE;
+
+#ifdef _WINDOWS
+ if(iFrameLimit==1 && UseFrameLimit &&
+ GetAsyncKeyState(VK_SHIFT)&32768)
+ {
+ fFrameRate+=iStep;
+ if(fFrameRate<3.0f) fFrameRate=3.0f;
+ SetAutoFrameCap();
+ break;
+ }
+#endif
+
+ if(UseFrameLimit) iType=iFrameLimit;
+ iType+=iStep;
+ if(iType<0) iType=2;
+ if(iType>2) iType=0;
+ if(iType==0) UseFrameLimit=0;
+ else
+ {
+ UseFrameLimit=1;
+ iFrameLimit=iType;
+ SetAutoFrameCap();
+ }
+ } break;
+
+ case 1: // frame skip
+ bInitCap = TRUE;
+ if(iStep>0)
+ {
+ if(!UseFrameSkip) {UseFrameSkip=1;iFastFwd = 0;}
+ else
+ {
+ if(!iFastFwd) iFastFwd=1;
+ else {UseFrameSkip=0;iFastFwd = 0;}
+ }
+ }
+ else
+ {
+ if(!UseFrameSkip) {UseFrameSkip=1;iFastFwd = 1;}
+ else
+ {
+ if(iFastFwd) iFastFwd=0;
+ else {UseFrameSkip=0;iFastFwd = 0;}
+ }
+ }
+ bSkipNextFrame=FALSE;
+ break;
+
+ case 2: // dithering
+ iUseDither+=iStep;
+ if(iUseDither<0) iUseDither=2;
+ if(iUseDither>2) iUseDither=0;
+ break;
+
+ case 3: // special fixes
+ if(iUseFixes) {iUseFixes=0;dwActFixes=0;}
+ else {iUseFixes=1;dwActFixes=dwCfgFixes;}
+ SetFixes();
+ if(iFrameLimit==2) SetAutoFrameCap();
+ break;
+ }
+
+ BuildDispMenu(0); // update info
+}
|
