basic draw.c structure
This commit is contained in:
		
							
								
								
									
										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 | ||||
|   | ||||
							
								
								
									
										139
									
								
								draw.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								draw.c
									
									
									
									
									
										Normal file
									
								
							| @@ -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 */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user