gtk port: janitorial stuff

some changes to make the code meaning more obvious:
split, move and rename of a few functions
add empty (for now) configure event
This commit is contained in:
matusz 2009-05-16 23:18:40 +00:00
parent 6365f26d7d
commit 6acc3e0d65
1 changed files with 70 additions and 62 deletions

View File

@ -87,7 +87,7 @@ enum {
SUB_OBJ SUB_OBJ
}; };
/************************ CONFIG FILE *****************************/ gboolean EmuLoop(gpointer data);
static void OpenNdsDialog(); static void OpenNdsDialog();
static void SaveStateDialog(); static void SaveStateDialog();
@ -103,11 +103,11 @@ static void About();
static void ToggleMenuVisible(GtkToggleAction *action); static void ToggleMenuVisible(GtkToggleAction *action);
static void ToggleStatusbarVisible(GtkToggleAction *action); static void ToggleStatusbarVisible(GtkToggleAction *action);
static void ToggleToolbarVisible(GtkToggleAction *action); static void ToggleToolbarVisible(GtkToggleAction *action);
static void desmume_gtk_disable_audio (GtkToggleAction *action); static void ToggleAudio (GtkToggleAction *action);
static void desmume_gtk_mic_noise (GtkToggleAction *action); static void ToggleMicNoise (GtkToggleAction *action);
static void ToggleGap (GtkToggleAction *action); static void ToggleGap (GtkToggleAction *action);
static void SetRotation (GtkAction *action); static void SetRotation (GtkAction *action);
static void Modify_Layer(GtkToggleAction* action, gpointer data); static void ToggleLayerVisibility(GtkToggleAction* action, gpointer data);
#ifdef DESMUME_GTK_FIRMWARE_BROKEN #ifdef DESMUME_GTK_FIRMWARE_BROKEN
static void SelectFirmwareFile(); static void SelectFirmwareFile();
#endif #endif
@ -261,12 +261,12 @@ static const GtkActionEntry action_entries[] = {
}; };
static const GtkToggleActionEntry toggle_entries[] = { static const GtkToggleActionEntry toggle_entries[] = {
{ "enableaudio", NULL, "_Enable audio", NULL, NULL, G_CALLBACK(desmume_gtk_disable_audio), TRUE}, { "enableaudio", NULL, "_Enable audio", NULL, NULL, G_CALLBACK(ToggleAudio), TRUE},
{ "micnoise", NULL, "Fake mic _noise", NULL, NULL, G_CALLBACK(desmume_gtk_mic_noise), FALSE}, { "micnoise", NULL, "Fake mic _noise", NULL, NULL, G_CALLBACK(ToggleMicNoise), FALSE},
{ "gap", NULL, "_Gap", NULL, NULL, G_CALLBACK(ToggleGap), FALSE}, { "gap", NULL, "_Gap", NULL, NULL, G_CALLBACK(ToggleGap), FALSE},
{ "view_menu", NULL, "View _menu", NULL, NULL, G_CALLBACK(ToggleMenuVisible), TRUE}, { "view_menu", NULL, "View _menu", NULL, NULL, G_CALLBACK(ToggleMenuVisible), TRUE},
{ "view_toolbar", NULL, "View _toolbar", NULL, NULL, G_CALLBACK(ToggleToolbarVisible), TRUE}, { "view_toolbar", NULL, "View _toolbar", NULL, NULL, G_CALLBACK(ToggleToolbarVisible), TRUE},
{ "view_statusbar", NULL, "View _statusbar", NULL, NULL, G_CALLBACK(ToggleStatusbarVisible), TRUE}//, { "view_statusbar", NULL, "View _statusbar", NULL, NULL, G_CALLBACK(ToggleStatusbarVisible), TRUE}
}; };
static const GtkRadioActionEntry interpolation_entries[] = { static const GtkRadioActionEntry interpolation_entries[] = {
@ -515,7 +515,7 @@ int nds_screen_rotation_angle = 0;
static BOOL regMainLoop = FALSE; static BOOL regMainLoop = FALSE;
static inline void pStatusBar_Change (const char *message) static inline void UpdateStatusBar (const char *message)
{ {
gint pStatusBar_Ctx; gint pStatusBar_Ctx;
@ -524,9 +524,7 @@ static inline void pStatusBar_Change (const char *message)
gtk_statusbar_push(GTK_STATUSBAR(pStatusBar), pStatusBar_Ctx, message); gtk_statusbar_push(GTK_STATUSBAR(pStatusBar), pStatusBar_Ctx, message);
} }
gboolean EmuLoop(gpointer data); static void About()
static void About()//GtkWidget* widget, gpointer data)
{ {
GdkPixbuf * pixbuf = gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm); GdkPixbuf * pixbuf = gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm);
@ -586,7 +584,7 @@ static void Launch()
regMainLoop = TRUE; regMainLoop = TRUE;
} }
pStatusBar_Change("Running ..."); UpdateStatusBar("Running ...");
gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), TRUE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), TRUE);
gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), FALSE);
@ -601,7 +599,7 @@ static void Pause()
{ {
GtkWidget *run; GtkWidget *run;
desmume_pause(); desmume_pause();
pStatusBar_Change("Paused"); UpdateStatusBar("Paused");
gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), FALSE);
gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), TRUE);
@ -806,11 +804,57 @@ static void Reset()
NDS_Reset(); NDS_Reset();
desmume_resume(); desmume_resume();
pStatusBar_Change("Running ..."); UpdateStatusBar("Running ...");
} }
/////////////////////////////// DRAWING SCREEN ////////////////////////////////// /////////////////////////////// DRAWING SCREEN //////////////////////////////////
static void UpdateDrawingAreaAspect()
{
gint H, W;
switch (nds_screen_rotation_angle) {
case 0:
case 180:
W = 256;
H = 384 + nds_gap_size;
break;
case 90:
case 270:
W = 384 + nds_gap_size;
H = 256;
break;
default:
g_printerr("Congratulations, you've managed to set unsupported screen rotation angle (%d), resetting angle to 0\n",
nds_screen_rotation_angle);
nds_screen_rotation_angle = 0;
W = 256;
H = 384 + nds_gap_size;
break;
}
gtk_widget_set_size_request(GTK_WIDGET(pDrawingArea), W, H);
}
static void ToggleGap(GtkToggleAction* action)
{
nds_gap_size = gtk_toggle_action_get_active(action) ? GAP_SIZE : 0;
UpdateDrawingAreaAspect();
}
static void SetRotation(GtkAction* action)
{
const gchar *angle;
angle = gtk_action_get_name(GTK_ACTION(action)) + strlen("rotate_");
nds_screen_rotation_angle = atoi(angle);
UpdateDrawingAreaAspect();
}
static int ConfigureDrawingArea(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
{
return TRUE;
}
static inline void gpu_screen_to_rgb(guchar * rgb, int size) static inline void gpu_screen_to_rgb(guchar * rgb, int size)
{ {
u16 gpu_pixel; u16 gpu_pixel;
@ -848,7 +892,7 @@ static inline void gpu_screen_to_rgb(guchar * rgb, int size)
} }
/* Drawing callback */ /* Drawing callback */
static int gtkFloatExposeEvent (GtkWidget *widget, GdkEventExpose *event, gpointer data) static int ExposeDrawingArea (GtkWidget *widget, GdkEventExpose *event, gpointer data)
{ {
GdkPixbuf *origPixbuf, *resizedPixbuf = NULL, *drawPixbuf; GdkPixbuf *origPixbuf, *resizedPixbuf = NULL, *drawPixbuf;
guchar rgb[SCREENS_PIXEL_SIZE*SCREEN_BYTES_PER_PIXEL]; guchar rgb[SCREENS_PIXEL_SIZE*SCREEN_BYTES_PER_PIXEL];
@ -871,6 +915,7 @@ static int gtkFloatExposeEvent (GtkWidget *widget, GdkEventExpose *event, gpoint
hratio = (float)daW / (float)imgW; hratio = (float)daW / (float)imgW;
vratio = (float)daH / (float)imgH; vratio = (float)daH / (float)imgH;
ssize = MIN(hratio, vratio); ssize = MIN(hratio, vratio);
nds_screen_size_ratio = 1 / (float)ssize;
xoff = (daW-ssize*imgW)/2; xoff = (daW-ssize*imgW)/2;
yoff = (daH-ssize*imgH)/2; yoff = (daH-ssize*imgH)/2;
if(!rot){ if(!rot){
@ -888,7 +933,6 @@ static int gtkFloatExposeEvent (GtkWidget *widget, GdkEventExpose *event, gpoint
xd = xoff+xsize+nds_gap_size; xd = xoff+xsize+nds_gap_size;
yd = yoff; yd = yoff;
} }
nds_screen_size_ratio = 1 / (float)ssize;
gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE*SCREEN_BYTES_PER_PIXEL); gpu_screen_to_rgb(rgb, SCREENS_PIXEL_SIZE*SCREEN_BYTES_PER_PIXEL);
origPixbuf = gdk_pixbuf_new_from_data(rgb, GDK_COLORSPACE_RGB, origPixbuf = gdk_pixbuf_new_from_data(rgb, GDK_COLORSPACE_RGB,
@ -1100,7 +1144,7 @@ static gint Key_Release(GtkWidget *w, GdkEventKey *e, gpointer data)
/////////////////////////////// CONTROLS EDIT ////////////////////////////////////// /////////////////////////////// CONTROLS EDIT //////////////////////////////////////
static void Modify_Key_Press(GtkWidget *w, GdkEventKey *e, struct modify_key_ctx *ctx) static void AcceptNewInputKey(GtkWidget *w, GdkEventKey *e, struct modify_key_ctx *ctx)
{ {
gchar *YouPressed; gchar *YouPressed;
@ -1132,7 +1176,7 @@ static void Modify_Key(GtkWidget* widget, gpointer data)
g_free(Title); g_free(Title);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mkDialog)->vbox), ctx.label, TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(mkDialog)->vbox), ctx.label, TRUE, FALSE, 0);
g_signal_connect(G_OBJECT(mkDialog), "key_press_event", G_CALLBACK(Modify_Key_Press), &ctx); g_signal_connect(G_OBJECT(mkDialog), "key_press_event", G_CALLBACK(AcceptNewInputKey), &ctx);
gtk_widget_show_all(GTK_DIALOG(mkDialog)->vbox); gtk_widget_show_all(GTK_DIALOG(mkDialog)->vbox);
@ -1191,45 +1235,7 @@ static void Edit_Controls()
} }
static void ToggleGap(GtkToggleAction* action) static void ToggleLayerVisibility(GtkToggleAction* action, gpointer data)
{
nds_gap_size = gtk_toggle_action_get_active(action) ? GAP_SIZE : 0;
SetRotation(NULL);
}
static void SetRotation(GtkAction* action)
{
const gchar *angle;
gint H, W;
if(action){
angle = gtk_action_get_name(GTK_ACTION(action)) + strlen("rotate_");
nds_screen_rotation_angle = atoi(angle);
}
switch (nds_screen_rotation_angle) {
case 0:
case 180:
W = 256;
H = 384 + nds_gap_size;
break;
case 90:
case 270:
W = 384 + nds_gap_size;
H = 256;
break;
default:
g_printerr("Congratulations, you've managed to set unsupported screen rotation angle (%d), resetting angle to 0\n",
nds_screen_rotation_angle);
nds_screen_rotation_angle = 0;
W = 256;
H = 384 + nds_gap_size;
break;
}
gtk_widget_set_size_request(GTK_WIDGET(pDrawingArea), W, H);
}
static void Modify_Layer(GtkToggleAction* action, gpointer data)
{ {
guint Layer = GPOINTER_TO_UINT(data); guint Layer = GPOINTER_TO_UINT(data);
gboolean active; gboolean active;
@ -1539,12 +1545,12 @@ static void desmume_gtk_menu_emulation_layers (GtkActionGroup *ag)
for(i = 0; i< 10; i++){ for(i = 0; i< 10; i++){
act = gtk_toggle_action_new(Layers_Menu[i][0],Layers_Menu[i][1],NULL,NULL); act = gtk_toggle_action_new(Layers_Menu[i][0],Layers_Menu[i][1],NULL,NULL);
gtk_toggle_action_set_active(act, TRUE); gtk_toggle_action_set_active(act, TRUE);
g_signal_connect(G_OBJECT(act), "activate", G_CALLBACK(Modify_Layer), GUINT_TO_POINTER(i)); g_signal_connect(G_OBJECT(act), "activate", G_CALLBACK(ToggleLayerVisibility), GUINT_TO_POINTER(i));
gtk_action_group_add_action_with_accel(ag, GTK_ACTION(act), NULL); gtk_action_group_add_action_with_accel(ag, GTK_ACTION(act), NULL);
} }
} }
static void desmume_gtk_disable_audio (GtkToggleAction *action) static void ToggleAudio (GtkToggleAction *action)
{ {
if (gtk_toggle_action_get_active(action) == TRUE) { if (gtk_toggle_action_get_active(action) == TRUE) {
SPU_ChangeSoundCore(SNDCORE_SDL, 735 * 4); SPU_ChangeSoundCore(SNDCORE_SDL, 735 * 4);
@ -1553,7 +1559,7 @@ static void desmume_gtk_disable_audio (GtkToggleAction *action)
} }
} }
static void desmume_gtk_mic_noise (GtkToggleAction *action) static void ToggleMicNoise (GtkToggleAction *action)
{ {
Mic_DoNoise((BOOL)gtk_toggle_action_get_active(action)); Mic_DoNoise((BOOL)gtk_toggle_action_get_active(action));
} }
@ -1743,12 +1749,14 @@ 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), NULL); G_CALLBACK(Stylus_Move), NULL);
g_signal_connect(G_OBJECT(pDrawingArea), "expose_event", g_signal_connect(G_OBJECT(pDrawingArea), "expose_event",
G_CALLBACK(gtkFloatExposeEvent), NULL ) ; G_CALLBACK(ExposeDrawingArea), NULL ) ;
g_signal_connect(G_OBJECT(pDrawingArea), "configure_event",
G_CALLBACK(ConfigureDrawingArea), NULL ) ;
/* Status bar */ /* Status bar */
pStatusBar = gtk_statusbar_new(); pStatusBar = gtk_statusbar_new();
pStatusBar_Ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(pStatusBar), "Global"); pStatusBar_Ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(pStatusBar), "Global");
pStatusBar_Change("Desmume"); UpdateStatusBar("Desmume");
gtk_box_pack_end(GTK_BOX(pVBox), pStatusBar, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(pVBox), pStatusBar, FALSE, FALSE, 0);
gtk_widget_show_all(pWindow); gtk_widget_show_all(pWindow);