aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2014-10-12 20:35:09 +0000
committerDimitri Sokolyuk <demon@dim13.org>2014-10-12 20:35:09 +0000
commit554e6135ec095f6d9b4925fd653c83ddc4052d42 (patch)
tree037d3b6aebf75ebf5c2c9c293d648a614590bf3e
parentb8fb4db3c197f8c8e972da735a29c74c0d32c6a8 (diff)
experimental, move allocation into parent widget
-rw-r--r--Display.c29
-rw-r--r--Display.h7
-rw-r--r--DisplayP.h1
-rw-r--r--Sgraph.c16
-rw-r--r--SgraphP.h1
-rw-r--r--spectrogram.c37
6 files changed, 40 insertions, 51 deletions
diff --git a/Display.c b/Display.c
index d4c7dd8..f0dad71 100644
--- a/Display.c
+++ b/Display.c
@@ -19,7 +19,9 @@ static Boolean SetValues(Widget, Widget, Widget, ArgList, Cardinal *);
#define Offset(field) XtOffsetOf(DisplayRec, display.field)
static XtResource resources[] = {
{ XtNnumChannel, XtCNumChannel, XtRInt, sizeof(int),
- Offset(num_channel), XtRInt, 2 },
+ Offset(num_channel), XtRImmediate, (XtPointer)2 },
+ { XtNnumSamples, XtCNumSamples, XtRInt, sizeof(int),
+ Offset(num_samples), XtRImmediate, (XtPointer)0 },
{ XtNdata, XtCData, XtRPointer, sizeof(int **),
Offset(data), XtRPointer, NULL },
};
@@ -88,8 +90,22 @@ static void
Initialize(Widget req, Widget new, ArgList args, Cardinal *num_args)
{
DisplayWidget dw = (DisplayWidget)new;
+ Arg arg[10];
+ int n, i;
+
Trace(new);
- dw->display.data = (int **)XtMalloc(dw->display.num_channel * sizeof(int *));
+
+ dw->display.data = (int **)XtCalloc(dw->display.num_channel, sizeof(int *));
+
+ for (i = 0; i < dw->display.num_channel; i++) {
+ dw->display.data[i] = (int *)XtCalloc(dw->display.num_samples,
+ sizeof(int));
+ n = 0;
+ XtSetArg(arg[n], XtNvalues, dw->display.data[i]); n++;
+ XtSetArg(arg[n], XtNsize, dw->display.num_samples); n++;
+ XtSetArg(arg[n], XtNmirror, i % 2 ? False : True); n++;
+ XtCreateManagedWidget("SGraph", sgraphWidgetClass, new, arg, n);
+ }
}
static void
@@ -99,7 +115,6 @@ ChangeManaged(Widget w)
Dimension width, height;
Widget child;
int i;
- Arg arg;
Trace(w);
@@ -109,8 +124,6 @@ ChangeManaged(Widget w)
for (i = 0; i < dw->composite.num_children; i++) {
child = dw->composite.children[i];
if (XtIsManaged(child)) {
- XtSetArg(arg, XtNvalues, &dw->display.data[i]);
- XtGetValues(child, &arg, 1);
XtMoveWidget(child,
width, 0);
width += child->core.width
@@ -121,6 +134,9 @@ ChangeManaged(Widget w)
}
w->core.width = width;
w->core.height = height;
+
+ /* XXX */
+ dw->display.num_samples = dw->composite.children[0]->core.width * 2;
}
static void
@@ -148,6 +164,9 @@ Resize(Widget w)
child->core.border_width);
}
}
+
+ /* XXX */
+ dw->display.num_samples = dw->composite.children[0]->core.width * 2;
}
static void
diff --git a/Display.h b/Display.h
index 83860dd..dea4849 100644
--- a/Display.h
+++ b/Display.h
@@ -9,11 +9,8 @@
#define XtNnumChannel "numChannel"
#define XtCNumChannel "NumChannel"
-#define XtNround "round"
-#define XtCRound "Round"
-
-#define XtNmaxRound "maxRound"
-#define XtCMaxRound "MaxRound"
+#define XtNnumSamples "numSamples"
+#define XtCNumSamples "NumSamples"
typedef struct _DisplayClassRec *DisplayWidgetClass;
typedef struct _DisplayRec *DisplayWidget;
diff --git a/DisplayP.h b/DisplayP.h
index 6c92c0d..a3ad3d9 100644
--- a/DisplayP.h
+++ b/DisplayP.h
@@ -7,6 +7,7 @@
typedef struct {
int num_channel;
+ int num_samples;
int **data;
} DisplayPart;
diff --git a/Sgraph.c b/Sgraph.c
index 022cb22..1a9be00 100644
--- a/Sgraph.c
+++ b/Sgraph.c
@@ -44,8 +44,6 @@ static XtResource resources[] = {
Offset(values), XtRPointer, NULL },
{ XtNsize, XtCsize, XtRInt, sizeof(int),
Offset(size), XtRImmediate, (XtPointer)0 },
- { XtNsamples, XtCsamples, XtRInt, sizeof(int),
- Offset(samples), XtRImmediate, (XtPointer)0 },
};
#undef Offset
@@ -142,8 +140,6 @@ Initialize(Widget request, Widget w, ArgList args, Cardinal *nargs)
sw->core.width = 320;
sw->core.height = 120;
- sw->sgraph.size = 2 * sw->core.width;
- sw->sgraph.values = (int *)XtCalloc(sw->sgraph.samples, sizeof(int));
GetGC(w);
}
@@ -173,13 +169,6 @@ Resize(Widget w)
if (!XtIsRealized(w))
return;
- sw->sgraph.size = 2 * w->core.width;
- if (sw->sgraph.size > sw->sgraph.samples)
- sw->sgraph.size = sw->sgraph.samples;
- warnx("win: %dx%d", w->core.width, w->core.height);
- warnx("size: %zu", sw->sgraph.size);
- warnx("samples: %zu", sw->sgraph.samples);
-
if (sw->sgraph.bg != None)
XFreePixmap(XtDisplay(sw), sw->sgraph.bg);
sw->sgraph.bg = XCreatePixmap(XtDisplay(sw), XtWindow(sw),
@@ -196,7 +185,7 @@ static void
Redisplay(Widget w, XEvent *event, Region r)
{
SgraphWidget sw = (SgraphWidget)w;
- Dimension i, x, y, visible;
+ Dimension i, x, y;
XdbeSwapInfo swap;
if (!XtIsRealized(w)) {
@@ -204,8 +193,7 @@ Redisplay(Widget w, XEvent *event, Region r)
return;
}
- visible = sw->sgraph.size / 2;
- for (i = 0; i < visible - 1; i++) {
+ for (i = 0; i < sw->core.width - 1; i++) {
y = sw->sgraph.values[i];
x = sw->sgraph.mirror ? sw->core.width - i : i;
diff --git a/SgraphP.h b/SgraphP.h
index b76ec0d..3648b30 100644
--- a/SgraphP.h
+++ b/SgraphP.h
@@ -26,7 +26,6 @@ typedef struct {
Boolean mirror;
int *values;
size_t size;
- size_t samples;
XdbeBackBuffer backBuf;
GC foreGC;
diff --git a/spectrogram.c b/spectrogram.c
index c3eed91..f41d601 100644
--- a/spectrogram.c
+++ b/spectrogram.c
@@ -20,7 +20,7 @@
#include <X11/Intrinsic.h>
#include "Display.h"
-#include "Sgraph.h"
+//#include "Sgraph.h"
#include <err.h>
#include <signal.h>
@@ -74,21 +74,20 @@ static Boolean
worker(XtPointer p)
{
Arg arg[10];
- int n, size, samples;
+ int n, samples;
int **data;
n = 0;
- XtSetArg(arg[n], XtNwidth, &size); n++;
- XtSetArg(arg[n], XtNsamples, &samples); n++;
- XtSetArg(arg[n], XtNdata, &data); n++;
+ XtSetArg(arg[n], XtNnumSamples, &samples); n++;
+ XtSetArg(arg[n], XtNdata, &data); n++;
XtGetValues(p, arg, n);
- size = read_sio(data, size);
- exec_fft(data[0], size);
- exec_fft(data[1], size);
+ samples = read_sio(data, samples);
+ exec_fft(data[0], samples);
+ exec_fft(data[1], samples);
n = 0;
- XtSetArg(arg[n], XtNsize, size); n++;
+ XtSetArg(arg[n], XtNnumSamples, samples); n++;
XtSetValues(p, arg, n); /* trigger expose */
return False; /* don't remove the work procedure from the list */
@@ -106,7 +105,7 @@ int
main(int argc, char **argv)
{
XtAppContext app;
- Widget toplevel, display, sgraph;
+ Widget toplevel, display;
int n, samples;
Arg args[10];
XtAccelerators acs;
@@ -126,26 +125,12 @@ main(int argc, char **argv)
acs = XtParseAcceleratorTable("<Key>q: quit()");
n = 0;
- XtSetArg(args[n], XtNorientation, "horizontal"); n++;
- XtSetArg(args[n], XtNaccelerators, acs); n++;
+ //XtSetArg(args[n], XtNaccelerators, acs); n++;
XtSetArg(args[n], XtNnumChannel, 2); n++;
+ XtSetArg(args[n], XtNnumSamples, samples); n++;
display = XtCreateManagedWidget("Display", displayWidgetClass,
toplevel, args, n);
- n = 0;
- XtSetArg(args[n], XtNsamples, samples); n++;
- XtSetArg(args[n], XtNmirror, True); n++;
- sgraph = XtCreateManagedWidget("SGraph", sgraphWidgetClass,
- display, args, n);
- XtInstallAccelerators(sgraph, display);
-
- n = 0;
- XtSetArg(args[n], XtNsamples, samples); n++;
- XtSetArg(args[n], XtNmirror, False); n++;
- sgraph = XtCreateManagedWidget("SGraph", sgraphWidgetClass,
- display, args, n);
- XtInstallAccelerators(sgraph, display);
-
XtAppAddWorkProc(app, worker, display);
XtRealizeWidget(toplevel);