changeset 3899:2c768d923bcf

Add an event listener for volume changes.
author William Pitcock <nenolod@atheme.org>
date Tue, 06 Nov 2007 11:52:01 -0600
parents 7f5a2fd9dcc0
children 44ab3d6057da
files src/audacious/ui_main_evlisteners.c
diffstat 1 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/audacious/ui_main_evlisteners.c	Tue Nov 06 11:41:50 2007 -0600
+++ b/src/audacious/ui_main_evlisteners.c	Tue Nov 06 11:52:01 2007 -0600
@@ -19,6 +19,8 @@
  */
 
 #include <glib.h>
+#include <math.h>
+
 #include "hook.h"
 #include "playback.h"
 #include "playlist.h"
@@ -26,6 +28,7 @@
 #include "playlist_evlisteners.h"
 
 #include "ui_main.h"
+#include "ui_equalizer.h"
 #include "ui_skinned_textbox.h"
 #include "ui_playlist.h"
 
@@ -45,9 +48,33 @@
     mainwin_disable_seekbar();
 }
 
+static void
+ui_main_evlistener_volume_change(gpointer hook_data, gpointer user_data)
+{
+    gint *h_vol = (gint *) hook_data;
+    gint vl, vr, b, v;
+
+    vl = CLAMP(h_vol[0], 0, 100);
+    vr = CLAMP(h_vol[1], 0, 100);
+    v = MAX(vl, vr);
+    if (vl > vr)
+        b = (gint) rint(((gdouble) vr / vl) * 100) - 100;
+    else if (vl < vr)
+        b = 100 - (gint) rint(((gdouble) vl / vr) * 100);
+    else
+        b = 0;
+
+    mainwin_set_volume_slider(v);
+    equalizerwin_set_volume_slider(v);
+    mainwin_set_balance_slider(b);
+    equalizerwin_set_balance_slider(b);
+}
+
 void
 ui_main_evlistener_init(void)
 {
     hook_associate("title change", ui_main_evlistener_title_change, NULL);
     hook_associate("hide seekbar", ui_main_evlistener_hide_seekbar, NULL);
+    hook_associate("volume set", ui_main_evlistener_volume_change, NULL);
 }
+