summaryrefslogtreecommitdiff
path: root/plugins/peopsxgl/gpucfg/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/peopsxgl/gpucfg/main.c')
-rw-r--r--plugins/peopsxgl/gpucfg/main.c1220
1 files changed, 699 insertions, 521 deletions
diff --git a/plugins/peopsxgl/gpucfg/main.c b/plugins/peopsxgl/gpucfg/main.c
index 199160c2..f9dbdeef 100644
--- a/plugins/peopsxgl/gpucfg/main.c
+++ b/plugins/peopsxgl/gpucfg/main.c
@@ -1,545 +1,723 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
#include <gtk/gtk.h>
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
+#include <stdlib.h>
#include <string.h>
-#define SETCHECK(winame) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (wndMain,winame)), TRUE)
-#define SETEDITVAL(winame,v) sprintf(t,"%d",v);gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object (wndMain,winame)), t)
-#define SETLIST(winame,v) gtk_combo_box_set_active(GTK_COMBO_BOX(gtk_builder_get_object(wndMain,winame)), v)
-
-static GtkBuilder *wndMain;
-void SaveConfig(void);
-
-int main (int argc, char *argv[])
-{
- GtkWidget *main_win;
- GError *error = NULL;
- FILE *in;char t[256];int len,val;
- char * pB, * p;
-
- if(argc!=2) return 0;
- if(strcmp(argv[1],"CFG")!=0 && strcmp(argv[1],"ABOUT")!=0)
- return 0;
-
- gtk_set_locale ();
- gtk_init (&argc, &argv);
-
- wndMain = gtk_builder_new();
- gtk_builder_set_translation_domain(wndMain, PACKAGE_NAME);
- if (!gtk_builder_add_from_file (wndMain, DATADIR "peopsxgl.ui", &error))
- {
- g_warning ("Couldn't load builder file: %s", error->message);
- g_error_free (error);
- return -1;
- }
-
- if (strcmp(argv[1],"ABOUT") == 0)
- {
- main_win = GTK_WIDGET(gtk_builder_get_object(wndMain, "AboutWnd"));
- gtk_widget_show_all (main_win);
- gtk_dialog_run(GTK_DIALOG(main_win));
- return 0;
- }
-
- main_win = GTK_WIDGET(gtk_builder_get_object(wndMain, "CfgWnd"));
-
- in = fopen("gpuPeopsMesaGL.cfg","rb");
- if(in)
- {
- pB=(char *)malloc(32767);
- memset(pB,0,32767);
- len = fread(pB, 1, 32767, in);
- fclose(in);
- }
- else pB=0;
-
- val=640;
- if(pB)
- {
- strcpy(t,"\nResX");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<10) val=10;
- }
- SETEDITVAL("edtXSize",val);
-
- val=480;
- if(pB)
- {
- strcpy(t,"\nResY");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<10) val=10;
- }
- SETEDITVAL("edtYSize",val);
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nKeepRatio");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkKeepRatio");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nVRamSize");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1024) val=1024;
- }
- SETEDITVAL("edtMaxTex",val);
-
- val=0;
- if(pB)
- {
- strcpy(t,"\n15bitMdec");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chk15bitMdec");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nHiResTextures");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>2) val=2;
- }
- SETLIST("cmbHiresTex",val);
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nFullScreen");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkFullScreen");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nScanLines");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkScanlines");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nScanLinesBlend");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<-1) val=-1;
- if(val>255) val=255;
- }
- SETEDITVAL("edtScanBlend",val);
-
- val=1;
- if(pB)
- {
- strcpy(t,"\nFrameTextures");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>3) val=3;
- }
- SETLIST("cmbFrameTex",val);
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nFrameAccess");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>4) val=4;
- }
- SETLIST("cmbFrameAcc",val);
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nTexFilter");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>6) val=6;
- }
- SETLIST("cmbFilter",val);
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nAdvancedBlend");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkABlend");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nDithering");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkDither");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nLineMode");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkLinemode");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nShowFPS");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkShowFPS");
-
- val=1;
- if(pB)
- {
- strcpy(t,"\nUseFrameLimit");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkFPSLimit");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nUseFrameSkip");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkFPSSkip");
-
- val=2;
- if(pB)
- {
- strcpy(t,"\nFPSDetection");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len)+1;
- if(val<1) val=1;
- if(val>2) val=2;
- }
- if(val==2) SETCHECK("rdbLimAuto");
- if(val==1) SETCHECK("rdbLimMan");
-
- val=200;
- if(pB)
- {
- strcpy(t,"\nFrameRate");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1000) val=1000;
- }
- SETEDITVAL("edtFPSlim",val);
-
- val=2;
- if(pB)
- {
- strcpy(t,"\nOffscreenDrawing");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>4) val=4;
- }
- SETLIST("cmbOffscreen",val);
-
- val=1;
- if(pB)
- {
- strcpy(t,"\nOpaquePass");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkOpaque");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nAntiAlias");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkAntiA");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nTexQuality");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>4) val=4;
- }
- SETLIST("cmbQuality",val);
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nMaskDetect");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkMaskBit");
-
- val=1;
- if(pB)
- {
- strcpy(t,"\nFastMdec");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkFastMdec");
-
- val=1;
- if(pB)
- {
- strcpy(t,"\nOGLExtensions");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkExtensions");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nScreenSmoothing");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkBlur");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nUseFixes");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- if(val<0) val=0;
- if(val>1) val=1;
- }
- if(val) SETCHECK("chkGameFixes");
-
- val=0;
- if(pB)
- {
- strcpy(t,"\nCfgFixes");p=strstr(pB,t);if(p) {p=strstr(p,"=");len=1;}
- if(p) val=atoi(p+len);
- }
-
- for(len=0;len<18;len++)
- {
- if(val & (1<<len))
- {
- sprintf(t,"chkFix%d",len);
- SETCHECK(t);
- }
- }
-
- if(pB) free(pB);
-
- gtk_widget_show_all (main_win);
- if (gtk_dialog_run(GTK_DIALOG(main_win))==GTK_RESPONSE_OK) {SaveConfig();}
- return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-
-void SetCfgVal(char * pB,char * pE,int val)
-{
- char * p, *ps, *pC;char t[32];
-
- sprintf(t,"%d",val);
-
- p=strstr(pB,pE);
- if(p)
- {
- p=strstr(p,"=");
- if(!p) return;
- p++;
- while(*p && *p!='\n' && *p!='-' && (*p<'0' || *p>'9')) p++;
- if(*p==0 || *p=='\n') return;
- ps=p;
- while((*p>='0' && *p<='9') || *p=='-') p++;
- pC=(char *)malloc(32767);
- strcpy(pC,p);
- strcpy(ps,t);
- strcat(pB,pC);
- free(pC);
- }
- else
- {
- strcat(pB,pE);
- strcat(pB," = ");
- strcat(pB,t);
- strcat(pB,"\n");
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-
-#define GETEDITVAL(winame) atoi(gtk_entry_get_text(GTK_ENTRY(gtk_builder_get_object (wndMain,winame))))
-#define GETCHECK(winame) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object (wndMain,winame)))
-#define GETLIST(winame) gtk_combo_box_get_active(GTK_COMBO_BOX(gtk_builder_get_object(wndMain,winame)))
-
-void SaveConfig(void)
-{
- FILE *in;int len,val;char * pB;char t[16];
-
- pB=(char *)malloc(32767);
- memset(pB,0,32767);
-
- in = fopen("gpuPeopsMesaGL.cfg","rb");
- if(in)
- {
- len = fread(pB, 1, 32767, in);
- fclose(in);
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- val=GETEDITVAL("edtXSize");
- if(val<10) val=10;
- SetCfgVal(pB,"\nResX",val);
-
- val=GETEDITVAL("edtYSize");
- if(val<10) val=10;
- SetCfgVal(pB,"\nResY",val);
-
- val=GETCHECK("chkKeepRatio");
- SetCfgVal(pB,"\nKeepRatio",val);
-
- val=GETEDITVAL("edtMaxTex");
- if(val<0) val=0;
- if(val>1024) val=1024;
- SetCfgVal(pB,"\nVRamSize",val);
-
- val=GETCHECK("chk15bitMdec");
- SetCfgVal(pB,"\n15bitMdec",val);
-
- val=GETLIST("cmbHiresTex");
- SetCfgVal(pB,"\nHiResTextures",val);
-
- val=GETCHECK("chkFullScreen");
- SetCfgVal(pB,"\nFullScreen",val);
-
- val=GETCHECK("chkScanlines");
- SetCfgVal(pB,"\nScanLines",val);
-
- val=GETEDITVAL("edtScanBlend");
- if(val<-1) val=-1;
- if(val>255) val=255;
- SetCfgVal(pB,"\nScanLinesBlend",val);
-
- val=GETLIST("cmbFrameTex");
- SetCfgVal(pB,"\nFrameTextures",val);
-
- val=GETLIST("cmbFrameAcc");
- SetCfgVal(pB,"\nFrameAccess",val);
-
- val=GETLIST("cmbFilter");
- SetCfgVal(pB,"\nTexFilter",val);
-
- val=GETCHECK("chkABlend");
- SetCfgVal(pB,"\nAdvancedBlend",val);
+#include "config.h"
- val=GETCHECK("chkDither");
- SetCfgVal(pB,"\nDithering",val);
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#include <locale.h>
+#endif
- val=GETCHECK("chkLinemode");
- SetCfgVal(pB,"\nLineMode",val);
+// Widgets
+GtkWidget *window,
+ *btnCancel,
+ *btnSave,
+ *spinXSize,
+ *spinYSize,
+ *chkKeepRatio,
+ *chkDithering,
+ *chkFullScreen,
+ *cbxTexQuality,
+ *cbxTexFiltering,
+ *cbxHiResTex,
+ *spinVRam,
+ *chkShowFPS,
+ *chkUseFPSLimit,
+ *vboxFPSLimit,
+ *radFPSLimitAuto,
+ *radFPSLimitManual,
+ *spinFPSLimit,
+ *chkUseFrameSkipping,
+ *cbxOffscreen,
+ *cbxFBTex,
+ *cbxFBAccess,
+ *chkMaskDetect,
+ *chkOpaquePass,
+ *chkAdvancedBlend,
+ *chkScanLines,
+ *spinScanLinesBlend,
+ *chkFastMdec,
+ *chk15bitMdec,
+ *chkLineMode,
+ *chkAntiAlias,
+ *chkOGLExtensions,
+ *chkScreenSmoothing,
+ *chkUseGameFixes,
+ *tblGameFixes,
+ *chkCfgFix1,
+ *chkCfgFix2,
+ *chkCfgFix4,
+ *chkCfgFix8,
+ *chkCfgFix16,
+ *chkCfgFix32,
+ *chkCfgFix64,
+ *chkCfgFix128,
+ *chkCfgFix256,
+ *chkCfgFix512,
+ *chkCfgFix1024,
+ *chkCfgFix2048,
+ *chkCfgFix4096,
+ *chkCfgFix8192,
+ *chkCfgFix16384,
+ *chkCfgFix32768,
+ *chkCfgFix65536,
+ *chkCfgFix131072,
+ *btnFast,
+ *btnBeautiful;
+
+// Save values to the config file
+void on_btnSave_clicked( GtkObject *object, gpointer user_data ) {
+ FILE *out;
+ out = fopen( "gpuPeopsMesaGL.cfg", "w+" );
+
+ if ( out != NULL ) {
+
+ // Computes the 'fixes' bitfield
+ int cfgFixes = 0;
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix1 ) ) ) { cfgFixes |= (1 << 0); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix2 ) ) ) { cfgFixes |= (1 << 1); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix4 ) ) ) { cfgFixes |= (1 << 2); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix8 ) ) ) { cfgFixes |= (1 << 3); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix16 ) ) ) { cfgFixes |= (1 << 4); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix32 ) ) ) { cfgFixes |= (1 << 5); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix64 ) ) ) { cfgFixes |= (1 << 6); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix128 ) ) ) { cfgFixes |= (1 << 7); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix256 ) ) ) { cfgFixes |= (1 << 8); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix512 ) ) ) { cfgFixes |= (1 << 9); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix1024 ) ) ) { cfgFixes |= (1 << 10); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix2048 ) ) ) { cfgFixes |= (1 << 11); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix4096 ) ) ) { cfgFixes |= (1 << 12); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix8192 ) ) ) { cfgFixes |= (1 << 13); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix16384 ) ) ) { cfgFixes |= (1 << 14); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix32768 ) ) ) { cfgFixes |= (1 << 15); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix65536 ) ) ) { cfgFixes |= (1 << 16); }
+ if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkCfgFix131072 ) ) ) { cfgFixes |= (1 << 17); }
+
+ // Print data to the config file
+ fprintf( out, "\nResX = %i", gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spinXSize ) ) );
+ fprintf( out, "\nResY = %i", gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spinYSize ) ) );
+ fprintf( out, "\nKeepRatio = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkKeepRatio ) ) );
+ fprintf( out, "\nDithering = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkDithering ) ) );
+ fprintf( out, "\nFullScreen = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkFullScreen ) ) );
+ fprintf( out, "\nTexQuality = %i", gtk_combo_box_get_active( GTK_COMBO_BOX( cbxTexQuality ) ) );
+ fprintf( out, "\nTexFilter = %i", gtk_combo_box_get_active( GTK_COMBO_BOX( cbxTexFiltering ) ) );
+ fprintf( out, "\nHiResTextures = %i", gtk_combo_box_get_active( GTK_COMBO_BOX( cbxHiResTex ) ) );
+ fprintf( out, "\nVRamSize = %i", gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spinVRam ) ) );
+ fprintf( out, "\nShowFPS = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkShowFPS ) ) );
+ fprintf( out, "\nUseFrameLimit = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseFPSLimit ) ) );
+ fprintf( out, "\nFPSDetection = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radFPSLimitAuto ) ) );
+ fprintf( out, "\nFrameRate = %i", gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spinFPSLimit ) ) );
+ fprintf( out, "\nUseFrameSkip = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseFrameSkipping ) ) );
+ fprintf( out, "\nOffscreenDrawing = %i", gtk_combo_box_get_active( GTK_COMBO_BOX( cbxOffscreen ) ) );
+ fprintf( out, "\nFrameTextures = %i", gtk_combo_box_get_active( GTK_COMBO_BOX( cbxFBTex ) ) );
+ fprintf( out, "\nFrameAccess = %i", gtk_combo_box_get_active( GTK_COMBO_BOX( cbxFBAccess ) ) );
+ fprintf( out, "\nMaskDetect = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkMaskDetect ) ) );
+ fprintf( out, "\nOpaquePass = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkOpaquePass ) ) );
+ fprintf( out, "\nAdvancedBlend = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkAdvancedBlend ) ) );
+ fprintf( out, "\nScanLines = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkScanLines ) ) );
+ fprintf( out, "\nScanLinesBlend = %i", gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spinScanLinesBlend ) ) );
+ fprintf( out, "\nFastMdec = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkFastMdec ) ) );
+ fprintf( out, "\n15bitMdec = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chk15bitMdec ) ) );
+ fprintf( out, "\nLineMode = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkLineMode ) ) );
+ fprintf( out, "\nAntiAlias = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkAntiAlias ) ) );
+ fprintf( out, "\nOGLExtensions = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkOGLExtensions ) ) );
+ fprintf( out, "\nScreenSmoothing = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkScreenSmoothing ) ) );
+ fprintf( out, "\nUseFixes = %i", gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseGameFixes ) ) );
+ fprintf( out, "\nCfgFixes = %i", cfgFixes );
+
+ fclose( out );
+ }
- val=GETCHECK("chkShowFPS");
- SetCfgVal(pB,"\nShowFPS",val);
+ gtk_main_quit();
+}
- val=GETCHECK("chkFPSLimit");
- SetCfgVal(pB,"\nUseFrameLimit",val);
+// Autoconfiguration callbacks
+
+void on_btnFast_clicked( GtkObject *object, gpointer user_data ) {
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinXSize ), 640 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinYSize ), 480 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkKeepRatio ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkDithering ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkFullScreen ), 0 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxTexQuality ), 0 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxTexFiltering ), 0 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxHiResTex ), 0 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinVRam ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkShowFPS ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseFPSLimit ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( radFPSLimitAuto ), 1 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinFPSLimit ), 200 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseFrameSkipping ), 0 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxOffscreen ), 1 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxFBTex ), 1 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxFBAccess ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkMaskDetect ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkOpaquePass ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkAdvancedBlend ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkScanLines ), 0 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinScanLinesBlend ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkFastMdec ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chk15bitMdec ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkLineMode ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkAntiAlias ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkOGLExtensions ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkScreenSmoothing ), 0 );
+}
- val=GETCHECK("chkFPSSkip");
- SetCfgVal(pB,"\nUseFrameSkip",val);
+void on_btnBeautiful_clicked( GtkObject *object, gpointer user_data ) {
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinXSize ), 640 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinYSize ), 480 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkKeepRatio ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkDithering ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkFullScreen ), 0 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxTexQuality ), 3 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxTexFiltering ), 0 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxHiResTex ), 0 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinVRam ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkShowFPS ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseFPSLimit ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( radFPSLimitAuto ), 1 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinFPSLimit ), 200 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseFrameSkipping ), 0 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxOffscreen ), 3 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxFBTex ), 2 );
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxFBAccess ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkMaskDetect ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkOpaquePass ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkAdvancedBlend ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkScanLines ), 0 );
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinScanLinesBlend ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkFastMdec ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chk15bitMdec ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkLineMode ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkAntiAlias ), 0 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkOGLExtensions ), 1 );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkScreenSmoothing ), 0 );
+}
- val=GETCHECK("rdbLimAuto");
- if(val) val=1; else val=0;
- SetCfgVal(pB,"\nFPSDetection",val);
+// Callbacks used to toggle the sensitivity of some parts of the GUI
- val=GETEDITVAL("edtFPSlim");
- if(val<0) val=0;
- if(val>1000) val=1000;
- SetCfgVal(pB,"\nFrameRate",val);
+void on_chkUseGameFixes_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( tblGameFixes, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseGameFixes ) ) );
+}
- val=GETLIST("cmbOffscreen");
- SetCfgVal(pB,"\nOffscreenDrawing",val);
+void on_chkUseFPSLimit_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( vboxFPSLimit, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseFPSLimit ) ) );
+}
- val=GETCHECK("chkOpaque");
- SetCfgVal(pB,"\nOpaquePass",val);
+void on_radFPSLimitManual_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( spinFPSLimit, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radFPSLimitManual ) ) );
+}
- val=GETCHECK("chkAntiA");
- SetCfgVal(pB,"\nAntiAlias",val);
+void on_chkScanLines_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( spinScanLinesBlend, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkScanLines ) ) );
+}
- val=GETLIST("cmbQuality");
- SetCfgVal(pB,"\nTexQuality",val);
+/* Instanciates the GUI
+ Reads the config file
+ Sets widget states according to the config file
+ Connect callbacks to signals */
+int main( int argc, char **argv ) {
+ GtkBuilder *builder;
+ GError *error = NULL;
+ FILE *in;
+ char *pB, *p;
+ int len, val;
+ char t[256];
+
+#ifdef ENABLE_NLS
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+#endif
- val=GETCHECK("chkMaskBit");
- SetCfgVal(pB,"\nMaskDetect",val);
+ gtk_set_locale();
+ gtk_init( &argc, &argv );
- val=GETCHECK("chkFastMdec");
- SetCfgVal(pB,"\nFastMdec",val);
+ builder = gtk_builder_new();
- val=GETCHECK("chkExtensions");
- SetCfgVal(pB,"\nOGLExtensions",val);
+ // Load the glade file
+ if ( !gtk_builder_add_from_file( builder, DATADIR "peopsxgl.ui", &error ) ) {
+ g_warning( "%s", error->message );
+ g_free( error );
+ return( 1 );
+ }
- val=GETCHECK("chkBlur");
- SetCfgVal(pB,"\nScreenSmoothing",val);
+ // Display the About dialog when the emulator ask for it
+ if ( argv[1] && strcmp( argv[1], "ABOUT" ) == 0 ) {
+ GtkWidget *widget;
+ const char *authors[]= {"Adapted from P.E.Op.S OpenGL GPU by Pete Bernert", NULL};
- val=GETCHECK("chkGameFixes");
- SetCfgVal(pB,"\nUseFixes",val);
+ widget = gtk_about_dialog_new();
+ gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(widget), "OpenGL GPU Driver");
+ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(widget), "1.18");
+ gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(widget), authors);
+ gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(widget), "http://pcsxr.codeplex.com/");
- val=0;
- for(len=0;len<18;len++)
- {
- sprintf(t,"chkFix%d",len);
- if(GETCHECK(t)) val|=(1<<len);
- }
- SetCfgVal(pB,"\nCfgFixes",val);
+ gtk_dialog_run(GTK_DIALOG(widget));
+ gtk_widget_destroy(widget);
- ///////////////////////////////////////////////////////////////////////////////
+ return 0;
+ }
- if((in=fopen("gpuPeopsMesaGL.cfg","wb"))!=NULL)
- {
- fwrite(pB,strlen(pB),1,in);
- fclose(in);
- }
+ // Get widgets from the glade file
+ window = GTK_WIDGET( gtk_builder_get_object( builder, "MainDialog" ) );
+ btnCancel = GTK_WIDGET( gtk_builder_get_object( builder, "btnCancel" ) );
+ btnSave = GTK_WIDGET( gtk_builder_get_object( builder, "btnSave" ) );
+ spinXSize = GTK_WIDGET( gtk_builder_get_object( builder, "spinXSize" ) );
+ spinYSize = GTK_WIDGET( gtk_builder_get_object( builder, "spinYSize" ) );
+ chkKeepRatio = GTK_WIDGET( gtk_builder_get_object( builder, "chkKeepRatio" ) );
+ chkDithering = GTK_WIDGET( gtk_builder_get_object( builder, "chkDithering" ) );
+ chkFullScreen = GTK_WIDGET( gtk_builder_get_object( builder, "chkFullScreen" ) );
+ cbxTexQuality = GTK_WIDGET( gtk_builder_get_object( builder, "cbxTexQuality" ) );
+ cbxTexFiltering = GTK_WIDGET( gtk_builder_get_object( builder, "cbxTexFiltering" ) );
+ cbxHiResTex = GTK_WIDGET( gtk_builder_get_object( builder, "cbxHiResTex" ) );
+ spinVRam = GTK_WIDGET( gtk_builder_get_object( builder, "spinVRam" ) );
+ chkShowFPS = GTK_WIDGET( gtk_builder_get_object( builder, "chkShowFPS" ) );
+ chkUseFPSLimit = GTK_WIDGET( gtk_builder_get_object( builder, "chkUseFPSLimit" ) );
+ vboxFPSLimit = GTK_WIDGET( gtk_builder_get_object( builder, "vboxFPSLimit" ) );
+ radFPSLimitAuto = GTK_WIDGET( gtk_builder_get_object( builder, "radFPSLimitAuto" ) );
+ radFPSLimitManual = GTK_WIDGET( gtk_builder_get_object( builder, "radFPSLimitManual" ) );
+ spinFPSLimit = GTK_WIDGET( gtk_builder_get_object( builder, "spinFPSLimit" ) );
+ chkUseFrameSkipping = GTK_WIDGET( gtk_builder_get_object( builder, "chkUseFrameSkipping" ) );
+ cbxOffscreen = GTK_WIDGET( gtk_builder_get_object( builder, "cbxOffscreen" ) );
+ cbxFBTex = GTK_WIDGET( gtk_builder_get_object( builder, "cbxFBTex" ) );
+ cbxFBAccess = GTK_WIDGET( gtk_builder_get_object( builder, "cbxFBAccess" ) );
+ chkMaskDetect = GTK_WIDGET( gtk_builder_get_object( builder, "chkMaskDetect" ) );
+ chkOpaquePass = GTK_WIDGET( gtk_builder_get_object( builder, "chkOpaquePass" ) );
+ chkAdvancedBlend = GTK_WIDGET( gtk_builder_get_object( builder, "chkAdvancedBlend" ) );
+ chkScanLines = GTK_WIDGET( gtk_builder_get_object( builder, "chkScanLines" ) );
+ spinScanLinesBlend = GTK_WIDGET( gtk_builder_get_object( builder, "spinScanLinesBlend" ) );
+ chkFastMdec = GTK_WIDGET( gtk_builder_get_object( builder, "chkFastMdec" ) );
+ chk15bitMdec = GTK_WIDGET( gtk_builder_get_object( builder, "chk15bitMdec" ) );
+ chkLineMode = GTK_WIDGET( gtk_builder_get_object( builder, "chkLineMode" ) );
+ chkAntiAlias = GTK_WIDGET( gtk_builder_get_object( builder, "chkAntiAlias" ) );
+ chkOGLExtensions = GTK_WIDGET( gtk_builder_get_object( builder, "chkOGLExtensions" ) );
+ chkScreenSmoothing = GTK_WIDGET( gtk_builder_get_object( builder, "chkScreenSmoothing" ) );
+ chkUseGameFixes = GTK_WIDGET( gtk_builder_get_object( builder, "chkUseGameFixes" ) );
+ tblGameFixes = GTK_WIDGET( gtk_builder_get_object( builder, "tblGameFixes" ) );
+ chkCfgFix1 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix1" ) );
+ chkCfgFix2 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix2" ) );
+ chkCfgFix4 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix4" ) );
+ chkCfgFix8 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix8" ) );
+ chkCfgFix16 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix16" ) );
+ chkCfgFix32 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix32" ) );
+ chkCfgFix64 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix64" ) );
+ chkCfgFix128 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix128" ) );
+ chkCfgFix256 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix256" ) );
+ chkCfgFix512 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix512" ) );
+ chkCfgFix1024 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix1024" ) );
+ chkCfgFix2048 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix2048" ) );
+ chkCfgFix4096 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix4096" ) );
+ chkCfgFix8192 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix8192" ) );
+ chkCfgFix16384 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix16384" ) );
+ chkCfgFix32768 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix32768" ) );
+ chkCfgFix65536 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix65536" ) );
+ chkCfgFix131072 = GTK_WIDGET( gtk_builder_get_object( builder, "chkCfgFix131072" ) );
+ btnFast = GTK_WIDGET( gtk_builder_get_object( builder, "btnFast" ) );
+ btnBeautiful = GTK_WIDGET( gtk_builder_get_object( builder, "btnBeautiful" ) );
+
+ // Read the config file
+ in = fopen( "gpuPeopsMesaGL.cfg", "rb" );
+ if ( in ) {
+ pB = (char *) malloc( 32767 );
+ memset( pB, 0, 32767 );
+ len = fread( pB, 1, 32767, in );
+ fclose(in);
+ }
+ else pB = 0;
+
+ val = 640;
+ if ( pB ) {
+ strcpy( t, "\nResX" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinXSize ), val );
+
+ val = 480;
+ if ( pB ) {
+ strcpy( t, "\nResY" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinYSize ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nKeepRatio" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkKeepRatio ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nDithering" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkDithering ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nFullScreen" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkFullScreen ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nTexQuality" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxTexQuality ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nTexFilter" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxTexFiltering ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nHiResTextures" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxHiResTex ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy(t,"\nVRamSize");
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinVRam ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nShowFPS" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkShowFPS ), val );
+
+ val = 1;
+ if ( pB ) {
+ strcpy( t, "\nUseFrameLimit" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseFPSLimit ), val );
+
+ val = 1;
+ if ( pB ) {
+ strcpy( t, "\nFPSDetection" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( radFPSLimitAuto ), val );
+
+ val = 200;
+ if ( pB ) {
+ strcpy(t,"\nFrameRate");
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinFPSLimit ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nUseFrameSkip" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseFrameSkipping ), val );
+
+ val = 2;
+ if ( pB ) {
+ strcpy( t, "\nOffscreenDrawing" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxOffscreen ), val );
+
+ val = 1;
+ if ( pB ) {
+ strcpy( t, "\nFrameTextures" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxFBTex ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nFrameAccess" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_combo_box_set_active( GTK_COMBO_BOX( cbxFBAccess ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nMaskDetect" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkMaskDetect ), val );
+
+ val = 1;
+ if ( pB ) {
+ strcpy( t, "\nOpaquePass" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkOpaquePass ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nAdvancedBlend" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkAdvancedBlend ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nScanLines" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkScanLines ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy(t,"\nScanLinesBlend");
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_spin_button_set_value( GTK_SPIN_BUTTON( spinScanLinesBlend ), val );
+
+ val = 1;
+ if ( pB ) {
+ strcpy( t, "\nFastMdec" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkFastMdec ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\n15bitMdec" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chk15bitMdec ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nLineMode" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkLineMode ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nAntiAlias" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkAntiAlias ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nOGLExtensions" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkOGLExtensions ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nScreenSmoothing" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkScreenSmoothing ), val );
+
+ val = 0;
+ if ( pB ) {
+ strcpy( t, "\nCfgFixes" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ if ( val & (1 << 17) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix131072 ), TRUE ); }
+ if ( val & (1 << 16) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix65536 ), TRUE ); }
+ if ( val & (1 << 15) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix32768 ), TRUE ); }
+ if ( val & (1 << 14) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix16384 ), TRUE ); }
+ if ( val & (1 << 13) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix8192 ), TRUE ); }
+ if ( val & (1 << 12) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix4096 ), TRUE ); }
+ if ( val & (1 << 11) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix2048 ), TRUE ); }
+ if ( val & (1 << 10) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix1024 ), TRUE ); }
+ if ( val & (1 << 9) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix512 ), TRUE ); }
+ if ( val & (1 << 8) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix256 ), TRUE ); }
+ if ( val & (1 << 7) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix128 ), TRUE ); }
+ if ( val & (1 << 6) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix64 ), TRUE ); }
+ if ( val & (1 << 5) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix32 ), TRUE ); }
+ if ( val & (1 << 4) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix16 ), TRUE ); }
+ if ( val & (1 << 3) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix8 ), TRUE ); }
+ if ( val & (1 << 2) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix4 ), TRUE ); }
+ if ( val & (1 << 1) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix2 ), TRUE ); }
+ if ( val & (1 << 0) ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkCfgFix1 ), TRUE ); }
+
+ gtk_builder_connect_signals( builder, NULL );
+
+ g_object_unref( G_OBJECT( builder ) );
+
+ // Connect callbacks to signals
+ gtk_signal_connect( GTK_OBJECT( window ), "destroy", GTK_SIGNAL_FUNC( gtk_main_quit ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnCancel ), "clicked", GTK_SIGNAL_FUNC( gtk_main_quit ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnSave ), "clicked", GTK_SIGNAL_FUNC( on_btnSave_clicked ), NULL );
+ gtk_signal_connect( GTK_OBJECT( chkUseGameFixes ), "toggled", GTK_SIGNAL_FUNC( on_chkUseGameFixes_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( chkUseFPSLimit ), "toggled", GTK_SIGNAL_FUNC( on_chkUseFPSLimit_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( radFPSLimitManual ), "toggled", GTK_SIGNAL_FUNC( on_radFPSLimitManual_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( chkScanLines ), "toggled", GTK_SIGNAL_FUNC( on_chkScanLines_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnFast ), "clicked", GTK_SIGNAL_FUNC( on_btnFast_clicked ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnBeautiful ), "clicked", GTK_SIGNAL_FUNC( on_btnBeautiful_clicked ), NULL );
+
+ // Call some callbacks to ensure widget state consistency
+ on_chkUseGameFixes_toggled( GTK_OBJECT( chkUseGameFixes ), NULL );
+ on_chkUseFPSLimit_toggled( GTK_OBJECT( chkUseFPSLimit ), NULL );
+ on_radFPSLimitManual_toggled( GTK_OBJECT( radFPSLimitManual ), NULL );
+ on_chkScanLines_toggled( GTK_OBJECT( chkScanLines ), NULL );
+
+ gtk_widget_show( window );
+
+ gtk_main();
- free(pB);
+ return 0;
}
-
-
-