Introduction
Introduction Statistics Contact Development Disclaimer Help
tadded new stuff - dwm - [fork] customized build of dwm, the dynamic window man…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 8a34fa50f75f4d6d8af234ac0c4f6d40b988d700
parent dbf7e03996032a6def3b8e97468b78d6da9e8c88
Author: Anselm R. Garbe <[email protected]>
Date: Mon, 10 Jul 2006 18:35:39 +0200
added new stuff
Diffstat:
M Makefile | 12 ++++++------
A config.h | 9 +++++++++
M config.mk | 4 +---
A draw.c | 163 +++++++++++++++++++++++++++++…
A draw.h | 6 ++++++
A font.c | 81 ++++++++++++++++++++++++++++++
M gridmenu.1 | 16 ----------------
A util.c | 18 ++++++++++++++++++
A util.h | 41 +++++++++++++++++++++++++++++…
M wm.c | 9 ---------
M wm.h | 5 +++--
11 files changed, 328 insertions(+), 36 deletions(-)
---
diff --git a/Makefile b/Makefile
t@@ -3,8 +3,8 @@
include config.mk
-SRC = wm.c
-OBJ = ${SRC:.c=.o}
+WMSRC = wm.c draw.c util.c
+WMOBJ = ${WMSRC:.c=.o}
MAN = gridwm.1
BIN = gridwm gridmenu
t@@ -22,18 +22,18 @@ config:
@echo CC $<
@${CC} -c ${CFLAGS} $<
-${OBJ}: wm.h
+${WMOBJ}: wm.h draw.h config.h
-gridwm: ${OBJ}
+gridwm: ${WMOBJ}
@echo LD $@
- @${CC} -o $@ ${OBJ} ${X11LDFLAGS}
+ @${CC} -o $@ ${WMOBJ} ${LDFLAGS}
clean:
rm -f gridwm *.o
dist: clean
mkdir -p gridwm-${VERSION}
- cp -R Makefile README LICENSE config.mk ${SRC} ${MAN} gridwm-${VERSION}
+ cp -R Makefile README LICENSE config.mk ${WMSRC} ${MAN} gridwm-${VERSI…
tar -cf gridwm-${VERSION}.tar gridwm-${VERSION}
gzip gridwm-${VERSION}.tar
rm -rf gridwm-${VERSION}
diff --git a/config.h b/config.h
t@@ -0,0 +1,9 @@
+/*
+ * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+
+#define FONT "fixed"
+#define FGCOLOR "#000000"
+#define BGCOLOR "#ffaa00"
+#define BOCOLOR "#000000"
diff --git a/config.mk b/config.mk
t@@ -11,14 +11,12 @@ X11LIB = /usr/X11R6/lib
VERSION = 0.0
# includes and libs
-LIBS = -L${PREFIX}/lib -L/usr/lib -lc
-X11LIBS = -L${X11LIB} -lX11
+LIBS = -L${PREFIX}/lib -L/usr/lib -lc -L${X11LIB} -lX11
# Linux/BSD
CFLAGS = -g -Wall -I. -I${PREFIX}/include -I/usr/include -I${X11INC} \
-DVERSION=\"${VERSION}\"
LDFLAGS = -g ${LIBS}
-X11LDFLAGS = ${LDFLAGS} ${X11LIBS}
# Solaris
#CFLAGS = -fast -xtarget=ultra ${INCLUDES} -DVERSION=\"${VERSION}\"
diff --git a/draw.c b/draw.c
t@@ -0,0 +1,163 @@
+/*
+ * (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "draw.h"
+#include "util.h"
+
+static void
+drawborder(Display *dpy, Brush *b)
+{
+ XPoint points[5];
+ XSetLineAttributes(dpy, b->gc, 1, LineSolid, CapButt, JoinMiter);
+ XSetForeground(dpy, b->gc, b->color.border);
+ points[0].x = b->rect.x;
+ points[0].y = b->rect.y;
+ points[1].x = b->rect.width - 1;
+ points[1].y = 0;
+ points[2].x = 0;
+ points[2].y = b->rect.height - 1;
+ points[3].x = -(b->rect.width - 1);
+ points[3].y = 0;
+ points[4].x = 0;
+ points[4].y = -(b->rect.height - 1);
+ XDrawLines(dpy, b->drawable, b->gc, points, 5, CoordModePrevious);
+}
+
+void
+draw(Display *dpy, Brush *b)
+{
+ unsigned int x, y, w, h, len;
+ static char buf[256];
+ XGCValues gcv;
+
+ XSetForeground(dpy, b->gc, b->color.bg);
+ XFillRectangles(dpy, b->drawable, b->gc, &b->rect, 1);
+
+ if(b->border)
+ drawborder(dpy, b);
+
+ if(!b->text)
+ return;
+
+ len = strlen(b->text);
+ if(len >= sizeof(buf))
+ len = sizeof(buf) - 1;
+ memcpy(buf, b->text, len);
+ buf[len] = 0;
+
+ h = b->font->ascent + b->font->descent;
+ y = b->rect.y + (b->rect.height / 2) - (h / 2) + b->font->ascent;
+ x = b->rect.x + (h / 2);
+
+ /* shorten text if necessary */
+ while(len && (w = textwidth_l(b->font, buf, len)) > b->rect.width - h)
+ buf[--len] = 0;
+
+ if(w > b->rect.width)
+ return; /* too long */
+
+ gcv.foreground = b->color.fg;
+ gcv.background = b->color.bg;
+ if(b->font->set) {
+ XChangeGC(dpy, b->gc, GCForeground | GCBackground, &gcv);
+ XmbDrawImageString(dpy, b->drawable, b->font->set, b->gc,
+ x, y, buf, len);
+ }
+ else {
+ gcv.font = b->font->xfont->fid;
+ XChangeGC(dpy, b->gc, GCForeground | GCBackground | GCFont, &g…
+ XDrawImageString(dpy, b->drawable, b->gc, x, y, buf, len);
+ }
+}
+
+static unsigned long
+xloadcolor(Display *dpy, Colormap cmap, const char *colstr)
+{
+ XColor color;
+ XAllocNamedColor(dpy, cmap, colstr, &color, &color);
+ return color.pixel;
+}
+
+void
+loadcolor(Display *dpy, int screen, Color *c,
+ const char *bg, const char *fg, const char *border)
+{
+ Colormap cmap = DefaultColormap(dpy, screen);
+ c->bg = xloadcolor(dpy, cmap, bg);
+ c->fg = xloadcolor(dpy, cmap, fg);
+ c->border = xloadcolor(dpy, cmap, border);
+}
+
+unsigned int
+textwidth_l(Fnt *font, char *text, unsigned int len)
+{
+ if(font->set) {
+ XRectangle r;
+ XmbTextExtents(font->set, text, len, 0, &r);
+ return r.width;
+ }
+ return XTextWidth(font->xfont, text, len);
+}
+
+unsigned int
+textwidth(Fnt *font, char *text)
+{
+ return textwidth_l(font, text, strlen(text));
+}
+
+void
+loadfont(Display *dpy, Fnt *font, const char *fontstr)
+{
+ char **missing, *def;
+ int n;
+
+ missing = 0;
+ def = "?";
+ setlocale(LC_ALL, "");
+ if(font->set)
+ XFreeFontSet(dpy, font->set);
+ font->set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
+ if(missing) {
+ while(n--)
+ fprintf(stderr, "missing fontset: %s\n", missing[n]);
+ XFreeStringList(missing);
+ if(font->set) {
+ XFreeFontSet(dpy, font->set);
+ font->set = 0;
+ }
+ }
+ if(font->set) {
+ XFontSetExtents *font_extents;
+ XFontStruct **xfonts;
+ char **font_names;
+ unsigned int i;
+
+ font->ascent = font->descent = 0;
+ font_extents = XExtentsOfFontSet(font->set);
+ n = XFontsOfFontSet(font->set, &xfonts, &font_names);
+ for(i = 0, font->ascent = 0, font->descent = 0; i < n; i++) {
+ if(font->ascent < (*xfonts)->ascent)
+ font->ascent = (*xfonts)->ascent;
+ if(font->descent < (*xfonts)->descent)
+ font->descent = (*xfonts)->descent;
+ xfonts++;
+ }
+ }
+ else {
+ if(font->xfont)
+ XFreeFont(dpy, font->xfont);
+ font->xfont = 0;
+ font->xfont = XLoadQueryFont(dpy, fontstr);
+ if (!font->xfont)
+ font->xfont = XLoadQueryFont(dpy, "fixed");
+ if (!font->xfont)
+ error("error, cannot load 'fixed' font\n");
+ font->ascent = font->xfont->ascent;
+ font->descent = font->xfont->descent;
+ }
+}
diff --git a/draw.h b/draw.h
t@@ -0,0 +1,6 @@
+/*
+ * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+
+extern void error(char *errstr, ...);
diff --git a/font.c b/font.c
t@@ -0,0 +1,81 @@
+/*
+ * (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+
+unsigned int
+textwidth_l(BlitzFont *font, char *text, unsigned int len)
+{
+ if(font->set) {
+ XRectangle r;
+ XmbTextExtents(font->set, text, len, nil, &r);
+ return r.width;
+ }
+ return XTextWidth(font->xfont, text, len);
+}
+
+unsigned int
+textwidth(BlitzFont *font, char *text)
+{
+ return blitz_textwidth_l(font, text, strlen(text));
+}
+
+void
+loadfont(Blitz *blitz, BlitzFont *font)
+{
+ char *fontname = font->fontstr;
+ char **missing = nil, *def = "?";
+ int n;
+
+ setlocale(LC_ALL, "");
+ if(font->set)
+ XFreeFontSet(blitz->dpy, font->set);
+ font->set = XCreateFontSet(blitz->dpy, fontname, &missing, &n, &def);
+ if(missing) {
+ while(n--)
+ fprintf(stderr, "liblitz: missing fontset: %s\n", miss…
+ XFreeStringList(missing);
+ if(font->set) {
+ XFreeFontSet(blitz->dpy, font->set);
+ font->set = nil;
+ }
+ }
+ if(font->set) {
+ XFontSetExtents *font_extents;
+ XFontStruct **xfonts;
+ char **font_names;
+ unsigned int i;
+
+ font->ascent = font->descent = 0;
+ font_extents = XExtentsOfFontSet(font->set);
+ n = XFontsOfFontSet(font->set, &xfonts, &font_names);
+ for(i = 0, font->ascent = 0, font->descent = 0; i < n; i++) {
+ if(font->ascent < (*xfonts)->ascent)
+ font->ascent = (*xfonts)->ascent;
+ if(font->descent < (*xfonts)->descent)
+ font->descent = (*xfonts)->descent;
+ xfonts++;
+ }
+ }
+ else {
+ if(font->xfont)
+ XFreeFont(blitz->dpy, font->xfont);
+ font->xfont = nil;
+ font->xfont = XLoadQueryFont(blitz->dpy, fontname);
+ if (!font->xfont) {
+ fontname = "fixed";
+ font->xfont = XLoadQueryFont(blitz->dpy, fontname);
+ }
+ if (!font->xfont) {
+ fprintf(stderr, "%s", "liblitz: error, cannot load 'fi…
+ exit(1);
+ }
+ font->ascent = font->xfont->ascent;
+ font->descent = font->xfont->descent;
+ }
+}
diff --git a/gridmenu.1 b/gridmenu.1
t@@ -64,21 +64,5 @@ returns
if Enter is pressed on termination,
.B 1
if Escape is pressed.
-.SH ENVIRONMENT
-.TP
-GRID_FONT
-The X11 font used to display each item in the menu.
-.br
-Default: fixed
-.TP
-GRID_NORMCOLORS
-The foreground, background, and border colors of a label. Syntactically, three…
-.br
-Default: #222222 #eeeeee #666666
-.TP
-GRID_SELCOLORS
-Like GRID_NORMCOLORS, but for the selected label.
-.br
-Default: #ffffff #335577 #447799
.SH SEE ALSO
.BR gridwm (1)
diff --git a/util.c b/util.c
t@@ -0,0 +1,18 @@
+/*
+ * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void
+error(char *errstr, ...) {
+ va_list ap;
+ va_start(ap, errstr);
+ vfprintf(stderr, errstr, ap);
+ va_end(ap);
+ exit(1);
+}
+
diff --git a/util.h b/util.h
t@@ -0,0 +1,41 @@
+/*
+ * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+
+#include <X11/Xlib.h>
+#include <X11/Xlocale.h>
+
+typedef struct Brush Brush;
+typedef struct Color Color;
+typedef struct Fnt Fnt;
+
+struct Color {
+ unsigned long bg;
+ unsigned long fg;
+ unsigned long border;
+};
+
+struct Fnt {
+ XFontStruct *xfont;
+ XFontSet set;
+ int ascent;
+ int descent;
+};
+
+struct Brush {
+ GC gc;
+ Drawable drawable;
+ XRectangle rect;
+ Bool border;
+ Fnt *font;
+ Color color;
+ const char *text;
+};
+
+extern void draw(Display *dpy, Brush *b);
+extern void loadcolor(Display *dpy, int screen, Color *c,
+ const char *bg, const char *fg, const char *bo);
+extern unsigned int textwidth_l(Fnt *font, char *text, unsigned int len);
+extern unsigned int textwidth(Fnt *font, char *text);
+extern void loadfont(Display *dpy, Fnt *font, const char *fontstr);
diff --git a/wm.c b/wm.c
t@@ -36,15 +36,6 @@ usage()
exit(1);
}
-void
-error(char *errstr, ...) {
- va_list ap;
- va_start(ap, errstr);
- vfprintf(stderr, errstr, ap);
- va_end(ap);
- exit(1);
-}
-
static void
scan_wins()
{
diff --git a/wm.h b/wm.h
t@@ -3,7 +3,9 @@
* See LICENSE file for license details.
*/
-#include <X11/Xlib.h>
+#include "draw.h"
+#include "util.h"
+
#include <X11/Xutil.h>
/* WM atoms */
t@@ -54,4 +56,3 @@ extern Cursor cursor[CurLast];
extern Pixmap pmap;
/* wm.c */
-extern void error(char *errstr, ...);
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.