summaryrefslogtreecommitdiff
path: root/gs/base/gxcolor2.h
diff options
context:
space:
mode:
Diffstat (limited to 'gs/base/gxcolor2.h')
-rw-r--r--gs/base/gxcolor2.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/gs/base/gxcolor2.h b/gs/base/gxcolor2.h
new file mode 100644
index 000000000..2e8bc4ff8
--- /dev/null
+++ b/gs/base/gxcolor2.h
@@ -0,0 +1,99 @@
+/* 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$ */
+/* Internal definitions for Level 2 color routines */
+/* Requires gsstruct.h, gxfixed.h */
+
+#ifndef gxcolor2_INCLUDED
+# define gxcolor2_INCLUDED
+
+#include "gscolor2.h"
+#include "gsmatrix.h" /* for step_matrix */
+#include "gsrefct.h"
+#include "gxbitmap.h"
+
+/* Cache for Indexed color with procedure, or Separation color. */
+struct gs_indexed_map_s {
+ rc_header rc;
+ union {
+ int (*lookup_index)(const gs_color_space *, int, float *);
+ int (*tint_transform)(const gs_separation_params *, floatp, float *);
+ } proc;
+ void *proc_data;
+ uint num_values; /* base_space->type->num_components * (hival + 1) */
+ float *values; /* actually [num_values] */
+};
+#define private_st_indexed_map() /* in gscolor2.c */\
+ gs_private_st_ptrs2(st_indexed_map, gs_indexed_map, "gs_indexed_map",\
+ indexed_map_enum_ptrs, indexed_map_reloc_ptrs, proc_data, values)
+
+/* Define a lookup_index procedure that just returns the map values. */
+int lookup_indexed_map(const gs_color_space *, int, float *);
+
+/* Allocate an indexed map and its values. */
+/* The initial reference count is 1. */
+int alloc_indexed_map(gs_indexed_map ** ppmap, int num_values,
+ gs_memory_t * mem, client_name_t cname);
+
+/* Free an indexed map and its values when the reference count goes to 0. */
+rc_free_proc(free_indexed_map);
+
+/**************** TO gxptype1.h ****************/
+
+/*
+ * We define 'tiling space' as the space in which (0,0) is the origin of
+ * the key pattern cell and in which coordinate (i,j) is displaced by
+ * i * XStep + j * YStep from the origin. In this space, it is easy to
+ * compute a (rectangular) set of tile copies that cover a (rectangular)
+ * region to be tiled. Note that since all we care about is that the
+ * stepping matrix (the transformation from tiling space to device space)
+ * yield the right set of coordinates for integral X and Y values, we can
+ * adjust it to make the tiling computation easier; in particular, we can
+ * arrange it so that all 4 transformation factors are non-negative.
+ */
+
+#ifndef gs_pattern1_instance_t_DEFINED
+# define gs_pattern1_instance_t_DEFINED
+typedef struct gs_pattern1_instance_s gs_pattern1_instance_t;
+#endif
+
+struct gs_pattern1_instance_s {
+ gs_pattern_instance_common; /* must be first */
+ gs_pattern1_template_t template;
+ /* Following are created by makepattern */
+ gs_matrix step_matrix; /* tiling space -> device space */
+ gs_rect bbox; /* bbox of tile in tiling space */
+ bool is_simple; /* true if xstep/ystep = tile size */
+ /*
+ * uses_mask is always true for PostScript patterns, but is false
+ * for bitmap patterns that don't have explicit transparent pixels.
+ */
+ bool uses_mask; /* if true, pattern mask must be created */
+ gs_int_point size; /* in device coordinates */
+ gx_bitmap_id id; /* key for cached bitmap (= id of mask) */
+};
+
+#define private_st_pattern1_instance() /* in gsptype1.c */\
+ gs_private_st_composite(st_pattern1_instance, gs_pattern1_instance_t,\
+ "gs_pattern1_instance_t", pattern1_instance_enum_ptrs,\
+ pattern1_instance_reloc_ptrs)
+
+/* This is used for the case where we have float outputs due to the use of a procedure in
+ the indexed image, but we desire to have byte outputs. Used with interpolated images. */
+
+#define float_color_to_byte_color(float_color) ( (0.0 < float_color && float_color < 1.0) ? \
+ ((unsigned char) (float_color*255.0)) : ( (float_color <= 0.0) ? 0x00 : 0xFF ))
+
+
+#endif /* gxcolor2_INCLUDED */