Code cleanup by riccardom (patch 2155179)

Fixed the compilation for gtk-glade port.
This commit is contained in:
yabause 2008-10-09 19:57:28 +00:00
parent dc4ffd3119
commit efe749182a
4 changed files with 344 additions and 400 deletions

View File

@ -63,7 +63,7 @@ void desmume_free()
int desmume_open(const char *filename) int desmume_open(const char *filename)
{ {
int i; int i;
noticed_3D=attempted_3D_op=FALSE; noticed_3D=FALSE;
clear_savestates(); clear_savestates();
i = NDS_LoadROM(filename, savetype, savesize, NULL); i = NDS_LoadROM(filename, savetype, savesize, NULL);
return i; return i;
@ -91,7 +91,7 @@ void desmume_resume()
void desmume_reset() void desmume_reset()
{ {
noticed_3D=attempted_3D_op=FALSE; noticed_3D=FALSE;
NDS_Reset(); NDS_Reset();
desmume_resume(); desmume_resume();
} }
@ -130,7 +130,7 @@ static void Draw()
gboolean EmuLoop(gpointer data) gboolean EmuLoop(gpointer data)
{ {
int i; int i;
if (!noticed_3D && attempted_3D_op) { if (!noticed_3D) {
GtkWidget * dlg = glade_xml_get_widget(xml, "w3Dop"); GtkWidget * dlg = glade_xml_get_widget(xml, "w3Dop");
gtk_widget_show(dlg); gtk_widget_show(dlg);
noticed_3D=TRUE; noticed_3D=TRUE;

View File

@ -94,7 +94,6 @@ typedef union _callback_arg{
#include "../ctrlssdl.h" #include "../ctrlssdl.h"
#include "../types.h" #include "../types.h"
#include "../saves.h" #include "../saves.h"
#include "../gl_vertex.h"
#include "../render3D.h" #include "../render3D.h"
#include "desmume.h" #include "desmume.h"
#include "gdk_gl.h" #include "gdk_gl.h"

View File

@ -119,7 +119,8 @@ struct configured_features {
}; };
static void static void
init_configured_features( struct configured_features *config) { init_configured_features( struct configured_features *config)
{
config->arm9_gdb_port = 0; config->arm9_gdb_port = 0;
config->arm7_gdb_port = 0; config->arm7_gdb_port = 0;
@ -142,7 +143,8 @@ init_configured_features( struct configured_features *config) {
static int static int
fill_configured_features( struct configured_features *config, fill_configured_features( struct configured_features *config,
int argc, char ** argv) { int argc, char ** argv)
{
int good_args = 1; int good_args = 1;
int print_usage = 0; int print_usage = 0;
int i; int i;
@ -180,75 +182,60 @@ fill_configured_features( struct configured_features *config,
printf( "\n"); printf( "\n");
printf( " --help Display this message\n"); printf( " --help Display this message\n");
good_args = 0; good_args = 0;
} } else if ( strcmp( argv[i], "--disable-sound") == 0) {
else if ( strcmp( argv[i], "--disable-sound") == 0) {
config->disable_sound = 1; config->disable_sound = 1;
}
#ifdef GTKGLEXT_AVAILABLE #ifdef GTKGLEXT_AVAILABLE
else if ( strcmp( argv[i], "--opengl-2d") == 0) { } else if ( strcmp( argv[i], "--opengl-2d") == 0) {
config->screen.opengl = 1; config->screen.opengl = 1;
} } else if ( strcmp( argv[i], "--soft-convert") == 0) {
else if ( strcmp( argv[i], "--soft-convert") == 0) {
config->screen.soft_colour = 1; config->screen.soft_colour = 1;
} } else if ( strcmp( argv[i], "--disable-3d") == 0) {
else if ( strcmp( argv[i], "--disable-3d") == 0) {
config->disable_3d = 1; config->disable_3d = 1;
}
#endif #endif
else if ( strcmp( argv[i], "--disable-limiter") == 0) { } else if ( strcmp( argv[i], "--disable-limiter") == 0) {
config->disable_limiter = 1; config->disable_limiter = 1;
} } else if ( strncmp( argv[i], "--fwlang=", 9) == 0) {
else if ( strncmp( argv[i], "--fwlang=", 9) == 0) {
char *end_char; char *end_char;
int lang = strtoul( &argv[i][9], &end_char, 10); int lang = strtoul( &argv[i][9], &end_char, 10);
if ( lang >= 0 && lang <= 5) { if ( lang >= 0 && lang <= 5) {
config->firmware_language = lang; config->firmware_language = lang;
} } else {
else {
fprintf( stderr, "Firmware language must be set to a value from 0 to 5.\n"); fprintf( stderr, "Firmware language must be set to a value from 0 to 5.\n");
good_args = 0; good_args = 0;
} }
} } else if ( strncmp( argv[i], "--arm9gdb=", 10) == 0) {
else if ( strncmp( argv[i], "--arm9gdb=", 10) == 0) {
char *end_char; char *end_char;
unsigned long port_num = strtoul( &argv[i][10], &end_char, 10); unsigned long port_num = strtoul( &argv[i][10], &end_char, 10);
if ( port_num > 0 && port_num < 65536) { if ( port_num > 0 && port_num < 65536) {
config->arm9_gdb_port = port_num; config->arm9_gdb_port = port_num;
} } else {
else {
fprintf( stderr, "ARM9 GDB stub port must be in the range 1 to 65535\n"); fprintf( stderr, "ARM9 GDB stub port must be in the range 1 to 65535\n");
good_args = 0; good_args = 0;
} }
} } else if ( strncmp( argv[i], "--arm7gdb=", 10) == 0) {
else if ( strncmp( argv[i], "--arm7gdb=", 10) == 0) {
char *end_char; char *end_char;
unsigned long port_num = strtoul( &argv[i][10], &end_char, 10); unsigned long port_num = strtoul( &argv[i][10], &end_char, 10);
if ( port_num > 0 && port_num < 65536) { if ( port_num > 0 && port_num < 65536) {
config->arm7_gdb_port = port_num; config->arm7_gdb_port = port_num;
} } else {
else {
fprintf( stderr, "ARM7 GDB stub port must be in the range 1 to 65535\n"); fprintf( stderr, "ARM7 GDB stub port must be in the range 1 to 65535\n");
good_args = 0; good_args = 0;
} }
} } else if ( strncmp( argv[i], "--cflash=", 9) == 0) {
else if ( strncmp( argv[i], "--cflash=", 9) == 0) {
if ( config->cflash_disk_image_file == NULL) { if ( config->cflash_disk_image_file == NULL) {
config->cflash_disk_image_file = &argv[i][9]; config->cflash_disk_image_file = &argv[i][9];
} } else {
else {
fprintf( stderr, "CFlash disk image file (\"%s\") already set\n", fprintf( stderr, "CFlash disk image file (\"%s\") already set\n",
config->cflash_disk_image_file); config->cflash_disk_image_file);
good_args = 0; good_args = 0;
} }
} } else {
else {
if ( config->nds_file == NULL) { if ( config->nds_file == NULL) {
config->nds_file = argv[i]; config->nds_file = argv[i];
} } else {
else {
fprintf( stderr, "NDS file (\"%s\") already set\n", config->nds_file); fprintf( stderr, "NDS file (\"%s\") already set\n", config->nds_file);
good_args = 0; good_args = 0;
} }
@ -275,7 +262,8 @@ fill_configured_features( struct configured_features *config,
*/ */
void * void *
createThread_gdb( void (*thread_function)( void *data), createThread_gdb( void (*thread_function)( void *data),
void *thread_data) { void *thread_data)
{
GThread *new_thread = g_thread_create( (GThreadFunc)thread_function, GThread *new_thread = g_thread_create( (GThreadFunc)thread_function,
thread_data, thread_data,
TRUE, TRUE,
@ -290,8 +278,6 @@ joinThread_gdb( void *thread_handle) {
} }
u16 Keypad_Temp[NB_KEYS]; u16 Keypad_Temp[NB_KEYS];
int Write_ConfigFile() int Write_ConfigFile()
@ -302,14 +288,12 @@ int Write_ConfigFile()
keyfile = g_key_file_new(); keyfile = g_key_file_new();
for(i = 0; i < NB_KEYS; i++) for(i = 0; i < NB_KEYS; i++) {
{
g_key_file_set_integer(keyfile, "KEYS", key_names[i], keyboard_cfg[i]); g_key_file_set_integer(keyfile, "KEYS", key_names[i], keyboard_cfg[i]);
g_key_file_set_integer(keyfile, "JOYKEYS", key_names[i], joypad_cfg[i]); g_key_file_set_integer(keyfile, "JOYKEYS", key_names[i], joypad_cfg[i]);
} }
// if(FirmwareFile[0]) // if(FirmwareFile[0]) {
// {
// ini_add_section(ini, "FIRMWARE"); // ini_add_section(ini, "FIRMWARE");
// ini_add_value(ini, "FIRMWARE", "FILE", FirmwareFile); // ini_add_value(ini, "FIRMWARE", "FILE", FirmwareFile);
// } // }
@ -336,8 +320,7 @@ int Read_ConfigFile()
const char *c; const char *c;
/* Load keyboard keys */ /* Load keyboard keys */
for(i = 0; i < NB_KEYS; i++) for(i = 0; i < NB_KEYS; i++) {
{
tmp = g_key_file_get_integer(keyfile, "KEYS", key_names[i], &error); tmp = g_key_file_get_integer(keyfile, "KEYS", key_names[i], &error);
if (error != NULL) { if (error != NULL) {
g_error_free(error); g_error_free(error);
@ -348,8 +331,7 @@ int Read_ConfigFile()
} }
/* Load joystick keys */ /* Load joystick keys */
for(i = 0; i < NB_KEYS; i++) for(i = 0; i < NB_KEYS; i++) {
{
tmp = g_key_file_get_integer(keyfile, "JOYKEYS", key_names[i], &error); tmp = g_key_file_get_integer(keyfile, "JOYKEYS", key_names[i], &error);
if (error != NULL) { if (error != NULL) {
g_error_free(error); g_error_free(error);
@ -424,8 +406,7 @@ static void Launch()
{ {
desmume_resume(); desmume_resume();
if(!regMainLoop) if(!regMainLoop) {
{
g_idle_add_full(EMULOOP_PRIO, &EmuLoop, pWindow, NULL); regMainLoop = TRUE; g_idle_add_full(EMULOOP_PRIO, &EmuLoop, pWindow, NULL); regMainLoop = TRUE;
} }
@ -490,31 +471,29 @@ static void *Open_Select(GtkWidget* widget, gpointer data)
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(pFileSelection), pFilter_any);
/* Affichage fenetre */ /* Affichage fenetre */
switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) {
{ case GTK_RESPONSE_OK:
case GTK_RESPONSE_OK: /* Recuperation du chemin */
/* Recuperation du chemin */ sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); if(Open((const char*)sChemin, bad_glob_cflash_disk_image_file) < 0) {
if(Open((const char*)sChemin, bad_glob_cflash_disk_image_file) < 0) GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection),
{ GTK_DIALOG_MODAL,
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_MESSAGE_ERROR,
GTK_DIALOG_MODAL, GTK_BUTTONS_OK,
GTK_MESSAGE_ERROR, "Unable to load :\n%s", sChemin);
GTK_BUTTONS_OK, gtk_dialog_run(GTK_DIALOG(pDialog));
"Unable to load :\n%s", sChemin); gtk_widget_destroy(pDialog);
gtk_dialog_run(GTK_DIALOG(pDialog)); } else {
gtk_widget_destroy(pDialog); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE);
} else { gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "reset"), TRUE);
gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE); }
gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "reset"), TRUE);
}
//Launch(NULL, pWindow); //Launch(NULL, pWindow);
g_free(sChemin); g_free(sChemin);
break; break;
default: default:
break; break;
} }
gtk_widget_destroy(pFileSelection); gtk_widget_destroy(pFileSelection);
} }
@ -628,7 +607,8 @@ gtk_init_sub_gl_area(GtkWidget *widget,
#ifdef GTKGLEXT_AVAILABLE #ifdef GTKGLEXT_AVAILABLE
static int static int
top_screen_expose_fn( GtkWidget *widget, GdkEventExpose *event, gpointer data) { top_screen_expose_fn( GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
int software_convert = *((int *)data); int software_convert = *((int *)data);
@ -662,8 +642,7 @@ top_screen_expose_fn( GtkWidget *widget, GdkEventExpose *event, gpointer data) {
GL_RGB, GL_RGB,
GL_UNSIGNED_BYTE, GL_UNSIGNED_BYTE,
converted); converted);
} } else {
else {
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 256, 384, glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 256, 384,
GL_RGBA, GL_RGBA,
GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_SHORT_1_5_5_5_REV,
@ -759,7 +738,8 @@ bottom_screen_expose_fn(GtkWidget *widget, GdkEventExpose *event, gpointer data)
static gboolean static gboolean
common_configure_fn( GtkWidget *widget, common_configure_fn( GtkWidget *widget,
GdkEventConfigure *event ) { GdkEventConfigure *event )
{
if ( gtk_widget_is_gl_capable( widget) == FALSE) if ( gtk_widget_is_gl_capable( widget) == FALSE)
return TRUE; return TRUE;
@ -819,8 +799,7 @@ common_configure_fn( GtkWidget *widget,
top = 0.0; top = 0.0;
bottom = 192.0 * ((double)event->height / other_dimen); bottom = 192.0 * ((double)event->height / other_dimen);
} } else {
else {
top = 0.0; top = 0.0;
bottom = 192.0; bottom = 192.0;
@ -910,13 +889,11 @@ static gboolean Stylus_Move(GtkWidget *w, GdkEventMotion *e, gpointer data)
const int *opengl = (const int *)data; const int *opengl = (const int *)data;
if(click) if(click) {
{
int scaled_x, scaled_y; int scaled_x, scaled_y;
if(e->is_hint) if(e->is_hint)
gdk_window_get_pointer(w->window, &x, &y, &state); gdk_window_get_pointer(w->window, &x, &y, &state);
else else {
{
x= (gint)e->x; x= (gint)e->x;
y= (gint)e->y; y= (gint)e->y;
state=(GdkModifierType)e->state; state=(GdkModifierType)e->state;
@ -930,8 +907,7 @@ static gboolean Stylus_Move(GtkWidget *w, GdkEventMotion *e, gpointer data)
if ( !(*opengl)) { if ( !(*opengl)) {
scaled_y -= 192; scaled_y -= 192;
} }
if(scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) if(scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) {
{
EmuX = scaled_x; EmuX = scaled_x;
EmuY = scaled_y; EmuY = scaled_y;
if(EmuX<0) EmuX = 0; else if(EmuX>255) EmuX = 255; if(EmuX<0) EmuX = 0; else if(EmuX>255) EmuX = 255;
@ -949,10 +925,8 @@ static gboolean Stylus_Press(GtkWidget *w, GdkEventButton *e, gpointer data)
s32 EmuX, EmuY; s32 EmuX, EmuY;
const int *opengl = (const int *)data; const int *opengl = (const int *)data;
if(desmume_running()) if(desmume_running()) {
{ if(e->button == 1) {
if(e->button == 1)
{
int scaled_x, scaled_y; int scaled_x, scaled_y;
click = TRUE; click = TRUE;
@ -964,8 +938,7 @@ static gboolean Stylus_Press(GtkWidget *w, GdkEventButton *e, gpointer data)
if ( !(*opengl)) { if ( !(*opengl)) {
scaled_y -= 192; scaled_y -= 192;
} }
if(scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) if(scaled_y >= 0 && (state & GDK_BUTTON1_MASK)) {
{
EmuX = scaled_x; EmuX = scaled_x;
EmuY = scaled_y; EmuY = scaled_y;
if(EmuX<0) EmuX = 0; else if(EmuX>255) EmuX = 255; if(EmuX<0) EmuX = 0; else if(EmuX>255) EmuX = 255;
@ -1044,19 +1017,18 @@ void Modify_Key(GtkWidget* widget, gpointer data)
gtk_widget_show_all(GTK_DIALOG(mkDialog)->vbox); gtk_widget_show_all(GTK_DIALOG(mkDialog)->vbox);
switch(gtk_dialog_run(GTK_DIALOG(mkDialog))) switch(gtk_dialog_run(GTK_DIALOG(mkDialog))) {
{ case GTK_RESPONSE_OK:
case GTK_RESPONSE_OK:
Keypad_Temp[Key] = Modify_Key_Chosen; Keypad_Temp[Key] = Modify_Key_Chosen;
sprintf(Key_Label, "%s (%d)", key_names[Key], Keypad_Temp[Key]); sprintf(Key_Label, "%s (%d)", key_names[Key], Keypad_Temp[Key]);
gtk_button_set_label(GTK_BUTTON(widget), Key_Label); gtk_button_set_label(GTK_BUTTON(widget), Key_Label);
break; break;
case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_CANCEL:
case GTK_RESPONSE_NONE: case GTK_RESPONSE_NONE:
Modify_Key_Chosen = 0; Modify_Key_Chosen = 0;
break; break;
} }
gtk_widget_destroy(mkDialog); gtk_widget_destroy(mkDialog);
@ -1073,15 +1045,13 @@ void Edit_Controls(GtkWidget* widget, gpointer data)
memcpy(&Keypad_Temp, &keyboard_cfg, sizeof(keyboard_cfg)); memcpy(&Keypad_Temp, &keyboard_cfg, sizeof(keyboard_cfg));
ecDialog = gtk_dialog_new_with_buttons("Edit controls", ecDialog = gtk_dialog_new_with_buttons("Edit controls",
GTK_WINDOW(pWindow), GTK_WINDOW(pWindow),
GTK_DIALOG_MODAL, GTK_DIALOG_MODAL,
GTK_STOCK_OK,GTK_RESPONSE_OK, GTK_STOCK_OK,GTK_RESPONSE_OK,
GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,
NULL); NULL);
for(i = 0; i < NB_KEYS; i++) {
for(i = 0; i < NB_KEYS; i++)
{
sprintf(Key_Label, "%s (%s)", key_names[i], gdk_keyval_name(Keypad_Temp[i])); sprintf(Key_Label, "%s (%s)", key_names[i], gdk_keyval_name(Keypad_Temp[i]));
ecKey = gtk_button_new_with_label(Key_Label); ecKey = gtk_button_new_with_label(Key_Label);
g_signal_connect(G_OBJECT(ecKey), "clicked", G_CALLBACK(Modify_Key), GINT_TO_POINTER(i)); g_signal_connect(G_OBJECT(ecKey), "clicked", G_CALLBACK(Modify_Key), GINT_TO_POINTER(i));
@ -1090,13 +1060,12 @@ void Edit_Controls(GtkWidget* widget, gpointer data)
gtk_widget_show_all(GTK_DIALOG(ecDialog)->vbox); gtk_widget_show_all(GTK_DIALOG(ecDialog)->vbox);
switch (gtk_dialog_run(GTK_DIALOG(ecDialog))) switch (gtk_dialog_run(GTK_DIALOG(ecDialog))) {
{ case GTK_RESPONSE_OK:
case GTK_RESPONSE_OK: memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg));
memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg)); case GTK_RESPONSE_CANCEL:
case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_NONE:
case GTK_RESPONSE_NONE: break;
break;
} }
gtk_widget_destroy(ecDialog); gtk_widget_destroy(ecDialog);
@ -1124,38 +1093,30 @@ void Modify_Layer(GtkWidget* widget, gpointer data)
int i; int i;
gchar *Layer = (gchar*)data; gchar *Layer = (gchar*)data;
if(!desmume_running()) if(!desmume_running()) {
{
return; return;
} }
if(memcmp(Layer, "Sub", 3) == 0) if(memcmp(Layer, "Sub", 3) == 0) {
{ if(memcmp(Layer, "Sub BG", 6) == 0) {
if(memcmp(Layer, "Sub BG", 6) == 0)
{
i = atoi(Layer + strlen("Sub BG ")); i = atoi(Layer + strlen("Sub BG "));
if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)) == TRUE) { if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)) == TRUE) {
if(!SubScreen.gpu->dispBG[i]) GPU_addBack(SubScreen.gpu, i); if(!SubScreen.gpu->dispBG[i]) GPU_addBack(SubScreen.gpu, i);
} else { } else {
if(SubScreen.gpu->dispBG[i]) GPU_remove(SubScreen.gpu, i); } if(SubScreen.gpu->dispBG[i]) GPU_remove(SubScreen.gpu, i);
} }
else } else {
{
/* TODO: Disable sprites */ /* TODO: Disable sprites */
} }
} } else {
else if(memcmp(Layer, "Main BG", 7) == 0) {
{
if(memcmp(Layer, "Main BG", 7) == 0)
{
i = atoi(Layer + strlen("Main BG ")); i = atoi(Layer + strlen("Main BG "));
if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)) == TRUE) { if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)) == TRUE) {
if(!MainScreen.gpu->dispBG[i]) GPU_addBack(MainScreen.gpu, i); if(!MainScreen.gpu->dispBG[i]) GPU_addBack(MainScreen.gpu, i);
} else { } else {
if(MainScreen.gpu->dispBG[i]) GPU_remove(MainScreen.gpu, i); } if(MainScreen.gpu->dispBG[i]) GPU_remove(MainScreen.gpu, i);
} }
else } else {
{
/* TODO: Disable sprites */ /* TODO: Disable sprites */
} }
} }
@ -1201,7 +1162,8 @@ typedef struct
}BmpFileHeader; }BmpFileHeader;
int WriteBMP(const char *filename,u16 *bmp){ int WriteBMP(const char *filename,u16 *bmp)
{
BmpFileHeader fileheader; BmpFileHeader fileheader;
BmpImageHeader imageheader; BmpImageHeader imageheader;
fileheader.size = 14; fileheader.size = 14;
@ -1338,28 +1300,24 @@ int SelectFirmwareFile_Load(GtkWidget *w, gpointer data)
if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile); if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile);
/* Affichage fenetre */ /* Affichage fenetre */
switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) {
{ case GTK_RESPONSE_OK:
case GTK_RESPONSE_OK: /* Recuperation du chemin */
/* Recuperation du chemin */ sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); if(LoadFirmware((const char*)sChemin) < 0) {
if(LoadFirmware((const char*)sChemin) < 0) GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sChemin);
{ gtk_dialog_run(GTK_DIALOG(pDialog));
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sChemin); gtk_widget_destroy(pDialog);
gtk_dialog_run(GTK_DIALOG(pDialog)); } else {
gtk_widget_destroy(pDialog); GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sChemin);
} gtk_dialog_run(GTK_DIALOG(pDialog));
else gtk_widget_destroy(pDialog);
{ }
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sChemin);
gtk_dialog_run(GTK_DIALOG(pDialog));
gtk_widget_destroy(pDialog);
}
g_free(sChemin); g_free(sChemin);
break; break;
default: default:
break; break;
} }
gtk_widget_destroy(pFileSelection); gtk_widget_destroy(pFileSelection);
@ -1408,28 +1366,24 @@ int SelectFirmwareFile_Load(GtkWidget *w, gpointer data)
if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile); if(FirmwareFile[0]) gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(pFileSelection), FirmwareFile);
/* Affichage fenetre */ /* Affichage fenetre */
switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) switch(gtk_dialog_run(GTK_DIALOG(pFileSelection))) {
{ case GTK_RESPONSE_OK:
case GTK_RESPONSE_OK: /* Recuperation du chemin */
/* Recuperation du chemin */ sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection));
sChemin = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pFileSelection)); if(LoadFirmware((const char*)sChemin) < 0) {
if(LoadFirmware((const char*)sChemin) < 0) GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sChemin);
{ gtk_dialog_run(GTK_DIALOG(pDialog));
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Unable to load :\n%s", sChemin); gtk_widget_destroy(pDialog);
gtk_dialog_run(GTK_DIALOG(pDialog)); } else {
gtk_widget_destroy(pDialog); GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sChemin);
} gtk_dialog_run(GTK_DIALOG(pDialog));
else gtk_widget_destroy(pDialog);
{ }
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pFileSelection), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Selected firmware :\n%s", sChemin);
gtk_dialog_run(GTK_DIALOG(pDialog));
gtk_widget_destroy(pDialog);
}
g_free(sChemin); g_free(sChemin);
break; break;
default: default:
break; break;
} }
gtk_widget_destroy(pFileSelection); gtk_widget_destroy(pFileSelection);
@ -1477,8 +1431,7 @@ void dTool_CloseCallback(int tool)
static inline void _updateDTools() static inline void _updateDTools()
{ {
int i; int i;
for(i = 0; i < dTools_list_size; i++) for(i = 0; i < dTools_list_size; i++) {
{
if(dTools_running[i]) { dTools_list[i]->update(); } if(dTools_running[i]) { dTools_list[i]->update(); }
} }
} }
@ -1489,13 +1442,11 @@ gboolean EmuLoop(gpointer data)
{ {
int i; int i;
if(desmume_running()) /* Si on est en train d'executer le programme ... */ if(desmume_running()) { /* Si on est en train d'executer le programme ... */
{
static int limiter_frame_counter = 0; static int limiter_frame_counter = 0;
fps_FrameCount += Frameskip + 1; fps_FrameCount += Frameskip + 1;
if(!fps_SecStart) fps_SecStart = SDL_GetTicks(); if(!fps_SecStart) fps_SecStart = SDL_GetTicks();
if(SDL_GetTicks() - fps_SecStart >= 1000) if(SDL_GetTicks() - fps_SecStart >= 1000) {
{
fps_SecStart = SDL_GetTicks(); fps_SecStart = SDL_GetTicks();
fps = fps_FrameCount; fps = fps_FrameCount;
fps_FrameCount = 0; fps_FrameCount = 0;
@ -1541,7 +1492,8 @@ gboolean EmuLoop(gpointer data)
* *
* @return The interval to the next call (required by SDL) * @return The interval to the next call (required by SDL)
*/ */
static Uint32 fps_limiter_fn(Uint32 interval, void *param) { static Uint32 fps_limiter_fn(Uint32 interval, void *param)
{
SDL_sem *sdl_semaphore = (SDL_sem *)param; SDL_sem *sdl_semaphore = (SDL_sem *)param;
/* signal the semaphore if it is getting low */ /* signal the semaphore if it is getting low */
@ -1559,7 +1511,8 @@ static void dui_set_accel_group(gpointer action, gpointer group) {
/////////////////////////////// MAIN /////////////////////////////// /////////////////////////////// MAIN ///////////////////////////////
static int static int
common_gtk_main( struct configured_features *my_config) { common_gtk_main( struct configured_features *my_config)
{
int i; int i;
SDL_TimerID limiter_timer; SDL_TimerID limiter_timer;
@ -1625,8 +1578,7 @@ common_gtk_main( struct configured_features *my_config) {
glconfig = gdk_gl_config_new_by_mode ((GdkGLConfigMode)(GDK_GL_MODE_RGB | glconfig = gdk_gl_config_new_by_mode ((GdkGLConfigMode)(GDK_GL_MODE_RGB |
GDK_GL_MODE_DEPTH | GDK_GL_MODE_DEPTH |
GDK_GL_MODE_DOUBLE)); GDK_GL_MODE_DOUBLE));
if (glconfig == NULL) if (glconfig == NULL) {
{
g_print ("*** Cannot find the double-buffered visual.\n"); g_print ("*** Cannot find the double-buffered visual.\n");
g_print ("*** Trying single-buffered visual.\n"); g_print ("*** Trying single-buffered visual.\n");
@ -1637,16 +1589,15 @@ common_gtk_main( struct configured_features *my_config) {
g_print ("*** No appropriate OpenGL-capable visual found.\n"); g_print ("*** No appropriate OpenGL-capable visual found.\n");
exit (1); exit (1);
} }
} }
#endif #endif
/* FIXME: SDL_INIT_VIDEO is needed for joystick support to work!? /* FIXME: SDL_INIT_VIDEO is needed for joystick support to work!?
Perhaps it needs a "window" to catch events...? */ Perhaps it needs a "window" to catch events...? */
if(SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) == -1) if(SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) == -1) {
{
fprintf(stderr, "Error trying to initialize SDL: %s\n", fprintf(stderr, "Error trying to initialize SDL: %s\n",
SDL_GetError()); SDL_GetError());
return 1; return 1;
} }
desmume_init( arm9_memio, &arm9_ctrl_iface, desmume_init( arm9_memio, &arm9_ctrl_iface,
arm7_memio, &arm7_ctrl_iface, arm7_memio, &arm7_ctrl_iface,
my_config->disable_sound); my_config->disable_sound);
@ -1682,8 +1633,7 @@ common_gtk_main( struct configured_features *my_config) {
if ( my_config->screen.opengl) { if ( my_config->screen.opengl) {
gtk_window_set_resizable(GTK_WINDOW (pWindow), TRUE); gtk_window_set_resizable(GTK_WINDOW (pWindow), TRUE);
} } else {
else {
gtk_window_set_resizable(GTK_WINDOW (pWindow), FALSE); gtk_window_set_resizable(GTK_WINDOW (pWindow), FALSE);
} }
@ -1728,13 +1678,13 @@ common_gtk_main( struct configured_features *my_config) {
/** Menu "Emulation" **/ /** Menu "Emulation" **/
GtkWidget *mEmulation; GtkWidget *mEmulation;
GtkWidget *mFrameskip; GtkWidget *mFrameskip;
GtkWidget *mFrameskip_Radio[MAX_FRAMESKIP]; GtkWidget *mFrameskip_Radio[MAX_FRAMESKIP];
GtkWidget *mGraphics; GtkWidget *mGraphics;
GtkWidget *mSize; GtkWidget *mSize;
GtkWidget *mSize_Radio[MAX_SCREENCOEFF]; GtkWidget *mSize_Radio[MAX_SCREENCOEFF];
GtkWidget *mLayers; GtkWidget *mLayers;
GtkWidget *mLayers_Radio[10]; GtkWidget *mLayers_Radio[10];
mEmulation = gtk_menu_new(); mEmulation = gtk_menu_new();
@ -1748,55 +1698,55 @@ common_gtk_main( struct configured_features *my_config) {
gtk_container_add(GTK_CONTAINER(mEmulation), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "reset"))); gtk_container_add(GTK_CONTAINER(mEmulation), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "reset")));
mFrameskip = gtk_menu_new(); mFrameskip = gtk_menu_new();
pMenuItem = gtk_menu_item_new_with_label("Frameskip"); pMenuItem = gtk_menu_item_new_with_label("Frameskip");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mFrameskip); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mFrameskip);
gtk_menu_shell_append(GTK_MENU_SHELL(mEmulation), pMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(mEmulation), pMenuItem);
for(i = 0; i < MAX_FRAMESKIP; i++) { for(i = 0; i < MAX_FRAMESKIP; i++) {
char frameskipRadio_buf[16]; char frameskipRadio_buf[16];
sprintf(frameskipRadio_buf, "%d", i); sprintf(frameskipRadio_buf, "%d", i);
if(i>0) mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mFrameskip_Radio[i-1]), frameskipRadio_buf); if(i>0) mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mFrameskip_Radio[i-1]), frameskipRadio_buf);
else mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, frameskipRadio_buf); else mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, frameskipRadio_buf);
g_signal_connect(G_OBJECT(mFrameskip_Radio[i]), "activate", G_CALLBACK(Modify_Frameskip), GINT_TO_POINTER(i)); g_signal_connect(G_OBJECT(mFrameskip_Radio[i]), "activate", G_CALLBACK(Modify_Frameskip), GINT_TO_POINTER(i));
gtk_menu_shell_append(GTK_MENU_SHELL(mFrameskip), mFrameskip_Radio[i]); gtk_menu_shell_append(GTK_MENU_SHELL(mFrameskip), mFrameskip_Radio[i]);
} }
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE);
mGraphics = gtk_menu_new(); mGraphics = gtk_menu_new();
pMenuItem = gtk_menu_item_new_with_label("Graphics"); pMenuItem = gtk_menu_item_new_with_label("Graphics");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mGraphics); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mGraphics);
gtk_menu_shell_append(GTK_MENU_SHELL(mEmulation), pMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(mEmulation), pMenuItem);
// TODO: Un jour, peut être... >< // TODO: Un jour, peut être... ><
if ( !my_config->screen.opengl) { if ( !my_config->screen.opengl) {
mSize = gtk_menu_new(); mSize = gtk_menu_new();
pMenuItem = gtk_menu_item_new_with_label("Size"); pMenuItem = gtk_menu_item_new_with_label("Size");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mSize); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mSize);
gtk_menu_shell_append(GTK_MENU_SHELL(mGraphics), pMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(mGraphics), pMenuItem);
for(i = 1; i < MAX_SCREENCOEFF; i++) { for(i = 1; i < MAX_SCREENCOEFF; i++) {
char sizeRadio_buf[16]; char sizeRadio_buf[16];
sprintf(sizeRadio_buf, "x%d", i); sprintf(sizeRadio_buf, "x%d", i);
if(i>1) mSize_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mSize_Radio[i-1]), sizeRadio_buf); if(i>1) mSize_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mSize_Radio[i-1]), sizeRadio_buf);
else mSize_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, sizeRadio_buf); else mSize_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, sizeRadio_buf);
g_signal_connect(G_OBJECT(mSize_Radio[i]), "activate", G_CALLBACK(Modify_ScreenCoeff), GINT_TO_POINTER(i)); g_signal_connect(G_OBJECT(mSize_Radio[i]), "activate", G_CALLBACK(Modify_ScreenCoeff), GINT_TO_POINTER(i));
gtk_menu_shell_append(GTK_MENU_SHELL(mSize), mSize_Radio[i]); gtk_menu_shell_append(GTK_MENU_SHELL(mSize), mSize_Radio[i]);
} }
} }
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE);
mLayers = gtk_menu_new(); mLayers = gtk_menu_new();
pMenuItem = gtk_menu_item_new_with_label("Layers"); pMenuItem = gtk_menu_item_new_with_label("Layers");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mLayers); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mLayers);
gtk_menu_shell_append(GTK_MENU_SHELL(mGraphics), pMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(mGraphics), pMenuItem);
for(i = 0; i < 10; i++) { for(i = 0; i < 10; i++) {
mLayers_Radio[i] = gtk_check_menu_item_new_with_label(Layers_Menu[i]); mLayers_Radio[i] = gtk_check_menu_item_new_with_label(Layers_Menu[i]);
g_signal_connect(G_OBJECT(mLayers_Radio[i]), "activate", G_CALLBACK(Modify_Layer), (void*)Layers_Menu[i]); g_signal_connect(G_OBJECT(mLayers_Radio[i]), "activate", G_CALLBACK(Modify_Layer), (void*)Layers_Menu[i]);
gtk_menu_shell_append(GTK_MENU_SHELL(mLayers), mLayers_Radio[i]); gtk_menu_shell_append(GTK_MENU_SHELL(mLayers), mLayers_Radio[i]);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mLayers_Radio[i]), TRUE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mLayers_Radio[i]), TRUE);
} }
/** Menu "Options" **/ /** Menu "Options" **/
@ -1832,8 +1782,7 @@ common_gtk_main( struct configured_features *my_config) {
pMenu = gtk_menu_new(); pMenu = gtk_menu_new();
for(i = 0; i < dTools_list_size; i++) for(i = 0; i < dTools_list_size; i++) {
{
pMenuItem = gtk_menu_item_new_with_label(dTools_list[i]->name); pMenuItem = gtk_menu_item_new_with_label(dTools_list[i]->name);
g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Start_dTool), GINT_TO_POINTER(i)); g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Start_dTool), GINT_TO_POINTER(i));
gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
@ -1938,10 +1887,10 @@ common_gtk_main( struct configured_features *my_config) {
/* each frame expose the top screen */ /* each frame expose the top screen */
nds_screen_widget = top_screen_widget; nds_screen_widget = top_screen_widget;
} } else {
else #else
{
#endif #endif
{
pDrawingArea= gtk_drawing_area_new(); pDrawingArea= gtk_drawing_area_new();
gtk_drawing_area_size(GTK_DRAWING_AREA(pDrawingArea), 256, 384); gtk_drawing_area_size(GTK_DRAWING_AREA(pDrawingArea), 256, 384);
@ -1959,7 +1908,6 @@ common_gtk_main( struct configured_features *my_config) {
g_signal_connect(G_OBJECT(pDrawingArea), "motion_notify_event", g_signal_connect(G_OBJECT(pDrawingArea), "motion_notify_event",
G_CALLBACK(Stylus_Move), &my_config->screen.opengl); G_CALLBACK(Stylus_Move), &my_config->screen.opengl);
g_signal_connect( G_OBJECT(pDrawingArea), "realize", g_signal_connect( G_OBJECT(pDrawingArea), "realize",
G_CALLBACK(Draw), NULL ) ; G_CALLBACK(Draw), NULL ) ;
g_signal_connect( G_OBJECT(pDrawingArea), "expose_event", g_signal_connect( G_OBJECT(pDrawingArea), "expose_event",
@ -1968,7 +1916,7 @@ common_gtk_main( struct configured_features *my_config) {
gtk_box_pack_start(GTK_BOX(pVBox), pDrawingArea, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(pVBox), pDrawingArea, FALSE, FALSE, 0);
nds_screen_widget = pDrawingArea; nds_screen_widget = pDrawingArea;
} }
/* Création de la barre d'état */ /* Création de la barre d'état */
@ -2032,14 +1980,10 @@ common_gtk_main( struct configured_features *my_config) {
/* Vérifie la ligne de commandes */ /* Vérifie la ligne de commandes */
if( my_config->nds_file != NULL) if( my_config->nds_file != NULL) {
{ if(Open( my_config->nds_file, bad_glob_cflash_disk_image_file) >= 0) {
if(Open( my_config->nds_file, bad_glob_cflash_disk_image_file) >= 0)
{
Launch(); Launch();
} } else {
else
{
GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow), GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow),
GTK_DIALOG_MODAL, GTK_DIALOG_MODAL,
GTK_MESSAGE_INFO, GTK_MESSAGE_INFO,
@ -2087,7 +2031,8 @@ common_gtk_main( struct configured_features *my_config) {
int int
main (int argc, char *argv[]) { main (int argc, char *argv[])
{
struct configured_features my_config; struct configured_features my_config;
init_configured_features( &my_config); init_configured_features( &my_config);