diff options
-rw-r--r-- | lib/gtk-vlc-player/gtk-vlc-player.c | 33 | ||||
-rw-r--r-- | lib/gtk-vlc-player/gtk-vlc-player.h | 7 | ||||
-rw-r--r-- | src/main.c | 29 |
3 files changed, 57 insertions, 12 deletions
diff --git a/lib/gtk-vlc-player/gtk-vlc-player.c b/lib/gtk-vlc-player/gtk-vlc-player.c index 8686eef..136310c 100644 --- a/lib/gtk-vlc-player/gtk-vlc-player.c +++ b/lib/gtk-vlc-player/gtk-vlc-player.c @@ -22,6 +22,7 @@ static void widget_on_realize(GtkWidget *widget, gpointer data); static gboolean widget_on_click(GtkWidget *widget, GdkEventButton *event, gpointer data); static void time_adj_on_value_changed(GtkAdjustment *adj, gpointer user_data); +static void vol_adj_on_value_changed(GtkAdjustment *adj, gpointer user_data); static inline void update_time(GtkVlcPlayer *player, gint64 new_time); static inline void update_length(GtkVlcPlayer *player, gint64 new_length); @@ -115,6 +116,11 @@ gtk_vlc_player_init(GtkVlcPlayer *klass) g_signal_connect(G_OBJECT(klass->time_adjustment), "value-changed", G_CALLBACK(time_adj_on_value_changed), klass); + klass->volume_adjustment = gtk_adjustment_new(1., 0., 1., 0.02, 0., 0.); + klass->vol_adj_on_value_changed_id = + g_signal_connect(G_OBJECT(klass->volume_adjustment), "value-changed", + G_CALLBACK(vol_adj_on_value_changed), klass); + klass->vlc_inst = libvlc_new(0, NULL); klass->media_player = libvlc_media_player_new(klass->vlc_inst); @@ -179,6 +185,13 @@ time_adj_on_value_changed(GtkAdjustment *adj, gpointer user_data) (gint64)gtk_adjustment_get_value(adj)); } +static void +vol_adj_on_value_changed(GtkAdjustment *adj, gpointer user_data) +{ + gtk_vlc_player_set_volume(GTK_VLC_PLAYER(user_data), + gtk_adjustment_get_value(adj)); +} + static inline void update_time(GtkVlcPlayer *player, gint64 new_time) { @@ -298,6 +311,12 @@ gtk_vlc_player_seek(GtkVlcPlayer *player, gint64 time) libvlc_media_player_set_time(player->media_player, (libvlc_time_t)time); } +void +gtk_vlc_player_set_volume(GtkVlcPlayer *player, gdouble volume) +{ + libvlc_audio_set_volume(player->media_player, (int)(volume*100.)); +} + GtkAdjustment * gtk_vlc_player_get_time_adjustment(GtkVlcPlayer *player) { @@ -311,3 +330,17 @@ gtk_vlc_player_set_time_adjustment(GtkVlcPlayer *player, GtkAdjustment *adj) player->time_adjustment = GTK_OBJECT(adj); gtk_object_ref(player->time_adjustment); } + +GtkAdjustment * +gtk_vlc_player_get_volume_adjustment(GtkVlcPlayer *player) +{ + return GTK_ADJUSTMENT(player->volume_adjustment); +} + +void +gtk_vlc_player_set_volume_adjustment(GtkVlcPlayer *player, GtkAdjustment *adj) +{ + gtk_object_unref(player->volume_adjustment); + player->volume_adjustment = GTK_OBJECT(adj); + gtk_object_ref(player->volume_adjustment); +} diff --git a/lib/gtk-vlc-player/gtk-vlc-player.h b/lib/gtk-vlc-player/gtk-vlc-player.h index 54d36a1..665f980 100644 --- a/lib/gtk-vlc-player/gtk-vlc-player.h +++ b/lib/gtk-vlc-player/gtk-vlc-player.h @@ -27,6 +27,9 @@ typedef struct _GtkVlcPlayer { GtkObject *time_adjustment; gulong time_adj_on_value_changed_id; + GtkObject *volume_adjustment; + gulong vol_adj_on_value_changed_id; + libvlc_instance_t *vlc_inst; libvlc_media_player_t *media_player; @@ -55,10 +58,14 @@ gboolean gtk_vlc_player_toggle(GtkVlcPlayer *player); void gtk_vlc_player_stop(GtkVlcPlayer *player); void gtk_vlc_player_seek(GtkVlcPlayer *player, gint64 time); +void gtk_vlc_player_set_volume(GtkVlcPlayer *player, gdouble volume); GtkAdjustment *gtk_vlc_player_get_time_adjustment(GtkVlcPlayer *player); void gtk_vlc_player_set_time_adjustment(GtkVlcPlayer *player, GtkAdjustment *adj); +GtkAdjustment *gtk_vlc_player_get_volume_adjustment(GtkVlcPlayer *player); +void gtk_vlc_player_set_volume_adjustment(GtkVlcPlayer *player, GtkAdjustment *adj); + G_END_DECLS #endif @@ -9,9 +9,10 @@ #include <gtk/gtk.h> #include <gtk-vlc-player.h> -static GtkWidget *window, - *player, - *scale; +static GtkWidget *player_window, + *player_widget, + *scale_widget, + *volume_button; /* * GtkBuilder signal callbacks @@ -53,10 +54,10 @@ file_menu_openmovie_item_activate_cb(GtkWidget *widget, if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { gchar *uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog)); - if (gtk_vlc_player_load(GTK_VLC_PLAYER(player), uri)) { + if (gtk_vlc_player_load(GTK_VLC_PLAYER(player_widget), uri)) { /* TODO */ } else { - gtk_widget_set_sensitive(scale, TRUE); + gtk_widget_set_sensitive(scale_widget, TRUE); } g_free(uri); @@ -81,6 +82,7 @@ int main(int argc, char *argv[]) { GtkBuilder *builder; + GtkAdjustment *adj; /* init threads */ #ifdef HAVE_X11_XLIB_H @@ -96,17 +98,20 @@ main(int argc, char *argv[]) gtk_builder_add_from_file(builder, DEFAULT_UI, NULL); gtk_builder_connect_signals(builder, NULL); - window = GTK_WIDGET(gtk_builder_get_object(builder, "player_window")); - player = GTK_WIDGET(gtk_builder_get_object(builder, "player_widget")); - scale = GTK_WIDGET(gtk_builder_get_object(builder, "scale_widget")); + player_window = GTK_WIDGET(gtk_builder_get_object(builder, "player_window")); + player_widget = GTK_WIDGET(gtk_builder_get_object(builder, "player_widget")); + scale_widget = GTK_WIDGET(gtk_builder_get_object(builder, "scale_widget")); + volume_button = GTK_WIDGET(gtk_builder_get_object(builder, "volume_button")); g_object_unref(G_OBJECT(builder)); - /* connect scale with player widget */ - gtk_range_set_adjustment(GTK_RANGE(scale), - gtk_vlc_player_get_time_adjustment(GTK_VLC_PLAYER(player))); + /* connect timeline and volume button with player widget */ + adj = gtk_vlc_player_get_time_adjustment(GTK_VLC_PLAYER(player_widget)); + gtk_range_set_adjustment(GTK_RANGE(scale_widget), adj); + adj = gtk_vlc_player_get_volume_adjustment(GTK_VLC_PLAYER(player_widget)); + gtk_scale_button_set_adjustment(GTK_SCALE_BUTTON(volume_button), adj); - gtk_widget_show_all(window); + gtk_widget_show_all(player_window); gdk_threads_enter(); gtk_main(); |