aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2014-09-28 23:53:38 +0000
committerDimitri Sokolyuk <demon@dim13.org>2014-09-28 23:53:38 +0000
commit1267b8792b41aa7efe3843ddcf014ec9f12cea20 (patch)
treef7b45a4b6c93226f2e13446bdc07dd250e693269
parentfedf703a0a4412c736003a0aedc7e087e2897225 (diff)
partial success
-rw-r--r--Display.c89
-rw-r--r--DisplayP.h16
-rw-r--r--Makefile2
-rw-r--r--Sgraph.c20
-rw-r--r--spectrogram.c7
5 files changed, 107 insertions, 27 deletions
diff --git a/Display.c b/Display.c
index 36b57eb..a02317a 100644
--- a/Display.c
+++ b/Display.c
@@ -1,14 +1,23 @@
/* $Id$ */
+#include <err.h>
#include <X11/IntrinsicP.h>
#include <X11/StringDefs.h>
#include "DisplayP.h"
-//static ChangeManaged(Widget);
-//static XtGeometryResult GeometryManager(Widget, XtWidgetGeometry *, XtWidgetGeometry *);
+#define Printd(w, s) do { \
+ warnx("Class %s: %s", XtClass(w)->core_class.class_name, s); \
+} while (0)
+
+static void Initialize(Widget, Widget, ArgList, Cardinal *);
+static XtGeometryResult GeometryManager(Widget, XtWidgetGeometry *, XtWidgetGeometry *);
+static void ChangeManaged(Widget);
+static void Resize(Widget);
#define Offset(field) XtOffsetOf(DisplayRec, display.field)
static XtResource resources[] = {
+ { XtNspace, XtCSpace, XtRDimension, sizeof(Dimension),
+ Offset(space), XtRImmediate, (XtPointer)2 },
};
#undef Offset
@@ -43,7 +52,7 @@ DisplayClassRec displayClassRec = {
.compress_enterleave = True,
.visible_interest = False,
.destroy = NULL,
- .resize = XtInheritResize,
+ .resize = Resize,
.expose = XtInheritExpose,
.set_values = NULL,
.set_values_hook = NULL,
@@ -58,11 +67,11 @@ DisplayClassRec displayClassRec = {
.extension = NULL,
},
.composite_class = {
- .geometry_manager = XtInheritGeometryManager,
- .change_managed = XtInheritChangeManaged,
+ .geometry_manager = GeometryManager,
+ .change_managed = ChangeManaged,
.insert_child = XtInheritInsertChild,
.delete_child = XtInheritDeleteChild,
- .extension = NULL,
+ .extension = &compositeExtension,
},
.display_class = {
.extension = NULL,
@@ -70,3 +79,71 @@ DisplayClassRec displayClassRec = {
};
WidgetClass displayWidgetClass = (WidgetClass) & displayClassRec;
+
+static void
+Initialize(Widget req, Widget new, ArgList args, Cardinal *num_args)
+{
+ warnx("Display initialize");
+ new->core.width = 800;
+ new->core.height = 600;
+}
+
+static XtGeometryResult
+GeometryManager(Widget w, XtWidgetGeometry *request, XtWidgetGeometry *reply)
+{
+ warnx("Geometry Manager");
+ return XtGeometryYes;
+}
+
+static void
+ChangeManaged(Widget w)
+{
+ DisplayWidget dw = (DisplayWidget)w;
+ Dimension width, height;
+ Widget child;
+ int i;
+
+ warnx("Change Managed %s", XtClass(w)->core_class.class_name);
+
+ width = w->core.width;
+ height = w->core.height;
+
+ for (i = 0; i < dw->composite.num_children; i++) {
+ child = dw->composite.children[i];
+ XtMoveWidget(child,
+ width + dw->display.space, dw->display.space);
+ if (XtIsManaged(child)) {
+ width += child->core.width
+ + 2 * child->core.border_width
+ + 2 * dw->display.space;
+ height = child->core.height
+ + 2 * child->core.border_width
+ + 2 * dw->display.space;
+ }
+ }
+ w->core.width = width;
+ w->core.height = height;
+}
+
+static void
+Resize(Widget w)
+{
+ DisplayWidget dw = (DisplayWidget)w;
+ Dimension width, height, border;
+ Widget child;
+ int n = dw->composite.num_children;
+ int i;
+
+ width = (w->core.width - 2 * dw->display.space) / n;
+ height = (w->core.height - 2 * dw->display.space) / n;
+ Printd(w, "Resize");
+
+ for (i = 0; i < dw->composite.num_children; i++) {
+ child = dw->composite.children[i];
+ if (XtIsManaged(child)) {
+ border = child->core.border_width;
+ XtResizeWidget(child, width - 2 * border,
+ height - 2 * border, border);
+ }
+ }
+}
diff --git a/DisplayP.h b/DisplayP.h
index 1162967..f41670c 100644
--- a/DisplayP.h
+++ b/DisplayP.h
@@ -6,23 +6,23 @@
#include "Display.h"
typedef struct {
- char* resource;
- char *private;
+ Dimension space;
} DisplayPart;
typedef struct _DisplayRec {
- CorePart core;
- DisplayPart display;
+ CorePart core;
+ CompositePart composite;
+ DisplayPart display;
} DisplayRec;
typedef struct {
- XtPointer extension;
+ XtPointer extension;
} DisplayClassPart;
typedef struct _DisplayClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- DisplayClassPart display_class;
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ DisplayClassPart display_class;
} DisplayClassRec;
extern DisplayClassRec displayClassRec;
diff --git a/Makefile b/Makefile
index 141dc9a..1bebcb7 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ VERSION=3.0
PROG= spectrogram
SRCS= spectrogram.c fft.c cms.c aux.c widget.c Sgraph.c Display.c
-LIBS= fftw3 xaw7 xext xrender
+LIBS= fftw3 xt xext
BINDIR= /usr/local/bin
UNAME!= uname
diff --git a/Sgraph.c b/Sgraph.c
index 3926082..df6edd0 100644
--- a/Sgraph.c
+++ b/Sgraph.c
@@ -25,6 +25,10 @@
#include <err.h>
#include <stdint.h>
+#define Printd(w, s) do { \
+ warnx("Class %s: %s", XtClass(w)->core_class.class_name, s); \
+} while (0)
+
static void Initialize(Widget request, Widget w, ArgList args, Cardinal *nargs);
static void Realize(Widget w, XtValueMask *mask, XSetWindowAttributes *attr);
static void Action(Widget w, XEvent *event, String *params, Cardinal *num_params);
@@ -150,14 +154,16 @@ Initialize(Widget request, Widget w, ArgList args, Cardinal *nargs)
ret = XdbeQueryExtension(XtDisplay(w), &major, &minor);
if (!ret)
errx(1, "Xdbe %d.%d error %d", major, minor, ret);
+ /*
ret = XRenderQueryVersion(XtDisplay(w), &major, &minor);
if (!ret)
errx(1, "XRender %d.%d error %d", major, minor, ret);
+ */
sw->sgraph.leftData = (double *)XtCalloc(sw->sgraph.size, sizeof(double));
sw->sgraph.rightData = (double *)XtCalloc(sw->sgraph.size, sizeof(double));
- warnx("Initialize");
+ Printd(w, "Initialize");
GetGC(w);
}
@@ -179,31 +185,27 @@ static void
Resize(Widget w)
{
SgraphWidget sw = (SgraphWidget)w;
- Dimension width, height;
if (!XtIsRealized(w))
return;
- warnx("Resize");
+ Printd(w, "Resize");
- width = w->core.width / 2;
- height = w->core.height / 4;
sw->sgraph.size = w->core.width;
warnx("win: %dx%d", w->core.width, w->core.height);
- warnx("sub: %dx%d", width, height);
warnx("size: %d", sw->sgraph.size);
warnx("samples: %d", sw->sgraph.samples);
if (sw->sgraph.bg != None)
XFreePixmap(XtDisplay(sw), sw->sgraph.bg);
sw->sgraph.bg = XCreatePixmap(XtDisplay(sw), XtWindow(sw),
- width, height, DefaultDepthOfScreen(XtScreen(sw)));
+ w->core.width, w->core.height,
+ DefaultDepthOfScreen(XtScreen(sw)));
if (sw->sgraph.mask != None)
XFreePixmap(XtDisplay(sw), sw->sgraph.mask);
sw->sgraph.mask = XCreatePixmap(XtDisplay(sw), XtWindow(sw),
- width, height, 1);
-
+ w->core.width, w->core.height, 1);
}
static void
diff --git a/spectrogram.c b/spectrogram.c
index 821e2e5..db88e4a 100644
--- a/spectrogram.c
+++ b/spectrogram.c
@@ -19,8 +19,7 @@
#include <X11/Xutil.h>
#include <X11/Intrinsic.h>
-//#include "Display.h"
-#include <X11/Xaw/Box.h>
+#include "Display.h"
#include "Sgraph.h"
#include <err.h>
@@ -99,6 +98,8 @@ worker(XtPointer data)
String fallback[] = {
"*foreground: Gold",
"*background: RoyalBlue4",
+ "*borderColor: Red",
+ "*borderWidth: 1",
NULL,
};
@@ -124,7 +125,7 @@ main(int argc, char **argv)
n = 0;
XtSetArg(args[n], XtNorientation, "horizontal"); n++;
- display = XtCreateManagedWidget("Display", boxWidgetClass,
+ display = XtCreateManagedWidget("Display", displayWidgetClass,
toplevel, args, n);
n = 0;