aboutsummaryrefslogtreecommitdiff
path: root/spectrogram.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2013-06-25 07:14:45 +0000
committerDimitri Sokolyuk <demon@dim13.org>2013-06-25 07:14:45 +0000
commitbadf7e717bd2900d9bc7282c5c009fbcc15cc63b (patch)
tree7d2f3fdc647e3f47f7e747f350823057fe884528 /spectrogram.c
parent72e873ca6895594c44f9cfadd705c8f8e32c61e8 (diff)
free panel
Diffstat (limited to 'spectrogram.c')
-rw-r--r--spectrogram.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/spectrogram.c b/spectrogram.c
index fc349f0..dc2dc1d 100644
--- a/spectrogram.c
+++ b/spectrogram.c
@@ -34,6 +34,8 @@
#include "fft.h"
#include "hsv2rgb.h"
+#define GAP 4
+
extern char *__progname;
struct panel {
@@ -239,6 +241,20 @@ init_panel(Window win, int w, int h, int mirror)
return p;
}
+void
+del_panel(struct panel *p)
+{
+ XFreePixmap(dsp, p->pix);
+ XFreePixmap(dsp, p->bg);
+ XFreePixmap(dsp, p->mask);
+ XFreeGC(dsp, p->pgc);
+ XFreeGC(dsp, p->mgc);
+ free(p->data);
+ free(p->shadow);
+ free(p->palette);
+ free(p);
+}
+
int
main(int argc, char **argv)
{
@@ -248,7 +264,6 @@ main(int argc, char **argv)
int scr;
struct panel *left, *right;
-
struct sio *sio;
struct fft *fft;
int16_t *buffer;
@@ -283,7 +298,7 @@ main(int argc, char **argv)
daemon(0, 0);
delta = get_round(sio);
- width = delta + 4;
+ width = delta + GAP;
height = 0.75 * width;
scr = DefaultScreen(dsp);
@@ -298,13 +313,13 @@ main(int argc, char **argv)
delwin = XInternAtom(dsp, "WM_DELETE_WINDOW", 0);
XSetWMProtocols(dsp, win, &delwin, 1);
- XMapWindow(dsp, win);
left = init_panel(win, delta / 2, height, 1);
right = init_panel(win, delta / 2, height, 0);
-
fft = init_fft(delta);
+ XMapWindow(dsp, win);
+
while (!die) {
buffer = read_sio(sio);
@@ -315,9 +330,11 @@ main(int argc, char **argv)
/* flip */
XCopyArea(dsp, left->pix, win, left->pgc, 0, 0,
- left->p.width, left->p.height, 0, 0);
+ left->p.width, left->p.height,
+ 0, 0);
XCopyArea(dsp, right->pix, win, right->pgc, 0, 0,
- right->p.width, right->p.height, right->p.width + 4, 0);
+ right->p.width, right->p.height,
+ right->p.width + GAP, 0);
while (XPending(dsp)) {
XEvent ev;
@@ -345,6 +362,8 @@ main(int argc, char **argv)
del_sio(sio);
del_fft(fft);
+ del_panel(left);
+ del_panel(right);
XCloseDisplay(dsp);