]>
git.ipfire.org Git - thirdparty/cups.git/blob - filter/hpgl-attr.c
2 * "$Id: hpgl-attr.c 6649 2007-07-11 21:46:42Z mike $"
4 * HP-GL/2 attribute processing for the Common UNIX Printing System (CUPS).
6 * Copyright 2007 by Apple Inc.
7 * Copyright 1993-2007 by Easy Software Products.
9 * These coded instructions, statements, and computer programs are the
10 * property of Apple Inc. and are protected by Federal copyright
11 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
12 * which should have been included with this file. If this file is
13 * file is missing or damaged, see the license at "http://www.cups.org/".
15 * This file is subject to the Apple OS-Developed Software exception.
19 * CR_color_range() - Set the range for color values.
20 * AC_anchor_corner() - Set the anchor corner.
21 * FT_fill_type() - Set the fill type or pattern.
22 * LA_line_attributes() - Set the line drawing attributes.
23 * LT_line_type() - Set the line type (style)...
24 * NP_number_pens() - Set the number of pens to be used.
25 * PC_pen_color() - Set the pen color...
26 * PW_pen_width() - Set the pen width.
27 * RF_raster_fill() - Set the raster fill pattern.
28 * SM_symbol_mode() - Set where symbols are drawn.
29 * SP_select_pen() - Select a pen for drawing.
30 * UL_user_line_type() - Set a user-defined line type.
31 * WU_width_units() - Set the units used for pen widths.
35 * Include necessary headers...
42 * 'CR_color_range()' - Set the range for color values.
46 CR_color_range(int num_params
, /* I - Number of parameters */
47 param_t
*params
) /* I - Parameters */
52 * Default to 0 to 255 for all color values.
55 ColorRange
[0][0] = 0.0;
56 ColorRange
[0][1] = 255.0;
57 ColorRange
[1][0] = 0.0;
58 ColorRange
[1][1] = 255.0;
59 ColorRange
[2][0] = 0.0;
60 ColorRange
[2][1] = 255.0;
62 else if (num_params
== 6)
65 * Set the range based on the parameters...
68 ColorRange
[0][0] = params
[0].value
.number
;
69 ColorRange
[0][1] = params
[1].value
.number
- params
[0].value
.number
;
70 ColorRange
[1][0] = params
[2].value
.number
;
71 ColorRange
[1][1] = params
[3].value
.number
- params
[2].value
.number
;
72 ColorRange
[2][0] = params
[4].value
.number
;
73 ColorRange
[2][1] = params
[5].value
.number
- params
[4].value
.number
;
77 "DEBUG: HP-GL/2 \'CR\' command with invalid number of "
78 "parameters (%d)!\n", num_params
);
83 * 'AC_anchor_corner()' - Set the anchor corner.
87 AC_anchor_corner(int num_params
, /* I - Number of parameters */
88 param_t
*params
) /* I - Parameters */
96 * 'FT_fill_type()' - Set the fill type or pattern.
100 * This needs to be updated to support non-solid fill.
104 FT_fill_type(int num_params
, /* I - Number of parameters */
105 param_t
*params
) /* I - Parameters */
107 if (num_params
== 0 ||
108 params
[0].value
.number
== 1 ||
109 params
[0].value
.number
== 2)
111 /**** SOLID PATTERN ****/
117 * 'LA_line_attributes()' - Set the line drawing attributes.
121 LA_line_attributes(int num_params
, /* I - Number of parameters */
122 param_t
*params
) /* I - Parameters */
124 int i
; /* Looping var */
133 else for (i
= 0; i
< (num_params
- 1); i
+= 2)
134 switch ((int)params
[i
].value
.number
)
137 LineCap
= params
[i
+ 1].value
.number
== 1 ? 0 :
138 params
[i
+ 1].value
.number
== 4 ? 1 : 2;
141 switch ((int)params
[i
+ 1].value
.number
)
157 MiterLimit
= 1.0 + 0.5 * (params
[i
+ 1].value
.number
- 1.0);
163 printf("%.1f setmiterlimit\n", MiterLimit
);
164 printf("%d setlinecap\n", LineCap
);
165 printf("%d setlinejoin\n", LineJoin
);
171 * 'LT_line_type()' - Set the line type (style)...
175 * This needs to be updated to support line types.
179 LT_line_type(int num_params
, /* I - Number of parameters */
180 param_t
*params
) /* I - Parameters */
188 * 'NP_number_pens()' - Set the number of pens to be used.
192 NP_number_pens(int num_params
, /* I - Number of parameters */
193 param_t
*params
) /* I - Parameters */
195 int i
; /* Looping var */
200 else if (num_params
== 1 && params
[0].value
.number
<= 1024)
201 PenCount
= (int)params
[0].value
.number
;
204 "DEBUG: HP-GL/2 \'NP\' command with invalid number of "
205 "parameters (%d)!\n", num_params
);
207 for (i
= 0; i
<= PenCount
; i
++)
208 Pens
[i
].width
= PenWidth
;
210 PC_pen_color(0, NULL
);
215 * 'PC_pen_color()' - Set the pen color...
219 PC_pen_color(int num_params
, /* I - Number of parameters */
220 param_t
*params
) /* I - Parameters */
222 int i
; /* Looping var */
223 static float standard_colors
[8][3] = /* Standard colors for first 8 pens */
225 { 1.0, 1.0, 1.0 }, /* White */
226 { 0.0, 0.0, 0.0 }, /* Black */
227 { 1.0, 0.0, 0.0 }, /* Red */
228 { 0.0, 1.0, 0.0 }, /* Green */
229 { 1.0, 1.0, 0.0 }, /* Yellow */
230 { 0.0, 0.0, 1.0 }, /* Blue */
231 { 1.0, 0.0, 1.0 }, /* Magenta */
232 { 0.0, 1.0, 1.0 } /* Cyan */
238 for (i
= 0; i
<= PenCount
; i
++)
241 Pens
[i
].rgb
[0] = standard_colors
[i
][0];
242 Pens
[i
].rgb
[1] = standard_colors
[i
][1];
243 Pens
[i
].rgb
[2] = standard_colors
[i
][2];
247 Pens
[i
].rgb
[0] = 0.0f
;
248 Pens
[i
].rgb
[1] = 0.0f
;
249 Pens
[i
].rgb
[2] = 0.0f
;
253 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
254 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
255 Pens
[PenNumber
].width
* PenScaling
);
257 else if (num_params
== 1 || num_params
== 4)
259 i
= (int)params
[0].value
.number
;
263 Pens
[i
].rgb
[0] = standard_colors
[i
& 7][0];
264 Pens
[i
].rgb
[1] = standard_colors
[i
& 7][1];
265 Pens
[i
].rgb
[2] = standard_colors
[i
& 7][2];
269 Pens
[i
].rgb
[0] = (params
[1].value
.number
- ColorRange
[0][0]) /
270 (ColorRange
[0][1] - ColorRange
[0][0]);
271 Pens
[i
].rgb
[1] = (params
[2].value
.number
- ColorRange
[1][0]) /
272 (ColorRange
[1][1] - ColorRange
[1][0]);
273 Pens
[i
].rgb
[2] = (params
[3].value
.number
- ColorRange
[2][0]) /
274 (ColorRange
[2][1] - ColorRange
[2][0]);
276 fprintf(stderr
, "DEBUG: Pen %d %.0f %.0f %.0f = %.3f %.3f %.3f\n",
277 i
, params
[1].value
.number
, params
[2].value
.number
,
278 params
[3].value
.number
, Pens
[i
].rgb
[0], Pens
[i
].rgb
[1],
282 if (PageDirty
&& i
== PenNumber
)
283 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
284 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
285 Pens
[PenNumber
].width
* PenScaling
);
289 "DEBUG: HP-GL/2 \'PC\' command with invalid number of "
290 "parameters (%d)!\n", num_params
);
295 * 'PW_pen_width()' - Set the pen width.
299 PW_pen_width(int num_params
, /* I - Number of parameters */
300 param_t
*params
) /* I - Parameters */
302 int pen
; /* Pen number */
303 float w
; /* Width value */
313 w
= 0.35f
/ 25.4f
* 72.0f
;
315 w
= params
[0].value
.number
/ 25.4f
* 72.0f
;
323 w
= (float)hypot(PlotSize
[0], PlotSize
[1]) / 1016.0f
* 72.0f
;
328 w
*= params
[0].value
.number
;
333 pen
= (int)params
[1].value
.number
;
337 if (PageDirty
&& pen
== PenNumber
)
338 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
339 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
340 Pens
[PenNumber
].width
* PenScaling
);
342 else if (num_params
< 2)
345 * Set width for all pens...
348 for (pen
= 0; pen
<= PenCount
; pen
++)
352 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
353 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
354 Pens
[PenNumber
].width
* PenScaling
);
358 "DEBUG: HP-GL/2 \'PW\' command with invalid number of "
359 "parameters (%d)!\n", num_params
);
364 * 'RF_raster_fill()' - Set the raster fill pattern.
368 * This needs to be implemented.
372 RF_raster_fill(int num_params
, /* I - Number of parameters */
373 param_t
*params
) /* I - Parameters */
381 * 'SM_symbol_mode()' - Set where symbols are drawn.
385 SM_symbol_mode(int num_params
, /* I - Number of parameters */
386 param_t
*params
) /* I - Parameters */
394 * 'SP_select_pen()' - Select a pen for drawing.
398 SP_select_pen(int num_params
, /* I - Number of parameters */
399 param_t
*params
) /* I - Parameters */
403 else if (params
[0].value
.number
<= PenCount
)
404 PenNumber
= (int)params
[0].value
.number
;
407 "DEBUG: HP-GL/2 \'SP\' command with invalid number or value "
408 "of parameters (%d, %d)!\n", num_params
,
409 (int)params
[0].value
.number
);
412 printf("%.3f %.3f %.3f %.2f SP\n", Pens
[PenNumber
].rgb
[0],
413 Pens
[PenNumber
].rgb
[1], Pens
[PenNumber
].rgb
[2],
414 Pens
[PenNumber
].width
* PenScaling
);
419 * 'UL_user_line_type()' - Set a user-defined line type.
423 UL_user_line_type(int num_params
, /* I - Number of parameters */
424 param_t
*params
) /* I - Parameters */
432 * 'WU_width_units()' - Set the units used for pen widths.
436 WU_width_units(int num_params
, /* I - Number of parameters */
437 param_t
*params
) /* I - Parameters */
441 else if (num_params
== 1)
442 WidthUnits
= (int)params
[0].value
.number
;
445 "DEBUG: HP-GL/2 \'WU\' command with invalid number of "
446 "parameters (%d)!\n", num_params
);
451 * End of "$Id: hpgl-attr.c 6649 2007-07-11 21:46:42Z mike $".