aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-05-07 04:00:01 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-05-07 04:00:01 +0200
commitef36b6db09265b1b3110d7596de3ad8385fcfbe5 (patch)
treebafbc21ba87c68fbc94b2c7eedf6d2a6731f696d
parent77258a66029b5fd7cb18d75a448e3a7a87a7eb99 (diff)
downloadgtk-vlc-player-ef36b6db09265b1b3110d7596de3ad8385fcfbe5.tar.gz
support for setting volume in vlc player widget
API function and volume adjustment * attached volume button with player widget
-rw-r--r--lib/gtk-vlc-player/gtk-vlc-player.c33
-rw-r--r--lib/gtk-vlc-player/gtk-vlc-player.h7
-rw-r--r--src/main.c29
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
diff --git a/src/main.c b/src/main.c
index 3d8ea03..129098b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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();