basic draw.c structure
This commit is contained in:
		
							parent
							
								
									61fe833a06
								
							
						
					
					
						commit
						d456617f0e
					
				
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
 | 
			
		||||
include config.mk
 | 
			
		||||
 | 
			
		||||
SRC = dwm.c
 | 
			
		||||
SRC = draw.c dwm.c
 | 
			
		||||
OBJ = ${SRC:.c=.o}
 | 
			
		||||
 | 
			
		||||
all: options dwm
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,139 @@
 | 
			
		|||
/* See LICENSE file for copyright and license details. */
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <X11/Xlib.h>
 | 
			
		||||
 | 
			
		||||
#include "draw.h"
 | 
			
		||||
 | 
			
		||||
Draw *
 | 
			
		||||
draw_create(Display *dpy, Window win, unsigned int w, unsigned int h) {
 | 
			
		||||
	Draw *draw = (Draw *)calloc(1, sizeof(Draw));
 | 
			
		||||
	draw->w = w;
 | 
			
		||||
	draw->h = h;
 | 
			
		||||
	/* TODO: drawable creation */
 | 
			
		||||
	/* TODO: gc allocation */
 | 
			
		||||
	return draw;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
draw_resize(Draw *draw, unsigned int w, unsigned int h) {
 | 
			
		||||
	if(!draw)
 | 
			
		||||
		return;
 | 
			
		||||
	draw->w = w;
 | 
			
		||||
	draw->h = h;
 | 
			
		||||
	/* TODO: resize drawable */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
draw_free(Draw *draw) {
 | 
			
		||||
	/* TODO: deallocate DDCs */
 | 
			
		||||
	/* TODO: deallocate drawable */
 | 
			
		||||
	free(draw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DDC *
 | 
			
		||||
dc_create(Draw *draw) {
 | 
			
		||||
	DDC *dc = (DDC *)calloc(1, sizeof(DDC));
 | 
			
		||||
	dc->draw = draw;
 | 
			
		||||
	dc->next = draw->dc;
 | 
			
		||||
	draw->dc = dc;
 | 
			
		||||
	return dc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_free(DDC *dc) {
 | 
			
		||||
	DDC **tdc;
 | 
			
		||||
 | 
			
		||||
	if(!dc)
 | 
			
		||||
		return;
 | 
			
		||||
	/* remove from dc list */
 | 
			
		||||
	for(tdc = &dc->draw->dc; *tdc && *tdc != dc; tdc = &(*tdc)->next);
 | 
			
		||||
	*tdc = dc->next;
 | 
			
		||||
	/* TODO: deallocate any resources of this dc, if needed */
 | 
			
		||||
	free(dc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Fnt *
 | 
			
		||||
font_create(const char *fontname) {
 | 
			
		||||
	Fnt *font = (Fnt *)calloc(1, sizeof(Fnt));
 | 
			
		||||
	/* TODO: allocate actual font */
 | 
			
		||||
	return font;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
font_free(Fnt *font) {
 | 
			
		||||
	if(!font)
 | 
			
		||||
		return;
 | 
			
		||||
	/* TODO: deallocate any font resources */
 | 
			
		||||
	free(font);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Col *
 | 
			
		||||
col_create(const char *colname) {
 | 
			
		||||
	Col *col = (Col *)calloc(1, sizeof(Col));
 | 
			
		||||
	/* TODO: allocate color */
 | 
			
		||||
	return col;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
col_free(Col *col) {
 | 
			
		||||
	if(!col)
 | 
			
		||||
		return;
 | 
			
		||||
	/* TODO: deallocate any color resource */
 | 
			
		||||
	free(col);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_setfont(DDC *dc, Fnt *font) {
 | 
			
		||||
	if(!dc || !font)
 | 
			
		||||
		return;
 | 
			
		||||
	dc->font = font;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_setfg(DDC *dc, Col *col) {
 | 
			
		||||
	if(!dc || !col) 
 | 
			
		||||
		return;
 | 
			
		||||
	dc->fg = col;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_setbg(DDC *dc, Col *col) {
 | 
			
		||||
	if(!dc || !col)
 | 
			
		||||
		return;
 | 
			
		||||
	dc->bg = col;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_setfill(DDC *dc, Bool fill) {
 | 
			
		||||
	if(!dc)
 | 
			
		||||
		return;
 | 
			
		||||
	dc->fill = fill;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_drawrect(DDC *dc, int x, int y, unsigned int w, unsigned int h) {
 | 
			
		||||
	if(!dc)
 | 
			
		||||
		return;
 | 
			
		||||
	/* TODO: draw the rectangle */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_drawtext(DDC *dc, int x, int y, const char *text) {
 | 
			
		||||
	if(!dc)
 | 
			
		||||
		return;
 | 
			
		||||
	/* TODO: draw the text */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_map(DDC *dc, int x, int y, unsigned int w, unsigned int h) {
 | 
			
		||||
	if(!dc)
 | 
			
		||||
		return;
 | 
			
		||||
	/* TODO: map the dc contents in the region */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
dc_getextents(DDC *dc, const char *text, TextExtents *extents) {
 | 
			
		||||
	if(!dc || !extents)
 | 
			
		||||
		return;
 | 
			
		||||
	/* TODO: get extents */
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								draw.h
								
								
								
								
							
							
						
						
									
										14
									
								
								draw.h
								
								
								
								
							| 
						 | 
				
			
			@ -1,13 +1,16 @@
 | 
			
		|||
/* See LICENSE file for copyright and license details. */
 | 
			
		||||
 | 
			
		||||
typedef struct _DDC DDC;
 | 
			
		||||
 | 
			
		||||
/* X11 types - begin */
 | 
			
		||||
typedef struct _XDraw Draw;
 | 
			
		||||
struct _XDraw {
 | 
			
		||||
	unsigned int w, h;
 | 
			
		||||
	Display *dpy;
 | 
			
		||||
	Drawable drawable;
 | 
			
		||||
	GC gc;
 | 
			
		||||
	DDC *dc;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _XDraw Draw;
 | 
			
		||||
 | 
			
		||||
struct _XCol {
 | 
			
		||||
	unsigned long rgb;
 | 
			
		||||
| 
						 | 
				
			
			@ -24,13 +27,14 @@ struct _XFont {
 | 
			
		|||
typedef struct _XFont Fnt;
 | 
			
		||||
/* X11 types - end */
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
struct _DDC {
 | 
			
		||||
	Draw *draw;
 | 
			
		||||
	Col *fg;
 | 
			
		||||
	Col *bg;
 | 
			
		||||
	Fnt *font;
 | 
			
		||||
	Bool fill;
 | 
			
		||||
} DDC;
 | 
			
		||||
	DDC *next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	unsigned int w;
 | 
			
		||||
| 
						 | 
				
			
			@ -60,8 +64,8 @@ void col_free(Col *col);
 | 
			
		|||
 | 
			
		||||
/* Drawing context manipulation */
 | 
			
		||||
void dc_setfont(DDC *dc, Fnt *font);
 | 
			
		||||
void dc_setfg(DDC *dc, Col col);
 | 
			
		||||
void dc_setbg(DDC *dc, Col col);
 | 
			
		||||
void dc_setfg(DDC *dc, Col *col);
 | 
			
		||||
void dc_setbg(DDC *dc, Col *col);
 | 
			
		||||
void dc_setfill(DDC *dc, Bool fill);
 | 
			
		||||
 | 
			
		||||
/* Drawing functions */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue