1 /*
2 
3 Copyright (c) 2003-2004, AXE, Inc.  All rights reserved.
4 
5 Permission is hereby granted, free of charge, to any person obtaining
6 a copy of this software and associated documentation files (the
7 "Software"), to deal in the Software without restriction, including
8 without limitation the rights to use, copy, modify, merge, publish,
9 distribute, sublicense, and/or sell copies of the Software, and to
10 permit persons to whom the Software is furnished to do so, subject to
11 the following conditions:
12 
13 The above copyright notice and this permission notice shall be included
14 in all copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 
24 */
25 /* $Id: opvp_0_2_0.h 85 2007-02-15 08:48:56Z sho-otani $ */
26 /* opvp_common.h  ver.1.00 rel.1.0  26 Nov 2004 */
27 /* OpenPrinting Vector Printer Driver Glue Code */
28 
29 #ifndef	_FSGPD_0_2_0_H
30 #define	_FSGPD_0_2_0_H
31 
32 #define _PDAPI_VERSION_MAJOR_	0
33 #define _PDAPI_VERSION_MINOR_	2
34 
35 /* Return Values */
36 #define	OPVP_OK			0	/* error is -1 */
37 
38 /* Error Codes */
39 #define	OPVP_FATALERROR		-101	/* unrecoverable error occurred within the */
40                                                                         /* library */
41 #define	OPVP_BADREQUEST		-102	/* invalid function parameters */
42 #define	OPVP_BADCONTEXT		-103	/* bad parameter precontext */
43 #define	OPVP_NOTSUPPORTED	-104	/* printer or driver request not supported */
44 #define	OPVP_JOBCANCELED	-105	/* job cancelled */
45 #define	OPVP_PARAMERROR		-106	/* illegal parameter combination */
46 
47 /* Info params */
48 #define	OPVP_INFO_PREFIX	"updf:"
49 
50 /* Fix */
51 #define	OPVP_FIX_FRACT_WIDTH	8
52 #define	OPVP_FIX_FRACT_DENOM	(1<<OPVP_FIX_FRACT_WIDTH)
53 #define	OPVP_FIX_FLOOR_WIDTH	(sizeof(int)*8-OPVP_FIX_FRACT_WIDTH)
54 #if 0
55 typedef	struct {
56         unsigned int	fract	: OPVP_FIX_FRACT_WIDTH;
57         signed int	floor	: OPVP_FIX_FLOOR_WIDTH;
58 } OPVP_Fix;
59 #define	OPVP_i2Fix(i,fix)	(fix.fract=0,fix.floor=i)
60 #define	OPVP_Fix2f(fix,f)	(f=(double)fix.floor\
61                                   +(double)(fix.fract)/OPVP_FIX_FRACT_DENOM)
62 #define	OPVP_f2Fix(f,fix)	(fix.fract=(f-floor(f))*OPVP_FIX_FRACT_DENOM,\
63                                  fix.floor=floor(f))
64 #else
65 typedef	int	OPVP_Fix;
66 #define	OPVP_i2Fix(i,fix)	(fix=i<<8)
67 #define	OPVP_f2Fix(f,fix)	(fix=((int)floor(f)<<8)\
68                                     |((int)((f-floor(f))*OPVP_FIX_FRACT_DENOM)\
69                                       &0x000000ff))
70 #endif
71 
72 /* Basic Types */
73 typedef	struct	_OPVP_Point {
74         OPVP_Fix	x;
75         OPVP_Fix	y;
76 } OPVP_Point;
77 
78 typedef	struct	_OPVP_Rectangle {
79         OPVP_Point	p0;		/* start point */
80         OPVP_Point	p1;		/* end point */
81 } OPVP_Rectangle;
82 
83 typedef	struct	_OPVP_RoundRectangle {
84         OPVP_Point	p0;		/* start point */
85         OPVP_Point	p1;		/* end point */
86         OPVP_Fix	xellipse;
87         OPVP_Fix	yellipse;
88 } OPVP_RoundRectangle;
89 
90 /* Image Formats */
91 typedef	enum	_OPVP_ImageFormat {
92         OPVP_iformatRaw			= 0,
93         OPVP_iformatRLE			= 1,
94         OPVP_iformatJPEG		= 2,
95         OPVP_iformatPNG			= 3
96 } OPVP_ImageFormat;
97 
98 /* Color Presentation */
99 typedef	enum	_OPVP_ColorMapping {
100         OPVP_cmapDirect			= 0,
101         OPVP_cmapIndexed		= 1
102 } OPVP_ColorMapping;
103 
104 typedef	enum	_OPVP_ColorSpace {
105         OPVP_cspaceBW			= 0,
106         OPVP_cspaceDeviceGray		= 1,
107         OPVP_cspaceDeviceCMY		= 2,
108         OPVP_cspaceDeviceCMYK		= 3,
109         OPVP_cspaceDeviceRGB		= 4,
110         OPVP_cspaceStandardRGB		= 5,
111         OPVP_cspaceStandardRGB64	= 6
112 } OPVP_ColorSpace;
113 
114 /* Raster Operation modes */
115 typedef	enum	_OPVP_ROP {
116         OPVP_ropPset			= 0,
117         OPVP_ropPreset			= 1,
118         OPVP_ropOr			= 2,
119         OPVP_ropAnd			= 3,
120         OPVP_ropXor			= 4
121 } OPVP_ROP;
122 
123 /* Fill, Paint, Clip */
124 typedef	enum	_OPVP_FillMode {
125         OPVP_fillModeEvenOdd		= 0,
126         OPVP_fillModeWinding		= 1
127 } OPVP_FillMode;
128 
129 typedef	enum	_OPVP_PaintMode {
130         OPVP_paintModeOpaque		= 0,
131         OPVP_paintModeTransparent	= 1
132 } OPVP_PaintMode;
133 
134 typedef	enum	_OPVP_ClipRule {
135         OPVP_clipRuleEvenOdd		= 0,
136         OPVP_clipRuleWinding		= 1
137 } OPVP_ClipRule;
138 
139 /* Line */
140 typedef	enum	_OPVP_LineStyle {
141         OPVP_lineStyleSolid		= 0,
142         OPVP_lineStyleDash		= 1
143 } OPVP_LineStyle;
144 
145 typedef	enum	_OPVP_LineCap {
146         OPVP_lineCapButt		= 0,
147         OPVP_lineCapRound		= 1,
148         OPVP_lineCapSquare		= 2
149 } OPVP_LineCap;
150 
151 typedef	enum	_OPVP_LineJoin {
152         OPVP_lineJoinMiter		= 0,
153         OPVP_lineJoinRound		= 1,
154         OPVP_lineJoinBevel		= 2
155 } OPVP_LineJoin;
156 
157 /* Brush */
158 typedef	enum	_OPVP_BrushDataType {
159         OPVP_bdtypeNormal		= 0
160 } OPVP_BrushDataType;
161 
162 typedef	struct	_OPVP_BrushData {
163         OPVP_BrushDataType	type;
164         int		width;
165         int		height;
166         int		pitch;
167 #if (_PDAPI_VERSION_MAJOR_ == 0 && _PDAPI_VERSION_MINOR_ < 2)
168         void		*data;		/* pointer to actual data */
169 #else
170         char		data[1];
171 #endif
172 } OPVP_BrushData;
173 
174 typedef	struct	_OPVP_Brush {
175         OPVP_ColorSpace	colorSpace;
176         int		color[4];	/* aRGB quadruplet */
177 #if (_PDAPI_VERSION_MAJOR_ == 0 && _PDAPI_VERSION_MINOR_ < 2)
178         OPVP_BrushData	*pbrush;	/* pointer to brush data */
179                                         /* solid brush used, if null */
180         int		xorg;		/* brush origin */
181         int		yorg;		/* ignored for SetBgColor */
182 #else
183         int		xorg;		/* brush origin */
184         int		yorg;		/* ignored for SetBgColor */
185         OPVP_BrushData	*pbrush;	/* pointer to brush data */
186                                         /* solid brush used, if null */
187 #endif
188 } OPVP_Brush;
189 
190 /* Misc. Flags */
191 #define	OPVP_Arc		0	/* circular arc */
192 #define	OPVP_Chord		1	/* arch */
193 #define	OPVP_Pie		2	/* pie section */
194 #define	OPVP_Clockwise		0	/* clockwise */
195 #define	OPVP_Counterclockwise	1	/* counter-clockwise */
196 #define	OPVP_PathClose		0	/* Close path when using LinePath */
197 #define	OPVP_PathOpen		1	/* Do not close path when using LinePath */
198 
199 /* CTM */
200 typedef	struct	_OPVP_CTM {
201         float		a;
202         float		b;
203         float		c;
204         float		d;
205         float		e;
206         float		f;
207 } OPVP_CTM;
208 
209 /* Vector Driver API Proc. Entries */
210 typedef	struct	_OPVP_api_procs {
211         int	(*OpenPrinter)(int,char *,int *,struct _OPVP_api_procs **);
212         int	(*ClosePrinter)(int);
213         int	(*StartJob)(int,char *);
214         int	(*EndJob)(int);
215         int	(*StartDoc)(int,char *);
216         int	(*EndDoc)(int);
217         int	(*StartPage)(int,char *);
218         int	(*EndPage)(int);
219 #if (_PDAPI_VERSION_MAJOR_ > 0 || _PDAPI_VERSION_MINOR_ >= 2)
220         int	(*QueryDeviceCapability)(int,int,int,char *);
221         int	(*QueryDeviceInfo)(int,int,int,char *);
222 #endif
223         int	(*ResetCTM)(int);
224         int	(*SetCTM)(int,OPVP_CTM *);
225         int	(*GetCTM)(int,OPVP_CTM *);
226         int	(*InitGS)(int);
227         int	(*SaveGS)(int);
228         int	(*RestoreGS)(int);
229         int	(*QueryColorSpace)(int,OPVP_ColorSpace *,int *);
230         int	(*SetColorSpace)(int,OPVP_ColorSpace);
231         int	(*GetColorSpace)(int,OPVP_ColorSpace *);
232         int	(*QueryROP)(int,int *,int *);
233         int	(*SetROP)(int,int);
234         int	(*GetROP)(int,int *);
235         int	(*SetFillMode)(int,OPVP_FillMode);
236         int	(*GetFillMode)(int,OPVP_FillMode *);
237         int	(*SetAlphaConstant)(int,float);
238         int	(*GetAlphaConstant)(int,float *);
239         int	(*SetLineWidth)(int,OPVP_Fix);
240         int	(*GetLineWidth)(int,OPVP_Fix *);
241         int	(*SetLineDash)(int,OPVP_Fix *,int);
242         int	(*GetLineDash)(int,OPVP_Fix *,int *);
243         int	(*SetLineDashOffset)(int,OPVP_Fix);
244         int	(*GetLineDashOffset)(int,OPVP_Fix *);
245         int	(*SetLineStyle)(int,OPVP_LineStyle);
246         int	(*GetLineStyle)(int,OPVP_LineStyle *);
247         int	(*SetLineCap)(int,OPVP_LineCap);
248         int	(*GetLineCap)(int,OPVP_LineCap *);
249         int	(*SetLineJoin)(int,OPVP_LineJoin);
250         int	(*GetLineJoin)(int,OPVP_LineJoin *);
251         int	(*SetMiterLimit)(int,OPVP_Fix);
252         int	(*GetMiterLimit)(int,OPVP_Fix *);
253         int	(*SetPaintMode)(int,OPVP_PaintMode);
254         int	(*GetPaintMode)(int,OPVP_PaintMode *);
255         int	(*SetStrokeColor)(int,OPVP_Brush *);
256         int	(*SetFillColor)(int,OPVP_Brush *);
257         int	(*SetBgColor)(int,OPVP_Brush *);
258         int	(*NewPath)(int);
259         int	(*EndPath)(int);
260         int	(*StrokePath)(int);
261         int	(*FillPath)(int);
262         int	(*StrokeFillPath)(int);
263         int	(*SetClipPath)(int,OPVP_ClipRule);
264 #if (_PDAPI_VERSION_MAJOR_ > 0 || _PDAPI_VERSION_MINOR_ >= 2)
265         int	(*ResetClipPath)(int);
266 #endif
267         int	(*SetCurrentPoint)(int,OPVP_Fix,OPVP_Fix);
268         int	(*LinePath)(int,int,int,OPVP_Point *);
269         int	(*PolygonPath)(int,int,int *,OPVP_Point *);
270         int	(*RectanglePath)(int,int,OPVP_Rectangle *);
271         int	(*RoundRectanglePath)(int,int,OPVP_RoundRectangle *);
272 #if (_PDAPI_VERSION_MAJOR_ == 0 && _PDAPI_VERSION_MINOR_ < 2)
273         int	(*BezierPath)(int,int *,OPVP_Point *);
274 #else
275         int	(*BezierPath)(int,int,OPVP_Point *);
276 #endif
277         int	(*ArcPath)(int,int,int,OPVP_Fix,OPVP_Fix,OPVP_Fix,OPVP_Fix,
278                            OPVP_Fix,OPVP_Fix,OPVP_Fix,OPVP_Fix);
279         int	(*DrawBitmapText)(int,int,int,int,void *);
280         int	(*DrawImage)(int,int,int,int,
281                              OPVP_ImageFormat,OPVP_Rectangle,int,void *);
282         int	(*StartDrawImage)(int,int,int,int,
283                                   OPVP_ImageFormat,OPVP_Rectangle);
284         int	(*TransferDrawImage)(int,int,void *);
285         int	(*EndDrawImage)(int);
286         int	(*StartScanline)(int,int);
287         int	(*Scanline)(int,int,int *);
288         int	(*EndScanline)(int);
289         int	(*StartRaster)(int,int);
290         int	(*TransferRasterData)(int,int,unsigned char *);
291         int	(*SkipRaster)(int,int);
292         int	(*EndRaster)(int);
293         int	(*StartStream)(int);
294         int	(*TransferStreamData)(int,int,void *);
295         int	(*EndStream)(int);
296 } OPVP_api_procs;
297 
298 #endif	/* _OPVP_COMMON_H_ */
299