added new stuff
This commit is contained in:
		
							parent
							
								
									dbf7e03996
								
							
						
					
					
						commit
						8a34fa50f7
					
				
							
								
								
									
										12
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								Makefile
									
									
									
									
									
								
							| @ -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      | ||||
| 
 | ||||
| @ -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-${VERSION} | ||||
| 	tar -cf gridwm-${VERSION}.tar gridwm-${VERSION} | ||||
| 	gzip gridwm-${VERSION}.tar | ||||
| 	rm -rf gridwm-${VERSION} | ||||
|  | ||||
							
								
								
									
										9
									
								
								config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								config.h
									
									
									
									
									
										Normal file
									
								
							| @ -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" | ||||
| @ -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}\"
 | ||||
|  | ||||
							
								
								
									
										163
									
								
								draw.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								draw.c
									
									
									
									
									
										Normal file
									
								
							| @ -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, &gcv); | ||||
| 		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; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										6
									
								
								draw.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								draw.h
									
									
									
									
									
										Normal file
									
								
							| @ -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, ...); | ||||
							
								
								
									
										81
									
								
								font.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								font.c
									
									
									
									
									
										Normal file
									
								
							| @ -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", missing[n]); | ||||
| 		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 'fixed' font\n"); | ||||
| 			exit(1); | ||||
| 		} | ||||
| 		font->ascent = font->xfont->ascent; | ||||
| 		font->descent = font->xfont->descent; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										16
									
								
								gridmenu.1
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								gridmenu.1
									
									
									
									
									
								
							| @ -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 blank-separated color values of the form #RRGGBB are expected. | ||||
| .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) | ||||
|  | ||||
							
								
								
									
										18
									
								
								util.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								util.c
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								util.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								util.h
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||
							
								
								
									
										9
									
								
								wm.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								wm.c
									
									
									
									
									
								
							| @ -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() | ||||
| { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user