diff options
-rw-r--r-- | deadbeef.h | 1 | ||||
-rw-r--r-- | plugins.c | 1 | ||||
-rw-r--r-- | plugins/gtkui/eq.c | 50 | ||||
-rw-r--r-- | plugins/gtkui/eq.h | 3 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.c | 1 | ||||
-rw-r--r-- | plugins/supereq/supereq.c | 11 |
6 files changed, 48 insertions, 19 deletions
@@ -417,6 +417,7 @@ typedef struct { int (*conf_get_int) (const char *key, int def); void (*conf_set_str) (const char *key, const char *val); void (*conf_set_int) (const char *key, int val); + void (*conf_set_float) (const char *key, float val); DB_conf_item_t * (*conf_find) (const char *group, DB_conf_item_t *prev); void (*conf_remove_items) (const char *key); // plugin communication @@ -203,6 +203,7 @@ static DB_functions_t deadbeef_api = { .conf_get_int = conf_get_int, .conf_set_str = conf_set_str, .conf_set_int = conf_set_int, + .conf_set_float = conf_set_float, .conf_find = conf_find, .conf_remove_items = conf_remove_items, // plugin communication diff --git a/plugins/gtkui/eq.c b/plugins/gtkui/eq.c index 48b66f5c..a02b2bc0 100644 --- a/plugins/gtkui/eq.c +++ b/plugins/gtkui/eq.c @@ -24,6 +24,7 @@ #include "../supereq/supereq.h" static GtkWidget *eqwin; +static GtkWidget *sliders[18]; float db_to_amp (float dB) { @@ -60,6 +61,28 @@ eq_init_widgets (GtkWidget *container) { gtk_widget_show (hbox); gtk_container_add (GTK_CONTAINER (container), hbox); + for (i = 0; i < 18; i++) { + GtkWidget *scale = sliders[i] = gtk_vscale_new_with_range (-20, 20, 1); + gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_BOTTOM); + gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE); + gtk_range_set_inverted (GTK_RANGE (scale), TRUE); + gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + g_signal_connect (scale, "value_changed", G_CALLBACK (eq_value_changed), (gpointer)(intptr_t)i); + gtk_widget_show (scale); + gtk_box_pack_start (GTK_BOX (hbox), scale, FALSE, FALSE, 0); + } +} + +void +eq_window_show (void) { + if (!eqwin) { + eqwin = gtk_hbox_new (FALSE, 0); + gtk_widget_set_size_request (eqwin, -1, 200); + eq_init_widgets (eqwin); + GtkWidget *cont = lookup_widget (mainwin, "vbox1"); + gtk_box_pack_start (GTK_BOX (cont), eqwin, FALSE, FALSE, 0); + } + int i; DB_supereq_dsp_t *eq = NULL; DB_dsp_t **plugs = deadbeef->plug_get_dsp_list (); // find eq plugin @@ -71,11 +94,7 @@ eq_init_widgets (GtkWidget *container) { } for (i = 0; i < 18; i++) { - GtkWidget *scale = gtk_vscale_new_with_range (-20, 20, 1); - gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_BOTTOM); - gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE); - gtk_range_set_inverted (GTK_RANGE (scale), TRUE); - gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED); + GtkWidget *scale = sliders[i]; if (eq) { float val = eq->get_band (i); val = amp_to_db (val); @@ -87,20 +106,6 @@ eq_init_widgets (GtkWidget *container) { } gtk_range_set_value (GTK_RANGE (scale), val); } - g_signal_connect (scale, "value_changed", G_CALLBACK (eq_value_changed), (gpointer)(intptr_t)i); - gtk_widget_show (scale); - gtk_box_pack_start (GTK_BOX (hbox), scale, FALSE, FALSE, 0); - } -} - -void -eq_window_show (void) { - if (!eqwin) { - eqwin = gtk_hbox_new (FALSE, 0); - gtk_widget_set_size_request (eqwin, -1, 200); - eq_init_widgets (eqwin); - GtkWidget *cont = lookup_widget (mainwin, "vbox1"); - gtk_box_pack_start (GTK_BOX (cont), eqwin, FALSE, FALSE, 0); } gtk_widget_show (eqwin); } @@ -111,3 +116,10 @@ eq_window_hide (void) { gtk_widget_hide (eqwin); } } + +void +eq_window_destroy (void) { + gtk_widget_destroy (eqwin); + eqwin = NULL; + memset (sliders, 0, sizeof (sliders)); +} diff --git a/plugins/gtkui/eq.h b/plugins/gtkui/eq.h index 1a3f02e5..6f063cb3 100644 --- a/plugins/gtkui/eq.h +++ b/plugins/gtkui/eq.h @@ -26,4 +26,7 @@ eq_window_show (void); void eq_window_hide (void); +void +eq_window_destroy (void); + #endif diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index 7c34c967..adeccc7f 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -797,6 +797,7 @@ gtkui_thread (void *ctx) { gtk_main (); cover_art_free (); + eq_window_destroy (); gtk_widget_destroy (mainwin); gtk_widget_destroy (searchwin); #if HAVE_NOTIFY diff --git a/plugins/supereq/supereq.c b/plugins/supereq/supereq.c index f9f98940..ed9bc43b 100644 --- a/plugins/supereq/supereq.c +++ b/plugins/supereq/supereq.c @@ -16,6 +16,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include <stdio.h> #include "../../deadbeef.h" #include "supereq.h" @@ -41,6 +42,13 @@ static uintptr_t mutex = 0; int supereq_plugin_start (void) { + // load bands from config + for (int i = 0; i < 18; i++) { + char key[100]; + snprintf (key, sizeof (key), "eq.band%d", i); + lbands[i] = rbands[i] = deadbeef->conf_get_float (key, 1); + } + equ_init (14); paramsroot = paramlist_alloc (); last_srate = 44100; @@ -113,6 +121,9 @@ supereq_set_band (int band, float value) { lbands[band] = rbands[band] = value; deadbeef->mutex_unlock (mutex); params_changed = 1; + char key[100]; + snprintf (key, sizeof (key), "eq.band%d", band); + deadbeef->conf_set_float (key, value); } static DB_supereq_dsp_t plugin = { |