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