⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configure.c

📁 xmms-1.2.10.tar.gz学习使用的就下吧
💻 C
📖 第 1 页 / 共 2 页
字号:
	buffer_pre_adj = gtk_adjustment_new(audio.req_prebuffer_size,					    0, 90, 1, 1, 1);	buffer_pre_spin = gtk_spin_button_new(GTK_ADJUSTMENT(buffer_pre_adj),					      1, 0);	gtk_widget_set_usize(buffer_pre_spin, 60, -1);	gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_spin,			   FALSE, FALSE, 0);	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buffer_frame,				 gtk_label_new(_("Buffering")));}static void configure_mixer_toggle_button(GtkWidget *vbox, gchar *devname, gchar *label){	GtkWidget *toggle_cbutton;	gint devid;	mixer_ctrl_t mixer;	if (!sun_mixer_get_dev(audio.mixerfd, &devid, devname))	{		mixer.type = AUDIO_MIXER_ENUM;		mixer.dev = devid;		if (!ioctl(audio.mixerfd, AUDIO_MIXER_READ, &mixer))		{			toggle_cbutton =				gtk_check_button_new_with_label(_(label));			gtk_box_pack_start_defaults(GTK_BOX(vbox),						    toggle_cbutton);			if (mixer.un.ord)			{				gtk_toggle_button_set_active(				    GTK_TOGGLE_BUTTON(toggle_cbutton), TRUE);				mixer_toggle[mixer.dev]++;			}			else			{				mixer_toggle[mixer.dev] = 0;			}			gtk_signal_connect(GTK_OBJECT(toggle_cbutton),			    "toggled",			    GTK_SIGNAL_FUNC(mixer_cbutton_toggled_cb),			    (gpointer) mixer.dev);		}	}}static void configure_mixer_box(GtkWidget *vbox, GtkWidget *notebook){	GtkWidget *mixervol_frame, *mixervol_box;	GtkWidget *mixervol_menu;	mixervol_frame = gtk_frame_new(_("Volume controls device:"));	gtk_box_pack_start(GTK_BOX(vbox), mixervol_frame, FALSE, FALSE, 0);	mixervol_box = gtk_vbox_new(FALSE, 0);	gtk_container_set_border_width(GTK_CONTAINER(mixervol_box), 5);	gtk_container_add(GTK_CONTAINER(mixervol_frame), mixervol_box);	mixervol_menu = gtk_option_menu_new();	gtk_box_pack_start(GTK_BOX(mixervol_box), mixervol_menu, TRUE, TRUE, 0);	configure_mixer_volumedev_scan("Volume devices:", mixervol_menu);	keepopen_cbutton = gtk_check_button_new_with_label(		_("XMMS uses mixer exclusively."));	if (audio.mixer_keepopen)		gtk_toggle_button_set_active(			GTK_TOGGLE_BUTTON(keepopen_cbutton), TRUE);	gtk_box_pack_start_defaults(GTK_BOX(vbox), keepopen_cbutton);	if (sun_mixer_open() == 0)	{		configure_mixer_toggle_button(vbox, "bassboost", "Bass boost");		configure_mixer_toggle_button(vbox, "loudness", "Loudness");		configure_mixer_toggle_button(vbox, "spatial", "Spatial");		configure_mixer_toggle_button(vbox, "surround", "Surround");		configure_mixer_toggle_button(vbox, "enhanced", "Enhanced");		configure_mixer_toggle_button(vbox, "preamp", "Preamp");		configure_mixer_toggle_button(vbox, "swap", "Swap channels");		sun_mixer_close();	}}static void configure_mixer_frame(GtkWidget *vbox, GtkWidget *notebook){	GtkWidget *mixervol_vbox;	mixervol_vbox = gtk_vbox_new(FALSE, 5);	gtk_container_set_border_width(GTK_CONTAINER(mixervol_vbox), 5);	configure_mixer_box(mixervol_vbox, notebook);	gtk_notebook_append_page(GTK_NOTEBOOK(notebook),				 mixervol_vbox, gtk_label_new(_("Mixer")));}static void configure_stats_loop(void){	if (pthread_mutex_lock(&stats_frame.active_mutex) != 0)	{		perror("active_mutex");		return;	}	while (stats_frame.active && stats_frame.fd)	{		audio_info_t info;		int wseek;		int rerror;		char sl[32];		pthread_mutex_lock(&stats_frame.audioctl_mutex);		sl[0] = '\0';		if (!ioctl(stats_frame.fd, AUDIO_GETINFO, &info))		{			char s[128];			sprintf(s, "Currently %s",				(info.mode == AUMODE_PLAY) ? "playing" :				(info.mode == AUMODE_RECORD) ? "recording" :				(info.mode == AUMODE_PLAY_ALL) ? "playing" :				"not playing");			if (info.mode == AUMODE_PLAY)			{				sprintf(s, "%s at %i Hz (%i-bit %s)", s,					info.play.sample_rate, info.play.precision,					audio.output->name);				sprintf(sl,"%i samples, %i error(s). %s",					info.play.samples, info.play.error,					info.play.active ?					"I/O in progress." : "");			}			gtk_label_set_text(GTK_LABEL(stats_frame.mode_label),					   s);			sprintf(s, "H/W block: %i bytes. Buffer: %i bytes",				info.blocksize, info.play.buffer_size);			gtk_label_set_text(				GTK_LABEL(stats_frame.blocksize_label), s);		}		gtk_label_set_text(GTK_LABEL(stats_frame.ooffs_label), sl);		pthread_mutex_unlock(&stats_frame.audioctl_mutex);		xmms_usleep(400000);	}	pthread_mutex_unlock(&stats_frame.active_mutex);	pthread_exit(NULL);}static void configure_status_frame(GtkWidget *vbox, GtkWidget *notebook){	GtkWidget *status_vbox;	GtkWidget *name_label, *props_label;	pthread_t loop_thread;	memset(&stats_frame, 0, sizeof(struct sun_statsframe));	if (pthread_mutex_init(&stats_frame.audioctl_mutex, NULL) != 0)	{		perror("audioctl_mutex");		return;	}	if (pthread_mutex_init(&stats_frame.active_mutex, NULL) != 0)	{		perror("active_mutex");		return;	}	status_vbox = gtk_vbox_new(FALSE, 5);	gtk_container_set_border_width(GTK_CONTAINER(status_vbox), 5);	name_label = gtk_label_new(NULL);	gtk_container_add(GTK_CONTAINER(status_vbox), name_label);	props_label = gtk_label_new(NULL);	gtk_container_add(GTK_CONTAINER(status_vbox), props_label);	stats_frame.mode_label = gtk_label_new(NULL);	gtk_container_add(GTK_CONTAINER(status_vbox), stats_frame.mode_label);	stats_frame.blocksize_label = gtk_label_new(NULL);	gtk_container_add(GTK_CONTAINER(status_vbox),	    stats_frame.blocksize_label);	stats_frame.ooffs_label = gtk_label_new(NULL);	gtk_container_add(GTK_CONTAINER(status_vbox), stats_frame.ooffs_label);	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), status_vbox,				 gtk_label_new(_("Status")));	if ((stats_frame.fd = open(audio.devaudioctl, O_RDWR)) >= 0)	{		audio_device_t device;		int props;		if (ioctl(stats_frame.fd, AUDIO_GETDEV, &device) >= 0)		{			char *s = g_strdup_printf("%s - %s(4) %s",				device.name, device.config, device.version);			gtk_label_set_text(GTK_LABEL(name_label), s);			g_free(s);		}		if (ioctl(stats_frame.fd, AUDIO_GETPROPS, &props) >= 0)		{			char s[32];			s[0] = '\0';			if ((props & AUDIO_PROP_FULLDUPLEX) ==			    AUDIO_PROP_FULLDUPLEX)				sprintf(s, "FULLDUPLEX ");			if ((props & AUDIO_PROP_MMAP) == AUDIO_PROP_MMAP)				sprintf(s, "%s MMAP ", s);			if ((props & AUDIO_PROP_INDEPENDENT) ==			    AUDIO_PROP_INDEPENDENT)				sprintf(s, "%s INDEPENDENT ", s);			gtk_label_set_text(GTK_LABEL(props_label), s);		}	}	stats_frame.active++;	pthread_create(&loop_thread, NULL, (void *) configure_stats_loop, NULL);}void sun_configure(void){	GtkWidget *vbox, *notebook;	GtkWidget *bbox, *ok, *cancel;	if (configure_win)	{		gdk_window_raise(configure_win->window);		return;	}	configure_win = gtk_window_new(GTK_WINDOW_DIALOG);	gtk_signal_connect(GTK_OBJECT(configure_win), "destroy",			   GTK_SIGNAL_FUNC(configure_win_destroy), NULL);	gtk_window_set_title(GTK_WINDOW(configure_win),			     _("Sun driver configuration"));	gtk_window_set_policy(GTK_WINDOW(configure_win), FALSE, FALSE, FALSE);	gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_MOUSE);	gtk_container_border_width(GTK_CONTAINER(configure_win), 10);	vbox = gtk_vbox_new(FALSE, 10);	gtk_container_add(GTK_CONTAINER(configure_win), vbox);	notebook = gtk_notebook_new();	gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);	configure_devices_frame(vbox, notebook);	configure_buffering_frame(vbox, notebook);	configure_mixer_frame(vbox, notebook);	configure_status_frame(vbox, notebook);	bbox = gtk_hbutton_box_new();	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);	gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);	gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);	ok = gtk_button_new_with_label(_("Ok"));	gtk_signal_connect(GTK_OBJECT(ok), "clicked",			   GTK_SIGNAL_FUNC(configure_win_ok_cb), NULL);	GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);	gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);	gtk_widget_grab_default(ok);	cancel = gtk_button_new_with_label(_("Cancel"));	gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked",				  GTK_SIGNAL_FUNC(configure_win_cancel_cb),				  GTK_OBJECT(configure_win));	GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);	gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);	gtk_widget_show_all(configure_win);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -