Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 2001-2005, Ghostgum Software Pty Ltd.  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: gdevdsp.h,v 1.12 2005/03/04 22:00:22 ghostgum Exp $ */
18
/* gdevdsp.h - callback structure for DLL based display device */
19
 
20
#ifndef gdevdsp_INCLUDED
21
#  define gdevdsp_INCLUDED
22
 
23
/*
24
 * The callback structure must be provided by calling the
25
 * Ghostscript APIs in the following order:
26
 *  gsapi_new_instance(&minst);
27
 *  gsapi_set_display_callback(minst, callback);
28
 *  gsapi_init_with_args(minst, argc, argv);
29
 *
30
 * Supported parameters and default values are:
31
 * -sDisplayHandle=16#04d2 or 1234        string
32
 *    Caller supplied handle as a decimal or hexadecimal number
33
 *    in a string.  On 32-bit platforms, it may be set
34
 *    using -dDisplayHandle=1234 for backward compatibility.
35
 *    Included as first parameter of all callback functions.
36
 *
37
 * -dDisplayFormat=0                      long
38
 *    Color format specified using bitfields below.
39
 *    Included as argument of display_size() and display_presize()
40
 * These can only be changed when the device is closed.
41
 *
42
 * The second parameter of all callback functions "void *device"
43
 * is the address of the Ghostscript display device instance.
44
 * The arguments "void *handle" and "void *device" together
45
 * uniquely identify an instance of the display device.
46
 *
47
 * A typical sequence of callbacks would be
48
 *  open, presize, memalloc, size, sync, page
49
 *  presize, memfree, memalloc, size, sync, page
50
 *  preclose, memfree, close
51
 * The caller should not access the image buffer:
52
 *  - before the first sync
53
 *  - between presize and size
54
 *  - after preclose
55
 * If opening the device fails, you might see the following:
56
 *  open, presize, memalloc, memfree, close
57
 * 
58
 */
59
 
60
#define DISPLAY_VERSION_MAJOR 2
61
#define DISPLAY_VERSION_MINOR 0
62
 
63
#define DISPLAY_VERSION_MAJOR_V1 1 /* before separation format was added */
64
#define DISPLAY_VERSION_MINOR_V1 0
65
 
66
/* The display format is set by a combination of the following bitfields */
67
 
68
/* Define the color space alternatives */
69
typedef enum {
70
    DISPLAY_COLORS_NATIVE	 = (1<<0),
71
    DISPLAY_COLORS_GRAY  	 = (1<<1),
72
    DISPLAY_COLORS_RGB   	 = (1<<2),
73
    DISPLAY_COLORS_CMYK  	 = (1<<3),
74
    DISPLAY_COLORS_SEPARATION    = (1<<19)
75
} DISPLAY_FORMAT_COLOR;
76
#define DISPLAY_COLORS_MASK 0x8000fL
77
 
78
/* Define whether alpha information, or an extra unused bytes is included */
79
/* DISPLAY_ALPHA_FIRST and DISPLAY_ALPHA_LAST are not implemented */
80
typedef enum {
81
    DISPLAY_ALPHA_NONE   = (0<<4),
82
    DISPLAY_ALPHA_FIRST  = (1<<4),
83
    DISPLAY_ALPHA_LAST   = (1<<5),
84
    DISPLAY_UNUSED_FIRST = (1<<6),	/* e.g. Mac xRGB */
85
    DISPLAY_UNUSED_LAST  = (1<<7)	/* e.g. Windows BGRx */
86
} DISPLAY_FORMAT_ALPHA;
87
#define DISPLAY_ALPHA_MASK 0x00f0L
88
 
89
/* Define the depth per component for DISPLAY_COLORS_GRAY, 
90
 * DISPLAY_COLORS_RGB and DISPLAY_COLORS_CMYK, 
91
 * or the depth per pixel for DISPLAY_COLORS_NATIVE
92
 * DISPLAY_DEPTH_2 and DISPLAY_DEPTH_12 have not been tested.
93
 */
94
typedef enum {
95
    DISPLAY_DEPTH_1   = (1<<8),
96
    DISPLAY_DEPTH_2   = (1<<9),
97
    DISPLAY_DEPTH_4   = (1<<10),
98
    DISPLAY_DEPTH_8   = (1<<11),
99
    DISPLAY_DEPTH_12  = (1<<12),
100
    DISPLAY_DEPTH_16  = (1<<13)
101
    /* unused (1<<14) */
102
    /* unused (1<<15) */
103
} DISPLAY_FORMAT_DEPTH;
104
#define DISPLAY_DEPTH_MASK 0xff00L
105
 
106
 
107
/* Define whether Red/Cyan should come first, 
108
 * or whether Blue/Black should come first
109
 */
110
typedef enum {
111
    DISPLAY_BIGENDIAN    = (0<<16),	/* Red/Cyan first */
112
    DISPLAY_LITTLEENDIAN = (1<<16)	/* Blue/Black first */
113
} DISPLAY_FORMAT_ENDIAN;
114
#define DISPLAY_ENDIAN_MASK 0x00010000L
115
 
116
/* Define whether the raster starts at the top or bottom of the bitmap */
117
typedef enum {
118
    DISPLAY_TOPFIRST    = (0<<17),	/* Unix, Mac */
119
    DISPLAY_BOTTOMFIRST = (1<<17)	/* Windows */
120
} DISPLAY_FORMAT_FIRSTROW;
121
#define DISPLAY_FIRSTROW_MASK 0x00020000L
122
 
123
 
124
/* Define whether packing RGB in 16-bits should use 555
125
 * or 565 (extra bit for green)
126
 */
127
typedef enum {
128
    DISPLAY_NATIVE_555 = (0<<18),
129
    DISPLAY_NATIVE_565 = (1<<18)
130
} DISPLAY_FORMAT_555;
131
#define DISPLAY_555_MASK 0x00040000L
132
 
133
/* Define the row alignment, which must be equal to or greater than
134
 * the size of a pointer.
135
 * The default (DISPLAY_ROW_ALIGN_DEFAULT) is the size of a pointer, 
136
 * 4 bytes (DISPLAY_ROW_ALIGN_4) on 32-bit systems or 8 bytes 
137
 * (DISPLAY_ROW_ALIGN_8) on 64-bit systems.
138
 */
139
typedef enum {
140
    DISPLAY_ROW_ALIGN_DEFAULT = (0<<20),
141
    /* DISPLAY_ROW_ALIGN_1 = (1<<20), */ /* not currently possible */
142
    /* DISPLAY_ROW_ALIGN_2 = (2<<20), */ /* not currently possible */
143
    DISPLAY_ROW_ALIGN_4 = (3<<20),
144
    DISPLAY_ROW_ALIGN_8 = (4<<20),
145
    DISPLAY_ROW_ALIGN_16 = (5<<20),
146
    DISPLAY_ROW_ALIGN_32 = (6<<20),
147
    DISPLAY_ROW_ALIGN_64 = (7<<20)
148
} DISPLAY_FORMAT_ROW_ALIGN;
149
#define DISPLAY_ROW_ALIGN_MASK 0x00700000L
150
 
151
 
152
#ifndef display_callback_DEFINED
153
#define display_callback_DEFINED
154
typedef struct display_callback_s display_callback;
155
#endif
156
 
157
/*
158
 * Note that for Windows, the display callback functions are 
159
 * cdecl, not stdcall.  This differs from those in iapi.h.
160
 */
161
 
162
struct display_callback_s {
163
    /* Size of this structure */
164
    /* Used for checking if we have been handed a valid structure */
165
    int size;
166
 
167
    /* Major version of this structure  */
168
    /* The major version number will change if this structure changes. */
169
    int version_major;
170
 
171
    /* Minor version of this structure */
172
    /* The minor version number will change if new features are added
173
     * without changes to this structure.  For example, a new color
174
     * format.
175
     */
176
    int version_minor;
177
 
178
    /* New device has been opened */
179
    /* This is the first event from this device. */
180
    int (*display_open)(void *handle, void *device);
181
 
182
    /* Device is about to be closed. */
183
    /* Device will not be closed until this function returns. */
184
    int (*display_preclose)(void *handle, void *device);
185
 
186
    /* Device has been closed. */
187
    /* This is the last event from this device. */
188
    int (*display_close)(void *handle, void *device);
189
 
190
    /* Device is about to be resized. */
191
    /* Resize will only occur if this function returns 0. */
192
    /* raster is byte count of a row. */
193
    int (*display_presize)(void *handle, void *device,
194
	int width, int height, int raster, unsigned int format);
195
 
196
    /* Device has been resized. */
197
    /* New pointer to raster returned in pimage */
198
    int (*display_size)(void *handle, void *device, int width, int height, 
199
	int raster, unsigned int format, unsigned char *pimage);
200
 
201
    /* flushpage */
202
    int (*display_sync)(void *handle, void *device);
203
 
204
    /* showpage */
205
    /* If you want to pause on showpage, then don't return immediately */
206
    int (*display_page)(void *handle, void *device, int copies, int flush);
207
 
208
    /* Notify the caller whenever a portion of the raster is updated. */
209
    /* This can be used for cooperative multitasking or for
210
     * progressive update of the display.
211
     * This function pointer may be set to NULL if not required.
212
     */
213
    int (*display_update)(void *handle, void *device, int x, int y, 
214
	int w, int h);
215
 
216
    /* Allocate memory for bitmap */
217
    /* This is provided in case you need to create memory in a special
218
     * way, e.g. shared.  If this is NULL, the Ghostscript memory device 
219
     * allocates the bitmap. This will only called to allocate the
220
     * image buffer. The first row will be placed at the address 
221
     * returned by display_memalloc.
222
     */
223
    void *(*display_memalloc)(void *handle, void *device, unsigned long size);
224
 
225
    /* Free memory for bitmap */
226
    /* If this is NULL, the Ghostscript memory device will free the bitmap */
227
    int (*display_memfree)(void *handle, void *device, void *mem);
228
 
229
    /* Added in V2 */
230
    /* When using separation color space (DISPLAY_COLORS_SEPARATION),
231
     * give a mapping for one separation component.
232
     * This is called for each new component found.
233
     * It may be called multiple times for each component.
234
     * It may be called at any time between display_size
235
     * and display_close.
236
     * The client uses this to map from the separations to CMYK
237
     * and hence to RGB for display.
238
     * GS must only use this callback if version_major >= 2.
239
     * The unsigned short c,m,y,k values are 65535 = 1.0.
240
     * This function pointer may be set to NULL if not required.
241
     */
242
    int (*display_separation)(void *handle, void *device,
243
	int component, const char *component_name,
244
	unsigned short c, unsigned short m, 
245
	unsigned short y, unsigned short k);
246
};
247
 
248
/* This is the V1 structure, before separation format was added */
249
struct display_callback_v1_s {
250
    int size;
251
    int version_major;
252
    int version_minor;
253
    int (*display_open)(void *handle, void *device);
254
    int (*display_preclose)(void *handle, void *device);
255
    int (*display_close)(void *handle, void *device);
256
    int (*display_presize)(void *handle, void *device,
257
	int width, int height, int raster, unsigned int format);
258
    int (*display_size)(void *handle, void *device, int width, int height, 
259
	int raster, unsigned int format, unsigned char *pimage);
260
    int (*display_sync)(void *handle, void *device);
261
    int (*display_page)(void *handle, void *device, int copies, int flush);
262
    int (*display_update)(void *handle, void *device, int x, int y, 
263
	int w, int h);
264
    void *(*display_memalloc)(void *handle, void *device, unsigned long size);
265
    int (*display_memfree)(void *handle, void *device, void *mem);
266
};
267
 
268
#define DISPLAY_CALLBACK_V1_SIZEOF sizeof(struct display_callback_v1_s)
269
 
270
#endif /* gdevdsp_INCLUDED */