--- uae/src/gtkui.c 2018/04/24 16:46:13 1.1.1.5 +++ uae/src/gtkui.c 2018/04/24 16:54:52 1.1.1.7 @@ -44,6 +44,8 @@ static int gui_active; +static GtkWidget *pause_uae_widget; + static GtkWidget *disk_insert_widget[4], *disk_eject_widget[4], *disk_text_widget[4]; static char *new_disk_string[4]; @@ -53,7 +55,7 @@ static GtkWidget *cpu_widget[4], *a24m_w static GtkWidget *sound_widget[4], *sound_bits_widget[2], *sound_freq_widget[3], *sound_ch_widget[2]; static GtkAdjustment *framerate_adj; -static GtkWidget *bimm_widget, *b32_widget; +static GtkWidget *bimm_widget, *b32_widget, *afscr_widget, *pfscr_widget; static GtkWidget *joy_widget[2][6]; @@ -124,6 +126,8 @@ static void set_gfx_state (void) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bimm_widget), currprefs.immediate_blits != 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b32_widget), currprefs.blits_32bit_enabled != 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (afscr_widget), currprefs.gfx_afullscreen != 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pfscr_widget), currprefs.gfx_pfullscreen != 0); } static void set_sound_state (void) @@ -237,9 +241,11 @@ static void joy_changed (void) static void custom_changed (void) { - changed_prefs.framerate = framerate_adj->value; + changed_prefs.gfx_framerate = framerate_adj->value; changed_prefs.blits_32bit_enabled = GTK_TOGGLE_BUTTON (b32_widget)->active; changed_prefs.immediate_blits = GTK_TOGGLE_BUTTON (bimm_widget)->active; + changed_prefs.gfx_afullscreen = GTK_TOGGLE_BUTTON (afscr_widget)->active; + changed_prefs.gfx_pfullscreen = GTK_TOGGLE_BUTTON (pfscr_widget)->active; } static void cpuspeed_changed (void) @@ -315,6 +321,19 @@ static void did_eject (GtkWidget *w, gpo write_comm_pipe_int (&from_gui_pipe, (int)data, 1); } +static void pause_uae (GtkWidget *widget, gpointer data) +{ + if (quit_gui) + return; + + write_comm_pipe_int (&from_gui_pipe, GTK_TOGGLE_BUTTON (widget)->active ? 5 : 6, 1); +} + +static void end_pause_uae (void) +{ + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pause_uae_widget), FALSE); +} + static int filesel_active = -1; static GtkWidget *selector; @@ -643,7 +662,7 @@ static void make_gfx_widgets (GtkWidget add_empty_vbox (vbox); - framerate_adj = GTK_ADJUSTMENT (gtk_adjustment_new (currprefs.framerate, 1.0, 21.0, 1.0, 1.0, 1.0)); + framerate_adj = GTK_ADJUSTMENT (gtk_adjustment_new (currprefs.gfx_framerate, 1.0, 21.0, 1.0, 1.0, 1.0)); gtk_signal_connect (GTK_OBJECT (framerate_adj), "value_changed", GTK_SIGNAL_FUNC (custom_changed), NULL); @@ -655,18 +674,33 @@ static void make_gfx_widgets (GtkWidget b32_widget = gtk_check_button_new_with_label ("32 bit blitter"); add_centered_to_vbox (vbox, b32_widget); +#if 0 gtk_widget_show (b32_widget); - +#endif bimm_widget = gtk_check_button_new_with_label ("Immediate blits"); add_centered_to_vbox (vbox, bimm_widget); gtk_widget_show (bimm_widget); + afscr_widget = gtk_check_button_new_with_label ("Amiga modes fullscreen"); + add_centered_to_vbox (vbox, afscr_widget); +#if 0 + gtk_widget_show (afscr_widget); +#endif + pfscr_widget = gtk_check_button_new_with_label ("Picasso modes fullscreen"); + add_centered_to_vbox (vbox, pfscr_widget); +#if 0 + gtk_widget_show (pfscr_widget); +#endif add_empty_vbox (vbox); gtk_signal_connect (GTK_OBJECT (bimm_widget), "clicked", (GtkSignalFunc) custom_changed, NULL); gtk_signal_connect (GTK_OBJECT (b32_widget), "clicked", (GtkSignalFunc) custom_changed, NULL); + gtk_signal_connect (GTK_OBJECT (afscr_widget), "clicked", + (GtkSignalFunc) custom_changed, NULL); + gtk_signal_connect (GTK_OBJECT (pfscr_widget), "clicked", + (GtkSignalFunc) custom_changed, NULL); } static void make_sound_widgets (GtkWidget *vbox) @@ -733,13 +767,16 @@ static void make_joy_widgets (GtkWidget add_empty_vbox (dvbox); } -static void make_button (const char *label, GtkWidget *box, void (*sigfunc) (void)) +static GtkWidget *make_buttons (const char *label, GtkWidget *box, void (*sigfunc) (void), GtkWidget *(*create)(const char *label)) { - GtkWidget *thing = gtk_button_new_with_label (label); + GtkWidget *thing = create (label); gtk_widget_show (thing); gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) sigfunc, NULL); gtk_box_pack_start (GTK_BOX (box), thing, TRUE, TRUE, 0); + + return thing; } +#define make_button(label, box, sigfunc) make_buttons(label, box, sigfunc, gtk_button_new_with_label) static void *gtk_penguin (void *dummy) { @@ -784,6 +821,7 @@ static void *gtk_penguin (void *dummy) make_button ("Debug", buttonbox, did_debug); make_button ("Quit", buttonbox, did_quit); make_button ("Save config", buttonbox, save_config); + pause_uae_widget = make_buttons ("Pause", buttonbox, pause_uae, gtk_toggle_button_new_with_label); /* The LED */ thing = make_led (0); @@ -903,34 +941,53 @@ void gui_filename(int num, const char *n void gui_handle_events(void) { + int pause_uae = FALSE; + if (no_gui) return; - while (comm_pipe_has_data (&from_gui_pipe)) { - int cmd = read_comm_pipe_int_blocking (&from_gui_pipe); - int n; - switch (cmd) { - case 0: - n = read_comm_pipe_int_blocking (&from_gui_pipe); - changed_prefs.df[n][0] = '\0'; - break; - case 1: - n = read_comm_pipe_int_blocking (&from_gui_pipe); - uae_sem_wait (&gui_sem); - strncpy (changed_prefs.df[n], new_disk_string[n], 255); - changed_prefs.df[n][255] = '\0'; - uae_sem_post (&gui_sem); - break; - case 2: - uae_reset (); - break; - case 3: - activate_debugger (); - break; - case 4: - uae_quit (); - break; - } - } - + do { + while (pause_uae || comm_pipe_has_data (&from_gui_pipe)) { + int cmd = read_comm_pipe_int_blocking (&from_gui_pipe); + int n; + switch (cmd) { + case 0: + n = read_comm_pipe_int_blocking (&from_gui_pipe); + changed_prefs.df[n][0] = '\0'; + break; + case 1: + n = read_comm_pipe_int_blocking (&from_gui_pipe); + uae_sem_wait (&gui_sem); + strncpy (changed_prefs.df[n], new_disk_string[n], 255); + changed_prefs.df[n][255] = '\0'; + uae_sem_post (&gui_sem); + break; + case 2: + uae_reset (); + end_pause_uae (); + break; + case 3: + activate_debugger (); + end_pause_uae (); + break; + case 4: + uae_quit (); + end_pause_uae (); + break; + case 5: + pause_uae = TRUE; + break; + case 6: + pause_uae = FALSE; + break; + } + } + } while (pause_uae); +} + +void gui_update_gfx (void) +{ +#if 0 /* This doesn't work... */ + set_gfx_state (); +#endif }