From: <lau...@fr...> - 2007-04-04 20:59:14
|
hello! This is 3 patches for solo buttons in waveedit gui. The solo mode is "additive",so if more that one track is in solo mode , they are all connected to the render filter. Index: gtkwaveview.h =================================================================== RCS file: /cvsroot/glame/glame/src/gui/libgtkwaveform/gtkwaveview.h,v retrieving revision 1.14 diff -r1.14 gtkwaveview.h 141a142 > #define GTK_WAVE_VIEW_FLAG_SOLO 2 Index: gtkwaveview.c =================================================================== RCS file: /cvsroot/glame/glame/src/gui/libgtkwaveform/gtkwaveview.c,v retrieving revision 1.54 diff -r1.54 gtkwaveview.c 38c38 < /* static xpms for rec/mute buttons */ --- > /* static xpms for rec/mute/solo buttons */ 40a41 > #include "solo.xpm" 43a45 > #include "solo_off.xpm" 1710a1713,1728 > void on_tb_solo_clicked_cb(GtkWidget *widget, gpointer data) > { > GdkPixmap *pixmap; > GdkBitmap *bitmap; > if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) > pixmap = gdk_pixmap_create_from_xpm_d( > widget->window, &bitmap, NULL, solo_xpm); > else > pixmap = gdk_pixmap_create_from_xpm_d( > widget->window, &bitmap, NULL, solo_off_xpm); > gtk_container_foreach(GTK_CONTAINER(widget),(GtkCallback)empty_button, NULL); > gtk_container_add(GTK_CONTAINER(widget), > gtk_pixmap_new(pixmap, bitmap)); > gtk_widget_show_all(widget); > } > 1858a1877,1886 > /* solo */ > tb = gtk_toggle_button_new(); > gtk_container_set_border_width(GTK_CONTAINER(tb), 0); > gtk_object_set(GTK_OBJECT(tb), "can_focus", FALSE, NULL); > gtk_box_pack_start(GTK_BOX(hbox), tb, FALSE, FALSE, 0); > gtk_signal_connect(GTK_OBJECT(tb), "realize", > (GtkSignalFunc)on_tb_realize_cb, solo_off_xpm); > gtk_signal_connect(GTK_OBJECT(tb), "clicked", > (GtkSignalFunc)on_tb_solo_clicked_cb, NULL); > Index: waveeditgui.c =================================================================== RCS file: /cvsroot/glame/glame/src/gui/waveeditgui.c,v retrieving revision 1.159 diff -r1.159 waveeditgui.c 590c590 < int rate, i, play_cnt, rec_cnt; --- > int rate, i, play_cnt, rec_cnt, solo_mode; 592c592 < gboolean *flg_rec, *flg_mute; --- > gboolean *flg_rec, *flg_mute, *flg_solo; 617a618 > solo_mode = 0; 619a621 > flg_solo = (gboolean*)alloca(sizeof(gboolean)*gtk_wave_buffer_get_num_channels(wavebuffer)); 622a625 > flg_solo[i-1] = gtk_wave_view_get_flag(waveview, i-1, GTK_WAVE_VIEW_FLAG_SOLO); 624a628,629 > if (flg_solo[i-1]) > solo_mode = 1; 693c698,701 < i++; --- > i++; > > if (solo_mode && flg_solo[i] && flg_mute[i]) > flg_mute[i] = 0; 695a704,705 > } else if (solo_mode && !flg_solo[i] && !flg_rec[i]) { > continue; |