summaryrefslogtreecommitdiff
path: root/include/pencil.h
blob: 9205d5a948fb0e3c1b2183f1ea65d5240f9e09ac (plain)
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
/*
 * This file is part of Pencil
 * Licensed under the MIT License,
 *                http://www.opensource.org/licenses/mit-license
 * Copyright 2005 James Bursa <james@semichrome.net>
 */

#ifndef PENCIL_H
#define PENCIL_H

#include <stdbool.h>
#include <stdint.h>
#include "rufl.h"


struct pencil_diagram;


typedef enum {
	pencil_OK,
	pencil_OUT_OF_MEMORY = rufl_OUT_OF_MEMORY,
	pencil_FONT_MANAGER_ERROR = rufl_FONT_MANAGER_ERROR,
	pencil_FONT_NOT_FOUND = rufl_FONT_NOT_FOUND,
	pencil_IO_ERROR = rufl_IO_ERROR,
	pencil_IO_EOF = rufl_IO_EOF,
} pencil_code;

/** A colour as 0xBBGGRR00. */
typedef uint32_t pencil_colour;

#define pencil_TRANSPARENT 0xffffffff

typedef enum {
	pencil_JOIN_MITRED,
	pencil_JOIN_ROUND,
	pencil_JOIN_BEVELLED,
} pencil_join;

typedef enum {
	pencil_CAP_BUTT,
	pencil_CAP_ROUND,
	pencil_CAP_SQUARE,
	pencil_CAP_TRIANGLE,
} pencil_cap;

typedef enum {
	pencil_SOLID,
	pencil_DOTTED,
	pencil_DASHED,
} pencil_pattern;


struct pencil_diagram *pencil_create(void);

pencil_code pencil_text(struct pencil_diagram *diagram,
		int x, int y,
		const char *font_family, rufl_style font_style,
		unsigned int font_size,
		const char *string, size_t length,
		pencil_colour colour);
pencil_code pencil_path(struct pencil_diagram *diagram,
		const int *path, unsigned int n,
		pencil_colour fill_colour, pencil_colour outline_colour,
		int thickness, pencil_join join,
		pencil_cap start_cap, pencil_cap end_cap,
		int cap_width, int cap_length,
		bool even_odd, pencil_pattern pattern);
pencil_code pencil_sprite(struct pencil_diagram *diagram,
		int x, int y, int width, int height,
		const char *sprite);

pencil_code pencil_group_start(struct pencil_diagram *diagram,
		const char *name);
pencil_code pencil_group_end(struct pencil_diagram *diagram);

pencil_code pencil_clip_start(struct pencil_diagram *diagram,
		int x0, int y0, int x1, int y1);
pencil_code pencil_clip_end(struct pencil_diagram *diagram);

pencil_code pencil_save_drawfile(struct pencil_diagram *diagram,
		const char *source,
		char **drawfile_buffer, size_t *drawfile_size);

void pencil_free(struct pencil_diagram *diagram);

void pencil_dump(struct pencil_diagram *diagram);


#endif