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

📄 wav_frontend.c

📁 -一个LINUX下的使用方&#63845 的CD-ROM刻录软件,开放源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	/* ok..stop play current track and play next */	gtk_button_clicked(GTK_BUTTON(wav_quit_button));	/* now wait until we are really finished */	while (wav_in != -1) {		wait_and_process_events();	}	gtk_button_clicked(GTK_BUTTON(playb));	gtk_signal_handler_unblock(GTK_OBJECT(widget),nexthdl);}/* called on double-click in the clist */void wavplay_dodouble() {	gtk_button_clicked(GTK_BUTTON(wav_quit_button));	/* now wait until we are really finished */	while (wav_in != -1) {		wait_and_process_events();	}	gtk_button_clicked(GTK_BUTTON(playb));}/* volume changed */void vol_changed(GtkAdjustment *adj, GtkWidget *label) {	set_mixer((gint)adj->value);}/* paint the tick-display */gint draw_ticks (gpointer data) {GtkWidget *dr;GdkRectangle update_rect;GdkPoint marker[4];gint mx,my,dx;gint i;	/* this is a workaround to force gtk to display my drawing area */	/* it is called once and then removed */	if (ptimer != -1) {		gtk_timeout_remove(ptimer); 		/* detoggle play/stop button */		gtk_signal_handler_block(GTK_OBJECT(playb),playhdl);		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playb),0);		gtk_signal_handler_unblock(GTK_OBJECT(playb),playhdl);		gtk_signal_handler_block(GTK_OBJECT(stopb),stophdl);		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stopb),0);		gtk_signal_handler_unblock(GTK_OBJECT(stopb),stophdl);		ptimer = -1;	}	dr = (GtkWidget *)data;	mx = dr->allocation.width;	my = dr->allocation.height;	maxpixels = mx-10;	/* clear background */	gdk_draw_rectangle (pixmap, dr->style->white_gc,TRUE,0,0,mx,my);	/* do your job here */	gdk_draw_line(pixmap, dr->style->black_gc, 		5,my/2, mx-5,my/2);	gdk_draw_line(pixmap, dr->style->black_gc,		5,my/2-12,5,my/2+12);	gdk_draw_line(pixmap, dr->style->black_gc,		mx-5,my/2-12,mx-5,my/2+12);	/* draw the 5/10/60 sec ticks */	for (i = 0; i < maxseconds; i+=5) {		dx = (i*maxpixels/maxseconds)+5;		if (i%60 == 0) {			/* draw 60 sec tick */			gdk_draw_line(pixmap, dr->style->black_gc,				dx,my/2-8,dx,my/2+8);			} else if (i%10 == 0) {			/* draw 10 sec tick */			gdk_draw_line(pixmap, dr->style->black_gc,				dx,my/2-8,dx,my/2);			} else {			/* draw 5 sec tick */			gdk_draw_line(pixmap, dr->style->black_gc,				dx,my/2-4,dx,my/2);			}	}	/* draw the current play-position */	dx = (curseconds*maxpixels/maxseconds)+5;	marker[0].x = dx;	marker[0].y = my/2+1;	marker[1].x = dx-6;	marker[1].y = my/2+8;	marker[2].x = dx+6;	marker[2].y = my/2+8;	marker[3].x = dx;	marker[3].y = my/2+1;	gdk_draw_polygon(pixmap, dr->style->black_gc,		TRUE,marker,4);		/* copy pixmap to screen */	update_rect.x = 0;	update_rect.y = 0;	update_rect.width = mx;	update_rect.height = my;	/* this calls expose */	gtk_widget_draw (dr, &update_rect);	return(TRUE);}/* called when new data from stdout of child is available */void read_wav_out(gpointer data, gint source, GdkInputCondition cond) {gint n;gchar line[MAXLINE];gchar cmd[MAXLINE];gchar tmp[MAXLINE];gint tsec;gint ret;	n = read(wav_out, line, MAXLINE);	if (n < 0) {		g_warning("read error from pipe\n");		return;	}	if (n == 0) {		/* ok, there is no longer a child */		/* get return status of child */		wait(&ret);		close(wav_out);		close(wav_in);		stop_play();		return;	}	line[n] = '\0';	dodebug(10,"wavplay: %s", line);	/* warning found - device busy? */	if (strncmp(line,"\n**",3) == 0) {		error_flag = 1;		update_text(text(144));		return;	}	strncpy(cmd,line,4);	cmd[4] = '\0';	tsec = atoi(line+4);		if (strncmp(cmd,"secs",4) == 0) {		/* start marker found */		if (tsec == 0) {			/* empty wav-file */			tsec = 60; /* dummy value */			gtk_button_clicked(GTK_BUTTON(wav_quit_button));		}		maxseconds = tsec;		curseconds = 0;	} else {		curseconds = tsec;		g_snprintf(tmp,MAXLINE,"%d:%02d",tsec/60,tsec%60);		gtk_label_set_text(GTK_LABEL(timer_label),tmp);					/* toggle stop and play button */		if (strncmp(cmd,"play",4) == 0) {			gtk_signal_handler_block(GTK_OBJECT(playb),playhdl);			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playb),1);			gtk_signal_handler_unblock(GTK_OBJECT(playb),playhdl);			gtk_signal_handler_block(GTK_OBJECT(stopb),stophdl);			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stopb),0);			gtk_signal_handler_unblock(GTK_OBJECT(stopb),stophdl);		} else {			gtk_signal_handler_block(GTK_OBJECT(playb),playhdl);			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playb),0);			gtk_signal_handler_unblock(GTK_OBJECT(playb),playhdl);			gtk_signal_handler_block(GTK_OBJECT(stopb),stophdl);			gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(stopb),1);			gtk_signal_handler_unblock(GTK_OBJECT(stopb),stophdl);			if (strncmp(cmd,"done",4) == 0) {				/* end of track reached */				/* simulate click on next button */				gtk_button_clicked(GTK_BUTTON(nextb));			} 		}	}		draw_ticks(drawa);}/* create layout for wav-player */void wavmenu(GtkWidget *w, gint def_mix_val) {GtkWidget *vb;GtkWidget *text;GtkWidget *tbl1, *tbl2;GtkWidget *dr, *f1, *f2;GtkWidget *b1, *b2, *b3, *b4, *b5, *b6;GtkWidget *b1_xpm, *b2_xpm, *b3_xpm, *b4_xpm, *b5_xpm, *b6_xpm, *mix_xpm;GdkPixmap *pmap;GdkBitmap *mask;GtkStyle *style;GtkObject *adj;GtkWidget *slider;	vb = gtk_vbox_new(FALSE,5);	gtk_container_set_border_width (GTK_CONTAINER(vb),10);	gtk_container_add(GTK_CONTAINER(w),vb);	gtk_widget_show(vb);	text = gtk_text_new(NULL,NULL);	wavplay_text = text;	gtk_text_set_editable(GTK_TEXT(text),FALSE);	gtk_text_set_word_wrap(GTK_TEXT(text),TRUE);	gtk_widget_set_usize(text,0,tbf(40));	gtk_box_pack_start(GTK_BOX(vb),text,FALSE,FALSE,0);	gtk_widget_show(text);	tbl1 = gtk_table_new (1,20,TRUE);	gtk_table_set_col_spacings(GTK_TABLE(tbl1),5);	gtk_box_pack_start(GTK_BOX(vb),tbl1,TRUE,TRUE,0);	gtk_widget_show(tbl1);	f1 = gtk_frame_new(NULL);	gtk_frame_set_shadow_type(GTK_FRAME(f1),GTK_SHADOW_IN);	gtk_table_attach_defaults(GTK_TABLE(tbl1),f1,0,17,0,1);	gtk_widget_show(f1);	dr = gtk_drawing_area_new();	drawa = dr;	gtk_widget_set_events (dr, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);	gtk_drawing_area_size(GTK_DRAWING_AREA(dr),0,32); 	gtk_container_add(GTK_CONTAINER(f1),dr);	gtk_widget_show(dr);	gtk_signal_connect(GTK_OBJECT(dr), "expose_event",		GTK_SIGNAL_FUNC(expose_event), NULL);	gtk_signal_connect(GTK_OBJECT(dr), "configure_event",		GTK_SIGNAL_FUNC(configure_event), NULL);	gtk_signal_connect (GTK_OBJECT (dr), "button_press_event",                      (GtkSignalFunc) button_press_event, NULL);	f2 = gtk_frame_new(NULL);	gtk_frame_set_shadow_type(GTK_FRAME(f2),GTK_SHADOW_IN);	gtk_table_attach_defaults(GTK_TABLE(tbl1),f2,17,20,0,1);	gtk_widget_show(f2);	timer_label = gtk_label_new("0:00");	gtk_container_add(GTK_CONTAINER(f2), timer_label);	gtk_widget_show(timer_label);		tbl2 = gtk_table_new (1,20,TRUE);	gtk_table_set_col_spacings(GTK_TABLE(tbl2),5);	gtk_box_pack_start(GTK_BOX(vb),tbl2,FALSE,FALSE,0);	gtk_widget_show(tbl2);	gtk_widget_realize(tbl2);	style = gtk_widget_get_style(w);	b1 = gtk_toggle_button_new();	playb = b1;	gtk_table_attach_defaults(GTK_TABLE(tbl2),b1,0,2,0,1);	gtk_widget_show(b1);	playhdl = gtk_signal_connect (GTK_OBJECT (b1),"clicked",		GTK_SIGNAL_FUNC(doplay),NULL);	pmap = gdk_pixmap_create_from_xpm_d(w->window, &mask,		&style->bg[GTK_STATE_NORMAL], (gchar **) snd_play);	b1_xpm = gtk_pixmap_new(pmap,mask);	gtk_container_add(GTK_CONTAINER(b1),b1_xpm);	gtk_widget_show(b1_xpm);	define_tooltip(b1, help(56));	b2 = gtk_button_new();	gtk_table_attach_defaults(GTK_TABLE(tbl2),b2,2,4,0,1);	gtk_widget_show(b2);	gtk_signal_connect (GTK_OBJECT (b2),"clicked",		GTK_SIGNAL_FUNC(dopause),NULL);	pmap = gdk_pixmap_create_from_xpm_d(w->window, &mask,		&style->bg[GTK_STATE_NORMAL], (gchar **) snd_pause);	b2_xpm = gtk_pixmap_new(pmap,mask);	define_tooltip(b2, help(57));	gtk_container_add(GTK_CONTAINER(b2),b2_xpm);	gtk_widget_show(b2_xpm);	b3 = gtk_toggle_button_new();	stopb = b3;	gtk_table_attach_defaults(GTK_TABLE(tbl2),b3,4,6,0,1);	gtk_widget_show(b3);	stophdl = gtk_signal_connect (GTK_OBJECT (b3),"clicked",		GTK_SIGNAL_FUNC(dostop),NULL);	pmap = gdk_pixmap_create_from_xpm_d(w->window, &mask,		&style->bg[GTK_STATE_NORMAL], (gchar **) snd_stop);	b3_xpm = gtk_pixmap_new(pmap,mask);	define_tooltip(b3, help(58));	gtk_container_add(GTK_CONTAINER(b3),b3_xpm);	gtk_widget_show(b3_xpm);	b4 = gtk_button_new();	gtk_table_attach_defaults(GTK_TABLE(tbl2),b4,6,8,0,1);	gtk_widget_show(b4);	prevhdl = gtk_signal_connect (GTK_OBJECT (b4),"clicked",		GTK_SIGNAL_FUNC(doprev),NULL);	pmap = gdk_pixmap_create_from_xpm_d(w->window, &mask,		&style->bg[GTK_STATE_NORMAL], (gchar **) snd_prev);	b4_xpm = gtk_pixmap_new(pmap,mask);	define_tooltip(b4, help(59));	gtk_container_add(GTK_CONTAINER(b4),b4_xpm);	gtk_widget_show(b4_xpm);	b5 = gtk_button_new();	nextb = b5;	gtk_table_attach_defaults(GTK_TABLE(tbl2),b5,8,10,0,1);	gtk_widget_show(b5);	nexthdl = gtk_signal_connect (GTK_OBJECT (b5),"clicked",		GTK_SIGNAL_FUNC(donext),NULL);	pmap = gdk_pixmap_create_from_xpm_d(w->window, &mask,		&style->bg[GTK_STATE_NORMAL], (gchar **) snd_next);	b5_xpm = gtk_pixmap_new(pmap,mask);	define_tooltip(b5, help(60));	gtk_container_add(GTK_CONTAINER(b5),b5_xpm);	gtk_widget_show(b5_xpm);	b6 = gtk_button_new();	wav_quit_button = b6;	gtk_table_attach_defaults(GTK_TABLE(tbl2),b6,10,12,0,1);	gtk_widget_show(b6);	gtk_signal_connect (GTK_OBJECT (b6),"clicked",		GTK_SIGNAL_FUNC(doquit),NULL);	pmap = gdk_pixmap_create_from_xpm_d(w->window, &mask,		&style->bg[GTK_STATE_NORMAL], (gchar **) snd_quit);	b6_xpm = gtk_pixmap_new(pmap,mask);	define_tooltip(b6, help(61));	gtk_container_add(GTK_CONTAINER(b6),b6_xpm);	gtk_widget_show(b6_xpm);	/* disable slide when mixer not working */	if (def_mix_val == -1) {		return;	}	/* only reached when we got a mixer */	pmap = gdk_pixmap_create_from_xpm_d(w->window, &mask,		&style->bg[GTK_STATE_NORMAL], (gchar **) snd_mixer);	mix_xpm = gtk_pixmap_new(pmap,mask);	gtk_table_attach_defaults(GTK_TABLE(tbl2),mix_xpm,14,15,0,1);	gtk_widget_show(mix_xpm);	adj = gtk_adjustment_new(0.0,0.0,101.0,1.0,1.0,1.0);	slider = gtk_hscale_new(GTK_ADJUSTMENT(adj));	gtk_scale_set_value_pos (GTK_SCALE(slider), GTK_POS_LEFT);	gtk_scale_set_digits(GTK_SCALE(slider),0);	gtk_scale_set_draw_value(GTK_SCALE(slider),FALSE);	gtk_table_attach_defaults(GTK_TABLE(tbl2),slider,15,20,0,1);	gtk_widget_show(slider);		gtk_signal_connect(GTK_OBJECT(adj), "value_changed",		GTK_SIGNAL_FUNC(vol_changed), NULL);	define_tooltip(slider, help(62));	gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), (gfloat) def_mix_val);}/* draw the wav-control-panel */void wavplay_frontend(GtkWidget *widget) {GtkWidget *f1;gint mixval;	maxseconds = 60; /* dummy value */	maxpixels = 1;	curseconds = 0;	wav_in = -1; wav_out = -1;	error_flag = 0;	wavplay_quit = 0;	f1 = gtk_frame_new(NULL);	gtk_frame_set_shadow_type(GTK_FRAME(f1),GTK_SHADOW_IN);	gtk_container_border_width(GTK_CONTAINER(f1),5);	gtk_box_pack_start(GTK_BOX(widget),f1,FALSE,FALSE,0);	mixval = query_mixer();	wavmenu(f1,mixval);	gtk_widget_show(f1);	/* we need this so that the drawing area is updated */	ptimer=gtk_timeout_add (100, draw_ticks, drawa); }

⌨️ 快捷键说明

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