summaryrefslogtreecommitdiff
path: root/gs/base/gstparam.h
diff options
context:
space:
mode:
Diffstat (limited to 'gs/base/gstparam.h')
-rw-r--r--gs/base/gstparam.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/gs/base/gstparam.h b/gs/base/gstparam.h
new file mode 100644
index 000000000..a99da3adc
--- /dev/null
+++ b/gs/base/gstparam.h
@@ -0,0 +1,150 @@
+/* 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$ */
+/* Transparency parameter definitions */
+
+#ifndef gstparam_INCLUDED
+# define gstparam_INCLUDED
+
+#include "gsccolor.h"
+#include "gsrefct.h"
+
+/* Define the names of the known blend modes. */
+typedef enum {
+ BLEND_MODE_Compatible,
+ BLEND_MODE_Normal,
+ BLEND_MODE_Multiply,
+ BLEND_MODE_Screen,
+ BLEND_MODE_Difference,
+ BLEND_MODE_Darken,
+ BLEND_MODE_Lighten,
+ BLEND_MODE_ColorDodge,
+ BLEND_MODE_ColorBurn,
+ BLEND_MODE_Exclusion,
+ BLEND_MODE_HardLight,
+ BLEND_MODE_Overlay,
+ BLEND_MODE_SoftLight,
+ BLEND_MODE_Luminosity,
+ BLEND_MODE_Hue,
+ BLEND_MODE_Saturation,
+ BLEND_MODE_Color
+#define MAX_BLEND_MODE BLEND_MODE_Color
+} gs_blend_mode_t;
+#define GS_BLEND_MODE_NAMES\
+ "Compatible", "Normal", "Multiply", "Screen", "Difference",\
+ "Darken", "Lighten", "ColorDodge", "ColorBurn", "Exclusion",\
+ "HardLight", "Overlay", "SoftLight", "Luminosity", "Hue",\
+ "Saturation", "Color"
+
+/* Define the common part for a transparency stack state. */
+typedef enum {
+ TRANSPARENCY_STATE_Group = 1, /* must not be 0 */
+ TRANSPARENCY_STATE_Mask
+} gs_transparency_state_type_t;
+#define GS_TRANSPARENCY_STATE_COMMON\
+ gs_transparency_state_t *saved;\
+ gs_transparency_state_type_t type
+typedef struct gs_transparency_state_s gs_transparency_state_t;
+struct gs_transparency_state_s {
+ GS_TRANSPARENCY_STATE_COMMON;
+};
+
+/* Define the common part for a cached transparency mask. */
+#define GS_TRANSPARENCY_MASK_COMMON\
+ rc_header rc
+typedef struct gs_transparency_mask_s {
+ GS_TRANSPARENCY_MASK_COMMON;
+} gs_transparency_mask_t;
+
+/* Define the parameter structure for a transparency group. */
+#ifndef gs_color_space_DEFINED
+# define gs_color_space_DEFINED
+typedef struct gs_color_space_s gs_color_space;
+#endif
+#ifndef gs_function_DEFINED
+typedef struct gs_function_s gs_function_t;
+# define gs_function_DEFINED
+#endif
+
+/* (Update gs_trans_group_params_init if these change.) */
+typedef struct gs_transparency_group_params_s {
+ const gs_color_space *ColorSpace;
+ bool Isolated;
+ bool Knockout;
+ bool image_with_SMask;
+ bool idle;
+ uint mask_id;
+} gs_transparency_group_params_t;
+
+/* Define the parameter structure for a transparency mask. */
+typedef enum {
+ TRANSPARENCY_MASK_Alpha,
+ TRANSPARENCY_MASK_Luminosity
+} gs_transparency_mask_subtype_t;
+
+#define GS_TRANSPARENCY_MASK_SUBTYPE_NAMES\
+ "Alpha", "Luminosity"
+
+/* See the gx_transparency_mask_params_t type below */
+/* (Update gs_trans_mask_params_init if these change.) */
+typedef struct gs_transparency_mask_params_s {
+ gs_transparency_mask_subtype_t subtype;
+ int Background_components;
+ float Background[GS_CLIENT_COLOR_MAX_COMPONENTS];
+ float GrayBackground;
+ int (*TransferFunction)(floatp in, float *out, void *proc_data);
+ gs_function_t *TransferFunction_data;
+ bool replacing;
+} gs_transparency_mask_params_t;
+
+#define MASK_TRANSFER_FUNCTION_SIZE 256
+
+/* The post clist version of transparency mask parameters */
+typedef struct gx_transparency_mask_params_s {
+ gs_transparency_mask_subtype_t subtype;
+ int Background_components;
+ float Background[GS_CLIENT_COLOR_MAX_COMPONENTS];
+ float GrayBackground;
+ bool function_is_identity;
+ bool idle;
+ bool replacing;
+ uint mask_id;
+ byte transfer_fn[MASK_TRANSFER_FUNCTION_SIZE];
+} gx_transparency_mask_params_t;
+
+/*
+ The longest compositor command includes transparency mask parameters
+ (see gdevp14.c c_pdf14trans_write() the "case PDF14_BEGIN_TRANS_MASK").
+ Note that 'idle' is not written because it is generated by the clist interpreter.
+*/
+#define MAX_CLIST_TRANSPARENCY_BUFFER_SIZE ( \
+ 4 /* the clist cmd prefix byte cmd_opv_extend + extended function + 2 bytes for band_id */ + \
+ 1 + sizeof(float) * 6 /* See sput_matrix. */ + \
+ sizeof(((gs_pdf14trans_params_t *)0)->subtype) + \
+ 3 /* replacing, function_is_identity, Background_components */ + \
+ sizeof(((gs_pdf14trans_params_t *)0)->bbox) + \
+ sizeof(((gs_pdf14trans_params_t *)0)->mask_id) + \
+ sizeof(((gs_pdf14trans_params_t *)0)->Background) + \
+ sizeof(((gs_pdf14trans_params_t *)0)->GrayBackground))
+#define MAX_CLIST_TRANSPARENCY_COMPOSITOR_SIZE (MAX_CLIST_TRANSPARENCY_BUFFER_SIZE + \
+ sizeof(((gs_pdf14trans_params_t *)0)->transfer_fn))
+#define MAX_CLIST_COMPOSITOR_SIZE MAX_CLIST_TRANSPARENCY_COMPOSITOR_SIZE
+
+/* Select the opacity or shape parameters. */
+typedef enum {
+ TRANSPARENCY_CHANNEL_Opacity = 0,
+ TRANSPARENCY_CHANNEL_Shape = 1
+} gs_transparency_channel_selector_t;
+
+#endif /* gstparam_INCLUDED */