From ef36b6db09265b1b3110d7596de3ad8385fcfbe5 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 7 May 2012 04:00:01 +0200 Subject: support for setting volume in vlc player widget API function and volume adjustment * attached volume button with player widget --- lib/gtk-vlc-player/gtk-vlc-player.c | 33 +++++++++++++++++++++++++++++++++ lib/gtk-vlc-player/gtk-vlc-player.h | 7 +++++++ 2 files changed, 40 insertions(+) (limited to 'lib/gtk-vlc-player') 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 -- cgit v1.2.3