]>
git.ipfire.org Git - thirdparty/cups.git/blob - filter/hpgl-attr.c
2 * "$Id: hpgl-attr.c 177 2006-06-21 00:20:03Z jlovell $"
4 * HP-GL/2 attribute processing for the Common UNIX Printing System (CUPS).
6 * Copyright 1993-2005 by Easy Software Products.
8 * These coded instructions, statements, and computer programs are the
9 * property of Easy Software Products and are protected by Federal
10 * copyright law. Distribution and use rights are outlined in the file
11 * "LICENSE.txt" which should have been included with this file. If this
12 * file is missing or damaged please contact Easy Software Products
15 * Attn: CUPS Licensing Information
16 * Easy Software Products
17 * 44141 Airport View Drive, Suite 204
18 * Hollywood, Maryland 20636 USA
20 * Voice: (301) 373-9600
21 * EMail: cups-info@cups.org
22 * WWW: http://www.cups.org
24 * This file is subject to the Apple OS-Developed Software exception.
28 * CR_color_range() - Set the range for color values.
29 * AC_anchor_corner() - Set the anchor corner.
30 * FT_fill_type() - Set the fill type or pattern.
31 * LA_line_attributes() - Set the line drawing attributes.
32 * LT_line_type() - Set the line type (style)...
33 * NP_number_pens() - Set the number of pens to be used.
34 * PC_pen_color() - Set the pen color...
35 * PW_pen_width() - Set the pen width.
36 * RF_raster_fill() - Set the raster fill pattern.
37 * SM_symbol_mode() - Set where symbols are drawn.
38 * SP_select_pen() - Select a pen for drawing.
39 * UL_user_line_type() - Set a user-defined line type.
40 * WU_width_units() - Set the units used for pen widths.
44 * Include necessary headers...
51 * 'CR_color_range()' - Set the range for color values.
55 CR_color_range(int num_params
, /* I - Number of parameters */
56 param_t
*params
) /* I - Parameters */
61 * Default to 0 to 255 for all color values.
64 ColorRange
[0][0] = 0.0;
65 ColorRange
[0][1] = 255.0;
66 ColorRange
[1][0] = 0.0;
67 ColorRange
[1][1] = 255.0;
68 ColorRange
[2][0] = 0.0;
69 ColorRange
[2][1] = 255.0;
71 else if (num_params
== 6)
74 * Set the range based on the parameters...
77 ColorRange
[0][0] = params
[0].value
.number
;
78 ColorRange
[0][1] = params
[1].value
.number
- params
[0].value
.number
;
79 ColorRange
[1][0] = params
[2].value
.number
;
80 ColorRange
[1][1] = params
[3].value
.number
- params
[2].value
.number
;
81 ColorRange
[2][0] = params
[4].value
.number
;
82 ColorRange
[2][1] = params
[5].value
.number
- params
[4].value
.number
;
85 fprintf(stderr
, "WARNING: HP-GL/2 \'CR\' command with invalid number of parameters (%d)!\n",
91 * 'AC_anchor_corner()' - Set the anchor corner.
95 AC_anchor_corner(int num_params
, /* I - Number of parameters */
96 param_t
*params
) /* I - Parameters */
104 * 'FT_fill_type()' - Set the fill type or pattern.
108 * This needs to be updated to support non-solid fill.
112 FT_fill_type(int num_params
, /* I - Number of parameters */
113 param_t
*params
) /* I - Parameters */
115 if (num_params
== 0 ||
116 params
[0].value
.number
== 1 ||
117 params
[0].value
.number
== 2)
119 /**** SOLID PATTERN ****/
125 * 'LA_line_attributes()' - Set the line drawing attributes.
129 LA_line_attributes(int num_params
, /* I - Number of parameters */
130 param_t
*params
) /* I - Parameters */
132 int i
; /* Looping var */
141 else for (i
= 0; i
< (num_params
- 1); i
+= 2)
142 switch ((int)params
[i
].value
.number
)
145 LineCap
= params
[i
+ 1].value
.number
== 1 ? 0 :
146 params
[i
+ 1].value
.number
== 4 ? 1 : 2;
149 switch ((int)params
[i
+ 1].value
.number
)
165 MiterLimit
= 1.0 + 0.5 * (params
[i
+ 1].value
.number
- 1.0);
171 printf("%.1f setmiterlimit\n", MiterLimit
);
172 printf("%d setlinecap\n", LineCap
);
173 printf("%d setlinejoin\n", LineJoin
);
179 * 'LT_line_type()' - Set the line type (style)...
183 * This needs to be updated to support line types.
187 LT_line_type(int num_params
, /* I - Number of parameters */
188 param_t
*params
) /* I - Parameters */
196 * 'NP_number_pens()' - Set the number of pens to be used.
200 NP_number_pens(int num_params
, /* I - Number of parameters */
201 param_t
*params
) /* I - Parameters */
203 int i
; /* Looping var */
208 else if (num_params
== 1 && params
[0].value
.number
<= 1024)
209 PenCount
= (int)params
[0].value
.number
;
211 fprintf(stderr
, "WARNING: HP-GL/2 \'NP\' command with invalid number of parameters (%d)!\n",
214 for (i
= 0; i
<= PenCount
; i
++)
215 Pens
[i
].width
= PenWidth
;
217 PC_pen_color(0, NULL
);
222 * 'PC_pen_color()' - Set the pen color...
226 PC_pen_color(int num_params
, /* I - Number of parameters */
227 param_t
*params
) /* I - Parameters */
229 int i
; /* Looping var */
230 static float standard_colors
[8][3] = /* Standard colors for first 8 pens */
232 { 1.0, 1.0, 1.0 }, /* White */
233 { 0.0, 0.0, 0.0 }, /* Black */
234 { 1.0, 0.0, 0.0 }, /* Red */
235 { 0.0, 1.0, 0.0 }, /* Green */
236 { 1.0, 1.0, 0.0 }, /* Yellow */
237 { 0.0, 0.0, 1.0 }, /* Blue */
238 { 1.0, 0.0, 1.0 }, /* Magenta */
239 { 0.0, 1.0, 1.0 } /* Cyan */
245 for (i
= 0; i
<= PenCount
; i
++)
248 Pens
[i
].rgb
[0] = standard_colors
[i
][0];
249 Pens
[i
].rgb
[1] = standard_colors
[i
][1];
250 Pens
[i
].rgb
[2] = standard_colors
[i
][2];
254 Pens
[i
].rgb
[0] = 0.0f
;
255 Pens
[i
].rgb
[1] = 0.0f
;
256 Pens
[i
].rgb
[2] = 0.0f
;
260 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
261 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
262 Pens
[PenNumber
].width
* PenScaling
);
264 else if (num_params
== 1 || num_params
== 4)
266 i
= (int)params
[0].value
.number
;
270 Pens
[i
].rgb
[0] = standard_colors
[i
& 7][0];
271 Pens
[i
].rgb
[1] = standard_colors
[i
& 7][1];
272 Pens
[i
].rgb
[2] = standard_colors
[i
& 7][2];
276 Pens
[i
].rgb
[0] = (params
[1].value
.number
- ColorRange
[0][0]) /
277 (ColorRange
[0][1] - ColorRange
[0][0]);
278 Pens
[i
].rgb
[1] = (params
[2].value
.number
- ColorRange
[1][0]) /
279 (ColorRange
[1][1] - ColorRange
[1][0]);
280 Pens
[i
].rgb
[2] = (params
[3].value
.number
- ColorRange
[2][0]) /
281 (ColorRange
[2][1] - ColorRange
[2][0]);
283 fprintf(stderr
, "DEBUG: Pen %d %.0f %.0f %.0f = %.3f %.3f %.3f\n",
284 i
, params
[1].value
.number
, params
[2].value
.number
,
285 params
[3].value
.number
, Pens
[i
].rgb
[0], Pens
[i
].rgb
[1],
289 if (PageDirty
&& i
== PenNumber
)
290 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
291 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
292 Pens
[PenNumber
].width
* PenScaling
);
295 fprintf(stderr
, "WARNING: HP-GL/2 \'PC\' command with invalid number of parameters (%d)!\n",
301 * 'PW_pen_width()' - Set the pen width.
305 PW_pen_width(int num_params
, /* I - Number of parameters */
306 param_t
*params
) /* I - Parameters */
308 int pen
; /* Pen number */
309 float w
; /* Width value */
319 w
= 0.35f
/ 25.4f
* 72.0f
;
321 w
= params
[0].value
.number
/ 25.4f
* 72.0f
;
329 w
= (float)hypot(PlotSize
[0], PlotSize
[1]) / 1016.0f
* 72.0f
;
334 w
*= params
[0].value
.number
;
339 pen
= (int)params
[1].value
.number
;
343 if (PageDirty
&& pen
== PenNumber
)
344 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
345 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
346 Pens
[PenNumber
].width
* PenScaling
);
348 else if (num_params
< 2)
351 * Set width for all pens...
354 for (pen
= 0; pen
<= PenCount
; pen
++)
358 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
359 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
360 Pens
[PenNumber
].width
* PenScaling
);
363 fprintf(stderr
, "WARNING: HP-GL/2 \'PW\' command with invalid number of parameters (%d)!\n",
369 * 'RF_raster_fill()' - Set the raster fill pattern.
373 * This needs to be implemented.
377 RF_raster_fill(int num_params
, /* I - Number of parameters */
378 param_t
*params
) /* I - Parameters */
386 * 'SM_symbol_mode()' - Set where symbols are drawn.
390 SM_symbol_mode(int num_params
, /* I - Number of parameters */
391 param_t
*params
) /* I - Parameters */
399 * 'SP_select_pen()' - Select a pen for drawing.
403 SP_select_pen(int num_params
, /* I - Number of parameters */
404 param_t
*params
) /* I - Parameters */
408 else if (params
[0].value
.number
<= PenCount
)
409 PenNumber
= (int)params
[0].value
.number
;
411 fprintf(stderr
, "WARNING: HP-GL/2 \'SP\' command with invalid number or value of parameters (%d, %d)!\n",
412 num_params
, (int)params
[0].value
.number
);
415 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
416 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
417 Pens
[PenNumber
].width
* PenScaling
);
422 * 'UL_user_line_type()' - Set a user-defined line type.
426 UL_user_line_type(int num_params
, /* I - Number of parameters */
427 param_t
*params
) /* I - Parameters */
435 * 'WU_width_units()' - Set the units used for pen widths.
439 WU_width_units(int num_params
, /* I - Number of parameters */
440 param_t
*params
) /* I - Parameters */
444 else if (num_params
== 1)
445 WidthUnits
= (int)params
[0].value
.number
;
447 fprintf(stderr
, "WARNING: HP-GL/2 \'WU\' command with invalid number of parameters (%d)!\n",
453 * End of "$Id: hpgl-attr.c 177 2006-06-21 00:20:03Z jlovell $".