xref: /plan9/sys/src/cmd/gs/src/gspath.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
17dd7cddfSDavid du Colombier /* Copyright (C) 1989, 1995, 1996, 1997, 1998, 1999 Aladdin Enterprises.  All rights reserved.
27dd7cddfSDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
57dd7cddfSDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
97dd7cddfSDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
157dd7cddfSDavid du Colombier */
167dd7cddfSDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: gspath.h,v 1.7 2004/05/11 10:41:55 igor Exp $ */
187dd7cddfSDavid du Colombier /* Graphics state path procedures */
197dd7cddfSDavid du Colombier /* Requires gsstate.h */
207dd7cddfSDavid du Colombier 
217dd7cddfSDavid du Colombier #ifndef gspath_INCLUDED
227dd7cddfSDavid du Colombier #  define gspath_INCLUDED
237dd7cddfSDavid du Colombier 
247dd7cddfSDavid du Colombier #include "gspenum.h"
257dd7cddfSDavid du Colombier 
267dd7cddfSDavid du Colombier /* Path constructors */
27*593dc095SDavid du Colombier int gs_newpath(gs_state *),
28*593dc095SDavid du Colombier     gs_moveto(gs_state *, floatp, floatp),
29*593dc095SDavid du Colombier     gs_rmoveto(gs_state *, floatp, floatp),
30*593dc095SDavid du Colombier     gs_lineto(gs_state *, floatp, floatp),
31*593dc095SDavid du Colombier     gs_rlineto(gs_state *, floatp, floatp),
32*593dc095SDavid du Colombier     gs_arc(gs_state *, floatp, floatp, floatp, floatp, floatp),
33*593dc095SDavid du Colombier     gs_arcn(gs_state *, floatp, floatp, floatp, floatp, floatp),
347dd7cddfSDavid du Colombier     /*
357dd7cddfSDavid du Colombier      * Because of an obscure bug in the IBM RS/6000 compiler, one (but not
367dd7cddfSDavid du Colombier      * both) bool argument(s) for gs_arc_add must come before the floatp
377dd7cddfSDavid du Colombier      * arguments.
387dd7cddfSDavid du Colombier      */
39*593dc095SDavid du Colombier     gs_arc_add(gs_state *, bool, floatp, floatp, floatp, floatp, floatp, bool),
40*593dc095SDavid du Colombier     gs_arcto(gs_state *, floatp, floatp, floatp, floatp, floatp, float[4]),
41*593dc095SDavid du Colombier     gs_curveto(gs_state *, floatp, floatp, floatp, floatp, floatp, floatp),
42*593dc095SDavid du Colombier     gs_rcurveto(gs_state *, floatp, floatp, floatp, floatp, floatp, floatp),
43*593dc095SDavid du Colombier     gs_closepath(gs_state *);
447dd7cddfSDavid du Colombier 
457dd7cddfSDavid du Colombier #ifndef gs_imager_state_DEFINED
467dd7cddfSDavid du Colombier #  define gs_imager_state_DEFINED
477dd7cddfSDavid du Colombier typedef struct gs_imager_state_s gs_imager_state;
487dd7cddfSDavid du Colombier #endif
497dd7cddfSDavid du Colombier #ifndef gx_path_DEFINED
507dd7cddfSDavid du Colombier #  define gx_path_DEFINED
517dd7cddfSDavid du Colombier typedef struct gx_path_s gx_path;
527dd7cddfSDavid du Colombier #endif
53*593dc095SDavid du Colombier #ifndef gs_matrix_fixed_DEFINED
54*593dc095SDavid du Colombier #define gs_matrix_fixed_DEFINED
55*593dc095SDavid du Colombier typedef struct gs_matrix_fixed_s gs_matrix_fixed;
56*593dc095SDavid du Colombier #endif
57*593dc095SDavid du Colombier 
58*593dc095SDavid du Colombier /* Imager-level procedures */
59*593dc095SDavid du Colombier int gs_imager_arc_add(gx_path * ppath, gs_imager_state * pis,
607dd7cddfSDavid du Colombier 		      bool clockwise, floatp axc, floatp ayc,
617dd7cddfSDavid du Colombier 		      floatp arad, floatp aang1, floatp aang2,
62*593dc095SDavid du Colombier 		      bool add_line);
63*593dc095SDavid du Colombier void make_quadrant_arc(gs_point *p, const gs_point *c,
64*593dc095SDavid du Colombier 	const gs_point *p0, const gs_point *p1, double r);
657dd7cddfSDavid du Colombier 
667dd7cddfSDavid du Colombier /* Add the current path to the path in the previous graphics state. */
67*593dc095SDavid du Colombier int gs_upmergepath(gs_state *);
687dd7cddfSDavid du Colombier 
697dd7cddfSDavid du Colombier /* Path accessors and transformers */
70*593dc095SDavid du Colombier int gs_currentpoint(gs_state *, gs_point *),
71*593dc095SDavid du Colombier       gs_upathbbox(gs_state *, gs_rect *, bool),
72*593dc095SDavid du Colombier       gs_dashpath(gs_state *),
73*593dc095SDavid du Colombier       gs_flattenpath(gs_state *),
74*593dc095SDavid du Colombier       gs_reversepath(gs_state *),
75*593dc095SDavid du Colombier       gs_strokepath(gs_state *);
767dd7cddfSDavid du Colombier 
777dd7cddfSDavid du Colombier /* The extra argument for gs_upathbbox controls whether to include */
787dd7cddfSDavid du Colombier /* a trailing moveto in the bounding box. */
797dd7cddfSDavid du Colombier #define gs_pathbbox(pgs, prect)\
807dd7cddfSDavid du Colombier   gs_upathbbox(pgs, prect, false)
817dd7cddfSDavid du Colombier 
827dd7cddfSDavid du Colombier /* Path enumeration */
837dd7cddfSDavid du Colombier 
847dd7cddfSDavid du Colombier /* This interface conditionally makes a copy of the path. */
85*593dc095SDavid du Colombier gs_path_enum *gs_path_enum_alloc(gs_memory_t *, client_name_t);
86*593dc095SDavid du Colombier int gs_path_enum_copy_init(gs_path_enum *, const gs_state *, bool);
877dd7cddfSDavid du Colombier 
887dd7cddfSDavid du Colombier #define gs_path_enum_init(penum, pgs)\
897dd7cddfSDavid du Colombier   gs_path_enum_copy_init(penum, pgs, true)
90*593dc095SDavid du Colombier int gs_path_enum_next(gs_path_enum *, gs_point[3]);  /* 0 when done */
91*593dc095SDavid du Colombier void gs_path_enum_cleanup(gs_path_enum *);
927dd7cddfSDavid du Colombier 
937dd7cddfSDavid du Colombier /* Clipping */
94*593dc095SDavid du Colombier int gs_clippath(gs_state *),
95*593dc095SDavid du Colombier     gs_initclip(gs_state *),
96*593dc095SDavid du Colombier     gs_clip(gs_state *),
97*593dc095SDavid du Colombier     gs_eoclip(gs_state *);
987dd7cddfSDavid du Colombier 
997dd7cddfSDavid du Colombier #endif /* gspath_INCLUDED */
100