draw.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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 */ }