summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-12-01 20:04:02 +0100
committerGravatar waker <wakeroid@gmail.com>2012-12-01 20:04:02 +0100
commit7d6b9c79cd81241278331becd314984a234aa4df (patch)
tree588b76a88d1d525e2588ebca3a230ed6991626e5 /plugins
parentf635cbb6d02281070d45e3375c37cb67fe1fe99a (diff)
gtkui: restored cairo vis rendering and fixed few bugs
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/widgets.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c
index 008c701f..9b336720 100644
--- a/plugins/gtkui/widgets.c
+++ b/plugins/gtkui/widgets.c
@@ -30,7 +30,7 @@
#include "parser.h"
#include "trkproperties.h"
#include "coverart.h"
-#define USE_OPENGL 1
+//#define USE_OPENGL 1
#if USE_OPENGL
#include "gtkuigl.h"
#endif
@@ -2110,12 +2110,12 @@ w_spectrum_draw_cb (void *data) {
// spectrum analyzer based on cairo-spectrum from audacious
// Copyright (c) 2011 William Pitcock <nenolod@dereferenced.org>
-#define MAX_BANDS 256
+#define MAX_BANDS DDB_AUDIO_MEMORY_FRAMES
#define VIS_DELAY 1
#define VIS_DELAY_PEAK 10
-#define VIS_FALLOFF 3
+#define VIS_FALLOFF 1
#define VIS_FALLOFF_PEAK 1
-#define BAND_WIDTH 5
+#define BAND_WIDTH 20
static float xscale[MAX_BANDS + 1];
static int bars[MAX_BANDS + 1];
static int delay[MAX_BANDS + 1];
@@ -2127,7 +2127,7 @@ static void calculate_bands(int bands)
int i;
for (i = 0; i < bands; i++)
- xscale[i] = powf(257., ((float) i / (float) bands)) - 1;
+ xscale[i] = powf((float)(MAX_BANDS+1), ((float) i / (float) bands)) - 1;
}
@@ -2162,12 +2162,12 @@ spectrum_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_d
n += freq[a - 1] * (a - xscale[i]);
for (; a < b; a ++)
n += freq[a];
- if (b < 256)
+ if (b < MAX_BANDS)
n += freq[b] * (xscale[i + 1] - b);
}
/* 40 dB range */
- int x = 20 * log10 (n * 100);
+ int x = 20 * log10 (n * 200);
x = CLAMP (x, 0, 40);
bars[i] -= MAX (0, VIS_FALLOFF - delay[i]);
@@ -2187,6 +2187,9 @@ spectrum_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_d
peaks[i] = x;
delay_peak[i] = VIS_DELAY_PEAK;
}
+ if (peaks[i] < bars[i]) {
+ peaks[i] = bars[i];
+ }
}
#if USE_OPENGL
@@ -2230,21 +2233,24 @@ spectrum_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_d
float base_s = (height / 40.f);
cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_rectangle (cr, 0, 0, a.width, a.height);
- cairo_fill (cr);
+ cairo_paint (cr);
for (gint i = 0; i <= bands; i++)
{
- gint x = ((width / bands) * i) + 2;
+ int x = ((width / bands) * i) + 2;
int y = a.height - bars[i] * base_s;
cairo_set_source_rgb (cr, 0, 0.5, 1);
cairo_rectangle (cr, x+1, y, (width / bands) - 1, a.height);
- cairo_fill (cr);
- cairo_set_source_rgb (cr, 1, 1, 1);
- y = a.height - peaks[i] * base_s;
- cairo_rectangle (cr, x + 1, y, (width / bands) - 1, 1);
- cairo_fill (cr);
}
+ cairo_fill (cr);
+ for (gint i = 0; i <= bands; i++)
+ {
+ int x = ((width / bands) * i) + 2;
+ int y = a.height - peaks[i] * base_s;
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_rectangle (cr, x + 1, y, (width / bands) - 1, 2);
+ }
+ cairo_fill (cr);
cairo_destroy (cr);
#endif