extended libdraw
This commit is contained in:
		
							parent
							
								
									b36d8de8ad
								
							
						
					
					
						commit
						c984dc95dc
					
				@ -72,15 +72,15 @@ drawinput(void)
 | 
			
		||||
	dc.y = 0;
 | 
			
		||||
	dc.w = mw;
 | 
			
		||||
	dc.h = mh;
 | 
			
		||||
	drawtext(&dc, NULL, normcol);
 | 
			
		||||
	drawtext(&dc, NULL, normcol, False);
 | 
			
		||||
	/* print prompt? */
 | 
			
		||||
	if(prompt) {
 | 
			
		||||
		dc.w = promptw;
 | 
			
		||||
		drawtext(&dc, prompt, selcol);
 | 
			
		||||
		drawtext(&dc, prompt, selcol, False);
 | 
			
		||||
		dc.x += dc.w;
 | 
			
		||||
	}
 | 
			
		||||
	dc.w = mw - dc.x;
 | 
			
		||||
	drawtext(&dc, *text ? text : NULL, normcol);
 | 
			
		||||
	drawtext(&dc, *text ? text : NULL, normcol, False);
 | 
			
		||||
	drawcursor();
 | 
			
		||||
	XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
 | 
			
		||||
	XFlush(dpy);
 | 
			
		||||
@ -233,7 +233,7 @@ run(void) {
 | 
			
		||||
 | 
			
		||||
	/* main event loop */
 | 
			
		||||
	while(running && !XNextEvent(dpy, &ev))
 | 
			
		||||
		switch (ev.type) {
 | 
			
		||||
		switch(ev.type) {
 | 
			
		||||
		case KeyPress:
 | 
			
		||||
			kpress(&ev.xkey);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
@ -161,18 +161,18 @@ drawmenu(void) {
 | 
			
		||||
	dc.y = 0;
 | 
			
		||||
	dc.w = mw;
 | 
			
		||||
	dc.h = mh;
 | 
			
		||||
	drawtext(&dc, NULL, normcol);
 | 
			
		||||
	drawtext(&dc, NULL, normcol, False);
 | 
			
		||||
	/* print prompt? */
 | 
			
		||||
	if(prompt) {
 | 
			
		||||
		dc.w = promptw;
 | 
			
		||||
		drawtext(&dc, prompt, selcol);
 | 
			
		||||
		drawtext(&dc, prompt, selcol, False);
 | 
			
		||||
		dc.x += dc.w;
 | 
			
		||||
	}
 | 
			
		||||
	dc.w = mw - dc.x;
 | 
			
		||||
	/* print command */
 | 
			
		||||
	if(cmdw && item && lines == 0)
 | 
			
		||||
		dc.w = cmdw;
 | 
			
		||||
	drawtext(&dc, *text ? text : NULL, normcol);
 | 
			
		||||
	drawtext(&dc, *text ? text : NULL, normcol, False);
 | 
			
		||||
	if(curr) {
 | 
			
		||||
		if(lines > 0)
 | 
			
		||||
			drawmenuv();
 | 
			
		||||
@ -189,16 +189,16 @@ drawmenuh(void) {
 | 
			
		||||
 | 
			
		||||
	dc.x += cmdw;
 | 
			
		||||
	dc.w = spaceitem;
 | 
			
		||||
	drawtext(&dc, curr->left ? "<" : NULL, normcol);
 | 
			
		||||
	drawtext(&dc, curr->left ? "<" : NULL, normcol, False);
 | 
			
		||||
	dc.x += dc.w;
 | 
			
		||||
	for(i = curr; i != next; i = i->right) {
 | 
			
		||||
		dc.w = MIN(textw(&dc, i->text), mw / 3);
 | 
			
		||||
		drawtext(&dc, i->text, (sel == i) ? selcol : normcol);
 | 
			
		||||
		drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
 | 
			
		||||
		dc.x += dc.w;
 | 
			
		||||
	}
 | 
			
		||||
	dc.w = spaceitem;
 | 
			
		||||
	dc.x = mw - dc.w;
 | 
			
		||||
	drawtext(&dc, next ? ">" : NULL, normcol);
 | 
			
		||||
	drawtext(&dc, next ? ">" : NULL, normcol, False);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@ -209,11 +209,11 @@ drawmenuv(void) {
 | 
			
		||||
	dc.h = dc.font.height + 2;
 | 
			
		||||
	dc.y = dc.h;
 | 
			
		||||
	for(i = curr; i != next; i = i->right) {
 | 
			
		||||
		drawtext(&dc, i->text, (sel == i) ? selcol : normcol);
 | 
			
		||||
		drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
 | 
			
		||||
		dc.y += dc.h;
 | 
			
		||||
	}
 | 
			
		||||
	dc.h = mh - dc.y;
 | 
			
		||||
	drawtext(&dc, NULL, normcol);
 | 
			
		||||
	drawtext(&dc, NULL, normcol, False);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
@ -456,7 +456,7 @@ run(void) {
 | 
			
		||||
 | 
			
		||||
	/* main event loop */
 | 
			
		||||
	while(running && !XNextEvent(dpy, &ev))
 | 
			
		||||
		switch (ev.type) {
 | 
			
		||||
		switch(ev.type) {
 | 
			
		||||
		case KeyPress:
 | 
			
		||||
			kpress(&ev.xkey);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
@ -3,8 +3,8 @@
 | 
			
		||||
 | 
			
		||||
include ../config.mk
 | 
			
		||||
 | 
			
		||||
SRC = cleanupdraw.c setupdraw.c drawtext.c eprint.c getcolor.c initfont.c \
 | 
			
		||||
textnw.c textw.c
 | 
			
		||||
SRC = cleanupdraw.c drawsquare.c drawtext.c eprint.c getcolor.c initfont.c \
 | 
			
		||||
setupdraw.c textnw.c textw.c
 | 
			
		||||
OBJ = ${SRC:.c=.o}
 | 
			
		||||
 | 
			
		||||
all: libdraw.a
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
#include <X11/Xlib.h>
 | 
			
		||||
 | 
			
		||||
/* enums */
 | 
			
		||||
enum { ColFG, ColBG, ColLast };
 | 
			
		||||
enum { ColBorder, ColFG, ColBG, ColLast };
 | 
			
		||||
 | 
			
		||||
/* typedefs */
 | 
			
		||||
typedef struct {
 | 
			
		||||
@ -21,7 +21,8 @@ typedef struct {
 | 
			
		||||
 | 
			
		||||
/* forward declarations */
 | 
			
		||||
void cleanupdraw(DC *dc);
 | 
			
		||||
void drawtext(DC *dc, const char *text, unsigned long col[ColLast]);
 | 
			
		||||
void drawsquare(DC *dc, Bool filled, unsigned long col[ColLast], Bool invert);
 | 
			
		||||
void drawtext(DC *dc, const char *text, unsigned long col[ColLast], Bool invert);
 | 
			
		||||
void eprint(const char *fmt, ...);
 | 
			
		||||
unsigned long getcolor(DC *dc, const char *colstr);
 | 
			
		||||
void initfont(DC *dc, const char *fontstr);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								dmenubar/draw/drawsquare.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								dmenubar/draw/drawsquare.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
/* See LICENSE file for copyright and license details. */
 | 
			
		||||
#include <X11/Xlib.h>
 | 
			
		||||
#include "draw.h"
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
drawsquare(DC *dc, Bool filled, unsigned long col[ColLast], Bool invert) {
 | 
			
		||||
	int n;
 | 
			
		||||
	XRectangle r = { dc->x, dc->y, dc->w, dc->h };
 | 
			
		||||
 | 
			
		||||
	XSetForeground(dc->dpy, dc->gc, col[invert ? ColBG : ColFG]);
 | 
			
		||||
	n = ((dc->font.ascent + dc->font.descent + 2) / 4) + (filled ? 1 : 0);
 | 
			
		||||
	r.width = r.height = n;
 | 
			
		||||
	r.x = dc->x + 1;
 | 
			
		||||
	r.y = dc->y + 1;
 | 
			
		||||
	if(filled)
 | 
			
		||||
		XFillRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1);
 | 
			
		||||
	else
 | 
			
		||||
		XDrawRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1);
 | 
			
		||||
}
 | 
			
		||||
@ -6,12 +6,12 @@
 | 
			
		||||
#define MIN(a, b)               ((a) < (b) ? (a) : (b))
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
drawtext(DC *dc, const char *text, unsigned long col[ColLast]) {
 | 
			
		||||
drawtext(DC *dc, const char *text, unsigned long col[ColLast], Bool invert) {
 | 
			
		||||
	char buf[256];
 | 
			
		||||
	int i, x, y, h, len, olen;
 | 
			
		||||
	XRectangle r = { dc->x, dc->y, dc->w, dc->h };
 | 
			
		||||
 | 
			
		||||
	XSetForeground(dc->dpy, dc->gc, col[ColBG]);
 | 
			
		||||
	XSetForeground(dc->dpy, dc->gc, col[invert ? ColFG : ColBG]);
 | 
			
		||||
	XFillRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1);
 | 
			
		||||
	if(!text)
 | 
			
		||||
		return;
 | 
			
		||||
@ -26,7 +26,7 @@ drawtext(DC *dc, const char *text, unsigned long col[ColLast]) {
 | 
			
		||||
	memcpy(buf, text, len);
 | 
			
		||||
	if(len < olen)
 | 
			
		||||
		for(i = len; i && i > len - 3; buf[--i] = '.');
 | 
			
		||||
	XSetForeground(dc->dpy, dc->gc, col[ColFG]);
 | 
			
		||||
	XSetForeground(dc->dpy, dc->gc, col[invert ? ColBG : ColFG]);
 | 
			
		||||
	if(dc->font.set)
 | 
			
		||||
		XmbDrawString(dc->dpy, dc->drawable, dc->font.set, dc->gc, x, y, buf, len);
 | 
			
		||||
	else
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user