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.c1470
1 files changed, 735 insertions, 735 deletions
diff --git a/plugins/peopsxgl/gpucfg/main.c b/plugins/peopsxgl/gpucfg/main.c
index 67258fee..3d7d9d68 100644
--- a/plugins/peopsxgl/gpucfg/main.c
+++ b/plugins/peopsxgl/gpucfg/main.c
@@ -1,735 +1,735 @@
-#include <gtk/gtk.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "config.h"
-
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#include <locale.h>
-#endif
-
-// 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
-static 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 );
- }
-
- gtk_main_quit();
-}
-
-// Autoconfiguration callbacks
-
-static 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 );
-}
-
-static 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 );
-}
-
-// Callbacks used to toggle the sensitivity of some parts of the GUI
-
-static void on_chkUseGameFixes_toggled( GtkObject *object, gpointer user_data ) {
- gtk_widget_set_sensitive( tblGameFixes, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseGameFixes ) ) );
-}
-
-static void on_chkUseFPSLimit_toggled( GtkObject *object, gpointer user_data ) {
- gtk_widget_set_sensitive( vboxFPSLimit, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseFPSLimit ) ) );
-}
-
-static void on_radFPSLimitManual_toggled( GtkObject *object, gpointer user_data ) {
- gtk_widget_set_sensitive( spinFPSLimit, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radFPSLimitManual ) ) );
-}
-
-static void on_chkScanLines_toggled( GtkObject *object, gpointer user_data ) {
- gtk_widget_set_sensitive( spinScanLinesBlend, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkScanLines ) ) );
-}
-
-/* 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
-
- gtk_set_locale();
- gtk_init( &argc, &argv );
-
- builder = gtk_builder_new();
-
- // 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 );
- }
-
- // 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};
-
- 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/");
-
- gtk_dialog_run(GTK_DIALOG(widget));
- gtk_widget_destroy(widget);
-
- return 0;
- }
-
- // 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, "\nUseFixes" );
- p = strstr( pB, t );
- if ( p ) {
- p = strstr( p, "=" );
- len = 1;
- val = atoi( p + len );
- }
- }
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseGameFixes ), 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", G_CALLBACK( gtk_main_quit ), NULL );
- gtk_signal_connect( GTK_OBJECT( btnCancel ), "clicked", G_CALLBACK( gtk_main_quit ), NULL );
- gtk_signal_connect( GTK_OBJECT( btnSave ), "clicked", G_CALLBACK( on_btnSave_clicked ), NULL );
- gtk_signal_connect( GTK_OBJECT( chkUseGameFixes ), "toggled", G_CALLBACK( on_chkUseGameFixes_toggled ), NULL );
- gtk_signal_connect( GTK_OBJECT( chkUseFPSLimit ), "toggled", G_CALLBACK( on_chkUseFPSLimit_toggled ), NULL );
- gtk_signal_connect( GTK_OBJECT( radFPSLimitManual ), "toggled", G_CALLBACK( on_radFPSLimitManual_toggled ), NULL );
- gtk_signal_connect( GTK_OBJECT( chkScanLines ), "toggled", G_CALLBACK( on_chkScanLines_toggled ), NULL );
- gtk_signal_connect( GTK_OBJECT( btnFast ), "clicked", G_CALLBACK( on_btnFast_clicked ), NULL );
- gtk_signal_connect( GTK_OBJECT( btnBeautiful ), "clicked", G_CALLBACK( 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();
-
- return 0;
-}
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "config.h"
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#include <locale.h>
+#endif
+
+// 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 );
+ }
+
+ gtk_main_quit();
+}
+
+// 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 );
+}
+
+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 );
+}
+
+// Callbacks used to toggle the sensitivity of some parts of the GUI
+
+void on_chkUseGameFixes_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( tblGameFixes, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseGameFixes ) ) );
+}
+
+void on_chkUseFPSLimit_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( vboxFPSLimit, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkUseFPSLimit ) ) );
+}
+
+void on_radFPSLimitManual_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( spinFPSLimit, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( radFPSLimitManual ) ) );
+}
+
+void on_chkScanLines_toggled( GtkObject *object, gpointer user_data ) {
+ gtk_widget_set_sensitive( spinScanLinesBlend, gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( chkScanLines ) ) );
+}
+
+/* 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
+
+ gtk_set_locale();
+ gtk_init( &argc, &argv );
+
+ builder = gtk_builder_new();
+
+ // 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 );
+ }
+
+ // 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};
+
+ 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/");
+
+ gtk_dialog_run(GTK_DIALOG(widget));
+ gtk_widget_destroy(widget);
+
+ return 0;
+ }
+
+ // 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, "\nUseFixes" );
+ p = strstr( pB, t );
+ if ( p ) {
+ p = strstr( p, "=" );
+ len = 1;
+ val = atoi( p + len );
+ }
+ }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( chkUseGameFixes ), 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", G_CALLBACK( gtk_main_quit ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnCancel ), "clicked", G_CALLBACK( gtk_main_quit ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnSave ), "clicked", G_CALLBACK( on_btnSave_clicked ), NULL );
+ gtk_signal_connect( GTK_OBJECT( chkUseGameFixes ), "toggled", G_CALLBACK( on_chkUseGameFixes_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( chkUseFPSLimit ), "toggled", G_CALLBACK( on_chkUseFPSLimit_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( radFPSLimitManual ), "toggled", G_CALLBACK( on_radFPSLimitManual_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( chkScanLines ), "toggled", G_CALLBACK( on_chkScanLines_toggled ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnFast ), "clicked", G_CALLBACK( on_btnFast_clicked ), NULL );
+ gtk_signal_connect( GTK_OBJECT( btnBeautiful ), "clicked", G_CALLBACK( 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();
+
+ return 0;
+}