--- uae/src/gtkui.c 2018/04/24 16:42:09 1.1.1.2 +++ uae/src/gtkui.c 2018/04/24 16:43:28 1.1.1.3 @@ -35,6 +35,7 @@ static GtkWidget *disk_insert_widget[4], static char *new_disk_string[4]; static GtkAdjustment *cpuspeed_adj; +static GtkWidget *cpuspeed_widgets[4], *cpuspeed_scale; static GtkWidget *cpu_widget[4], *a24m_widget, *ccpu_widget; static GtkWidget *sound_widget[4], *sound_bits_widget[2], *sound_freq_widget[3], *sound_ch_widget[2]; @@ -95,12 +96,15 @@ static void set_cpu_state (void) gtk_widget_set_sensitive (a24m_widget, changed_prefs.cpu_level > 1); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (ccpu_widget), changed_prefs.cpu_compatible != 0); gtk_widget_set_sensitive (ccpu_widget, changed_prefs.cpu_level == 0); + gtk_widget_set_sensitive (cpuspeed_scale, changed_prefs.m68k_speed > 0); } static void set_cpu_widget (void) { int nr = changed_prefs.cpu_level; gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (cpu_widget[nr]), TRUE); + nr = currprefs.m68k_speed + 1 < 3 ? currprefs.m68k_speed + 1 : 2; + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (cpuspeed_widgets[nr]), TRUE); } static void set_gfx_state (void) @@ -176,9 +180,8 @@ static int my_idle (void) set_cpu_state (); set_gfx_state (); set_joy_state (); -#ifdef SOUND_RECONFIG_SUPPORT set_sound_state (); -#endif + gui_active = 1; break; } @@ -232,7 +235,11 @@ static void custom_changed (void) static void cpuspeed_changed (void) { - changed_prefs.m68k_speed = cpuspeed_adj->value; + int which = find_current_toggle (cpuspeed_widgets, 3); + changed_prefs.m68k_speed = (which == 0 ? -1 + : which == 1 ? 0 + : cpuspeed_adj->value); + set_cpu_state (); } static void cputype_changed (void) @@ -243,7 +250,7 @@ static void cputype_changed (void) oldcl = changed_prefs.cpu_level; - changed_prefs.cpu_level = find_current_toggle(cpu_widget, 4); + changed_prefs.cpu_level = find_current_toggle (cpu_widget, 4); changed_prefs.cpu_compatible = GTK_TOGGLE_BUTTON (ccpu_widget)->active; changed_prefs.address_space_24 = GTK_TOGGLE_BUTTON (a24m_widget)->active; @@ -377,6 +384,13 @@ static void add_empty_vbox (GtkWidget *t gtk_box_pack_start (GTK_BOX (tobox), thing, TRUE, TRUE, 0); } +static void add_empty_hbox (GtkWidget *tobox) +{ + GtkWidget *thing = gtk_hbox_new (FALSE, 0); + gtk_widget_show (thing); + gtk_box_pack_start (GTK_BOX (tobox), thing, TRUE, TRUE, 0); +} + static void add_centered_to_vbox (GtkWidget *vbox, GtkWidget *w) { GtkWidget *hbox = gtk_hbox_new (TRUE, 0); @@ -399,11 +413,12 @@ static GtkWidget *make_labelled_widget ( return hbox2; } -static void add_labelled_widget_centered (const char *str, GtkWidget *thing, GtkWidget *vbox) +static GtkWidget *add_labelled_widget_centered (const char *str, GtkWidget *thing, GtkWidget *vbox) { GtkWidget *w = make_labelled_widget (str, thing); gtk_widget_show (w); add_centered_to_vbox (vbox, w); + return w; } static void make_radio_group (const char **labels, GtkWidget *tobox, @@ -535,10 +550,38 @@ static void make_floppy_disks (GtkWidget add_empty_vbox (vbox); } +static GtkWidget *make_cpu_speed_sel (void) +{ + static const char *labels[] = { + "Optimize for host CPU speed","Approximate 68000/7MHz speed", "Adjustable", + NULL + }; + GtkWidget *frame, *newbox; + + frame = gtk_frame_new ("CPU speed"); + newbox = gtk_vbox_new (FALSE, 4); + gtk_widget_show (newbox); + gtk_container_border_width (GTK_CONTAINER (newbox), 4); + gtk_container_add (GTK_CONTAINER (frame), newbox); + make_radio_group (labels, newbox, cpuspeed_widgets, 0, 1, cpuspeed_changed); + + cpuspeed_adj = GTK_ADJUSTMENT (gtk_adjustment_new (currprefs.m68k_speed, 1.0, 10.0, 1.0, 1.0, 1.0)); + gtk_signal_connect (GTK_OBJECT (cpuspeed_adj), "value_changed", + GTK_SIGNAL_FUNC (cpuspeed_changed), NULL); + + cpuspeed_scale = gtk_hscale_new (cpuspeed_adj); + gtk_range_set_update_policy (GTK_RANGE (cpuspeed_scale), GTK_UPDATE_DELAYED); + gtk_scale_set_digits (GTK_SCALE (cpuspeed_scale), 0); + gtk_scale_set_value_pos (GTK_SCALE (cpuspeed_scale), GTK_POS_RIGHT); + cpuspeed_scale = add_labelled_widget_centered ("Cycles per instruction:", cpuspeed_scale, newbox); + + return frame; +} + static void make_cpu_widgets (GtkWidget *vbox) { int i; - GtkWidget *newbox, *frame; + GtkWidget *newbox, *hbox, *frame; GtkWidget *thing; static const char *radiolabels[] = { "68000", "68010", "68020", "68020+68881", @@ -547,9 +590,20 @@ static void make_cpu_widgets (GtkWidget add_empty_vbox (vbox); - newbox = make_radio_group_box ("CPU type", radiolabels, cpu_widget, 1, cputype_changed); + hbox = gtk_hbox_new (FALSE, 0); + add_empty_vbox (hbox); + + newbox = make_radio_group_box ("CPU type", radiolabels, cpu_widget, 0, cputype_changed); gtk_widget_show (newbox); - add_centered_to_vbox (vbox, newbox); + gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, FALSE, 0); + + newbox = make_cpu_speed_sel (); + gtk_widget_show (newbox); + gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, FALSE, 0); + + add_empty_vbox (hbox); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); frame = gtk_frame_new ("CPU flags"); add_centered_to_vbox (vbox, frame); @@ -559,23 +613,13 @@ static void make_cpu_widgets (GtkWidget gtk_container_border_width (GTK_CONTAINER (newbox), 4); gtk_container_add (GTK_CONTAINER (frame), newbox); - cpuspeed_adj = GTK_ADJUSTMENT (gtk_adjustment_new (currprefs.m68k_speed, 1.0, 10.0, 1.0, 1.0, 1.0)); - gtk_signal_connect (GTK_OBJECT (cpuspeed_adj), "value_changed", - GTK_SIGNAL_FUNC (cpuspeed_changed), NULL); - - thing = gtk_hscale_new (cpuspeed_adj); - gtk_range_set_update_policy (GTK_RANGE (thing), GTK_UPDATE_DELAYED); - gtk_scale_set_digits (GTK_SCALE (thing), 0); - gtk_scale_set_value_pos (GTK_SCALE (thing), GTK_POS_RIGHT); - add_labelled_widget_centered ("Cycles per instruction:", thing, newbox); - a24m_widget = gtk_check_button_new_with_label ("24 bit address space"); add_centered_to_vbox (newbox, a24m_widget); gtk_widget_show (a24m_widget); ccpu_widget = gtk_check_button_new_with_label ("Slow but compatible"); add_centered_to_vbox (newbox, ccpu_widget); gtk_widget_show (ccpu_widget); - + add_empty_vbox (vbox); gtk_signal_connect (GTK_OBJECT (ccpu_widget), "clicked", @@ -634,7 +678,6 @@ static void make_sound_widgets (GtkWidge add_empty_vbox (vbox); -#ifdef SOUND_RECONFIG_SUPPORT newbox = make_radio_group_box ("Mode", soundlabels1, sound_widget, 1, sound_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); @@ -648,11 +691,7 @@ static void make_sound_widgets (GtkWidge newbox = make_radio_group_box ("Resolution", soundlabels2, sound_bits_widget, 1, sound_changed); gtk_widget_show (newbox); gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, TRUE, 0); -#else - hbox = gtk_label_new ("Your sound system doesn't support\nrun-time reconfiguration."); - gtk_widget_show (hbox); - add_centered_to_vbox (vbox, hbox); -#endif + add_empty_vbox (vbox); }