summaryrefslogtreecommitdiff
path: root/gs/base/gspcolor.h
diff options
context:
space:
mode:
Diffstat (limited to 'gs/base/gspcolor.h')
-rw-r--r--gs/base/gspcolor.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/gs/base/gspcolor.h b/gs/base/gspcolor.h
new file mode 100644
index 000000000..2b608e279
--- /dev/null
+++ b/gs/base/gspcolor.h
@@ -0,0 +1,123 @@
+/* Copyright (C) 2001-2006 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied, modified
+ or distributed except as expressly authorized under the terms of that
+ license. Refer to licensing information at http://www.artifex.com/
+ or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
+ San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
+*/
+
+/* $Id$ */
+/* Client interface to Pattern color */
+
+#ifndef gspcolor_INCLUDED
+# define gspcolor_INCLUDED
+
+#include "gsccolor.h"
+#include "gsrefct.h"
+#include "gsuid.h"
+
+/* ---------------- Types and structures ---------------- */
+
+/*
+ * We originally defined the gs_client_pattern structure before we
+ * realized that we would have to accommodate multiple PatternTypes.
+ * In version 5.68, we bit the bullet and made an incompatible change
+ * to this structure so that multiple PatternTypes could be supported.
+ * In order to make this work:
+ *
+ * Clients creating instances of any Pattern template structure
+ * (gs_patternN_template_t) must call gs_patternN_init to
+ * initialize all the members, before filling in any of the
+ * members themselves.
+ *
+ * This is a non-backward-compatible requirement relative to previous
+ * versions, but it was unavoidable.
+ */
+
+/*
+ * Define the abstract pattern template (called "prototype pattern" in Red
+ * Book).
+ */
+
+#ifndef gs_pattern_type_DEFINED
+# define gs_pattern_type_DEFINED
+typedef struct gs_pattern_type_s gs_pattern_type_t;
+#endif
+#ifndef gs_matrix_DEFINED
+# define gs_matrix_DEFINED
+typedef struct gs_matrix_s gs_matrix;
+#endif
+
+#define gs_pattern_template_common\
+ const gs_pattern_type_t *type;\
+ int PatternType; /* copied from the type structure */\
+ gs_uid uid;\
+ void *client_data /* additional data for rendering */
+
+typedef struct gs_pattern_template_s {
+ gs_pattern_template_common;
+} gs_pattern_template_t;
+
+/* The descriptor is public for subclassing. */
+extern_st(st_pattern_template);
+#define public_st_pattern_template() /* in gspcolor.c */\
+ gs_public_st_ptrs2(st_pattern_template, gs_pattern_template_t,\
+ "gs_pattern_template_t", pattern_template_enum_ptrs,\
+ pattern_template_reloc_ptrs, uid.xvalues, client_data)
+#define st_pattern_template_max_ptrs 2
+
+/* Definition of Pattern instances. */
+#ifndef gs_pattern_instance_DEFINED
+# define gs_pattern_instance_DEFINED
+typedef struct gs_pattern_instance_s gs_pattern_instance_t;
+#endif
+
+#define gs_pattern_instance_common\
+ rc_header rc;\
+ /* Following are set by makepattern */\
+ const gs_pattern_type_t *type; /* from template */\
+ gs_state *saved;\
+ gs_id pattern_id
+struct gs_pattern_instance_s {
+ gs_pattern_instance_common;
+};
+
+/* The following is public for subclassing. */
+extern_st(st_pattern_instance);
+#define public_st_pattern_instance() /* in gspcolor.c */\
+ gs_public_st_ptrs1(st_pattern_instance, gs_pattern_instance_t,\
+ "gs_pattern_instance_t", pattern_instance_enum_ptrs,\
+ pattern_instance_reloc_ptrs, saved)
+#define st_pattern_instance_max_ptrs 1
+
+/* ---------------- Procedures ---------------- */
+
+/* Set a Pattern color or a Pattern color space. */
+int gs_setpattern(gs_state *, const gs_client_color *);
+int gs_setpatternspace(gs_state *);
+
+/*
+ * Construct a Pattern color of any PatternType.
+ * The gs_memory_t argument for gs_make_pattern may be NULL, meaning use the
+ * same allocator as for the gs_state argument. Note that gs_make_pattern
+ * uses rc_alloc_struct_1 to allocate pattern instances.
+ */
+int gs_make_pattern(gs_client_color *, const gs_pattern_template_t *,
+ const gs_matrix *, gs_state *, gs_memory_t *);
+const gs_pattern_template_t *gs_get_pattern(const gs_client_color *);
+
+/*
+ * Adjust the reference count of a pattern. This is intended to support
+ * applications (such as PCL) which maintain client colors outside of the
+ * graphic state. Since the pattern instance structure is opaque to these
+ * applications, they need some way to release or retain the instances as
+ * needed.
+ */
+void gs_pattern_reference(gs_client_color * pcc, int delta);
+
+#endif /* gspcolor_INCLUDED */