diff options
Diffstat (limited to 'gs/base/gstparam.h')
-rw-r--r-- | gs/base/gstparam.h | 150 |
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 */ |