5
void path_init(struct path *p)
13
void path_free(struct path *p)
23
void path_alloc(struct path *p, int n)
29
p->vertices = G_realloc(p->vertices, p->alloc * sizeof(struct vertex));
32
void path_reset(struct path *p)
38
void path_append(struct path *p, double x, double y, int mode)
42
if (p->count >= p->alloc)
43
path_alloc(p, p->alloc ? p->alloc * 2 : 100);
45
v = &p->vertices[p->count++];
52
void path_copy(struct path *dst, const struct path *src)
57
path_alloc(dst, src->count);
59
for (i = 0; i < src->count; i++) {
60
struct vertex *v = &src->vertices[i];
61
path_append(dst, v->x, v->y, v->mode);
64
dst->start = src->start;
67
void path_begin(struct path *p)
73
void path_move(struct path *p, double x, double y)
76
path_append(p, x, y, P_MOVE);
79
void path_cont(struct path *p, double x, double y)
81
path_append(p, x, y, P_CONT);
84
void path_close(struct path *p)
91
v = &p->vertices[p->start];
92
path_append(p, v->x, v->y, P_CLOSE);
97
void path_stroke(struct path *p, void (*line)(double, double, double, double))
101
for (i = 1; i < p->count; i++) {
102
struct vertex *v0 = &p->vertices[i-1];
103
struct vertex *v1 = &p->vertices[i];
105
if (v1->mode != P_MOVE)
106
(*line)(v0->x, v0->y, v1->x, v1->y);