summaryrefslogtreecommitdiff
path: root/gs/src/gxpaint.h
diff options
context:
space:
mode:
Diffstat (limited to 'gs/src/gxpaint.h')
-rw-r--r--gs/src/gxpaint.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/gs/src/gxpaint.h b/gs/src/gxpaint.h
new file mode 100644
index 000000000..f5f6a54a7
--- /dev/null
+++ b/gs/src/gxpaint.h
@@ -0,0 +1,108 @@
+/* Copyright (C) 1994, 1995, 1996, 1997 Aladdin Enterprises. All rights reserved.
+
+ This file is part of Aladdin Ghostscript.
+
+ Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
+ or distributor accepts any responsibility for the consequences of using it,
+ or for whether it serves any particular purpose or works at all, unless he
+ or she says so in writing. Refer to the Aladdin Ghostscript Free Public
+ License (the "License") for full details.
+
+ Every copy of Aladdin Ghostscript must include a copy of the License,
+ normally in a plain ASCII text file named PUBLIC. The License grants you
+ the right to copy, modify and redistribute Aladdin Ghostscript, but only
+ under certain conditions described in the License. Among other things, the
+ License requires that the copyright notice and this notice be preserved on
+ all copies.
+*/
+
+/* gxpaint.h */
+/* Device coordinate painting interface for Ghostscript library */
+/* Requires gsropt.h, gxfixed.h, gxpath.h */
+
+#ifndef gs_imager_state_DEFINED
+# define gs_imager_state_DEFINED
+typedef struct gs_imager_state_s gs_imager_state;
+#endif
+
+#ifndef gs_state_DEFINED
+# define gs_state_DEFINED
+typedef struct gs_state_s gs_state;
+#endif
+
+#ifndef gx_device_DEFINED
+# define gx_device_DEFINED
+typedef struct gx_device_s gx_device;
+#endif
+
+#ifndef gx_device_color_DEFINED
+# define gx_device_color_DEFINED
+typedef struct gx_device_color_s gx_device_color;
+#endif
+
+/* ------ Graphics-state-aware procedures ------ */
+
+/*
+ * The following procedures use information from the graphics state.
+ * They are implemented in gxpaint.c.
+ */
+
+int gx_fill_path(P6(gx_path *ppath, gx_device_color *pdevc, gs_state *pgs,
+ int rule, fixed adjust_x, fixed adjust_y));
+int gx_stroke_fill(P2(gx_path *ppath, gs_state *pgs));
+int gx_stroke_add(P3(gx_path *ppath, gx_path *to_path, gs_state *pgs));
+
+/* ------ Imager procedures ------ */
+
+/*
+ * Tweak the fill adjustment if necessary so that (nearly) empty
+ * rectangles are guaranteed to produce some output.
+ */
+void gx_adjust_if_empty(P2(const gs_fixed_rect *, gs_fixed_point *));
+
+/*
+ * Compute the amount by which to expand a stroked bounding box to account
+ * for line width, caps and joins. If the amount is too large to fit in
+ * a gs_fixed_point, return gs_error_limitcheck.
+ */
+int gx_stroke_path_expansion(P3(const gs_imager_state *,
+ const gx_path *, gs_fixed_point *));
+/* Backward compatibility */
+#define gx_stroke_expansion(pis, ppt)\
+ gx_stroke_path_expansion(pis, (const gx_path *)0, ppt)
+
+/*
+ * The following procedures do not need a graphics state.
+ * These procedures are implemented in gxfill.c and gxstroke.c.
+ */
+
+/* Define the parameters passed to the imager's filling routine. */
+#ifndef gx_fill_params_DEFINED
+# define gx_fill_params_DEFINED
+typedef struct gx_fill_params_s gx_fill_params;
+#endif
+struct gx_fill_params_s {
+ int rule; /* -1 = winding #, 1 = even/odd */
+ gs_fixed_point adjust;
+ float flatness;
+ bool fill_zero_width; /* if true, make zero-width/height */
+ /* rectangles one pixel wide/high */
+};
+
+#define gx_fill_path_only(ppath, dev, pis, params, pdevc, pcpath)\
+ (*dev_proc(dev, fill_path))(dev, pis, ppath, params, pdevc, pcpath)
+
+/* Define the parameters passed to the imager's stroke routine. */
+#ifndef gx_stroke_params_DEFINED
+# define gx_stroke_params_DEFINED
+typedef struct gx_stroke_params_s gx_stroke_params;
+#endif
+struct gx_stroke_params_s {
+ float flatness;
+};
+
+int gx_stroke_path_only(P7(gx_path *ppath, gx_path *to_path, gx_device *dev,
+ const gs_imager_state *pis,
+ const gx_stroke_params *params,
+ const gx_device_color *pdevc,
+ const gx_clip_path *pcpath));