extended libdraw
This commit is contained in:
		
							
								
								
									
										6
									
								
								dinput.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								dinput.c
									
									
									
									
									
								
							@@ -72,15 +72,15 @@ drawinput(void)
 | 
				
			|||||||
	dc.y = 0;
 | 
						dc.y = 0;
 | 
				
			||||||
	dc.w = mw;
 | 
						dc.w = mw;
 | 
				
			||||||
	dc.h = mh;
 | 
						dc.h = mh;
 | 
				
			||||||
	drawtext(&dc, NULL, normcol);
 | 
						drawtext(&dc, NULL, normcol, False);
 | 
				
			||||||
	/* print prompt? */
 | 
						/* print prompt? */
 | 
				
			||||||
	if(prompt) {
 | 
						if(prompt) {
 | 
				
			||||||
		dc.w = promptw;
 | 
							dc.w = promptw;
 | 
				
			||||||
		drawtext(&dc, prompt, selcol);
 | 
							drawtext(&dc, prompt, selcol, False);
 | 
				
			||||||
		dc.x += dc.w;
 | 
							dc.x += dc.w;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dc.w = mw - dc.x;
 | 
						dc.w = mw - dc.x;
 | 
				
			||||||
	drawtext(&dc, *text ? text : NULL, normcol);
 | 
						drawtext(&dc, *text ? text : NULL, normcol, False);
 | 
				
			||||||
	drawcursor();
 | 
						drawcursor();
 | 
				
			||||||
	XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
 | 
						XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
 | 
				
			||||||
	XFlush(dpy);
 | 
						XFlush(dpy);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								dmenu.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								dmenu.c
									
									
									
									
									
								
							@@ -161,18 +161,18 @@ drawmenu(void) {
 | 
				
			|||||||
	dc.y = 0;
 | 
						dc.y = 0;
 | 
				
			||||||
	dc.w = mw;
 | 
						dc.w = mw;
 | 
				
			||||||
	dc.h = mh;
 | 
						dc.h = mh;
 | 
				
			||||||
	drawtext(&dc, NULL, normcol);
 | 
						drawtext(&dc, NULL, normcol, False);
 | 
				
			||||||
	/* print prompt? */
 | 
						/* print prompt? */
 | 
				
			||||||
	if(prompt) {
 | 
						if(prompt) {
 | 
				
			||||||
		dc.w = promptw;
 | 
							dc.w = promptw;
 | 
				
			||||||
		drawtext(&dc, prompt, selcol);
 | 
							drawtext(&dc, prompt, selcol, False);
 | 
				
			||||||
		dc.x += dc.w;
 | 
							dc.x += dc.w;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dc.w = mw - dc.x;
 | 
						dc.w = mw - dc.x;
 | 
				
			||||||
	/* print command */
 | 
						/* print command */
 | 
				
			||||||
	if(cmdw && item && lines == 0)
 | 
						if(cmdw && item && lines == 0)
 | 
				
			||||||
		dc.w = cmdw;
 | 
							dc.w = cmdw;
 | 
				
			||||||
	drawtext(&dc, *text ? text : NULL, normcol);
 | 
						drawtext(&dc, *text ? text : NULL, normcol, False);
 | 
				
			||||||
	if(curr) {
 | 
						if(curr) {
 | 
				
			||||||
		if(lines > 0)
 | 
							if(lines > 0)
 | 
				
			||||||
			drawmenuv();
 | 
								drawmenuv();
 | 
				
			||||||
@@ -189,16 +189,16 @@ drawmenuh(void) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	dc.x += cmdw;
 | 
						dc.x += cmdw;
 | 
				
			||||||
	dc.w = spaceitem;
 | 
						dc.w = spaceitem;
 | 
				
			||||||
	drawtext(&dc, curr->left ? "<" : NULL, normcol);
 | 
						drawtext(&dc, curr->left ? "<" : NULL, normcol, False);
 | 
				
			||||||
	dc.x += dc.w;
 | 
						dc.x += dc.w;
 | 
				
			||||||
	for(i = curr; i != next; i = i->right) {
 | 
						for(i = curr; i != next; i = i->right) {
 | 
				
			||||||
		dc.w = MIN(textw(&dc, i->text), mw / 3);
 | 
							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.x += dc.w;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dc.w = spaceitem;
 | 
						dc.w = spaceitem;
 | 
				
			||||||
	dc.x = mw - dc.w;
 | 
						dc.x = mw - dc.w;
 | 
				
			||||||
	drawtext(&dc, next ? ">" : NULL, normcol);
 | 
						drawtext(&dc, next ? ">" : NULL, normcol, False);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -209,11 +209,11 @@ drawmenuv(void) {
 | 
				
			|||||||
	dc.h = dc.font.height + 2;
 | 
						dc.h = dc.font.height + 2;
 | 
				
			||||||
	dc.y = dc.h;
 | 
						dc.y = dc.h;
 | 
				
			||||||
	for(i = curr; i != next; i = i->right) {
 | 
						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.y += dc.h;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dc.h = mh - dc.y;
 | 
						dc.h = mh - dc.y;
 | 
				
			||||||
	drawtext(&dc, NULL, normcol);
 | 
						drawtext(&dc, NULL, normcol, False);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Bool
 | 
					Bool
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
include ../config.mk
 | 
					include ../config.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRC = cleanupdraw.c setupdraw.c drawtext.c eprint.c getcolor.c initfont.c \
 | 
					SRC = cleanupdraw.c drawsquare.c drawtext.c eprint.c getcolor.c initfont.c \
 | 
				
			||||||
textnw.c textw.c
 | 
					setupdraw.c textnw.c textw.c
 | 
				
			||||||
OBJ = ${SRC:.c=.o}
 | 
					OBJ = ${SRC:.c=.o}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: libdraw.a
 | 
					all: libdraw.a
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
#include <X11/Xlib.h>
 | 
					#include <X11/Xlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* enums */
 | 
					/* enums */
 | 
				
			||||||
enum { ColFG, ColBG, ColLast };
 | 
					enum { ColBorder, ColFG, ColBG, ColLast };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* typedefs */
 | 
					/* typedefs */
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
@@ -21,7 +21,8 @@ typedef struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* forward declarations */
 | 
					/* forward declarations */
 | 
				
			||||||
void cleanupdraw(DC *dc);
 | 
					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, ...);
 | 
					void eprint(const char *fmt, ...);
 | 
				
			||||||
unsigned long getcolor(DC *dc, const char *colstr);
 | 
					unsigned long getcolor(DC *dc, const char *colstr);
 | 
				
			||||||
void initfont(DC *dc, const char *fontstr);
 | 
					void initfont(DC *dc, const char *fontstr);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								draw/drawsquare.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								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))
 | 
					#define MIN(a, b)               ((a) < (b) ? (a) : (b))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					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];
 | 
						char buf[256];
 | 
				
			||||||
	int i, x, y, h, len, olen;
 | 
						int i, x, y, h, len, olen;
 | 
				
			||||||
	XRectangle r = { dc->x, dc->y, dc->w, dc->h };
 | 
						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);
 | 
						XFillRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1);
 | 
				
			||||||
	if(!text)
 | 
						if(!text)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
@@ -26,7 +26,7 @@ drawtext(DC *dc, const char *text, unsigned long col[ColLast]) {
 | 
				
			|||||||
	memcpy(buf, text, len);
 | 
						memcpy(buf, text, len);
 | 
				
			||||||
	if(len < olen)
 | 
						if(len < olen)
 | 
				
			||||||
		for(i = len; i && i > len - 3; buf[--i] = '.');
 | 
							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)
 | 
						if(dc->font.set)
 | 
				
			||||||
		XmbDrawString(dc->dpy, dc->drawable, dc->font.set, dc->gc, x, y, buf, len);
 | 
							XmbDrawString(dc->dpy, dc->drawable, dc->font.set, dc->gc, x, y, buf, len);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user