11
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: zupath.c 8061 2007-06-19 02:39:15Z alexcher $ */
14
/* $Id: zupath.c 8250 2007-09-25 13:31:24Z giles $ */
15
15
/* Operators related to user paths */
52
52
extern bool CPSI_mode;
54
54
/* Forward references */
55
private int upath_append(os_ptr, i_ctx_t *, bool);
56
private int upath_stroke(i_ctx_t *, gs_matrix *, bool);
55
static int upath_append(os_ptr, i_ctx_t *, bool);
56
static int upath_stroke(i_ctx_t *, gs_matrix *, bool);
58
58
/* ---------------- Insideness testing ---------------- */
60
60
/* Forward references */
61
private int in_test(i_ctx_t *, int (*)(gs_state *));
62
private int in_path(os_ptr, i_ctx_t *, gx_device *);
63
private int in_path_result(i_ctx_t *, int, int);
64
private int in_utest(i_ctx_t *, int (*)(gs_state *));
65
private int in_upath(i_ctx_t *, gx_device *);
66
private int in_upath_result(i_ctx_t *, int, int);
61
static int in_test(i_ctx_t *, int (*)(gs_state *));
62
static int in_path(os_ptr, i_ctx_t *, gx_device *);
63
static int in_path_result(i_ctx_t *, int, int);
64
static int in_utest(i_ctx_t *, int (*)(gs_state *));
65
static int in_upath(i_ctx_t *, gx_device *);
66
static int in_upath_result(i_ctx_t *, int, int);
68
68
/* <x> <y> ineofill <bool> */
69
69
/* <userpath> ineofill <bool> */
71
71
zineofill(i_ctx_t *i_ctx_p)
73
73
return in_test(i_ctx_p, gs_eofill);
76
76
/* <x> <y> infill <bool> */
77
77
/* <userpath> infill <bool> */
79
79
zinfill(i_ctx_t *i_ctx_p)
81
81
return in_test(i_ctx_p, gs_fill);
84
84
/* <x> <y> instroke <bool> */
85
85
/* <userpath> instroke <bool> */
87
87
zinstroke(i_ctx_t *i_ctx_p)
89
89
return in_test(i_ctx_p, gs_stroke);
92
92
/* <x> <y> <userpath> inueofill <bool> */
93
93
/* <userpath1> <userpath2> inueofill <bool> */
95
95
zinueofill(i_ctx_t *i_ctx_p)
97
97
return in_utest(i_ctx_p, gs_eofill);
100
100
/* <x> <y> <userpath> inufill <bool> */
101
101
/* <userpath1> <userpath2> inufill <bool> */
103
103
zinufill(i_ctx_t *i_ctx_p)
105
105
return in_utest(i_ctx_p, gs_fill);
109
109
/* <x> <y> <userpath> <matrix> inustroke <bool> */
110
110
/* <userpath1> <userpath2> inustroke <bool> */
111
111
/* <userpath1> <userpath2> <matrix> inustroke <bool> */
113
113
zinustroke(i_ctx_t *i_ctx_p)
114
114
{ /* This is different because of the optional matrix operand. */
667
667
/* ------ Internal routines ------ */
669
669
/* Append a user path to the current path. */
671
671
upath_append_aux(os_ptr oppath, i_ctx_t *i_ctx_p, int *pnargs, bool upath_compat)
673
673
upath_state ups = UPS_INITIAL;
844
844
/* Append a user path to the current path, and then apply or return */
845
845
/* a transformation if one is supplied. */
847
847
upath_stroke(i_ctx_t *i_ctx_p, gs_matrix *pmat, bool upath_compat)