Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/gs/src/gxcomp.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1997 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: gxcomp.h,v 1.7 2005/03/14 18:08:36 dan Exp $ */
18
/* Definitions for implementing compositing functions */
19
 
20
#ifndef gxcomp_INCLUDED
21
#  define gxcomp_INCLUDED
22
 
23
#include "gscompt.h"
24
#include "gsrefct.h"
25
#include "gxbitfmt.h"
26
 
27
/*
28
 * Because compositor information is passed through the command list,
29
 * individual compositors must be identified by some means that is
30
 * independent of address space. The address of the compositor method
31
 * array, gs_composite_type_t (see below), cannot be used, as it is
32
 * meaningful only within a single address space.
33
 *
34
 * In addition, it is desirable the keep the compositor identifier
35
 * size as small as possible, as this identifier must be passed through
36
 * the command list for all bands whenever the compositor is invoked.
37
 * Fortunately, compositor invocation is not so frequent as to warrant
38
 * byte-sharing techniques, which most likely would store the identifier
39
 * in some unused bits of a command code byte. Hence, the smallest
40
 * reasonable size for the identifier is one byte. This allows for up
41
 * to 255 compositors, which should be ample (as of this writing, there
42
 * are only two compositors, only one of which can be passed through
43
 * the command list).
44
 *
45
 * The following list is intended to enumerate all compositors. We
46
 * use definitions rather than an encoding to ensure a one-byte size.
47
 */
48
#define GX_COMPOSITOR_ALPHA        0x01   /* DPS/Next alpha compositor */
49
#define GX_COMPOSITOR_OVERPRINT    0x02   /* overprint/overprintmode compositor */
50
#define GX_COMPOSITOR_PDF14_TRANS  0x03   /* PDF 1.4 transparency compositor */
51
 
52
 
53
/*
54
 * Define the abstract superclass for all compositing function types.
55
 */
56
						   /*typedef struct gs_composite_s gs_composite_t; *//* in gscompt.h */
57
 
58
#ifndef gs_imager_state_DEFINED
59
#  define gs_imager_state_DEFINED
60
typedef struct gs_imager_state_s gs_imager_state;
61
 
62
#endif
63
 
64
#ifndef gx_device_DEFINED
65
#  define gx_device_DEFINED
66
typedef struct gx_device_s gx_device;
67
 
68
#endif
69
 
70
typedef struct gs_composite_type_procs_s {
71
 
72
    /*
73
     * Create the default compositor for a compositing function.
74
     */
75
#define composite_create_default_compositor_proc(proc)\
76
  int proc(const gs_composite_t *pcte, gx_device **pcdev,\
77
    gx_device *dev, gs_imager_state *pis, gs_memory_t *mem)
78
    composite_create_default_compositor_proc((*create_default_compositor));
79
 
80
    /*
81
     * Test whether this function is equal to another one.
82
     */
83
#define composite_equal_proc(proc)\
84
  bool proc(const gs_composite_t *pcte, const gs_composite_t *pcte2)
85
    composite_equal_proc((*equal));
86
 
87
    /*
88
     * Convert the representation of this function to a string
89
     * for writing in a command list.  *psize is the amount of space
90
     * available.  If it is large enough, the procedure sets *psize
91
     * to the amount used and returns 0; if it is not large enough,
92
     * the procedure sets *psize to the amount needed and returns a
93
     * rangecheck error; in the case of any other error, *psize is
94
     * not changed.
95
     */
96
#define composite_write_proc(proc)\
97
  int proc(const gs_composite_t *pcte, byte *data, uint *psize)
98
    composite_write_proc((*write));
99
 
100
    /*
101
     * Convert the string representation of a function back to
102
     * a structure, allocating the structure. Return the number of
103
     * bytes read, or < 0 in the event of an error.
104
     */
105
#define composite_read_proc(proc)\
106
  int proc(gs_composite_t **ppcte, const byte *data, uint size,\
107
    gs_memory_t *mem)
108
    composite_read_proc((*read));
109
 
110
    /*
111
     * Update the clist write device when a compositor device is created.
112
     */
113
#define composite_clist_write_update(proc)\
114
  int proc(const gs_composite_t * pcte, gx_device * dev, gx_device ** pcdev,\
115
			gs_imager_state * pis, gs_memory_t * mem)
116
    composite_clist_write_update((*clist_compositor_write_update));
117
 
118
    /*
119
     * Update the clist read device when a compositor device is created.
120
     */
121
#define composite_clist_read_update(proc)\
122
  int proc(gs_composite_t * pcte, gx_device * cdev, gx_device * tdev,\
123
			gs_imager_state * pis, gs_memory_t * mem)
124
    composite_clist_read_update((*clist_compositor_read_update));
125
 
126
} gs_composite_type_procs_t;
127
 
128
typedef struct gs_composite_type_s {
129
    byte comp_id;   /* to identify compositor passed through command list */
130
    gs_composite_type_procs_t procs;
131
} gs_composite_type_t;
132
 
133
/*
134
 * Default implementation for creating a compositor for clist writing.
135
 * The default does nothing.
136
 */
137
composite_clist_write_update(gx_default_composite_clist_write_update);
138
 
139
/*
140
 * Default implementation for adjusting the clist reader when a compositor
141
 * device is added.  The default does nothing.
142
 */
143
composite_clist_read_update(gx_default_composite_clist_read_update);
144
 
145
/*
146
 * Compositing objects are reference-counted, because graphics states will
147
 * eventually reference them.  Note that the common part has no
148
 * garbage-collectible pointers and is never actually instantiated, so no
149
 * structure type is needed for it.
150
 */
151
#define gs_composite_common\
152
	const gs_composite_type_t *type;\
153
	gs_id id;		/* see gscompt.h */\
154
	rc_header rc
155
struct gs_composite_s {
156
    gs_composite_common;
157
};
158
 
159
/* Replace a procedure with a macro. */
160
#define gs_composite_id(pcte) ((pcte)->id)
161
 
162
#endif /* gxcomp_INCLUDED */