Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7858 views
1
#ifndef MUPDF_FITZ_PATH_H
2
#define MUPDF_FITZ_PATH_H
3
4
#include "mupdf/fitz/system.h"
5
#include "mupdf/fitz/context.h"
6
#include "mupdf/fitz/math.h"
7
8
/*
9
* Vector path buffer.
10
* It can be stroked and dashed, or be filled.
11
* It has a fill rule (nonzero or even_odd).
12
*
13
* When rendering, they are flattened, stroked and dashed straight
14
* into the Global Edge List.
15
*/
16
17
typedef struct fz_path_s fz_path;
18
typedef struct fz_stroke_state_s fz_stroke_state;
19
20
typedef enum fz_linecap_e
21
{
22
FZ_LINECAP_BUTT = 0,
23
FZ_LINECAP_ROUND = 1,
24
FZ_LINECAP_SQUARE = 2,
25
FZ_LINECAP_TRIANGLE = 3
26
} fz_linecap;
27
28
typedef enum fz_linejoin_e
29
{
30
FZ_LINEJOIN_MITER = 0,
31
FZ_LINEJOIN_ROUND = 1,
32
FZ_LINEJOIN_BEVEL = 2,
33
FZ_LINEJOIN_MITER_XPS = 3
34
} fz_linejoin;
35
36
struct fz_stroke_state_s
37
{
38
int refs;
39
fz_linecap start_cap, dash_cap, end_cap;
40
fz_linejoin linejoin;
41
float linewidth;
42
float miterlimit;
43
float dash_phase;
44
int dash_len;
45
float dash_list[32];
46
};
47
48
typedef struct
49
{
50
void (*moveto)(fz_context *ctx, void *arg, float x, float y);
51
void (*lineto)(fz_context *ctx, void *arg, float x, float y);
52
void (*curveto)(fz_context *ctx, void *arg, float x1, float y1, float x2, float y2, float x3, float y3);
53
void (*close)(fz_context *ctx, void *arg);
54
/* Optional ones */
55
void (*quadto)(fz_context *ctx, void *arg, float x1, float y1, float x2, float y2);
56
void (*curvetov)(fz_context *ctx, void *arg, float x2, float y2, float x3, float y3);
57
void (*curvetoy)(fz_context *ctx, void *arg, float x1, float y1, float x3, float y3);
58
void (*rectto)(fz_context *ctx, void *arg, float x1, float y1, float x2, float y2);
59
} fz_path_processor;
60
61
void fz_process_path(fz_context *ctx, const fz_path_processor *proc, void *arg, const fz_path *path);
62
63
fz_path *fz_new_path(fz_context *ctx);
64
fz_path *fz_keep_path(fz_context *ctx, fz_path *path);
65
void fz_drop_path(fz_context *ctx, fz_path *path);
66
void fz_trim_path(fz_context *ctx, fz_path *path);
67
int fz_packed_path_size(const fz_path *path);
68
int fz_pack_path(fz_context *ctx, uint8_t *pack, int max, const fz_path *path);
69
70
fz_point fz_currentpoint(fz_context *ctx, fz_path *path);
71
void fz_moveto(fz_context*, fz_path*, float x, float y);
72
void fz_lineto(fz_context*, fz_path*, float x, float y);
73
void fz_quadto(fz_context*, fz_path*, float x1, float y1, float x2, float y2);
74
void fz_rectto(fz_context*, fz_path*, float x1, float y1, float x2, float y2);
75
void fz_curveto(fz_context*,fz_path*, float, float, float, float, float, float);
76
void fz_curvetov(fz_context*,fz_path*, float, float, float, float);
77
void fz_curvetoy(fz_context*,fz_path*, float, float, float, float);
78
void fz_closepath(fz_context*,fz_path*);
79
80
void fz_transform_path(fz_context *ctx, fz_path *path, const fz_matrix *transform);
81
82
fz_rect *fz_bound_path(fz_context *ctx, fz_path *path, const fz_stroke_state *stroke, const fz_matrix *ctm, fz_rect *r);
83
fz_rect *fz_adjust_rect_for_stroke(fz_context *ctx, fz_rect *r, const fz_stroke_state *stroke, const fz_matrix *ctm);
84
85
extern const fz_stroke_state fz_default_stroke_state;
86
87
fz_stroke_state *fz_new_stroke_state(fz_context *ctx);
88
fz_stroke_state *fz_new_stroke_state_with_dash_len(fz_context *ctx, int len);
89
fz_stroke_state *fz_keep_stroke_state(fz_context *ctx, fz_stroke_state *stroke);
90
void fz_drop_stroke_state(fz_context *ctx, fz_stroke_state *stroke);
91
fz_stroke_state *fz_unshare_stroke_state(fz_context *ctx, fz_stroke_state *shared);
92
fz_stroke_state *fz_unshare_stroke_state_with_dash_len(fz_context *ctx, fz_stroke_state *shared, int len);
93
fz_stroke_state *fz_clone_stroke_state(fz_context *ctx, fz_stroke_state *stroke);
94
95
#ifndef NDEBUG
96
void fz_print_path(fz_context *ctx, FILE *out, fz_path *, int indent);
97
#endif
98
99
#endif
100
101